MaxScript skripta za kvadratne mozaike

Prethodno istraživanje ću iskoristiti da napravim skriptu koja će ubačene slike pretvarati u mozaike. Za ovu skriptu je potrebno napraviti 2d array kockica po xy osi kojima će biti dodeljene odgovarajuće boje u odnosu na sliku koja se uvede.

Da bi se napravio 2d array kockica potrebno je napraviti dupli “for”-loop (jer ne postoji komanda u maxscriptu-u koja radi isto što i array… u 3dsmax-u) koji otprilike izgleda ovako:

  1. for y = 1 to slika.height do                          –y-loop
  2. (
  3.    for x = 1 to slika.width do                        –x-loop
  4.      (
  5.       b = box width:8 length:8 height:2
  6.       b.pos = [x,-y,0]
  7.       b.name = uniquename “Kockica”
  8.      )
  9. )

Dok dodeljivanje boja po kockicama će se vršiti sledećim parametrima:

a) slika = selectBitMap caption:”Izaberite Bitmap”

-da dobijemo prozor za izbor slike i napravimo varijablu koju već koristimo za for-loop u primeru, mora biti pre oba loop-a!

b) bojaMozaika = getpixels slika [0,y-1] širina_slike

-da uzmemo podatke o svakom pixelu slike, ovo je najbolje staviti unutar y-loop-a

c) b.wirecolor = bojaMozaika[x]

-da dodelimo boje pixela odgovarajućim kockicama, ovo će se nalaziti unutar x-loop-a

E sad, kada bismo ove dve stavke, ovakve kakve jesu, spojili u odgovarajući format maxScript skripte i ubacili sliku malo vece rezolucije (recimo 4000 x 2366)…

…Zakucali bi 3dsmax (možda čak i čitav kompjuter) ili bi nam trebalo sati, dani, meseci da skripta odradi svoj posao. Zašto? Jer će nam delovi skripte (pod 1. , 3. , 6. , b) i c) ) sračunati sve pixele slike i napraviti isto toliko kockica. Za našu sliku (rezolucije 4000 x 2366) to bi značilo da ukupno imamo samo 9464000 pixela i kockica koje naš 3dsmax i kompjuter moraju da obrade (lako) i prikažu na ekranu (nemoguće! ili skoro nemoguće?).

Da bismo ovo iznad izbegli delove skripte pod 1. , 3. i 6. ćemo blago izmeniti koristeći malo matematike i na taj način smanjiti boje i “rezoluciju” kockica

1. for y = 1 to slika.height by 80 do

3. for x = 1 to slika.width by 80 do

6. b.pos = [x*0.125,-y*0.125,0]

(boldovani brojevi su uzeti za trenutni primer slike rezolucije 4000 x 2366)

Za naš primer to znači da smo rezoluciju smanjili na 50 x 29,575 što je približno 1478 pixela, i 6400 puta brže i manje u odnosu prvobitno stanje slike. Ukratko ostavili smo svaki 80-ti pixel u x i y pravcu i tako dobijene pixele približili jedne drugima. Primer kako ovo funkcioniše na slici je za svaki 2 pixel.

 

rezolucija i pixel

Trenutne mane skripte su nemogućnost menjanja parametara van maxscript editor-a,za  šta će biti više reči u sledećem postu.

This entry was posted in Opšte. Bookmark the permalink.