View Daniel Harjanto's profile on LinkedIn

Using Shading Switch in Hypershade.

by Daniel Harjanto a.k.a misterdi

Salah satu node yang sangat berguna dalam mengatasi variasi-variasi warna dalam sebuah permukaan adalah shading switch node.
Maya memiliki 3 macam (4 macam dalam Maya 5.0) switch node, semuanya berada dalam utility creation dalam create Bar.

Utility tersebut mencakup:

  • single shading switch
  • double shading switch
  • triple shading switch
  • quad shading switch (hanya dalam Maya 5.0)

Yang membedakan dari semua node ini adalah keluaran (output) dari setiap node. Dengan single shading switch, keluarannya adalah sebuah nilai skalar, sedangkan lainnya merupakan nilai gabungan dari 2, 3, dan 4.

Karena agak sulit untuk membayangkannya tanpa melihat aplikasinya, mari kita buat beberapa contoh.


 

Task:
Create a shading network for 2 sphere, one with default ramp texture and one with default checker texture.

Solution:
Buatlah 2 nurbsSphere, dan terapkan blinn material padanya. Sekarang kedua benda tersebut akan menggunakan material yang sama..
Buatlah sebuah tripleShadingSwitch (color adalah sebuah nilai triple), sebuah ramp texture dan sebuah checker texture.
Pilih triple shading switch dan hubungkan outputnya ke dalam color channel dari material blinn yang telah kita buat.

Bukalah attribute editor dari shading switch (boleh juga menggunakan double click dalam hypershade), dan click Add surfaces dalam tab switch attributes.

Tampak dalam panel kiri (inShape) semua object yang menggunakan material ini akan muncul (Add surfaces akan memasukan seluruh object yang ada dalam shading group).
Gunakan MMB dan drag ramp texture dalam hypershade dan drop kedalam kotak pertama dalam inTripple, lakukan hal yang sama dengan checker texture.

Dalam modeling viewport, jika digunakan modus smooth shaded dengan hardware texturing, akan tampak sebuah bola menggunakan ramp texture, sementara lainnya menggunakan checker texture.

Buatlah beberapa bola lainnya, berikan material yang sama pada mereka. Tetapi karena bola-bola yang baru ini belum masuk dalam inShape dari switch node, mereka akan menggunakan default color yang ada dalam triple shading switch.

Click lagi tombol Add surfaces dalam tab switch attributes dari switcher node, sekarang semua bola baru akan tampil menggunakan black color. Dalam hal ini, jika sebuah surface sudah dimasukan dalam inShape attribute dari sebuah triple shading switch tetapi belum memiliki attribute sebagai output dalam inTriple maka Maya akan menggunakan nilai 0 0 0 bukan default color yang ditentukan dalam triple shading switch.

Gunakan MMB untuk mendrag ramp dan checker texture kekotak inTriple disamping panel inShape, sekarang tampak beberapa buah bola menggunakan 2 macam warna meskipun menggunakan material yang sama. Dalam hal ini jika channel lain dari material mengalami perubahan, semua bola akan mendapatkan pengaruh yang sama, semua hanya dikerjakan dalam satu node yang sama.

Bagaimana hal ini dijelaskan dalam bahasa yang awam?

Dengan menggunakan switcher, Maya diperintahkan untuk menggunakan nilai-nilai yang ada dalam inTriple pada saat melakukan rendering, jika dijumpai sebuah surface ada dalam inShape, maka Maya akan menggunakan nilai yang ada dalam inTriple dalam switcher.

Pheeewwww, that's seem making simple things harder isn't it. But let's move on to something more complex.
(aduh yang ini gimana terjemahinnya ya?).


 

Task:
Create a shading network for grapes, it should be green grapes with subtle variation for ripeness of individual fruit.

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)


 

Beyond this tutorial.

If you want to add more variance for each fruit, you can also connect a ramp texture to offset value of the main color. Transparency, translucency and Fresnel effect may also enhance the output.

<<back>>