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...

Tuesday, January 27, 2015

เสริมความสมจริงให้ Material (2) - ทองคำ

 ต่อยอดเทคนิกจากบทที่แล้ว บทนี้เราจะลองมาหาข้อมูล แล้วสร้าง material ทองคำกัน ซึ่งเราจะใช้ Sampler Info และ Remap Value กันเยอะทีเดียว ใครยังไม่คุ้นเคยกับ 2 node นี้ลองย้อนกลับไปอ่านบทที่แล้วก่อนนะครับ

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

เริ่มกันเลยดีกว่า นี่คือเวบไซต์ที่เราจะใช้อ้างอิง Refractive Index .info


จะเห็นว่าเวบนี้ต้องการ input เป็นความยาวคลื่น เราก็จะนำความยาวคลื่น สีแดง เขียว และน้ำเงินมาใส่ ซึ่งสามารถหาได้จาก wikipedia เซิช red, green, blue


นำค่ากลางมาหาร 1000 (1 nm = 0.001 µm) กรอกลงในช่อง wavelength ... แล้วเลื่อนหน้าจอลงไปที่กราฟ Reflection Calculator

เส้นที่เราสนใจคือเส้นสีเขียว

Red = 0.68 µm
Green = 0.5325 µm
Blue = 0.4725 µm

เราจะนำเส้นสีเขียวมาจำลองใน Maya จะใช้ตากะเอาก็ได้ ไม่มีความจำเป็นต้องให้ตรงเป๊ะเพราะในการทำงานจริงสุดท้ายเราก็ต้องปรับแต่งให้ได้สีที่ถูกใจอยู่ดี แต่ถ้าใครอยากลอง สามารถเอาเม้าส์ชี้ไปบนกราฟเพื่อดูตัวเลขเป๊ะๆ ได้

ค่าที่เราสนใจ คือ Non-polarized

เริ่มจากสร้าง Vray material ผมตั้งชื่อว่า gold0
สำหรับทองคำ สีที่เห็นทั้งหมดเกิดจาก reflection 100% ดังนั้นปรับ diffuse color เป็นสีดำ
brdf ผมปรับเป็น ward เพราะให้ไฮไลท์ที่เหมาะกับโลหะมากกว่า

 เราจะไม่ใช้ Fresnel ที่มา material แล้ว เอาติ๊กออกได้เลย

และนี่คือ connection ของเรา ไม่ต้องงงนะครับเหมือนบทที่แล้วทุกอย่าง แค่ Remap จะซ้ำกัน 3 รอบ สำหรับ R G B แยกกันออกมา
ที่ต้องระวัง คือ โดย default เวลาเชื่อมออกจาก Remap มันจะต่อ Output Color ให้

เปิดกราฟ remap value แต่ละตัวขึ้นมาปรับเส้นเลียนแบบกราฟจากเวบ refractive index โดยอย่าลืมว่าต้องกลับข้างซ้ายเป็นขวา


** สำหรับใครที่ใช้ linear workflow เมื่อดูจาก preview จะเห็นว่ามันซีดๆ ไม่สมเป็นทองเอาเสียเลย

เห็นซีดปุ๊บน่าจะเดากันได้... ว่าต้องทำ gamma correction นั่นเองครับ
สร้าง gammaCorrection node ขึ้นมา แล้วต่อตามภาพ

จะเห็นว่า swatch preview เริ่มดูสมเป็นทองขึ้นมาแล้ว... กราฟที่เราทำไว้ถือเป็นจุดเริ่มต้นเท่านั้น สามารถปรับเปลี่ยนปรับโทนสีให้ตรงตามความต้องการได้ตามอัธยาศัย

คั่นเวลาบ่นนิดหน่อย ที่เราต่อ node กันแทบตายนั้นสามารถทำได้ด้วยคลิ๊กเดียวใน MAX ... แค่แปะ fall off ไปบน reflection เท่านั้น เราก็จะได้กราฟ R G B จบในตัวเดียว แถมมี handler ใช้ง่ายซะด้วย
Fall Off ของ MAX สามารถปรับกราฟ R G B จบในตัวเดียว

แต่ไม่เป็นไรมาลุย Maya กันต่อ

จากบทความก่อนเราใช้ material เดียวกันเรนเดอร์ 3 รอบที่ glossiness ต่างกันแล้วนำไปซ้อนใน Photoshop เราจะนำไอเดียเดียวกันนี้มาใช้ โดย gold 0 ที่ทำไว้ เราจะใช้เป็น material ชั้นล่างสุด

ผมต่อ Remap คุม glossiness แบบเดียวกับบทที่แล้ว และทดลองดูจนพบค่าที่คิดว่าน่าจะใช้ได้ที่ ราว 0.8

 

สลับมาใช้ลูกบอลธรรมดาและลด quality ลงเพื่อประหยัดเวลา test render

ต่อไปก็คือ material ที่จะนำมาซ้อน ผมสร้าง Vray material 2 อัน ตั้งชื่อตามลำดับว่า gold1 และ gold2

gold 1 และ 2 เราจะใช้ reflection เดียวกันกับ gold0 จึงสามารถนำ remap R G B ที่ทำไว้แล้วมาต่อใหม่ได้เลย ซึ่งขั้นตอนนี้ ปุ่ม add node และ remove node จะช่วยให้จัดระบบ editor ได้ง่ายมาก

** remove ในที่นี้ จะเอา node ออกไปจาก editor เท่านั้น ไม่ได้ลบทิ้ง
 ตัวอย่าง ผม remove gold0 และ remap glossiness ของมันออกไปก่อน เพื่อเตรียมทำงานกับ gold1

ทดสอบ gold 1 ที่ค่า glossiness 0.9

ทีนี้เราจะลองเอา gold 1 ทับ gold 0 ดูด้วย Vray Blend Mtl และอย่าลืมสร้าง remap value อีกอันหนึ่งด้วย
จะเห็นว่าเรายังไม่หมดเวรหมดกรรมกับ Sampler Info

ต่อ gold0 เป็น base material
ต่อ gold1 เป็น coat ชั้นแรก

remap value จะทำหน้าที่คล้าย Fresnel เราจะต่อมันกับ blend amount เพื่อให้ gold1 เห็นได้ชัดกว่าที่ 90 องศา

ข้อควรระวัง... คือเราลากเม้าส์กลางแบบนี้เพื่อต่อไม่ได้ เพราะมันจะต่อ out Color ให้

เราจำเป็นต้องลงไปต่อ Out Value ไปยัง blend R G B ด้วยตัวเองตามภาพ

และนี่คือผลจากการซ้อนกัน ถ้าสังเกตดีๆ จะพอดูออก ว่ามีเงาเบลอล้อมรอบเงาคมอยู่ เป็นการผสมผสานกันของเงาต่างคุณภาพกัน

จากนั้นจะเป็นตาของ gold2 ซึ่งเป็น material ชั้นนอกสุด ผมใช้ glossiness 0.98
gold2, glossiness 0.98

ซึ่งผมต้องการให้มันแสดงเฉพาะด้านที่ใกล้ 90 องศาจริงๆ ดังนั้นกราฟ Blend ทุกอย่างจึงไปกระจุกอยู่ริมซ้าย

ผลจากการ blend

ก็เป็นอันจบบทความที่ 2 เท่านี้ครับ พูดกันตามตรง โมเดลกลมอย่างนี้ไม่ค่อยเหมาะกับการทดสอบ material เอาเสียเลย หากมีเหลี่ยมมุมมากกว่านี้จะดีกว่านี้มาก

อย่างไรก็ตาม หวังว่า 2 บทความที่ผ่านมาจะสามารถช่วยปูพื้นฐานให้พอเข้าใจแนวคิดแล้วนะครับ ในบทต่อไปผมนำ Texture มาใช้ควบคู่กับเทคนิกนี้ด้วย รับรองว่าได้ต่อ node ใหม่ๆ กันสนุกสะใจแน่นอน คอยติดตามครับ

>> ตอน 3: เหล็ก