Spotlight: Text2Mesh – Generating textures and deformation on 3D models using a text description.

Door Glenn van Waesberghe

In voorgaande spotlight blogposts en "State of the Art" overviews in de begeleidingsgroepmeetings verwezen we al enkele keren naar DALL-E. Deze service van Google is in staat om relatief complexe tekst naar afbeeldingen om te zetten. Recent releasten zij een nieuwe en verbeterde versie, DALL-E 2, voor meer daarover, bekijk gerust onze spotlight blogpost.

An example from the DALL-E blogpost

Alhoewel dit soort technieken altijd interessant zijn om in de gaten te houden, denken wij uiteraard steeds hoe dit zou kunnen toegepast worden in onze eigen sectoren. Zelf speelde ik al enkele jaren met het idee van een AI dat, mids getraind op een grote geannoteerde dataset, in staat zou moeten zijn om textures voor 3D models te genereren, gegeven een tekstbeschrijving van het gewenste materiaal. Tot nu toe was dit out of reach, aangezien je, met de bestaande technieken, voor het trainen van zo'n model een zeer grote geannoteerde dataset van textures nodig hebt. Introducing... Text2Mesh!

Examples of PBR Game Textures

Deze paper introduceert een andere manier van werken gebaseerd op CLIP. CLIP, of "Contrastive Language-Image Pre-training" is een neuraal netwerk dat is getraind op een verscheidenheid van (beeld, tekst) paren. Het kan, gegeven een afbeelding, in natuurlijke taal het meest relevante tekstfragment voorspellen. Dit zonder direct te optimaliseren voor de taak, vergelijkbaar met de zero-shot mogelijkheden van GPT-2 en 3.

Text2Mesh start vanaf een basis-mesh naar keuze van de gebruiker, en een tekst-beschrijving van de gewenste texture & mesh. Men maakt verschillende 2D projecties van de 3D mesh, en laat deze afbeeldingen door CLIP analyseren. Men past dan, iteratie per iteratie de 3D mesh aan, zowel op vlak van textuur als deformation, om de door CLIP-gegenereerde beschrijving steeds dichter bij de originele tekst-prompt te krijgen.

Source meshes (gray) and resulting meshes with corresponding text prompts

De resultaten variëren sterk qua qualiteit, en het is steeds nodig om allerlei variabelen te tweaken om de beste resultaten te bekomen. Ook de tekstbeschrijving is uiterst belangrijk. Beter iets te specifiek, dan iets te vaag. Direct inzetbaar zijn de resultaten absoluut nog niet, maar er zit duidelijk potentieel in... 

Een belangrijk nadeel van het Text2Mesh proces, is "spiking", een probleem waarbij hoe langer een onderdeel in het proces zit, hoe meer willekeurige pieken er per ongeluk gegenereerd op het beeld. Het is mogelijk om dit op te vangen met externe oplossingen, en meshes met spiking te verwerpen, of de spiking te detecteren en te minimaliseren, maar uiteindelijk blijft het probleem bestaan bij de onderliggende techniek.

Zoals al eerder vermeld, gebruikt deze techniek 2D representaties ("screenshots") van de gegenereerde 3D mesh om te controlleren of de gegenereerde mesh aan de beschrijving voldoet. Hoe meer van deze perspectieven er gebruikt zouden worden, hoe beter de resultaten in theorie zouden zijn. Met de bestaande techniek zouden meer perspectieven resulteren in een veel langere tijd om de meshes te genereren, en dus beperkt men het aantal perspectieven hier.

Er zit duidelijk potentieel in dit soort manier van werken, maar de resultaten zijn soms nog wat te wispelturig, en spiking is echt een groot probleem. Wie weet... nog enkele papers verder, en misschien wordt dit soort techniek dan wel praktisch inzetbaar in de industrie!

Onderaan deze pagina vindt u enkele van onze eigen resultaten met deze techniek.

De paper van Text2Mesh vindt u hier terug, alle code is toegankelijk op deze Github repository. Er is zelfs een Kaggle versie hier die u vanuit uw browser kan testen, al raad ik hiervoor wel aan dat u een account aanmaakt zodat u de code op GPU kan runnen. Indien u de Kaggle code wil gebruiken, deze is al iets ouder, dus ondertussen is het ook nodig om de versie van Pillow aan te passen. Dit doet u door volgende lijn toe te voegen in het begin van de notebook: "pip install Pillow==9.0.0".

"Brick Shoe"
"Chainmail Shoe"
"Wooden Shoe"
"Palm Bark Shoe"
"Moss Stone Shoe"
"Polished Black Marble Shoe"
"Crystal Shoe"
"Dragon Scales Shoe"
"Lava Shoe"
"Superman"
"Batman"
"Captain America"
"James Bond"