Sunday, January 25, 2015

เสริมความสมจริงให้ Material (1) - Reflection

สวัสดีครับ

ผมมีโอกาสได้ดูการจำลองวัสดุจริงใน MAX+Vray ของ Grant Warwick ซึ่งเยี่ยมมากครับ ผมสงสัยมากว่าจะสามารถจำลองเทคนิกที่เขาแสดง ใน Maya ได้ไหม...

บทความซีรีส์นี้ คือผลจากการทดลองศึกษาดังกล่าว การจำลองคุณสมบัติของ Material ในชีวิตจริงด้วย Maya + Vray...

วัสดุในโลกจริง มีรายละเอียดยิบย่อยในระดับ micro detail มากมาย บางอย่างถ้าไม่ตั้งใจมองอาจไม่สังเกตเห็นเลยก็ได้ การจำลอง detail ยิบย่อยเหล่านี้ต้องแลกด้วยเวลา Render ที่เพิ่มขึ้นพอสมควรจึงเหมาะกับงานพิมพ์ใหญ่ๆ งาน VFX หรืองานที่ต้องการความสมจริงสูง มากกว่างานเกมหรือการ์ตูน

download:
- Sample-Scene จาก vray-materials.de แปลงเป็น fbx แล้ว

สำหรับในส่วนแรกผมจะเริ่มจาก Reflection โดยใช้ถังน้ำพลาสติกใบนี้เป็นตัวอย่าง
ส่วนแรกสุดซึ่งไม่แปลกใหม่อะไร แต่ก็สำคัญจนข้ามไม่ได้ คือ Fresnel Reflection

Fresnel Reflection คือการที่เงาสะท้อนบนพื้นผิวที่หันออกไปจากมุมมองของเรา (ขอเรียกว่า 90 องศา) ชัดเจนกว่าพื้นผิวที่หันมาหาเราตรงๆ สังเกตเงาตรงด้านข้างของถังใบเดิม


นอกจากนั้นยังมีคุณสมบัติอย่างหนึ่งที่ไม่ค่อยมีใครพูดถึงนัก คือ เมื่อใกล้ 90 องศา เงาจะคมชัดขึ้นด้วย

ส่วนที่ 2 ผมคิดว่าน่าสนใจกว่า คือ การซ้อนทับกันของ Reflection
ตัวอย่าง บริเวณฝาถัง

เหลือง คือเงาที่เบลอมาก มีผลทำให้เห็นสีของถังอ่อนลงเท่านั้น
เขียว คือเงาที่คมขึ้น ซ้อนทับไปบนเหงาเหลือง
แดง คือไฮไลท์ที่ยิ่งคมขึ้นอีก ทับอยู่บนเขียวอีกทอดหนึ่ง

ลักษณะเงาสะท้อนแบบนี้พบเห็นได้ในวัสดุทุกชนิด ยกเว้นก็เพียงวัสดุที่ผิวเรียบจนเงาสะท้อนคมชัดเหมือนพวกกระจก

 มาเริ่มจากวิธีง่ายกันก่อน

เราจะใช้ Fresnel ที่มีมากับ Vray Material เลย เมื่อดูจากตารางแล้ว พบว่า IOR ของพลาสติกอยู่ระหว่าง 1.3-1.7 ส่วนสีฟ้าของเนื้อพลาสติกต้องเผื่อให้เข้มและสดกว่าที่เห็นในภาพ เพราะ reflection จะทำให้เราเห็นสีพื้นอ่อนและจางลง


จากนั้น Render ภาพออกมา 3 ภาพ โดยแต่ละภาพเราจะใช้ ค่า Reflection Glossiness ต่างๆ กัน

ซ้ายไปขวา Glossiness 0.5, 0.8, 0.94

นำมาวางทับกันใน Photoshop แล้วปรับ Layer Opacity ตามความเหมาะสม
Photoshop Layer จากบนลงล่าง
Glossiness 0.94 = 15%
Glossiness 0.8 = 30%
Glossiness 0.6 = 100%
อย่างที่บอกไว้เลยใช่ไหมครับว่าถ้าไม่ตั้งใจมองคงไม่เห็นความแตกต่าง

หลายคนอาจคุ้นกับการรวม reflection ด้วยการใช้ Over lay ใน Vray Blend แต่นั่นไม่ใช่วิธีของเรา ก่อนอื่นต้องเข้าใจว่าโดยธรรมชาติของการสะท้อนแสงนั้น หากแสงส่องมา 10 มันไม่มีทางสะท้อนออกไป 11 แน่ๆ การใช้ Over lay จะมีโอกาสเป็นอย่างนั้นได้

ต่อมาเราจะมาดูอีกจุดหนึ่งที่ผมพูดถึง คือการทำเงาสะท้อนบริเวณใกล้ 90 องศาให้คมชัดกว่าตรงกลาง โดยการใช้ Sampler Info Facing Ratio ควบคู่กับ Remap Value เพื่อส่งค่าไปยัง Glossiness

มาดูตัวอย่างกันด้วยการใส่ surface shader ให้ poly sphere

1. สร้าง samplerInfo และ remapValue
2. เชื่อม Facing Ratio > Input Value


 3. จาก remapValue เชื่อม Out Value ไปยัง outColorR, G, B ของ surface shader


ถ้าไม่มีให้เลือกโดยตรง ให้เลือก Other ก่อนเพื่อเปิดหน้าต่างนี้


ส่วนที่เราสนใจคือกราฟสำหรับ remap value กดที่ลูกศรเพื่อขยายมันขึ้นมา


สังเกตดูน่าจะพอบอกได้ว่าทางซ้ายของกราฟ คือ 90 องศา และทางขวา คือ 0 องศา ซึ่งสลับข้างซ้ายขวากับชาวบ้านโดยส่วนใหญ่ ไม่ว่าจะกราฟ IOR ตามเวบไซต์ หรือกราฟ fall off ของ MAX


ทีนี้เราจะนำมันมาใช้กับ Material กระป๋องของเรา
จับ Out Value ต่อกับ Reflection Glossiness

เริ่มจาก Glossiness 0.6 กันก่อน เราทำได้โดยการปรับกราฟครึ่งขวาให้มี value ราว 0.6
และปรับกราฟทางริมซ้ายให้โค้งขึ้น เพื่อให้บริเวณใกล้ 90 องศามีค่า glossiness สูงขึ้น

 Maya ไม่ได้ให้เครื่องมือบิดกราฟมาเท่าไรนัก กราฟโค้งไม่สวยไม่เป็นไร เชื่อมแต่ละจุดด้วยเส้นตรงเลยก็ยังใช้งานได้

ในภาพผมเซตผิดไปหน่อย เป็น 0.5
ใช้วิธีการปรับกราฟตามที่แสดงให้ดู Render ออกมา 3 ภาพที่ glossiness 0.6, 0.8 และ 0.95


จับซ้อนกัน ปรับ opacity เหมือนก่อนหน้านี้


ก็จบบทแรกเท่านี้ครับ

ในบทต่อไป เราจะไม่ใช้ Fresnel ที่มากับ Vray แล้ว แต่จะใช้ Sampler Info + Remap Value ในการกำหนดการสะท้อน แยก R G B ตามวัตถุในโลกจริง และจะรวมเงาสะท้อนทั้ง 3 แบบจบใน Maya+Vray เลย

No comments:

Post a Comment