Overview: Automatic Rigging

Door Arne Borremans

Tot op heden is het creëren van een rig voor een model en het toewijzen van de correcte blending weights een manueel proces. Deze rig is vereist om je model verder te kunnen animeren, en is dus een cruciale stap in de animation pipeline. In deze overview bekijken we of het mogelijk is om deze fase te automatiseren, wat een grote stap voorwaarts zou zijn in het versnellen van de animation pipeline.

Rignet

Automatic rigging is geen nieuw fenomeen. Er bestaan menig programma’s die voorzien zijn van een optie om je model automatisch te laten riggen. Helaas zijn deze programma’s enkel geschikt voor characters met een menselijke bouw. En dikwijls is het nog vereist om manueel de belangrijkste delen van je model aan te duiden (schouders, knieën, …).

 

RigNet voorbeelden

De nieuwste doorbraak in automatic rigging die deze limitatie niet heeft is een techniek genaamd RigNet. RigNet maakt gebruik van machine learning om automatisch de correcte rigs te voorspellen, en automatisch blending weights toe te wijzen. De architectuur is getraind op verschillende soorten models, waardoor men in theorie elk type model kan laten riggen.

Architectuur

RigNet werkt in 3 stages: de joint detection stage, de connectivity stage en de skinning stage.

Joint Detection Stage

De joint detection stage voorspelt waar de joints geplaatst moeten worden. Men begint met het zoeken naar de oppervlakten die het meest relevant zijn om een joint op te plaatsen. Op deze oppervlakten worden vertices gekozen die gaan samensmelten tot ze een joint vormen.

Hierna wordt voor elk paar joints de waarschijnlijkheid berekend dat dit paar bij elkaar hoort, en dus aan elkaar moet vastgemaakt worden. Met deze informatie kan men dan een skelet vormen (= connectivity stage).

Ten laatste zorgt de skinning stage ervoor dat elke vertex een skinning weight krijgt. Dit gebeurt door te kijken naar de relatie tussen de vertices en het gecreëerde skelet.

Gebruik

RigNet is beschikbaar in de vorm van een Python script en in de vorm van een Blender add-on.  

Beiden hebben 2 models nodig, het originele model die je wil laten riggen en een gesimplificeerde versie van je model, die minder dan 5.000 vertices bevat. Deze simpelere versie wordt gebruikt om alle berekeningen mee uit te voeren. Dit is nodig omdat het programma anders memory problemen kan krijgen door een overvloed aan vertice-informatie, en je pc kan laten crashen.

Wanneer je de Python versie gebruikt wordt de gecreëerde rig in een tekst document opgeslagen. Om deze informatie in een .FBX bestand te krijgen gebruik je nog een extra script dat, met behulp van Maya, de rig converteert.

Resultaten

De resultaten die RigNet produceert geeft ons een totaler beeld van wat  het werkelijk toe in staat is. Verschillende soorten models werden getest met telkens een low level of detail versie en een high LOD versie.

Realistic Humanoid Rigs

De resultaten van rigs voor realistische humanoïde characters produceren  vrij accurate rigs. Joints worden op de correcte locaties geplaatst en er zijn geen overduidelijke anomalieën zichtbaar. RigNet heeft geen moeite met het voorspellen van de skeletbouw van het model.

Stylized Humanoid Rigs

Wanneer we kijken naar characters die niet de proporties volgen van een doorsnee mens, merken we op dat RigNet enkele problemen vertoont. In de lage LOD versie is RigNet niet in staat om beide benen te detecteren. Ook heeft het geen idee hoe het hoofd van het model te riggen.

Animals

Alhoewel de onderzoekers van RigNet zelf een kat en een vis gebruiken in hun showcase models, zijn onze bevindingen compleet verschillend dan wat zij laten zien. 

De lage LOD van de kat is de meest accurate van de vier rigs. Maar toch kunnen we bij de achterpoten opmerken dat er iets fout gelopen is, en ook  vindt RigNet de staart niet belangrijk genoeg om joints in te plaatsen.  In de hoge LOD versie hebben we geprobeerd om een rig te laten creëeren die rekening houdt met de staart, wat dan weer voor problemen zorgt in het lichaam zelf.

De rig die gemaakt werd voor de vis is compleet verkeerd. RigNet weet niet te identificeren welke delen het belangrijkste zijn om joints in te plaatsen, vermoedelijk omdat over het gehele model een constant aantal vertices aanwezig is. Er zijn over het algemeen geen plaatsen die veel meer vertices bevatten dan andere plekken, wat voor problemen kan zorgen.

Odd Body Structures

RigNet werkt enkel voor models die symmetrisch opgebouwd zijn, vermits er 1 helft berekend wordt, en dan naar de andere helft gekopieerd wordt. Dit is te zien in het bovenste voorbeeld. De rechter arm zijn joints zijn buiten het model geplaatst omdat ze gespiegeld werden van de linker arm. Models die een speciale lichaamsbouw hebben zijn dus niet altijd geschikt voor RigNet.

Game Models

Om er zeker van te zijn dat de models die gekozen waren niet het probleem vormden van de onnauwkeurige rigs, is RigNet ook getest geweest met models die rechtstreeks van bestaande games komen. Deze resultaten bevestigen de resultaten die we eerder verkregen. De models vormen dus niet het probleem.

Conclusie

RigNet is een grote stap voorwaarts naar het automatisch genereren van rigs. In de meeste gevallen weet RigNet te detecteren om wat voor soort model het gaat, en creëert vervolgens een rig die in grote lijnen overeenkomt met wat er verwacht wordt. 

Maar helaas zijn de resultaten die verkregen worden niet goed genoeg om in een profesionele omgeving gebruikt te worden. RigNet vertoont te veel afwijkingen, die manueel verbetert moeten worden. Wanneer men enkel eenvoudige menselijke rigs nodig heeft, kan RigNet eventueel wel als een optie overwogen worden.

Wat eventueel zou kunnen helpen is het getrainde model verder te laten trainen op zelfgemaakte models en rigs. In theorie zal dit accuratere rigs creëeren voor het soort model dat je persoonlijk nodig hebt. 

Links