Displacement Map
สร้างฉากใต้ทะเล โดยใช้ Displacement Map
Chamferbox
ขั้นตอนการสร้าง เตียง ผ้าคลุมเตียง หมอนใบนั้น
Compesite Map
ขั้นตอนการสร้างวัสดุ น้ำ Compesite Map

[Using Adaptor]

Adaptor...
เนื่องจากในการ render แต่ละครั้ง หรือในแต่ละ pass/layer อาจจะใช shader ไม่เหมือนกันสำหรับ object ตัวเดียวกัน โดยปกติก็จะใช้วิธีattach ตัวที่ต้องการเมื่อ ต้องการ render การทำแบบนี้มักมีปัญหาในฉากที่ซับซ้อน เนื่องจากการ attach และ detach shader เพื่อให้ได shader ที่ต้องการสำหรับ pass นั้นๆ ทำให้เสียเวลา และทำให้เกิดความผิดพลาดได้ง่าย Slim จึงมีความสามารถในการเลือกใช shader ตามเงื่อนไขที่กำหนดได ้โดยสร้างเงื่อนไขใน Adaptor
ตัวอย่างเช่น ฉากห้องนอนที่ต้อง render สองเวลา กลางวันและกลางคืน อาจใช shader ที่ไม่เหมือนกันก็ได้เพื่อความเหมาะสม จึงมีshader สองชุด และเลือกใช ้ตามบรรกาศที่ต้องการในขณะนั้น

ในกรอบสีนํ้าเงินด้านบนคือสิ่งที่ต้องการกำหนดเป็นเงื่อนไข เรียก Controller มีทั้งหมด 6 ชนิด
Context : กำหนดตาม Context ของ Render Global ใน Render Global ของ Renderman สามารถกำหนด Context เป็นตัวหนังสือเพื่อบอกว่า ฉากที่ต้องการ render ในขณะนั้นคืออะไร Object Name : ใช้ชื่อของ Object เป็นตัวกำหนด Object Path : ใช้ชื่อเต็มของ Object เป็นตัวกำหนด (เพื่อหลีกเลี่ยงปัญหาในกรณีที่ชื่อซํ้ากัน) Element Name : Element คือ pass ย่อยที่จะต้องทำการ render แล้วเก็บเป็นไฟล์ในขั้นตอนการ render ปกติเช่น shadow หรือ reflection เป็นต้น การ
Element Name ก็คือการใช้ชื่อของ pass ย่อยนั้นๆที่ใช้เป็นชื่อไฟล ์เช่น ชื่อของ shadow map เป็นต้น Element Type : ใช้ชนิดของ pass ย่อยเป็นตัวกำหนด เช่น shadow หรือ reflection เป็นต้น Display Name : ใช้ชื่อของภาพเป็นตัวกำหนด (ตั้งใน Render Global)ช่องว่างของแต่ละแถวคือช่องใส่ชื่อของสิ่งที่ต้องการนำไปตรวจสอบ ถ้าเป็น * คือใช shader นี้เลยไม่ต้องตรวจสอบ ดังนั้น * ต้องอยู่ล่างสุดเสมอ ลองดูตัวอย่างทำ fake caustic ด้วย deep shadow ซักอันครับ

set up ฉากง่ายๆโดยมีplane และsphere ใช้spot light 1 ดวงconnect เงาแบบshadow map ลงไปที่spot light และเปลี่ยนชนิดจากstandard เป็นdeep

shadow

สร้าง shader ไม้ง่ายๆให้กับ plane ในที่นี้คือ Blinn สร้าง swissArmy เพื่อในเป็น shader ของ sphere ที่มีการหักเหแสงด้วย จากนั้นก็ต่อเข้ากับ ensemble 1

ตั้งค่า strength ของ reflection และ refraction เป็น 1 เพื่อให้มีการคำนวณเกิดขึ้น

shader สำหรับ shadow pass
เราต้องการสร้าง caustic effect หลอกๆ โดยใช้ความคิดว่า บริเวณกลางของ Object มักเป็นจุดรวมแสง บริเวณขอบมักจะมืด ความสามารถของ deep shadow คือ สามารถ render เงาที่มีความใสตามค่า opacity ของ object ได ้ดังนั้นจึงสามารถสร้างเงาที่สว่างตรงกลางได้ด้วยการ map opacity เข้ากับ facing forward นั่นเอง

ติ๊ก Invert เพื่อให้กลับค่าขอบเป็นสีขาว เนื่องจากขาวคือทึบแสง แล้วก็ตอเข้ากับ constant

ต้องใช float to color เปลี่ยนให facing forward เป็น color ก่อนแล้วจึงสามารถ connect ได้เข้ากับ opacity ของ constant ได ้แล้วต่อ constant เข้ากับ ensemble อีกตัว
สร้าง ensemble adaptor ขึ้นมา add condition สองครั้ง จัดการต่อ ensemble ที่มีทั้งสองตัวเข้าไปที่adaptor condition

เลือก controller เป็นแบบ Element Type
ที่แถวแรกซึ่งต่อ ensemble 0 เข้ามาเพื่อทำเป็น shader สำหรับสร้างเงาที่มีfake caustic ใส่คำว่า shadow ลงในช่อง ส่วนอีกช่องใส *

จะได fake caustic ออกมา ถ้าลองทำต่ออีกนิดหน่อยโดยการต่อ reflection เข้าไปทำพื้น

เปลี่ยน model นิดหน่อยครับให้เห็น reflection ชัดเจนขึ้น

ดูจาก shading network ด้านบนก็จะพบว่ามีการสร้าง shader ขึ้นมาอีกชุดไว้ด้านบน เป็น shader แบบ constant ซึ่งรับสีมาจาก swissarmy ตัวเดิม แต่ไม่ได้รับมา โดยตรงครับ ผ่าน node ที่ชื่อ combine color ก่อน node นี้มีความสามารถในการผสมสีสองสีเข้าด้วยกันได ้สีอีกอันที่เอามาผสมคือ ramp ซึ่ง project เข้าไปตาม แกน Z (ในที่นี้สร้าง coordinate system ขึ้นมาเป็นตัวกำหนดตำแหน่งของการ project) ramp ตัวนี้เกลี่ยสีจากขาวด้านล่างไปจนถึงคำด้านบน ลอง render ดูครั

 

ผลที่ได้จากการนำ ramp ไปผสมกับ swissarmy ด้วยการใช combine color คือทำให้สีของ object มืดลงเรื่อยๆตามแนวดิ่ง คือ ยิ่งสูง ยิ่งมืด มีผลทำให้เงาสะท้อนที่พื้น fade จางหายไป เมื่อเงาลงลึกไปเรื่อยๆ จากผลที่ได้แบบนี้ทำให้เราสามารถใช adaptor เพื่อใช shader ตัวนี้เฉพาะใน ขั้นตอนการ render reflection เท่านั้น

สร้าง ensemble อีกตัว และ connect constant เข้าไป เพิ่ม condition เข้าไปที่adaptor ตัวเดิม และ connect ensemble เข้าไปที่condition ตัวใหม

สลบตำแหน่งกับ * แล้วตั้งชื่อว่า reflection ตรงนี้ตำแหน่งก่อนหลังสำคัญ ถ้า * อยู่ก่อน การ check เงื่อนไขจะมาไม่ถึง reflection เนื่องจากการ check จะ check ตามลำดับ และ * ก็จะเข้าเงื่อนไขก่อนทุกครั้ง

ผลที่ได้ควรจะออกมาแบบนี้ครับ
การประยุกต์ใช้งาน adaptor ทำให้ขึ้นตอนการทำงานมีประสิทธิภาพขึ้นมาก ดังนั้นการคิดถึง เงื่อนไขการ render และการตั้งค่าต่างๆ จึงเป็นเรื่องจำเป็นในการ setup ฉากที่ซับซ้อน ต้องลองใช้ดูครับ แล้วจะสามารถนึกถึงการแก้ปัญหาที่เคยมีต่างๆได้มาก

<<Back