|
Solution:
Buatlah sebuah model serenceng anggur, dengan kira-kira 50 butir
buah anggur, dengan sedikit variasi skala untuk setiap butirnya..
Beri nama butir anggur ini seperti : grape1, grape2, ...., grape50
dan seterusnya.
Bisa saja menggunakan fasilitas renaming dalam Maya atau gunakan
simple MEL script untuk melakukannya.
Pilih semua sphere, bukalah script editor, dalam script
editor ketikanlah kode Mel Script ini dan jalankan.
string $selections[] = `ls -sl`;
for ($selection in $selections)
{
rename $selection "grape#";
}
Baris pertama dari script ini akan me-list semua objek yang
dipilih, dan menaruh hasilnya dalam string array variable
yang diberi nama $selections.
Baris kedua akan memerintahkan maya melakukan perintah untuk setiap
anggota dari string array dan dalam hal ini kita tidak perlu mendeclare
$selection sebagai string karena maya telah tahu bahwa members dari
sebuah string array akan berupa sebuah string.
Perintah yang diberikan kepada setiap anggota dari string array
dicakup dalam curly bracket, yaitu mengganti namanya menjadi
grape1, grape2, .... etc..
Jangan lupa untuk mengetikan semicolon untuk mengakhiri setiap
perintah.
Susunlah butir-butir anggur tersebut sehingga terlihat sebagai
berikut.

Buka hypershade dan buatlah:
- Sebuah blinn material, beri nama grapesM
- Sebuah V-Ramp texture, beri nama grapes_ramp.
- Sebuah single shading switch, beri nama grapes_switch.
Hubungkan grapes_ramp ke color channel dari grapesM.
Hubungkan output of grapes_switch keV Coord dari
grapes_ramp.
Pilih semua butir anggur dan assign grapesM padanya.
Rubahlah grapes_ramp sehingga mirip gambar berikut.

Semua koneksi dasar sudah siap, sekarang waktunya untuk pekerjaan
yang lebih sulit.
Pilih grapes_switch, buka attribute editor dan sebagaimana
pada tugas pertama click Add Surfaces. Pada panel kiri dari
switch attribute (inShape) sekarang telah terisi data dari butir-butir
anggur..

Tetapi kita perlu memberitahu maya nilai apa yang harus digunakan
dalam panel kanan (inTriple), yang merupakan keluaran
dari grape_switch.
Untuk setiap butir dari grape object, akan ditambahkan sebuah dynamic
attribute, berilah nama vcoord dan gunakan nilai ini
pada panel kanan dari grape_switch node. Tetapi karena melakukannya
satu per satu sangat membosankan, mari kita coba membuat sebuah
MEL script untuk melakukannya. Bukalah script editor, dan ketikan
perintah-perintah berikut, tapi jangan menjalankannya terlebih dulu.
string $selections[] = `ls -sl`;
for ($selection in $selections)
{
addAttr -ln vcoord -at double -min 0 -max 1 $selection;
setAttr -e -keyable true ($selection + ".vcoord");
}
Baris pertama script ini hanya me-list all semua object terpilih,
dan menaruh hasilnya dalam sebuah string array variable bernama
$selections.
Baris kedua memerintahkan maya untuk melakukan perintah perintah
untuk setiap anggota dari string array.
Perintah yang diberikan pada setiap anggota dari string array dicakup
dalamcurly bracket, yaitu menambahkan sebuah attribute (addAttr)
dengan longname (-ln) vcoord dan tipe (-at) float
mempunyai nilai minimum (-min) 0 dan nilai maximum (-max)
1. Lalu attribute ini akan ditampilkan dalam channel box
dengan mensetting attribute (setAttr) sebagai keyable (-keyable
true).
Pilih semua butir anggur dan jalankan script tersebut. Untuk sekitar
50 model tak akan lama waktu yang diperlukan.
Lihatlah dalam channel box, untuk setiap butir anggur akan ada
sebuah new attribute yang muncul di baris terakhir
dalam channels list.

Sekarang nama attribute ini bisa diketikan langsung dalam kotak
inSingle dalam grape_switch (sebagai contoh: grape1.vcoord), atau
gunakan lagi MEL script untuk melakukannya. Dengan menggunakan MEL
script terlihat lebih canggih dan paling penting jauh lebih cepat.
Pilih the switch node dalam hypershade dan ketikanlah perintah
ini dalam script editor lalu jalankan.
string $selections[] = `ls -sl`;
string $switchNode = $selections[0];
string $connections[] = `listConnections -source true -destination false`;
for ($i = 0; $i < size($connections); $i++)
{
connectAttr -f ($connections[$i] + ".vcoord") ($switchNode + ".input[" + $i + "].inSingle");
}
Dua baris pertama digunakan untuk mengambil name switch
node.
Baris ketiga akan melist semua incoming connection (-source
true) tetapi bukan outgoing connection (-destination false),
dan menyimpannya dalam string array bernama $connections.
Dalam kasus ini tidak digunakan "for in loop" melainkan
menggunakan index. Index dimulai dari 0 (anggota pertama string
array) hingga anggota terakhir yang dihitung menggunakan "size"
function, index akan bertambah dengan 1 untuk setiap loop. Index
ini digunakan untuk mendapatkan hubungan dari inShape ke inSingle.
Perintah yang digunakan (dalam curly bracket) akan menghubungkan
".vcoord" attribute ke ".inSingle"
attribute dari grape_switch.
Untuk sekitar 50 connection, waktu yang diperlukan mungkin hanya
beberapa detik dibandingkan dengan beberapa menit jika dimasukan
secara manual.
Sekarang jika dilihat pada attribute editor dari switch node, tampak
panel kanan (inSingle) telah terhubungkan.

Render, dan semua akan protes karena butir-butir anggur masih menggunakan
warna yang sama. So what the heck is this, after working with
that silly code still doesn't give the result what we want?. (ini
juga tidak diterjemahkan).
Satu hal yang perlu diketahui, meskipun attribute dari vcoord telah
dihubungkan, jika dilihat nilai dari vcoord untuk setiap butir anggur,
semua masih menggunakan nilai yang sama yaitu 0. Untuk mendapatkan
variasi warna kita perlu memasukan nilai acak antara 0 to 1 ke dalam
attribute ini. Sekali lagi MEL script akan sangat membantu.
string $selections[] = `ls -tr "grape*"`;
for ($selection in $selections)
{
setAttr ($selection + ".vcoord") (rand(0,1));
}
Baris pertama, ada flag baru yang digunakan, bukan melakukan listing
dari object terpilih, perinath ini akan me-list semua transform
(-tr) dengan nama wildcard "grape*", yang
akan menghasilkan grape1, grape2 .... grape50 dan seterusnya.
Perintah dalam loop, script ini akan memasukan nilai acak (random
value) antara 0 dan 1 ke dalam attribute .vcoord.
Nilai acak inilah yang akan digunakan sebagai v-coord pada grape_ramp.
Render kembali dan dapatkan variasi warna dari butir anggur tergantung
nilai vcoord dari ramp texture. Sedangkan untuk nilai attribute
yang lain dan ramp texturnya sendiri masih dapat dilakukan perbaikan
selama hubungan tersebut tetap terjaga, semua perubahan tersebut
akan muncul pada saat render.

scene file ada di sini here
atau dalam bentuk zip file (shadingSwitch.zip)
|