USD Filformat för 3D: Därför är det fantastiskt

Kategoriserat som 3D, Open Source Märkt , , , , , , ,
Save and Share:

USD (Universal Scene Description) är ett filformat utvecklat av Pixar för att utbyta 3D-scener mellan olika applikationer för digitalt innehållsskapande. Det är ett utbyggbart filformat med öppen källkod som kan lagra information om 3D-geometri, skuggning, ljussättning, fysik och andra grafikrelaterade områden. Det kan också sammanfoga och åsidosätta data från flera källor, vilket skapar en enda scenograf som kan redigeras icke-destruktivt.

USD används i många branscher, som design, arkitektur, animation och spelutveckling, och stöds av många programvaror, som Blender, Cinema 4D, Houdini, Maya och Apples SceneKit. USD är också kärnan i Pixars 3D-grafikpipeline och grunden för Nvidias Omniverse-plattform.

Specifikationen för Universal Scene Description (USD) använder flera filformat:

  • .usd – Kan vara antingen ASCII- eller binärkodat
  • .usda – ASCII-kodat
  • .usdc – Binärkodat
  • .usdz – En paketfil formaterad som ett okomprimerat, okrypterat zip-arkiv. Kan innehålla .usd-, .usda-, .usdc-, .png-, .jpeg-, .m4a-, .mp3- och .wav-filer.

Blender (eller annan 3D-programvara) gör livet enkelt genom att låta dig utföra många uppgifter med bara dess gränssnitt, men så fort du börjar introducera annan programvara i din pipeline börjar problem dyka upp till höger och vänster. Så låt oss prata om de största problemen du förmodligen redan stöter på idag och hur Pixar har skapat lösningen för att övervinna dem till oändligheten och vidare.

Video om USD-filformatet av KaizenTutorials

Problemet

Om du någonsin har texturerat en modell i Substance, importerat ditt arbete till Unreal, eller försökt dela ett projekt med någon som arbetar i en annan programvara, har du förmodligen insett hur irriterande det kan vara. Att behöva hantera olika filtyper, korrekta exportflöden för varje enskild programvara, och förlora värdefull data i processen kan få dig att känna att du slår huvudet i väggen med flit om och om igen.

Och tro mig när jag säger att detta är något som alla 3D-konstnärer överallt upplever – oavsett om du arbetar som en enskild kreatör med din egen anpassade pipeline eller i en stor studio som Pixar och måste anpassa dig till rigorösa pipeline-begränsningar för att upprätthålla ett ordentligt arbetsflöde för alla de andra 1232 personer som arbetar där. Problemet kvarstår.

Varför detta händer

Det är logiskt, eller hur? Varje programvara använder en proprietär filtyp som fungerar för dess behov. Så en fil från Blender, till exempel, har kodats för att fungera i Blender men inte i Substance. I ett företag kräver varje artist naturligtvis att en fil ska vara kompatibel med sitt eget val av verktyg för att göra det enkelt och ibland ens möjligt att fortsätta arbeta med ett projekt.

Det är därför det är ett måste att exportera till en mer universell filtyp som FBX eller OBJ när man byter till en annan programvara eller lämnar över sitt projekt till nästa person. Men även dessa filtyper har många begränsningar, som oförmågan att på ett korrekt sätt lagra simuleringar, ljussättning och många andra aspekter av dina Blender-projekt.

Vi introducerar USD

Så vad är svaret på detta problem? Universal Scene Description (USD) såklart! USD publicerades först som programvara med öppen källkod av Pixar 2016 som deras nya kärnpipeline, och var i huvudsak ett sätt för deras konstnärer att göra det enklare att flytta data mellan varandra och de verktyg de använder.

Sedan lanseringen genomgår USD ständigt förändringar och förbättringar, vilket är vanligt för programvara med öppen källkod precis som Blender, som också uppdateras och utökas kontinuerligt.

Vad är USD?

USD är många saker och om jag gräver riktigt djupt i det kan det faktiskt vara en mycket teknisk och komplicerad sak att beskriva. Men om jag uttrycker det enkelt, USD är ett sätt för appar som Blender, Unreal, Houdini, Substance, Maya, Nvidia Omniverse och många fler att prata med och förstå varandra.

Inom datorindustrin finns det faktiskt ett fint ord för detta – interoperabilitet. Lite svårt att säga! Men hur fint det än låter är det faktiskt inte så komplicerat som man kan tro. Du kan börja använda det idag på din egen dator eller till och med med flera vänner eller kollegor över hela världen.

Hur USD är annorlunda

Traditionellt sett är en pipeline en mycket enkelriktad sak där varje person bara får arbeta med något när föregående person är klar. Eller för dig personligen, du kan bara gå vidare till nästa steg i processen, som texturering, om modelleringen är helt klar.

Du kan jämföra detta med att baka en kaka – när du bygger och skapar den här kakan måste du avsluta varje steg innan du kan börja på nästa. Du kan inte grädda kakan innan du blandar degen, och du kan inte bygga den innan du gräddat kakorna i ugnen. Varje steg är beroende av att det föregående är klart.

Ännu viktigare är att när du väl har lagt på frosting och fyllning eller bestämt dig för att bottnen skulle vara choklad, finns det ingen återvändo. Du kan inte ångra gräddningen av kakan, ändra smaken till vanilj eller ta bort frostingen. Och det här är vad vi kallar ett destruktivt arbetsflöde.

USD är dock mer som Legos. Varje block representerar en del av en 3D-scen – karaktärer, objekt, miljöer, vad som helst – och du kan montera, demontera och modifiera dessa block oberoende av varandra.

I en traditionell pipeline skulle en ändring av ett block innebära att man måste justera resten av strukturen. Men med USD kan varje byggblock bearbetas oberoende av varandra och jag kan helt enkelt ändra ett block till en annan färg till exempel utan att behöva bygga om hela modellen.

Det är ett icke-destruktivt tillvägagångssätt som möjliggör experiment och kollaborativa arbetsflöden utan att hindras av pipeline-begränsningar.

Målet med USD

Målet med allt detta med USD är att skapa ett sätt för data att flyta fritt mellan applikationer, att ge konstnärer och team friheten att fokusera på skapande och inte på exportering och att vara fast i väntan på varandra för att kunna fortsätta arbeta. Konstnärer ska inte behöva starta om om konceptteamet bestämmer sig för att ändra saker längre fram i processen. Och det ska inte vara problem med att filformat som kommer in från andra program inte fungerar i din programvara.

På en servicenivå verkar det vara vad USD är – ett filformat med hög interoperabilitet som är lätt utbytbart mellan olika programvaror. Och för att vara rättvis är det vad det kommer att vara för de flesta Blender-användare, eftersom många av oss tenderar att arbeta ensamma. Men USD är mer än bara en filtyp…

Det är ett sätt att sammanställa och organisera ett valfritt antal tillgångar i virtuella uppsättningar, scener, tagningar och världar – använda dem från applikation till applikation och redigera dem icke-destruktivt, ofta i realtid.

Hur man arbetar med USD

Så låt oss titta på hur vi kan arbeta med USD i ett Blender-arbetsflöde. I sin mest grundläggande form har USD varit ett exportalternativ i Blender ända sedan version 3.6. Så om du har en fil du arbetar med och vill spara den som en USD-fil kan du gå till File > Export > Universal Scene Description och det dyker upp ett fönster där du kan spara filen.

Det har en hel del alternativ, men de viktigaste att notera är:

  • Selection Only – Kommer endast att inkludera valda objekt i din export
  • Animation and Hair – Kommer att inkludera/exkludera animations- och hårpartikeldata för dina objekt

Här är ett bra exempel på hur USD fungerar. Detta är en fil från Nvidias USD-exempelbibliotek som skapades i en mängd olika programvaror som 3ds Max och Substance. Om du öppnar detta i Blender genom att importera det, fungerar det nästan 100 % direkt!

Som du kan se innehåller det all data inklusive ljus, skärpedjup, kameran, material och mycket mer. Det enda som inte exporteras ordentligt är HDRI-ljussättningen som vi måste ställa in själva. Men det är otroligt att tänka att det här ser nästan identiskt ut inuti 3DS Maxs Arnold-renderer, och bara exporterades över till Blender och fungerar lika bra med en enda filtyp!

Det har korrekt hierarki, material och i princip allt är inställt. Det är riktigt, riktigt coolt! Hur som helst, det här visar hur USD fungerar mellan olika applikationer och att det fungerar som ett interoperabelt filformat.

Ett praktiskt USD-exempel

Men låt oss ta en titt på ett mer praktiskt exempel. För det här pipeline-exemplet kommer jag att använda ett typiskt arbetsflöde för att använda Blender för att modellera ett objekt för ett spel.

Den traditionella pipelinen skulle se ut ungefär så här:

  1. Skapa modell i Blender
  2. UV-packa modellen
  3. Exportera som FBX eftersom Painter inte kan använda Blender-filer
  4. Importera FBX till Substance Painter
  5. Lägg till material i Substance
  6. Exportera texturer som bilder
  7. Importera FBX till spelmotor
  8. Ställ in texturer manuellt
  9. Skapa renderingar

Med USD kan vi avsevärt förenkla den här processen och behålla ett i stort sett icke-destruktivt arbetsflöde. Pipelinen förblir väldigt liknande med Blender och Substance som huvudkomponenter.

Men eftersom USD inte fungerar i realtid mellan dessa appar (främst för att Blender fortfarande har begränsat USD-stöd), kommer jag att använda Nvidia Omniverse för att skapa den anslutningen åt oss.

Genom Omniverse kan jag få tillgång till en mer USD-kompatibel version av Blender byggd av Nvidia. Jag kan aktivera Omniverse-kopplingen för Substance Painter för att realisera LifeLink. Och jag kan använda USD Composer för att överbrygga klyftan mellan apparna och se slutprodukten.

Med det inställt kan vi nu öppna vårt Blender-projekt i den anpassade Blender-versionen. Om vi sedan trycker på N och går till höger sida här får vi Nucleus-tillägget som gör att vi kan exportera detta som en USD-fil.

Om vi sedan går till USD Composer och öppnar den USD-filen får vi ett slags direktlänk mellan apparna. Jag kan nu göra vilken ändring som helst i nätet, exportera det igen och få det automatiskt upphämtat i USD Composer.

Det blir bättre! När vi väl har importerat modellen kan vi öppna Substance Painter, aktivera Omniverse-kopplingen och gå till Importera nät för att automatiskt importera vårt objekt från USD Composer till Substance. Vid det här laget, om vi gör ändringar i Blender, kan vi fortfarande exportera igen och hämta upp det i USD Composer, som automatiskt länkar till Substance Painter.

Men när vi väl har lagt till texturer inuti Substance Painter kommer det att ta bort de texturerna om vi gör detta igen. Så när du är nöjd, lägg till dina material i Substance Painter, och med Life Link aktiverat kommer dessa automatiskt att dyka upp i USD Composer.

Alla ändringar du sedan gör exporteras automatiskt och uppdateras i USD Composer. Riktigt, riktigt coolt!

För mig är det här arbetsflödet ganska häpnadsväckande. Att kunna göra ändringar i Blender och Substance Painter i realtid och få allt detta att automatiskt fungera ner i kedjan och återspeglas i den slutliga renderingen är något annat.

Om du är intresserad av att prova allt Nvidia Omniverse har att erbjuda kan du ladda ner det gratis via länken i beskrivningen. Och om du vill lära dig mer om alla tekniska användningsfall som USD och Omniverse tillsammans ger, kan du hitta en annan gratis nedladdningslänk för det samt en länk för att delta i öppna USD-dagarsessionerna virtuellt eller personligen på GTC i mars.

Jag rekommenderar verkligen att kolla in det eftersom detta verkligen är framtiden för 3D-arbetsflöden.

Mer om USD

Förutom det här roliga exemplet har USD mycket mer att erbjuda. Och om du utnyttjar dess kapacitet väl kommer du att bli mycket mer effektiv som konstnär. Så vad mer kan det göra?

Tja, förutom det faktum att ett universellt filformat skulle göra ditt liv mycket enklare, är det absolut framtiden. Sedan augusti 2023 har USD blivit en officiell ideell organisation som heter The Alliance of Open USD (AO USD) i korthet – med Pixar, Apple, Adobe, Autodesk och Nvidia som grundande medlemmar.

Jag tycker att det här verkligen visar hur investerade dessa företag är och hur de verkligen ser detta som framtiden för ett interoperabelt filformat – som alla borde kunna använda väldigt enkelt.

Förutom att vara ett filformat lagrar USD nästan allt – från ljus och kameror till simuleringscache och sceninformation – i en lagerliknande struktur som kallas ”prims” (förkortning för primitiver). Det innehåller all data för att beskriva komplexa scener och tillgångar i ett format som kan läsas av ett brett spektrum av applikationer.

Nu när man vet det är namnet ”Universal Scene Description” faktiskt ganska logiskt!

Om du är bekant med Blender-samlingar fungerar USD på liknande sätt. Du kan kapsla in vad som helst inuti flera kapslade samlingar, med den extra fördelen att USD behandlar alla dessa lager som instanser. Därför kan det mycket snabbt läsa in och läsa all data på ett optimerat sätt.

Detta fungerar på liknande sätt som instansiering av samlingar i Blender, vilket är bra eftersom instanser kräver mindre datorkraft än faktiska duplicerade objekt. Det liknar också pre-comping i After Effects eller compounding i Nuke – du grupperar i princip saker inuti kapslade grupper/lager, vilket gör det enklare och snabbare för datorn att arbeta med filen.

Ett bra exempel på denna optimering är Nvidias nyaste USD-exempelprojekt som heter ”Da Vincis verkstad”. Med hjälp av deras USD Composer-app (som är perfekt för att visa USD-projekt med belysning i realtid) kan jag spela upp detta massiva 67 GB-bibliotek med tillgångar, texturer och ljus med miljontals polygoner med nära 120 FPS utan lagg eller problem. Detta är möjligt tack vare hur effektivt USD läser in filerna och texturerna på ett extremt optimerat sätt.

På samma sätt är USD-cachning nu mycket snabbare för animationer som brukade exporteras som Alembic-filer. Alembic-filer är vanligtvis enorma, mycket ooptimerade och läses långsamt av din dator – vilket vanligtvis resulterar i hackig uppspelning. Med USD är det inga problem att uppnå en stadig FPS och filstorleken är mycket mindre.

Fler fördelar

En annan riktigt cool funktion är att du kan komma åt lagren inuti ditt USD-projekt ganska enkelt från utsidan av filen. Till exempel, om det finns ett prim-lager som innehåller informationen om att en sfär är grön inuti en USD-fil, genom att helt enkelt ändra den färgen till röd i en USD-kompatibel editor som USD Composer, kan vi ändra sfärens färg utan att någonsin öppna filen i Blender! Det är otroligt kraftfullt.

Även om det uppenbarligen är ett grundläggande exempel visar det potentialen. En annan stor fördel är att USD fortfarande låter dig bara arbeta med ett enda lager av en komplex fil i en viss programvara. Så även om din fil innehåller ett komplett projekt med kameror, ljus etc., kan du fortfarande bara öppna en del av det – till exempel en enda modell – inuti Substance Painter, och bara arbeta med den delen av projektet utan att påverka något annat.

Detta gäller även om flera personer arbetar med samma fil – en annan stor styrka med USD. Tio personer kan arbeta med samma fil så att ändringar som görs av konstnär nummer ett syns direkt för konstnär nummer två, vilket gör att de kan anpassa sitt arbete därefter. Att kunna samarbeta med människor på distans är otroligt kraftfullt.

Framtiden för 3D-pipelines

Det är säkert att säga att USD är mycket mer än bara ett filformat. Det är en omfattande teknikplattform och ett ekosystem som i sitt uppdrag verkligen stämmer överens med Blender: friheten att skapa utan begränsningar.

USD är fortfarande under utveckling. Drömmen är verklig – ett universellt programvarufilformat som kan användas av all programvara i branschen, redigerbart i realtid av flera konstnärer.

Vi borde alla vara tacksamma för att Pixar banar väg med denna otroliga utveckling, och för företag som Nvidia och Apple som bidrar med sin del.

Lämna en kommentar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *