Miért a 4-el?

 

Ha, a még mindíg javában a legnagyobb népszerűségnek örvendő Kinetix féle 3d Studio Max 3.1-et hasonlítjuk össze, a még mindíg nem teljesen stabil Discreet féle 3d Studio Max 4.0-el, nagyon sok apró és hasznos lehetőséget veszünk észre. A Max 4-es más hasznos jóságaival egyetemben a max script nyelve kiegészítésével válik majd közkedvelté.

Bármit amit e pillanatig megalkottunk, megalkothatjuk a max script nyelvből is. Ennek köszönhetően a Max-nak elég, ha csak annyit mondunk: A ká változó egy kocka amelynek egy oldala pl. 25 egységnyi és a 5,5,5 térbeli ponton áll középpontja, és megjelenik előttünk a kocka. A térbeli pontot, a nagyságát, elfordulásait a továbbiakban úgy is változtathatjuk, hogy azzal egy mozgás jöjjön létre. Az első képkockánál legyen a kocka nagysága 5, az utolsón 50 - a kocka fokozatosan növekszik. Ezt, mindkét Max változat helyesen számolná ki, akkor is, ha a kockánknak jellegzetes  színe van, és akkor is, ha pöttyös. No, de miért is lesz majd érdemes a Max 4-el foglalkozni, ha majd megjelenik a kész, jó 4.1-es, hibátlan változata? Már most jól járunk, ha a Max 3.1-ben készített animációinkat a Max 4-ben készítjük el. A 3-as max scripteket pedig némileg át kell írnunk, ahoz, hogy működjenek a 4-el, azért mert, a script elején a global megnevezésel teljes érvényű változókká kell, hogy megnevezzünk minden változót, ha pl. fileIn(„”)-t is használunk, hogy azok a program minden részén, így az alprogramokban, a fileIn-ekben, is működjenek. Tehát, ha az a változónkat nem akarjuk „undefined” állapotban találni, akkor a programunk elején nevezzük meg így: global a=1, és nem áll majd meg a program futása. Ez egy jó tulajdonsága a Max 4-nek, hogy az egy nyomógomb, alprogram, két zárójel, () között igénybe vett változókat csak abban, és ott használja, ha, csak nem globalizáltuk őket! Ha abból másikra hivatkozunk, esetleg fileIn(„”)-t hívunk, változóink ott már nem érvényesek, de onnan visszatérve ismét jók. Ám mindvégig is érvényesek lehetnek, ha a program elején úgy óhajtjuk.

Bizonyára örülnek a Bčzier felületeket egyesével rajzolók is. Mivel, a Max 4 (lásd a mellékelt példa "../Zerodro.ms" max scriptet) jól számolja rá a festékképet a kiválasztott felületre! Rajzoljunk meg egy 4 szakaszból (5 mozgatható pontból) álló egyenest, és utolsó pontját az elsőre illesztetjük. A képet úgy tudja erre az alakzatra ráhúzni, hogy bal alsó sarka mindíg az első, jobb alsó sarka mindíg a második, jobb fölső sarka mindíg a harmadik, és bal fölső sarka mindíg a negyedik pontnál legyen (?!). A kép szélei pedig a pontokat összekötő vonalakon legyenek. Ha ezek a vonalak görbék, úgy ezen az 5 ponton álló kép torzul, de mint leírtam sarkai a pontokon, szélei a pontokat összekötő vonalakon vannak. Ehez pedig, ha az ötödik pontot az elsőre tettük, és vonalunk kiválasztott álapotban található; nyomjuk meg a „Surface”-t! Húzunk rá egy olyan anyagot amelynek képe is van, és érvényesítsük rajta az UVW mapot, és választjuk ki a Mappingnél a hatodik, vagyis a Face pöttyöt. Miután az öt pontból, vagyis Knot-ból álló vonalunk megvan, ezt maxscriptből így tehetjük meg:

 

max select all

--Minden alakzatot kiválaszt

(feltételezem, hogy mindegyik rejtett,

csak a  vonal található meg)

AddMod surface            

    --Felületté alakít

$.modifiers[#Surface].steps = 99

    --Részletesség, 4-es fejlesztés közben megfelelő

$.material = currentMaterialLibrary ["Metal_Rust"]

    --Mely kép legyen rajta, milyen anyagból legyen

AddMod Uvwmap

    --A kép kordinátáinak a felületre való illesztése

$.modifiers[#UVW_Mapping].maptype = 5

    --Ettől lesz a felület olyan, hogy pontosan

minden sarokban található egy pontja, és

oldalai a széleken vannak.

Ezért vizsgázik az új Max kitűnőre.

$.name = "A_Felulet_Neve"

--Így nevezhetjük el a kiválasztott alakzatot,

e nélkül is működik

 

A max script a sorban található -- jel után nem veszi figyelembe a beírtakat.

 

Ebből kiderül, hogyan kell a Bčzier vonalra-felületre jól rátenni a festéket (vagyis a bittérképet, a textúrát), de, hogyan lehet magát a vonalat megrajzolni skriptből?

 

Tehát; 5 pontból áll a vonal.  Ha vonalunk minden pontját átalakítjuk Bčzier Corner tipusúvá (egér bal gomb klikkje, majd a tipusra a jobb gombal), akkor látjuk, hogy minden belátható pontnak (tekintettel arra, hogy az első, és az ötödik ugyan azon a helyen van) két zöld segédpontja van. Valójában az elsőnek és az ötödiknek csak egy van, vagyis az első és az ötödik pont együtt ugyan úgy két segédpontal rendelkezik mint a 2., 3., és a 4. . Tizenkét pontot számolhatunk meg. A tizenharmadik az ugyan az a pont mint az első. Minden pontnak van egy X, egy Y, egy Z értéke, elhejezkedési kordinátája. Tehát, tizenkét darab X, Y, Z érték egy Bčzier felületet határoz meg. Max scriptből így lehet:

 

x=#(12)    --ikszek      egytől tizenkettőig

y=#(12)    --ipszilonk egytől tizenkettőig 

z=#(12)    --zék           egytől tizenkettőig

 

  Néhány tömb érték: X,Y,Z mind 1..12, de ettől lehet több is; 1..1000000 - ekkor;          x=#(1000000)

     128Mb-al milliótól több lassít !

 

for i=1 to 112 do (

x[i]=random -50 50

y[1]=random -90 90

z[i]=random -60 60

)

  Az X,Y,Z pont-kordináták véletlen számokkal való föltöltése, példaként az egyszerűség kedvéért

 

A script elejére:

 

Function w w1 w2 w3 w4 w5 w6 w7 w8 w9 wa wb wc =(

max select all

max hide selection

q= splineShape pos:[x[w1],y[w1],z[w1]]

AddNewSpline q

k=addKnot    q 1 #smooth #curve [x[w1],y[w1],z[w1]]  setKnotType  q 1 k #bezierCorner

setOutVec    q 1 k [x[w2],y[w2],z[w2]]

k=addKnot    q 1 #smooth #curve [x[w4],y[w4],z[w4]]

setKnotType  q 1 k #bezierCorner

setInVec     q 1 k [x[w3],y[w3],z[w3]]

setOutVec    q 1 k [x[w5],y[w5],z[w5]]

k=addKnot    q 1 #smooth #curve [x[w7],y[w7],z[w7]]

setKnotType  q 1 k #bezierCorner

setInVec     q 1 k [x[w6],y[w6],z[w6]]

setOutVec    q 1 k [x[w8],y[w8],z[w8]]

k=addKnot    q 1 #smooth #curve [x[wa],y[wa],z[wa]]

setKnotType  q 1 k #bezierCorner

setInVec     q 1 k [x[w9],y[w9],z[w9]]

setOutVec    q 1 k [x[wb],y[wb],z[wb]]

k=addKnot    q 1 #smooth #curve [x[w1],y[w1],z[w1]]

setKnotType  q 1 k #bezierCorner

setInVec     q 1 k [x[wc],y[wc],z[wc]]

updateShape  q

return true

)

  Miután értelmeztük a W funkciót, és X, Y, Z tömbjeinkben is vannak számok, meg is hívhatjuk a funkciót azzal a 12 számmal amelynek X, Y, és Z tömb jelzőszám helyén biztos van adat:

 

W 1 2 3 4 5 6 7 8 9 10 11 12

 

A felületté alakítás és festés történhet fileIn („”)-ből is:

fileIn(„b”)

 

Letölthető a példaprogram, működik Max3-al és Max4-el is;

Download: MAX SCRIPTs Zerodro.ms & b.ms

 

 

Ennek a szövegnek a mielőbbi megjelentetetését kérem, ha lehetséges CD-n, DVD-n való publikálása érdekében ajándékozom. Tisztelettel;

 

i. S. K. yyyy@EUnet.yu

http://solair.EUnet.yu/~yyyy