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

[mental ray ambient occlusion FG vs Raytraced]
Ambient Occlusion ถึงวันนี้หลายคนคงรู้จักคำนี้แล้ว อย่างที่รู้กันครับ การสร้าง ambient occlusion pass มีหลายวิธีด้วยกัน ไม่ว่าจะเป็นการทำ dome light หรือการ ใช้ plugin
อย่าง diffuse light ลองมาดูในกรณีของ mental ray กันบ้างครับ เนื่องจาก mental ray เป็นระบบเปิดคล้าย Renderman จึงทำให้ผู้ใช้สามารถเขียน shader ลงไปเองได้ตามสะดวก แต่อาจยุ่งกว่า Renderman นิดหนึ่งตรงที่ต้อง compile ก่อนจึง นำไปใช้งานได ้
ใน Maya version 7 ถ้ากดไปดูในหัวข้อ mental ray node ก็จะเห็น node ต่างๆเพิ่มขนมามากมาย หนึ่งในนั้น ในหัวข้อ texture คือ mi_amb_occlusion และ mi_fg_occlusion เราจะมาดูกันครับ ว่าสองตัวนี้ต่างกันยังไง อะไรดีกว่า และเพื่อให้เห็นภาพและเข้าใจง่ายขึ้น ลองดูตัวอย่างดีกว่าครับ

ตัวละครหนึ่งตัว และ ฉากหลัง เพื่อให้สามารถมองเห็นความแตกต่าง และการปรับแต่งที่สะดวก จึงต้อง render แยก pass ครับ เราจะแบ่งเป็นสองส่วน คือตัวละคร และ ฉาก โดยในส่วนของตัวละครแบ่งเป็น 3 pass ย่อยคือ
- Flat color pass
- Key light pass
- Specular Pass ฉากหลังแบ่งเป็น 3 pass เช่นกันคือ
- Flat color pass
- Key light pass
- Shadow pass และ pass สุดท้ายก็คือหัวข้อของเรา ambient occlusion pass ลองมาดู 3 pass ของตัวละครก่อนครับ
- Flat color pass
pass นี้ทำโดยการต่อ texture หรือ เปลี่ยนสีของ incandescence ให ้เหมือนสีของ color ที่เราตั้งไว ้จากนั้นเปลี่ยน color ให้เป็นสีดำ และเปลี่ยนค่า eccentricity ให้เป็น 0 เราจะได shader แบบแบน (Flat) ออกมา

เมื่อ render ก็จะได้สีพื้นออกมาแบนๆ...

- Key light pass
เพื่อให้สามารถเก็บข้อมูลแสงได้ทั้งหมด shader ใน pass นี้ต้องใช้ lambert สีขาว 100% โดยตั้งค่า color ให้ขาว และ diffuse เป็น 1

เมื่อ render โดยเปิดเงาเพื่อให้ได้ self shadow ติดมาด้วยก็จะออกมาแบบนี้

- Specular pass
pass นี้ต้องการ Specular หรือส่วนที่สะท้อนแหล่งกำเนิดแส่ง (หลอดไฟ) เท่านั้น จึงควรปรับค่า ที่เกี่ยวข้องกับ specular ให้ได้ตามต้องการ และปิด emit diffuse ของแสงทุกดวงให ้หมด

อาจเพิ่ม point light เข้าไปตามความเหมาะสม

มาถึงฉากหลังกันบ้าง
- Flat color pass
วิธีการเหมือนกับตัวละคร คือให้สีของ color (texture) ไปที่ incan และปรับ color ให้ดำ ปรับ eccentri ให้ 0

- Key light pass
ใช้ lambert ขาว 100% เหมือนตัวละครอีกครั้ง

-Shadow pass
assign shader ชื่อ Use Background ลงไปที่ฉากทั้งหมด ตั้ง Reflection Limit เป็น 0 ไม่ให้สะท้อนแสง

ปิด Primary Visibility ของตัวละครทั้งหมด เพื่อไม่ให้ Render ออกมา โดยใช้ Windows>>Attribute Spread Sheet

และก็มาถึงตัวเอก ambient occlusion pass ในหัวข้อ Create mental ray Nodes >> Textures จะเห็น mib_amb_occlusion และ mib_fg_occlusion

เราจะใช้ในลักษณะของ Texture ดังนั้นจำเป็นต้องมี shader มารองรับ shader ที่เหมาะสมที่สุดคือ Surface Shader ของ Maya นั่นเอง

เพื่อเป็นการ เปรียบเทียบ สร้างทั้งสองตัว แล้วมาลองสลับกันใช้งาน ก่อนอื่นมาลองแบบ fg กันก่อน
fg ย่อมาจาก Final Gather นั่นเอง เมื่อใช้ mib_fg_occlusion จึงต้องเปิด Final Gather ให้ทำงานด้วย ซึ่งคุณภาพก็จะขึ้นกับการตั้งค่า ที่นี่โดยตรง เนื่องจากเป็นฉากในแบบ Indoor หรือฉากภายในห้อง จึงต้องตั้ง Falloff Stop ให้เหมาะสม เช่นประมาณครึ่งของควากว้างห้อง ถ้าปล่อยเป็น 0 คือไม่จำกัด จะทำให้ fg คำนวณชนผนังตลอดและให้ผลออกมาดำเกิน

ให้ assign surfaceShader ลงไปที่ตัวละครและฉากทุกชิ้น ลอง render...

การเกลี่ยสีดีทีเดียว แต่มีปัญหาบริเวณที่มีขอบคม เช่นแว่นตา และพื้นที่แคบๆ เช่นข้อต่อต่างๆ มีคราบเกิดขึ้น เนื่องจาก fg มีการเกลี่ยนํ้าหนัก เพื่อกำจัดจุดรบกวน (noise) บริเวรที่มีความกว้างน้อยกว่ารัศมีการเกลี่ย ก็จะมีปัญหา เกิดเป็นคราบขึ้น วิธีแก้คือ เพิ่ม final gather ray ลด radius ลองตั้งค่าใหม่และ render อีกครั้ง

คราบที่แว่นหายไป เนื่องจากรัศมีการเกลี่ยน้อยกว่าความกว้างของแว่น แต่คราบในส่วนอื่นเพิ่มขึ้นมาแทน เนื่องจากรัศมีลดลง แต่ข้อมูลไม่พอ แก้โดยการเพิ่ม final gather ray ขึ้นอีก
ลองมาดูทางด้าน mib_amb_occlusion กันบ้างครับ mib_amb_occlusion ใช้วิธี Raytrace แบบครึ่งวงกลมเหมือน fg แต่ไม่มีการเกลี่ยสีดังนั้น สิ่งเดียวที่เป็นตัวกำหนดคุณภาพคือ ค่า Samples

เช่นเดียวกันกับ fg ต้องมีการกำหนด Max_distance ด้วยเพื่อให้เกิดความสว่างภายในได

เมื่อไม่มีการเกลี่ยสีจุดรบกวนจะเกิดขึ้นเยอะเมื่อตั้ง Samples ไว้น้อย เช่น 16-32 เมื่อต้องการเพิ่มคุณภาพอาจลองเพิ่มเป็น 64 และตั้ง contrast ใน render global ให้ลดลงเป็น 0.01

คุณภาพที่ออกมาถือว่าเยี่ยม แต่ก็ต้องแลกกับเวลาที่ต้องใช้ในการ render นานขึ้น เช่นภาพนี้ใช้เวลา 8 นาทีด้วยกันบน P4 3.0 GHz RAM 512 MB
สรุปผลการทดสอบคือ ถ้าต้องการความเร็วในการ render และไม่ต้องการให้เกิด noise ขึ้นในภาพควรใช้ mib_fg_occlusion แต่ก็จะเกิดปัญหาคราบตามมา ซึ่งทำให้ภาพกระพริบ ต้องเพิ่ม final gather ray และลดรัศมีลง แต่ถ้าต้องการความสมํ่าเสมอ และลดปัญหาเรื่องภาพกระพริบ ลองใช้ mib_amb_occlusion ครับ แต่ก็ต้องเสียเวลาในการ render นานขึ้นเป็นเท่าตัวเช่นกัน เลือกตามความเหมาะสม
กับงาน และเวลาที่มีครับ composite กันดีกว่าครับ มาดูกันว่าผสมกันยังไงบ้าง

หลักการคือ เสมือเรามีแสงสองดวง key light และ ambient occlusion รวม Flat color กับ Key light หรือ Ambient occlusion ด้วยการคูณ (Multiply) และนำสองส่วนมารวมกันด้วย การบวก (Add) ใน AfterEffect ลองทำ composite ที่หนึ่งเป็น Key light อีกอันเป็น Ambient occlusion และนำมารวมกันด้วยการ Add ก็จะได้แบบนี้ครับ

หรือลองเล่นอะไรนิดหน่อยแบบนี้

ลองใช้งานดูครับ อาจต้องแยก pass เยอะหน่อย แต่ผลที่ได้ก็คุ้มค่าทีเดียว ทั้ง Final gather และ Raytraced ธรรมดา จริงๆทั้งสองวิธีก็คือการ Raytrace แบบครึ่งทรงกลมทั้งสอง แบบ แต่ FG มีความซับซ้อนกว่าในการกำหนดคุณภาพและความเร็ว แต่แบบธรรมดาก็ให้ผลที่ดีได้โดยไม่ต้องตั้งค่ายุ่งยาก เวลาในการ render แบบธรรมดาออกจะช้ากว่า แต่ก็อยู่ใน ระดับที่ใช้งานได้ครับ

<<Back