หลังจากที่มายา 2017 ออกมาได้สักพักใหญ่แล้ว ในที่สุดก็ได้ฤกษ์ตัดสินใจเปลี่ยนมาลองใช้
ก่อนหน้านี้ได้เคยลองใช้มาแล้วนิดหน่อยตอนที่ทดสอบโปรแกรม mmdpaimaya ดังที่เขียนไปใน
https://phyblas.hinaboshi.com/20170221
แต่เนื่องจากตอนนั้นชินกับ 2016 เต็มที่และยังไม่มีใจที่จะเปลี่ยนก็เลยปล่อยไว้อย่างนั้นก่อน
ส่วนหนึ่งที่ทำให้การเปลี่ยนจาก 2016 มาเป็น 2017 เป็นเรื่องลำบากก็คือการที่ 2017 เลิกสนับสนุนตัวเรนเดอร์เมนทัลเรย์ซึ่งเคยใช้มาตลอด หันมาใช้อาร์โนลด์ (arnold) แทน
อาร์โนลด์นั้นในเบื้องต้นดูแล้วการใช้ยุ่งยากกว่าเมนทัลเรย์พอสมควร แต่คิดว่าเมนทัลเรย์มาถึงทางตัน คือยังไงไม่ช้าก็เร็วก็ต้องเปลี่ยนอยู่แล้ว เพราะอาร์โนลด์จะกลายเป็นตัวเรนเดอร์หลักในมายาแทน ส่วนเมนทัลเรย์ท่าทางจะไม่มีอนาคตแล้ว ในที่สุดจึงตัดสินใจเปลี่ยนมาลองใช้อาร์โนลด์ พร้อมกับการเริ่มใช้มายา 2017
เริ่มเปิดมายา 2017 ขึ้นมา สำหรับใน mac หน้าจอเป็นแบบนี้ ดูเผินๆก็ไม่ได้ต่างจากมายา 2016 มากนัก
หากดูในรายละเอียดแล้วที่จริงก็ความเปลี่ยนแปลงมีพอสมควร มีสิ่งที่น่าพูดถึงอีกหลายอย่าง แต่ประเด็นสำคัญสุดซึ่งจะพูดถึงคราวนี้ก็คือเรื่องการใช้อาร์โนลด์
หากลองเปิดไฟล์ที่เคยทำแล้วเรนเดอร์ด้วยเมนทัลเรย์ในมายา 2016 มาก่อนขึ้นมาก็จะมีข้อความเตือนว่าพบโหนดเมนทัลเรย์ ซึ่งตอนนี้จะไม่สามารถใช้การได้แล้ว แต่ก็ไม่มีปัญหาอะไร ยังเอามาใช้ทำอะไรอื่นๆได้ตามปกติที่ไม่เกี่ยวกับเมนทัลเรย์
งานที่เปิดมาลองทดสอบดูคราวนี้คือเทพธิดาอควา ที่เคยลงไปตอนที่เขียนเรื่องวัสดุ mia ใน
https://phyblas.hinaboshi.com/20170324
จากนั้นลองเอามาเรนเดอร์ด้วยอาร์โนลด์ดูเลย สิ่งที่พบก็คือ ผลที่ได้ต่างไปจากเดิมมาก
ภาพบนคือภาพเดิมที่เรนเดอร์ด้วยเมนทัลเรย์ภาพล่างคือใช้อาร์โนลด์
พื้นผิวเป็น blinn ธรรมดาทั้งหมด แต่พอใช้อาร์โนลด์กลับกลายเป็นผิวที่มันวาวแบบสากๆอย่างนี้ไปเลย
นั่นแสดงว่าอาร์โนลด์ประมวลผลความมันวาวของ blinn ในทางที่แตกต่างออกไปจากมายาซอฟต์แวร์หรือเมนทัลเรย์
ปกติแล้วในการใช้อาร์โนลด์เพื่อการเรนเดอร์นั้นโดยทั่วไปแล้วมักต้องใช้วัสดุเฉพาะของอาร์โนลด์เองที่เรียกว่า aiStandard แทนที่จะใช้วัสดุมาตรฐานที่มีในมายาอย่าง blinn
วัสดุนี้อาจเทียบเท่ากับวัสดุ mia ของเมนทัลเรย์ เพียงแต่ค่อนข้างแกมบังคับว่าควรจะต้องใช้หากใช้อาร์โนลด์เรนเดอร์ ในขณะที่ mia จะไม่ใช้ก็ได้
ยังดีที่ในโปรแกรมได้เตรียมหนทางสำหรับเปลี่ยนวัสดุชนิดต่างๆมาเป็น aiStandard ไว้แล้ว เป็นโค้ด python สามารถหาโค้ดนั้นได้ โดยถูกเตรียมมาอยู่ในไฟล์ชื่อ mrShadersToArnold.py ซึ่งถูกใส่ไว้ในโฟลเดอร์ชื่อ docs ภายในโฟลเดอร์ที่ลง MtoA
ลองเอาโค้ดมารัน เสร็จแล้ว blinn ทั้งหมดในนี้ก็จะเปลี่ยนเป็น aiStandard
จากนั้นลองเรนเดอร์ดู ก็พบว่า ได้ผลเหมือนเดิมเป๊ะเลย (เลยไม่มีความจำเป็นต้องลงรูปซ้ำ) เท่ากับว่าการเปลี่ยนจาก blinn เป็น asStandard ในที่นี้สมบูรณ์แบบจริงๆ
เพียงแต่ว่ายังไงก็ไม่สามารถกลับไปเป็นเหมือนตอนใช้เมนทัลเรย์ได้อยู่ดี ยังไงก็ยังต้องลองปรับอะไรดูหลายๆอย่าง
สาเหตุที่ทำให้ภาพเป็นแบบนี้เกิดจากการที่มีค่าความหยาบ (roughness) ในส่วนของสเป็กคิวลาร์ ค่านี้ถูกแปลงมาจากค่าความเยื้อง (eccentricity) ของ blinn โดยตรง
ค่าตั้งต้นของ blinn จะมีค่าความเยื้อง เป็น 0.3 ทำให้ความหยาบในที่นี้กลายเป็น 0.3 ด้วย เลยได้ผิวขรุขระแบบนี้
ที่จริงแล้วค่าความเยื้องใน blinn เป็นตัวที่กำหนดความแรงของแสงไฮไลต์ แต่พอเป็นใน aiStandard กลับถูกแปลงเป็นความหยาบไป
ขอลองปรับความหยาบให้เป็น 0 ให้หมดแล้วเรนเดอร์ใหม่ พิมพ์โค้ดตามนี้วัสด aiStandard ทั้งหมดก็จะมีความหยาบเป็น 0
for a in mc.ls(typ='aiStandard'):
mc.setAttr(a+'.specularRoughness',0)
พอไม่มีความหยาบแล้วก็เลยกลายเป็นกระจกสะท้อนแสงชัดเจนตามแบบที่ blinn ควรจะเป็นดังเดิม แต่ก็ยังไม่เหมือนเดิมซะทีเดียวอยู่ดี
อีกเรื่องที่น่าลองปรับดูอีกก็คือ ภาพนี้จะเห็นว่าฉากดูมืดๆในส่วนที่ไม่โดนแสง ซึ่งแบบนี้ที่จริงแล้วยังไม่ค่อยสมจริงนักเพราะในความเป็นจริงแสงควรจะสะท้อนไปมาทำให้แม้แต่ส่วนที่ไม่โดนแสงโดยตรงก็ต้องสว่างขึ้นบ้าง
ความจริงแล้วในอาร์โนลด์แสงจะมีการสะท้อนอยู่ครั้งหนึ่งอยู่แล้วโดยค่าตั้งต้น ทำให้ภาพที่ได้ไม่มืดสนิทซะทีเดียว แต่ว่าหากปรับเพิ่มขึ้นก็ยังสว่างขึ้นได้อีก
ลองมาดูที่เครื่องมือปรับแต่งการเรนเดอร์เลือกมาที่แถบ Arnold Renderer กดที่ Ray Depth ดูตรงค่า Diffuse คือความลึกในการสะท้อนแพร่ จะเห็นว่าเป็น 1
ในที่นี้ลองปรับให้เป็น 3
ถ้าจะปรับโดยใช้โค้ดก็แค่พิมพ์
mc.setAttr('defaultArnoldRenderOptions.GIDiffuseDepth',3)
เพียงแต่ว่าโดยปกติแสงที่ถูกสะท้อนจะยังไม่ได้นับรวมความวางของวัสดุเข้าไปด้วย จนกว่าจะไปเปิด enable glossy caustics ในโหนดของวัสดุ
ในที่นี้ลองสั่งเปิดคอสติกความวาวลงไปให้กับวัสดุทั้งหมด แต่ถ้าต้องมาไล่ติ๊กทีละวัสดุก็เสียเวลาแย่ ก็เลยใช้โค้ดช่วยดีกว่า ทำง่ายๆโดยพิมพ์โค้ดนี้
for a in mc.ls(typ='aiStandard'):
mc.setAttr(a+'.enableGlossyCaustics',1)
ส่วนความลึกในการสะท้อนความวาวก็เพิ่มเป็น 3 ด้วยเช่นเดียวกับการแพร่
mc.setAttr('defaultArnoldRenderOptions.GIGlossyDepth',3)
แล้วเรนเดอร์ ผลที่ได้ออกมาดูสว่างขึ้น แต่เวลาเรนเดอร์ก็นานขึ้นตาม
แต่จะเห็นว่าออกมาดูแปลกๆขัดตา เพราะแสงดูแตกๆ เหมือนมีคลื่นรบกวนมากมาย
ปัญหานี้อาจสามารถแก้ได้โดยปรับเพิ่มความละเอียดของงาน โดยไปที่ตัวปรับเลือกการเรนเดอร์ ดูที่หมวด sample จะมีจำนวนตััวอย่างให้ปรับแต่ง ยิ่งค่ามากยิ่งภาพออกมาแม่นยำขึ้น แต่เวลาเรนเดอร์ก็เพิ่มเป็นทวีคูณ
ในที่นี้ลองเปลี่ยนจำนวนแซมเปิลของการแพร่กับความวาวเป็น 5 จากที่เดิมเป็น 2
หากปรับด้วยไพธอนก็เขียนตามนี้
mc.setAttr('defaultArnoldRenderOptions.GIDiffuseSamples',5)
mc.setAttr('defaultArnoldRenderOptions.GIGlossySamples',5)
แล้วเรนเดอร์ ผลที่ได้ก็ออกมาดูดีขึ้นมาก อย่างไรก็ตาม ใช้เวลาเรนเดอร์นานขึ้นมาก
จะเห็นได้ว่าในอาร์โนลด์ การตั้งค่าความลึกของแสงให้มากขึ้นจะทำให้ภาพสมจริงขึ้นแต่ก็จะทำให้ภาพแตกๆ แต่ก็สามารถแก้ได้ด้วยการเพิ่มจำนวนแซมเปิล
พอทั้งเพิ่มความลึกของแสงและเพิ่มจำนวนแซมเปิลทำให้เวลาในการเรนเดอร์นานขึ้นเป็น ๑๐ เท่า ดังนั้นคงจะดีถ้าตอนเรนเดอร์ทดสอบใช้ความลึกและจำนวนแซมเปิลน้อยๆ พอจะเรนเดอร์เอาจริงค่อยใช้ค่าสูงๆ
สุดท้ายนี้ ลองปรับแต่งอะไรต่างๆดูอีกมากมาย เช่นลองปรับผิวอควาให้เป็นสีรุ้งทั้งตัว แล้วก็ปรับค่าอะไรต่างๆที่ผนังและพื้นอีกหลายอย่าง ก็ออกมาเป็นแบบนี้สวยไปอีกแบบ
สำหรับคราวนี้พอเท่านี้ก่อน ไว้คงจะได้เขียนถึงอะไรๆอีกหลายอย่าง อาร์โนลด์นั้นตอนเริ่มอาจจะดูยาก แต่พอเริ่มเข้าใจแล้วก็มีหลายอย่างที่ดูจะใช้ง่ายกว่าเมนทัลเรย์พอสมควร
อาร์โนลด์จะดีกว่าเมนทัลเรย์ได้หรือเปล่าตอนนี้ยังไม่ขอตัดสินจนกว่าจะลองใช้ไปอีกสักพัก
เว็บต่างๆที่ใช้อ่านเพื่อเรียนรู้การใช้อาร์โนลด์
http://area.autodesk.jp/movie/arnold/01.htmlhttp://maya.indyzone.jp/tag/arnoldhttp://cls-studio.co.jp/category/アーノルドレンダー検証http://arnold.jp.net