Automatizálás, MaxScript és AI a 3ds Maxban: a szkriptírástól a szoftver vezérléséig

Huszonöt éve automatizálom a 3ds Maxot MAXScripttel. Az AI-asszisztensek először a szkriptek írását gyorsították fel; ma már egy asszisztens közvetlenül működteti a Maxot, egy általam épített eszközszerveren keresztül. Mi változott, mire jó mindez, és mi marad továbbra is az én dolgom.

Automatizálás, MaxScript és AI a 3ds Maxban: a szkriptírástól a szoftver vezérléséig

Nálam az automatizálás nem újdonság. Jóval azelőtt, hogy az AI konferenciák témája lett volna, MAXScripttel oldottam meg a produkció gyakorlati problémáit: a CAD-importok tisztítását, a kötegelt renderküldést, a jelenetek rendszerezését. Egy szám, amely azóta is megállja a helyét: a CAD-import előkészítése projektenként 30–45 percig tartott, egy MAXScript-eszköz öt perc alá szorította. Évente több tucat projektnél ez komoly időt jelent.

Ami azóta már kétszer is megváltozott, az a munkát körülvevő eszköztár. Először az AI-asszisztensek tették sokkal gyorsabbá a szkriptek írását és hibakeresését. Aztán idén sok feladatnál már arra sem volt szükség, hogy én írjam meg a szkriptet. Az asszisztens maga vezérli a 3ds Maxot, egy eszközszerveren keresztül, amelyet kifejezetten neki építettem.

Első szakasz: az AI írja a MAXScriptet

Kódgenerálás. Elég hétköznapi nyelven leírni egy munkafolyamatot, és megvan a működő első változat. Ezt még át kell nézni és ki kell próbálni egy valódi jeleneten, de az az óra, amely korábban a kód vázának felépítésére ment el, megspórolható.

Hibakeresés. Ha a hibás szkriptet bemásolom egy asszisztensbe, gyorsabban kiderül, mi a baj, mint ha soronként olvasnám végig: off-by-one hiba, hiányzó tulajdonság-ellenőrzés, soha véget nem érő ciklus.

Optimalizálás. Egy produkciós szkript futásideje tíz percről három perc alá csökkent egy AI által javasolt refaktorálás után.

Az igazi változás: ma már azokat az eszközöket is érdemes megírni, amelyek korábban nem érték meg a fáradságot. Ami két nap fejlesztés és hibakeresés volt, az ma néhány óra. Ez lejjebb viszi a küszöböt. Egy minden projektben visszatérő lépést, amelyet a hatvanadik ismétlésnél az ember elront, ma már akkor is érdemes automatizálni, ha alkalmanként csak néhány percet takarít meg.

Néhány év ilyen munkából állt össze az eszközkészlet, amelyet nap mint nap használok: procedurális épületgenerátor, kötegelt kamerarenderelő, nap- és kamerasegédek, kerttervező. Nagyjából 20 000 sor MAXScript és 16 000 sor Python.

Egy jelenet, sok kamera – Sasad Liget 6. A kötegelt renderelő kameránként tárolja a felbontást, a kimeneti útvonalat és a render elemeket, így a hatvanadik nézet pontosan úgy készül el, mint az első.

Második szakasz: az AI működteti a 3ds Maxot

A szkript megírása és futtatása még mindig egy kör, amelynek a közepén ember ül: leírás, generálás, beillesztés, futtatás, a hibaüzenet elolvasása, és kezdődik elölről. A következő lépés a beillesztés kiiktatása volt.

Építettem egy MCP-szervert a 3ds Maxhoz: ez egy eszközszerver, amely a programot típusos műveletek készleteként teszi elérhetővé egy AI-asszisztens számára – jelenleg nagyjából 115 ilyen művelet van. Jelenetvizsgálat és kijelölés, objektum- és modifier-tulajdonságok, anyaghálózatok és textúramapek, RailClone- és Forest Pack-stílusok, tyFlow-események és -operátorok, OSL-shaderek, State Setek, viewport-képernyőképek, kötegelt átnevezés, rétegkezelés, objektumok beolvasása (merge) más fájlokból. Az asszisztens ugyanúgy hívja meg ezeket az eszközöket, mint bármely API-t, és mielőtt eldöntené, mi legyen a következő lépés, látja az eredményt, a viewport képernyőképét is beleértve.

Az eszköz determinisztikus, az asszisztens nem. A szerver minden művelete mögött egyszerű MAXScript- vagy Python-kód áll, amely egyetlen, néven nevezett dolgot végez el. Az asszisztens dönti el, mely műveleteket hívja meg és milyen sorrendben, én pedig figyelem, ahogy egy új kollégát figyelnék az első munkanapján. Semmit nem csinál láthatatlanul. A jelenet ott van előttem.

Hol kapcsolódik ez a többihez

Ma a renderelés csak a kép egyik fele. A 3ds Maxból kikerülő munkarender az AI-alapú utómunka-pipeline-ba kerül, és ezt a rendszert is eszközök működtetik, nem kézi munka: a render passok szkriptelt beolvasása, kameránkénti metaadatokból összeállított strukturált promptok, automatikus ellenőrzés. Determinisztikus eszközök, egy közülük választó asszisztens és a végén egy ember – az első CAD-importtól a leszállított képig.

Összehasonlítás:

Emellett tudatosan egy második bázist is építek. Egy Blenderhez készülő Geometry Nodes-bővítmény, amely a RailClone-hoz és a Forest Packhez hasonlóan működik, valamint ugyanez az MCP-megközelítés Blenderre már működő részletekben létezik. Biztosíték arra, hogy ne függjek egyetlen gyártó fejlesztési tervétől. Az éles munka ma is 3ds Maxban, V-Ray-jel folyik.

Ami az én dolgom marad

Megérteni, milyen problémát kell valójában megoldani. Az asszisztens meggyőzőnek látszó szkripteket ír, amelyek nem mindig azt csinálják, amit az ember szeretne. Tesztelni valódi projektfájlokon, kezelni a szélsőséges eseteket, felismerni, mikor okoz egy eszköz több gondot, mint amennyit megold: ehhez harminc év kell, nem egy prompt.

A produkciós szkriptek konkrét munkafolyamatokhoz kötődnek. Amíg meg nem mondom, az asszisztens nem tudja, hogy a render managerem egy bizonyos formában várja a kimeneti útvonalakat, vagy hogy egy ügyfél fájljai mindig olyan elnevezésekkel érkeznek, amelyeket rendbe kell tenni. A következő munkamenetben pedig újra el kell mondanom. Ez a tudás az általam írt eszközdefiníciókban él – részben ezért is létezik az MCP-szerver.

És a szkript – vagy az ügynök – gyakrabban rossz válasz, mint ahogy azt a szkriptírók beismerik. Ha egy feladat kétszer fordul elő, egyszerűen el kell végezni kétszer.

A MaxScript ma is a megfelelő eszköz. Gyakorlatilag a program minden részéhez hozzáfér, és éppen ez a mélység teszi hasznossá az eszközszervert: mind a 115 művelet néhány sor MAXScript, rögzített, típusos interfésszel a tetején. Csak az változott, hogy ki írja ezeket a sorokat, és ki futtatja őket.

Az asszisztens hibázik. Volt, hogy nem a megfelelő objektumokat nevezte át, hogy felülírt egy használatban lévő, kétbetűs nevű változót, és hogy jókedvűen szó szerinti szövegre cserélt egy sablonhelyőrzőt. Ezért szűk hatókörű minden eszköz, amelyet meghívhat, ezért marad végig látható a jelenet, és ezért nem váltja ki semmi, amit csinál, a lint-ellenőrzést és a füstteszteket, amelyek az éles munkához nélkülözhetetlen szkripteket védik.

Ha egy stúdió újra és újra ugyanarra a kézi lépésre veszít el egy órát a 3ds Maxban, az olyan munka, amelyet másoknak is vállalok. Mondja el, hol szorít a cipő, és megmondom, hogy szkript, ügynök vagy egyik sem a megoldás.