Thursday, January 29, 2015

เสริมความสมจริงให้ Material (3) - เหล็กขึ้นสนิม 1

ในบทนี้เราจะเริ่มนำ texture มาผสมผสานกับเทคนิกที่ลงไว้ในบทก่อนๆ โดยเราจะเริ่มจาก material เหล็กขึ้นสนิม

Grant Warwick แสดงการทำสนิมด้วย procedural ของ MAX ซึ่งทรงพลังมาก ผมพยายามจะนำมันมาปรับใช้ใน Maya จนได้ออกมาอย่างนี้ ว่ากันตามตรง procedural ของ Maya ถือว่าล้าหลังมากเมื่อเทียบกับ MAX โดยเฉพาะ bercon noise นี่เล่นเอาผมน้ำลายไหลกระพริบตาปริบๆ อยู่พักใหญ่ๆ การจำลองใน Maya ถือว่าวุ่นวายกว่ามากทีเดียว แต่ก็ดีครับทำให้ได้ลองเล่น node แปลกๆ มากมายที่ปกติไม่เคยแตะต้องเลย ^-^

จากบทนี้ไป ผมจะต่อ gamma correction สำหรับทำงานแบบ linear เสมอนะครับ ใครไม่ได้ใช้ linear ก็แค่ไม่ต้องต่อ gamma 

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

นี่คือ Texture ที่เราจะใช้ในบทนี้

ส่วนโมเดล ผมเปลี่ยนเป็น test model ของ Grant Warwick ครับ Grant มีคอร์ส Vray บน MAX ซึ่งผมคิดว่าดีมากที่สุดคอร์สหนึ่ง ไม่แพ้คอร์สของ Viscorbel ทีเดียว

เมื่อนำภาพไปแปะ Vray Material ผลที่ได้จะขาวซีดตามแบบ texture ที่ไม่ได้แก้ gamma หากเราจะใช้ texture นี้แปะแล้วจบเลย ก็สามารถแก้ปัญหาด้วยการเพิ่ม attribute texture input gamma ได้
ซ้าย ภาพก่อนแก้ gamma ..... ขวา การแก้ปัญหาด้วย gamma attribute ของ vray

แต่ผมไม่ใช้วิธีนี้ ผมจะใช้ texture นี้เป็นแม่แบบแล้วดึงข้อมูลมันออกมาเพื่อปรับแต่งและใช้ต่อในอีกหลายๆ ส่วนจึงไม่อยากใส่ gamma ตั้งแต่ต้นทาง หลังจากปรับแต่งทุกอย่างแล้วค่อยต่อ gamma ไปที่ปลายทางเป็นวิธีที่ดีกว่า

สำหรับในบทนี้ผมจะพยายามแต่งภาพใน Maya ให้มากที่สุดและใช้ Photoshop เฉพาะสิ่งที่ทำใน Maya ไม่ได้จริงๆ เท่านั้น

นี่คือ texture ที่แก้ gamma แล้ว
 

จะเห็นว่า resolution ไม่พอ ภาพแตกเป็นเม็ดๆ สามารถแก้ได้ 2 วิธี คือหาภาพที่ใหญ่กว่านี้มาแปะ หรือไม่ก็เพิ่ม repeat UV ในกรณีนี้ผมใช้วิธีอย่างหลัง
เพิ่ม repeat UV เป็น 2 แก้ texture แตก
จากนั้นลด saturation และ contrast ลงหน่อย ด้วย node remap HSV
 

ใน node นี้จะมีกราฟ Saturation และ Value อยู่
ปรับ saturation ด้วยกราฟนี้ ถ้ากดลงจนสุดจะกลายเป็นขาวดำไป
กราฟนี้ใช้งานเหมือน curve ใน Photoshop

ลด saturation ลด contrast กดให้มืดลงเล็กน้อย

จากนั้นก็เริ่มสร้างกราฟ reflection ให้จับไฮไลท์เฉพาะด้านที่ใกล้ 90 องศาจริงเท่านั้น

G B เราจะใช้ค่าเดียวกัน จากนั้น copy ออกมาปรับเพื่อให้ R มากกว่าเล็กน้อย

ลอง render ดู

ต่อไปเราจะสร้าง bump ซึ่ง จะเอาภาพที่ใช้กับ color มาใช้เลยมันก็พอได้ระดับหนึ่ง แต่ภาพของเราจะขาด micro detail ซึ่งส่วนนี้เป็นส่วนที่ procedural สามารถทำได้ดีมาก

สิ่งสำคัญเวลาเริ่มทดสอบ procedural texture ก็คือ scale ของมันบนโมเดลจริง เพื่อความรวดเร็วและความสะดวก จับโมเดลใส่ใน render layer ใหม่ แปะ surface shader เพื่อให้ render ดูผลได้อย่างรวดเร็ว


เริ่มจาก noise ครับ

ลองต่อเข้าไปแบบไม่ปรับอะไรเลย ได้ผลอย่างนี้

จะเห็นว่ามันใหญ่มาก เราต้องปรับให้ได้ noise ที่เล็กละเอียดกว่านี้ ซึ่งค่าหลักที่จะใช้ คือ frequency และ density

ลด Depth Max ลงเหลือ 1 เพื่อให้ดูง่ายๆ ก่อน แล้วทดลองเปลี่ยน frequency

จะเห็นว่ายิ่งเพิ่ม frequency จุดจะยิ่งเล็กและละเอียดมากขึ้นเท่านั้น
Frequency 500, Density 0.1,

พอดูว่ามันละเอียดน่าพอใจแล้ว เพิ่ม Depth Max เพิ่มเป็น 4 หรือ 5 เราจะได้ micro detail มาแบบนี้

จากนั้น ผสม procedural texture อีกสัก 1-2 ชั้นเพื่อให้พื้นผิวมีความแตกต่างน่าสนใจมากขึ้น อาจจะใช้ noise ต่าง frequency กันก็ได้ ในที่นี้ผมลองใช้ fractal ดู ค่อนข้างใช้ยากกว่า noise พอสมควรเพราะ Vray ยังไม่สนับสนุน 100%

การลดขนาด fractal ไม่มีทางอื่นนอกจากเพิ่ม repeat UV

ใช้ layer texture เพื่อผสม procedural 2 ตัวเข้าด้วยกัน ผมวาง noise เป็นพื้น เอา fractal ทับ
Fractal ทับ noise ที่ alpha 0.04

นำ texture สนิมตัวเดิมมาแต่งเติมลงไปด้วย ผมต่อ remap HSV ใหม่ออกมาจาก file node อันเดิม, กด saturation ลงจนเป็นขาวดำ, เพิ่ม contrast และปรับกราฟจนได้ผลที่พอใจ


จากนั้นก็ถึงเวลาทดสอบ ต่อ out color ไปยัง bump map

ปรับ Blend mode และ Alpha บน layer texture ดูโดยไม่ได้เปลี่ยนอย่างอื่น ได้ผลอย่างนี้

setting ของ layer texture:
noise ล่างสุด
fractal: mode Difference, Alpha 0.3
image file: mode Lighten, Alpha 0.6

ถ้าลองดู Reflection Element จะเห็นว่าเงาสะท้อนถูก bump ทำให้แตกเป็นจุดเล็กๆ ทำให้ได้ไฮไลท์ที่ดูดีทั้งที่ยังไม่ได้เปลี่ยน glossiness เลย (glossiness ยังเท่ากับ 1 อยู่)
Reflection element
แต่สีสันของ texture ยังแรงเกินไปจนรบกวนผลลัพท์ที่ได้พอสมควร เราจะแก้ด้วยการวางสีน้ำตาลสีนึงทับ texture ด้วยการใช้ blend colors

สีที่ใช้ ดูดมาจากภาพ render มาปรับอีกเล็กน้อย

test render


อันที่จริงเท่านี้ก็น่าจะเพียงพอต่อการใช้งานแล้ว แต่เพื่อให้บทความนี้ครอบคลุมเนื้อหาครบถ้วน ผมจะต่อ texture เข้าไปเพื่อแตก glossiness ด้วย

ดึงสีใดสีหนึ่งจาก layer texture ที่ทำไว้ไปต่อ glossiness

 จะเห็นว่าไฮไลท์หายหมดเพราะ glossiness ลดต่ำเกินไป

ดึงมันกลับขึ้นมาแบบสุ่มสักหน่อยด้วย remap value

และนี่คือไฮไลท์ใหม่ (ซ้าย) เทียบกับอันเก่า (ขวา) จะเห็นว่ามันเริ่มแตกตัวออกมากขึ้น

final render ทุกอย่างจบใน Maya+Vray 

จะเห็นว่า เราสามารถ zoom เข้าไปใกล้ๆ ได้โดยไม่รู้สึกว่าภาพขาด detail เลย และอย่าลืมว่าเราใช้ไฟล์ภาพเพียงไฟล์เดียวเท่านั้นเอง แถมไม่ได้ใหญ่อะไรเสียด้วย แค่ 512x512

ในบทต่อไปเราจะใช้เทคนิกเดียวกันสำหรับ material เหล็ก จากนั้นก็จะนำสนิมนี้ไปรวมครับ


>> to be continued...

No comments:

Post a Comment