MaxScript skripta za kvadratne mozaike 2

I mana iz prethodnog posta je otklonjena. Problem se javio kod:

slika = selectBitmap caption:”Izaberite Bitmap”

Što je rezultovalo da kad god se skripta pokrene, prvo iskoči prozor za izbor slike, bez obzira na to što se gore pomenuti kod nalazi unutar button koda. Dalje, čim izaberemo sliku, ostatak skripte se odmah aktivira bez obzira na to što je i ostatak pod sopstvenim button-om, što je pravilo problem oko dodeljivanja parametara, jer naime, skripta ni ne stigne da da prozor za unos parametara, a već gotov posao.

Da bi se to izbeglo mora se uraditi sledeće:

local slika                                                                      – da se dodeli varijabla zvana slika

button load “Izaberi sliku”                                   – da se postavi dugme za izbor slike

i konačno kod:

on load pressed do
    (
    img = selectBitMap()
    if img != undefined then slika = img    
    )

Koji će sliku sačuvati kao varijablu img, a zatim ako se pokaže da je bitmap dodeljen, varijabla slika će preuzeti parametre varijable img. Takođe primetite da selectBitMap sada ima dve zagrade () i nema caption:”…” . Ova nova funkcija sa zagradama ne može da ima caption, i nje nema u Help-u za MaxScript, te je i bila uzrok problemu.

Sad kad je problem rešen, mogu da se dodaju svakakvi parametri koji će uticati na krajnji izgled mozaika. Da ne dužim prvo ću postaviti čitavu skriptu sa rollout-om.

Mozaik Kreator

Prvi promenljivi parametar koji je uveden je oblik mozaika, koji može biti: chamferbox, sfera, cilindar i piramida. Iako bi bilo moguće ubaciti i druge oblike, ova četiri daju najbolje rezultate za mozaik (chamferbox postaje kocka kada se fillet opcija stavi na nulu).

Drugi parametar je , zapravo, skup parametara za dimenzije oblika mozaika, radius koji određuje radijus, širinu i debljinu delića mozaika (maksimalna dimenzija je 10), height koji određuje visinu za sve oblike sem sfere i fillet koji određuje zakrivljenost ivica samo za chamferbox-a.

Treći parametar nazvan Rezolucija služi za smanjivanje broja mozaičnih delova, kako bi se izbeglo zakucavanje 3dsmax-a pri obradi većih slika, s tim da i dalje se mogu stvoriti problemi ako unesete pogrešnu brojku na većoj slici. Uglavnom, 1 za velike slike preko 4500 pixela u bar jednom pravcu, a 7 za male slike sa samo 80 pixela. Ostali brojevi su za sve veličine između.

Tu je dugme za unos slike (koje smo objašnjavali na početku posta), dugme za brisanje svih mozaika kako se ne bi usporio kompjuter zbog previše elemenata u 3dsmax-u i naravno dugme za pravljenje mozaika.

Za kraj malo primera rendera izvedenih koristeći ovu skriptu.

mozaikk1 mozaikk6

mozaikk8 mozaikk9

mozaikk11 mozaikk13

Published
Categorized as 00 Radovi

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.

Published
Categorized as Opšte

Transformacija 2D prikaza u 3D forme

Korišćenjem 2D slike (npr. formata jpg) parametarskim podešavanjima dati joj treću dimenziju. 3D forme 2D slika mogu se koristiti za mozaike, oblikovanje terena, 3D štampanje i mnoge druge namene. U primerima ispod teksta koriste se pikseli same slike za formiranje 3D forme.

rough_rock_texture_pack_by_sdwhaven-d3cjp7f textures 7

textures 2 textures 4

Published
Categorized as 00 Radovi