« »

The Art of Rendering by fxguide.com

by nuch

**แปลจาก The Art of Rendering  (http://www.fxguide.com/featured/the-art-of-rendering) จากเวป fxguide.com เขียนโดย Mike Seymour และได้รับอนุญาตสำหรับการแปลและโพสบนบล็อคนี้เท่านั้น**
***ณ ตอนนี้ ขอแปลแค่ส่วนที่อธิบายเทคนิคในงาน rendering เท่านั้น
****ข้อความที่เป็นตัวเอียงในส่วนที่เป็นบทความเป็นคำอธิบายเสริมที่อธิบายตามความเข้าใจของเราเอง

โดยทั่วไป Rendering มักจะหมายถึงการบริหารจัดการทรัพยากรคอมพิวเตอร์เพื่อให้ได้มาซึ่งความสมจริงในระดับที่พอใจ ซึ่งจะต้องแลกกับเงินและเวลา

เมื่อพิจารณาถึงการใช้งานในโลกของ CG/VFX แล้ว rendering จัดว่าเป็นหัวข้อที่ร้อนแรงจริงๆ ขนาดที่ว่า CG supervisor Scott Metzger พูดติดตลกไว้ว่า คนเราคงไม่สามารถพูดถึงตัวเรนเดอร์ (renders) ได้โดยไม่ไปกวนใจคนอื่นๆ “ตัวเรนเดอร์มันก็เหมือนศาสนา (หัวเราะ) Rendering คือศาสนา! โดยเฉพาะอย่างยิ่งในยุคสมัยนี้ ซึ่งมันน่าตื่นเต้นมากๆ หลายสิ่งหลายอย่างเกิดขึ้นมากมาย รวมถึงตัวเรนเดอร์ก็มีหลากหลายด้วย สำหรับมัน มันคือส่วนที่น่าตื่นเต้นที่สุดในวงการนี้ ณ เวลานี้”

Dan Batali รองประธาน RenderMan products ที่ Pixar เคยให้ความเห็นกับ fxguide ที่งาน Siggraph ครั้งก่อนว่า “Rendering เป็นตัวที่ใช้งบประมาณทางการคำนวนมากที่สุดในการที่จะได้ pixels มาอยู่บนจอ” เขาชี้ให้เห็นว่า time ‘sims’ (จำลองในเชิงฟิสิกซ์ เช่น  จำลองการเคลื่อนไหวของผ้า เป็นต้น) เป็นเพียงแค่ 5% ของงบประมาณทางการคำนวนของภาพยนตร์ส่วนใหญ่ แต่ Rendering ยึดครอง render farm เราคงไม่สามารถอุทิศความอุตสาหะที่เราพยายามจำลองแสงที่สมบูรณ์แบบในการ render ได้มากเท่ากับที่เราจำลองฉากทำลายล้างในหนังซึ่งอาจจะเป็นเพียงแค่ shot เดียว

ตัวเรนเดอร์นั้นง่ายที่จะเขียนในเชิงทฤษฎี หรือสำหรับโปรเจคในมหาวิทยาลัย แต่ในการใช้งานจริงในระดับ production นั้นยากมากๆ Arnold โดย Solid Angle เขียนด้วย C++ กว่า 200,000 บรรทัด และจัดว่าเป็นการ implement ที่ตรงไปตรงมามากโดยปราศจาก hack หรือ tricks ความต้องการในระดับ production ในเรื่องของระยะเวลาเรนเดอร์และความซับซ้อนของ scene งานนั้น จัดได้ว่าเป็นปัญหาที่ยุ่งยาก และปัญหานี้มันไม่ใช่แค่เรื่องระยะเวลาการเรนเดอร์ภาพขั้นสุดท้าย  (final render) – Marcos Fajardo ผู้ทำ  Arnold เคยพูดไว้ใน Siggraph 2010 ว่า – CPU time สำหรับเรนเดอร์งานขั้นสุดท้าย อาจจะเสียค่าใช้จ่าย 10 เซนต์ต่อชั่วโมง แต่เวลาในส่วนของ artist นั้นเสียค่าใช้จ่ายเกือบถึง 40 ดอลลาร์ต่อชั่วโมง ดังนั้นการทำงานประสานกันเป็นเรื่องที่สำคัญมาก

นั่นคือหัวใจของ rendering : เลือกวิธีการที่ดีที่สุดที่จะได้ผลลัพธ์ที่ดูดีได้มากเท่าที่จะมากได้ ในระยะเวลาที่มี และให้ความสำคัญกับคุณลักษณะของภาพ เช่น แสงเงา, motion blur, sub-surface scattering หรือ light effects ต่างๆ – คุณลักษณะไหนที่จะทำให้งานออกมาดี และจะให้ความสำคัญกับคุณลักษณะไหนมากที่สุด

Rendering ก็คือศิลปะในการประสานคุณลักษณะต่างๆ


(คลิ๊กที่รูปเพื่อดูภาพใหญ่)
Modo render by Pascal Beekmans
Stats: Res: 1500*500, Indirect Illumination Monte Carlo, – 24.8B Vertices – 8.27B Poly.

Concepts

มีตัวเลือกและองค์ประกอบหลายอย่างที่มีอิทธิพลต่อการตัดสินใจของ studio ที่จะเลือกตัวเรนเดอร์ตัวใดตัวหนึ่ง ตั้งแต่เหตุผลด้านราคาไปจนถึงกระบวนการทำงาน แต่ในบทความนี้ เราจะมุ่งประเด็นไปเรื่องของความต้องการของการจัดแสง Global illumination (GI) ในภาค production ของวงการบันเทิง  เราเลือกที่จะโฟกัสไปที่ major studios ที่เป็นที่คาดหวังของ facilities เล็กๆ จำนวนมากที่ให้ความสนใจกับตัวเลือกที่เลือกโดยบริษัทใหญ่ๆ ที่มีพร้อมทั้งทางด้าน production และ  R&D   นี่ไม่ได้หมายความว่า เราไม่ได้ให้ความสำคัญกับ facilities เล็ก แต่ทั้งนี้เพื่อเป็นการกลั่นกรองตัวเรนเดอร์ต่างๆ ที่จะนำมาพิจารณา

Reflection and shading models

จุดมุ่งหมายของการเรนเดอร์แบบสมจริงคือ การคำนวนปริมาณแสงที่สะท้อนจากพื้นผิวที่เห็นใน scene ที่มาตกกระทบที่กล้องจำลอง (virtual camera) ผ่านการแสดงภาพเป็น image pixels  แสงนี้จะเป็นตัวกำหนดสีของ image pixel ซึ่งสิ่งที่จะใช้อธิบายรูปลักษณ์ของพื้นผิวนั้นคือ การสะท้อนแสง (reflection) การกระจายแสง (scattering) และ การแรเงา (shading)

  • Reflection/Scattering  คือลักษณะที่แสงกระทำกับพื้นผิว ณ จุดที่กำหนด
  • Shading คือ คุณลักษณะเชิงวัสดุที่เป็นไปตามพื้นผิว (surface)


Teapothedron (Utah teapot)

การสะท้อนแสงหรือการกระจายแสงเป็นความสัมพันธ์ระหว่างปริมาณแสงที่รับเข้ามาและออกไป ณ จุดที่กำหนด ในทางคณิตศาตร์จะอธิบายคุณลักษณะของการสะท้อนแสง ณ จุดจุดหนึ่ง ว่า BRDF – bidirectional reflectance distribution function

BRDF

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

การอธิบาย “การกระจายแสง” นั้นมักจะถูกให้ในนิยามของสมการ bidirectional scattering distribution function หรือที่รู้จักในชื่อของ the object’s BSDF at that point

Shading

Shading จะแสดงถึงรูปแบบต่างๆ ของการกระจายแสงที่เกิดขึ้นตามผิววัสดุ (นั่นคือ สมการการกระจายแสงแบบไหนใช้ ณ บริเวณไหน) ในโปรแกรมคอมพิวเตอร์มักจะเรียกคุณสมบัตินี้ว่า shader ตัวอย่างง่ายของ shading ก็คือ texture mapping ซึ่งจะใช้ภาพในการระบุ diffuse color ในแต่ละจุดบนพื้นผิว

เทคนิคในการสร้างความสมจริงในยุคใหม่มักจะหมายถึงการจำลองแสงที่ถูกต้องกว่า และวิธีการที่ตัวเรนเดอร์สร้างผลลัพธ์ทางแสงที่ดีที่สุด ซึ่ง ณ ปัจจุบันนี้คือ global illumination

Global illumination

ในช่วง 2-3 ปีที่ผ่านมา ตัวเรนเดอร์ต่างๆ มักจะพูดถึง global illumination (GI)

Jeremy Birn (lighting TD at Pixar และผู้เขียนหนังสือ Digital Lighting and Rendering, 2006) ได้ให้นิยาม GI สั้นๆ ว่า “rendering algorithm ใดๆ ที่จำลองการสะท้อนแสงซึ่งกันและกันระหว่างพื้นผิว 2 พื้นผิว เมื่อเรนเดอร์ด้วย global illumination คุณไม่จำเป็นต้องเพิ่ม bounce light เพื่อจำลองแสงแบบ indirect light ด้วยเพราะซอฟท์แวร์จะทำการคำนวนแสง indirect light ให้คุณโดยอ้างอิงจากแสง direct illumination ที่กระทบกับพิ้นผิวใน scene”

Color bleeding ของสีแดงที่เกิดขึ้นในส่วนที่เป็นเงาของตัวหุ่น

เราต้องการเก็บรายละเอียดแสงต่างๆ ที่เกิดขึ้นจากพื้นผิวอื่นๆ ทั้งหมด ซึ่งก็คือ BRDF และแสงสว่างจากทิศทางต่างๆ GI ทำให้การจัดแสงในงาน CG ดูสมจริงมากขึ้น และยังคำนวน radiosity  หรือ color bleeding ที่เกิดขึ้นกับพื้นผิวที่ไม่สะท้อนแสงที่จะ bounce แสง และสี ไปย้อม diffuse color ของวัตถุ

Solutions:

  • Radiosity
  • Photon mapping (and with final gathering)
  • Point clouds
  • Brick maps
  • Monte Carlo ray tracing

Conventional radiosity

Conventional radiosity คือการให้แสง GI ด้วยกลวิธีที่ว่า แสง indirect light จะถูกส่งผ่านระหว่างพื้นผิวโดยจะสะท้อนจาก diffuse ของสีของพื้นผิว และจะถูกแบ่งเป็นกลุ่ม vertices ของ surface meshes กลวิธีนี้เป็นรูปแบบแรกๆ ของ GI ที่สามารถทำได้จริง ความละเอียดของ geometry จะเกี่ยวพันกับความละเอียดของ  GI solution หากต้องการรายละเอียดในส่วนที่เป็นเงามากขึ้น ก็ต้องเพิ่มจำนวน polygon และถ้าวัตถุมีการเคลื่อนที่หรือมี animate ก็จำเป็นต้องคำนวนใหม่ทุกเฟรม ด้วยเหตุนี้มันจึงไม่เป็นที่นิยมในงาน VFX

สำหรับตัว ray tracer แบบง่าย (*ray trace คือเทคนิคการสร้างภาพด้วยการคำนวนเส้นทางของแสง/ลำแสงที่จะเกิดขึ้นในแต่ละ pixel) โดยทั่วไปแล้วทิศทางของลำแสงจะถูกกำหนดด้วยโครงตาข่ายที่ไม่ซับซ้อน (simple grid) แต่ก็ยังมีรูปแบบอื่น เช่น Monte Carlo ray tracing  หรือที่รู้จักในชื่อ  stochastic ray tracing   ซึ่งใน Monte Carlo ray tracing นั้น จุดกำเนิดของลำแสง ทิศทาง และหรือเวลาจะถูกสุ่มกำหนดตัวเลขขึ้นมา (random numbers)

ตัว ray tracer จะกินเวลาเรนเดอร์มากแค่ไหนก็ขึ้นอยู่กับจำนวนพื้นผิวที่มีลักษณะมันวาว (shiny) และจำนวนแสง และจำนวนวัตถุที่มากขึ้น ซึ่งสิ่งเหล่านี้ดูจะเป็น effects หลักๆ ที่ใช้กัน

สิ่งสำคัญของการเรนเดอร์ด้วย ray tracer ไม่ใช่ความซับซ้อนของตัวงาน หากแต่เป็นที่ความซับซ้อนของการทำ optimization และ implementation

key concepts อาจจะดูง่าย แต่ด้วยความต้องการของ production ที่จะใช้ ray tracer  ซึ่งผลาญงบประมาณในการคำนวนในโปรเจคที่ซับซ้อนนั้นมันไม่ใช่ความต้องการเล็กๆ เลย แม้กระทั่งปัจจุบันนี้ Full ray tracer ก็ยังไม่เคยใช้ในงาน animation เลย  มันอาจจะเป็นที่นิยมสำหรับงานภาพนิ่ง หรือใช้ในกรณีเล็กๆ น้อย แต่งาน ray tracing ที่เกิดขึ้นในเชิงพาณิชย์ส่วนใหญ่จะทำจากกลวิธีจำลองแบบอื่นๆ หรือผสมหลายๆ เทคนิคเข้าด้วยกัน

ซึ่งนั่นนำมาซึ่งความเปลี่ยนแปลงความต้องการที่จะสร้างภาพที่ถูกต้องสมจริง หรือ ray tracing ที่ประณีต แต่กลายเป็นการมุ่งเน้นที่จะสร้างภาพที่ดูดี ดูน่าเชื่อถือ น่าเป็นจริง แต่อาจจะไม่ถูกต้องเสียทีเดียว ในงานภาพยนตร์หรือ TV Shows ไม่ค่อยที่จะพิจารณาในเรื่องของความถูกต้องของแสงที่เกิดขึ้นจริงๆ ในเชิงฟิสิกส์สักเท่าไร หากแต่ให้ความสำคัญกับการสร้างภาพที่ดูสมจริงในจินตนาการมากกว่า

Photon mapping

photon mapping เป็นกลวิธีที่ขยายต่อจาก ray tracing ในปี 1989  Andrew Glassner เขียนเกี่ยวกับ ray tracing ใน An Introduction to ray tracing ไว้ว่า :

“ปัจจุบันนี้ ray tracing คือหนึ่งในกลวิธีการสร้างภาพ (image synthesis repertoire) ที่สำคัญและเป็นนิยมอย่างมาก มันเรียบง่าย ดูดี และ ง่ายต่อการ implement (แต่) ในโลกจริงๆ ก็มีบางอย่างที่ ray tracing ไม่สามารถจัดการได้ดี (หรือทำไม่ได้เลย!) ซึ่งข้อด้อยสำคัญที่สุดของมันอาจจะเป็นเรื่องของ diffuse inter-reflections ( เช่นการดูดกลืนสีของแสง (bleeding) ที่ได้จากตู้เก็บของสีแดงที่เกิดขึ้นบนพรมสีขาว ทำให้พรมนั้นดูเป็นสีชมพู)

photon map algorithm ถูกพัฒนาขึ้นในช่วงปี 1993-1994 และได้ตีพิมพ์ในปี 1995 มันเป็น algorithm อรรถประโยชน์ ที่สามารถใช้จำลองแสง global illumination รวมทั้ง caustics (ภาวะที่แสงเกิดทั้งการสะท้อนและหักเหเนื่องจากพื้นผิวโค้ง) และ  diffuse inter-reflection

จุดสำคัญของ photon mapping เมื่อเทียบกับ radiosity ray tracing ยุคก่อนๆ ที่จะเก็บค่าแสงไว้ที่ vertex แต่ละจุดนั้น คือ รูปแบบใหม่ของ GI ที่จะคัดแยกใน data type แตกต่างกัน – photon map  ความละเอียดของ photon map นั้นจะไม่ขึ้นอยู่กับ  geometry

ความเร็วและความถูกต้องของ  photon map จะขึ้นอยู่กับจำนวน “photon” ที่ใช้ ซึ่งจะสะท้อนไปทั่วฉาก และสะท้อนบนพื้นผิวที่ควรจะถูกทำให้สว่างขึ้นด้วยแสง indirect light และถุกเก็นในรูปแบบของ map – มันจะไม่เหมือน “paint gun” effect ที่หยดสีจะสะทอ้น  photon  นั่นหมายความว่า คุณสามารถที่จะได้ผลลัพธ์ที่ได้จากการใช้แค่ photo maps แต่ถ้าจำนวน photons ไม่เพียงพอผลลัพธ์จะดูไม่เนียน

 
ภาพซ้าย render ที่ 500 photons (Maya) ,  ภาพขวา render ที่ 50,000 photons

แนวทางแก้ปัญหานี้ก็คือใช้ photon maps ร่วมกับ final gathering ซึ่งจะส่งผลในการเกลี่ยเนียน photon map ทำให้ได้แสงที่ดูต่อเนื่องและเนียนมากขึ้น ในส่วนที่เรียกว่า “filtering” photon maps นั้น คือสิ่งที่ Birn อธิบายไว้ประมาณว่า “เป็น function ที่คล้าย global illumination เพียงแต่เพิ่มการสะท้อนของแสง indirect light”

photon map ที่ร่วมกับ final gathering สำหรับการคำนวน global illumination มีวิธีอยู่ 3 ขั้น :

  • ขั้นแรกคือ photon จะถูกกระจายตัวออกจากแหล่งกำเนิดแสง กระจายไปทั่ว scene และจะถูกเก็บเป็น photon map เมื่อมันกระทบกับวัตถุที่ไม่มีความมันวาว (non-specular)
  • จากนั้น ค่าของ photon ที่ถูกเก็บไว้อย่างไม่เป็นระเบียบจะถูกจัดเรียงในรูปต้นไม้ (tree)
  • สุดท้าย scene จะถูก render ด้วย final gathering (เป็นการกระจายแสงแบบ ray tracing แค่ชั้นเดียว) ค่าพลังงานแสง ณ จุดที่ final gather ray  ตกกระทบนั้น จะถูกคำนวนจาก ความหนาแน่นและกำลังของ photons ที่อยู่ใกล้ที่สุด irradiance interpolation (เข้าใจว่าคือการคำนวนประมาณการกระจายแสงนะ) จะถูกนำมาใช้เพื่อลดจำนวน (ลำแสง – ray) ของ final gathers

photon map จะถูกแยกออกจากการแสดงผลเชิง geometric representation ของ scene  นี่เป็นจุดสำคัญของ algorithm ซึ่งทำให้สามารถจำลอง global illumination ในฉากที่ซับซ้อนได้ เช่นฉากมีโพลิกอนแบบสามเหลี่ยมเป็นล้านๆ อัน , instanced geometry (เช่นการใช้งาน particle), หรือวัตถุที่มีกระบวนการที่ซับซ้อน

การใช้งาน global illumination กับ final gathering ร่วมกัน ทำให้สามารถสร้างผลของการส่องสว่างของแสงในเชิงฟิสิกส์ได้ถูกต้องที่สุด และมันก็เป็นที่นิยมใช้กันในงานเชิงสถาปัตย์ตกแต่งภายใน ซึ่งต้องการ effect ของการกระจายแสงจากแหล่งกำเนิดแสงทั้งภายในและภายนอก ในการใช้งาน final gathering กับ global illumination นั้น จำเป็นต้องสร้างโมเดลที่เหมาะสมในเชิงฟิสิกส์กับ lighting effects นั้น ยกตัวอย่างเช่น แสง (light) จะต้องมีการระบุค่าอย่างชัดเจนทั้งค่าสี (direct light) และค่าพลังงาน  (photon) โดยทั่วไปแล้ว Material ก็ถูกออกแบบมาให้เหมาะสมในเชิงฟิสิกส์ด้วยเช่นกัน  ยกตัวอย่างเช่น ในโปรแกรม Softimage จะมี material shader ทางสถาปัตย์ (mia-material) ซึ่งถูกออกแบบมาเพื่อสนับสนุนวัสดุทางกายภาพที่ใช้ในการเรนเดอร์งานทางสถาปัตย์และออกแบบผลิตภัณฑ์  มันใช้กับวัสดุของ hard surface ได้เกือบทุกแบบ เช่น โลหะ, ไม้ , และแก้ว มันถูกปรับแต่งมาโดยเฉพาะ สำหรับการสะท้อนแสง และหักเหแสงของวัสดุผิววาว และ high-quality glass

Radiance หรือ ‘color bleeding’ ใน RenderMan

เมื่อเวลาผ่านไป บริษัทต่างๆ ก็อยากจะได้ radiostiy ให้กับงานภาพ แต่ไม่อยากที่จะใช้ ray tracing แบบเต็มๆ (คือไม่อยากคำนวนทุก pixel ที่เกิดขึ้น) จนเมื่อโปรแกรม Renderman ของ Pixar ออกเวอร์ชัน 11 Ray tracing ถูกแปรสภาพให้กลายเป็นส่วนหนี่งของ Shading language ซึ่งจะช่วยให้การเรนเดอร์มีการสะท้อนแสงไปมาระหว่างวัตถุ (interreflections), การหักเหแสง และ ambient occlusion (ตามความเข้าใจของเรา ambient occlusion คือ วิธีการจำลองการสะท้อนแสงของแสงที่กระจายอยู่รอบๆ วัตถุ โดยมีหลักการว่า ให้แสงเกิดขึ้นทุกรอบด้านของวัตถุ ผิวของวัตถุแต่ละส่วนจะมีการรับพลังงานแสงที่ไม่เท่ากัน เนื่องจากส่วนโค้งส่วนเว้ามีผลต่อจำนวนพลังงานแสงที่ตกกระทบและสะท้อนกลับ) ใน Renderman เวอร์ชั่นปัจจุบัน เวอร์ชัน 16 มี feature ใหม่ๆ ที่ช่วยเพิ่มประสิทธิภาพของการทำ radiosity แบบ ray traced เช่น radiosity cache, shading ที่เป็นไปตามหลักฟิสิกส์ (physically plausible shading) และ pure brute force ray tracing solution  ในเวอร์ชัน 16 นี้มี Raytrace Hider ซึ่งยอมให้ตัว render มองข้าม REYES algorithm ไปได้ Raytrace Hider เป็น option ใหม่ที่ทำให้สามารถเรนเดอร์ภาพโดยใช้ ray tracing อย่างเดียวล้วนๆ (pure ray tracing) โดยจะมองข้ามการบวนการสร้างภาพแบบปกติที่ PRMan ใช้ ด้วยเหตุนี้ ลำแสง (ray) จึงสามารถที่จะถูกยิงออกมาจากกล้องที่มีการสุ่มตัวอย่างเวลา (jittered time samples) และตำแหน่งของเลนส์เพื่อที่จะสร้าง motion blur ที่ถูกต้องและมีลักษณะชัดลึกชัดตื้น (depth of filed effects) ด้วยเวอร์ชั่น 16 นี้ GI แบบ ray traced จึงได้กลายเป็นเครื่องมือในการผลิตที่สามารถเป็นไปได้จริง ซึ่งก่อนหน้าเวอร์ชั่น 16 RenderMan ก็สามารถสร้าง GI ได้เยี่ยมยอดโดยใช้กระบวนการ multi-pass solutions


Copyright Pixar/Disney

ก่อนหน้าที่ค่าใช้จ่ายในการทำ ray traced radiosity จะอยู่ในระดับที่ดำเนินงานได้จริงใน production ขนาดใหญ่ Pixar’s Renderman จัดการปัญหา GI ด้วยวิธีการ 2 แบบ  แบบแรกคือ ใช้ ray tracing เพื่อเพิ่มค่าการกระจายแสงแบบ indirect radiance หลังจากที่ direct illumination ได้ถูกคำนวนเสร็จแล้ว และวิธีการแบบที่สองก็คือ ไม่ใช้ ray tracing เลย  เทคนิคเหล่านี้ถูกใช้ครั้งแรกในการสร้าง Pirates of Caribbean 2: Dead Man’s Chest ปี 2006  ซึ่งสำหรับงาน production scenes ที่มี shader และ geometry ที่ซับซ้อนนั้น เทคนิคเหล่านี้ช่วยให้ทำงานได้ค่อนข้างเร็ว มีประสิทธิภาพ (memory efficient and artifact free) แต่ด้วยเพราะคุณลักษณะดั้งเดิมของมันเป็น multipass  มันจึงต้องการการจัดเก็บที่เยี่ยมยอด (significant disk I/O) การบริหารจัดการทรัพยากรที่ดี (careful assent management) แต่มันก็ไม่เหมาะสำหรับการแก้ไขแสงแบบ interactive re-lighting

Pixar’s RenderMan มีเทคนิคในรูปแบบ multipass หรือทางเลือกในการทำ color bleeding อยู่ 2 แบบ คือ brick maps (เทคนิคนี้จะคล้ายๆ photon mapping) และ point clouds  เราได้คุยกับ Per H Christensen เกี่ยวกับเทคนิค multi-pass เหล่านี้

กดที่นี่เพื่อฟัง Mike Seymour คุยกับ Per Christensen ซึ่งจะอธิบายความแตกต่างระหว่าง brick maps กับ point clouds

Per Christensen เป็น senior software developer in Pixar’s Renderman Group ที่ Pixar, Seattle งานวิจัยของเขาส่วนใหญ่จะสนใจเรื่อง การทำ ray tracing และ global illumination ให้มีประสิทธิภาพสำหรับงานที่มีความซับซ้อนมากๆ ก่อนที่จะมาทำงานที่ Pixar เขาเคยทำงานให้กับ  Mental Images ที Berlin และ Square USA ที่ Honolulu เขาจบปริญญาโทวิศวกรรไฟฟ้าจาก Technical University of Denmark ปริญญาเอก computer graphics จาก University of Washington

ทางเลือกที่ 1 Brick Maps: Ray traced solution/brick maps สำหรับแก้ปัญหา indirect illumination หรือ radiosity

ขั้นตอนมีดังนี้ :

  • เรนเดอร์ direct illumination โดยระหว่างที่เรนเดอร์ software จะมีการบันทึกเป็น point cloud (ซึ่งแต่ละจุด (point) ใน cloud จะมีค่า (สี) ของ direct illumination color เก็บอยู่) เรียกขั้นตอนนี้ว่า “baking the direct illumination”
  • จากนั้น software จะแปลง point cloud เหล่านี้ไปเป็น 3D brick map  ซึ่ง 3D map จะคล้ายๆ กับ texture map ที่ไม่ยึดติดกับกล้องตัวใด
  • ขั้นตอนสุดท้าย คือเรนเดอร์ภาพขั้นสุดท้าย (final image) โดยทีี่ ณ shading point แต่ละจุดที่ต้องการจะทราบค่าการกระจายแสงหรือ indirect illumination นั้น software จะทำการยิงลำแสง (ray) กลับไปที่ 3D brick maps และหาค่าสี ณ จุดนั้น วิธีนี้มันใช้ทรัพยากรสูงแต่ทำให้ได้ผลอย่างรวดเร็ว แต่ใน RenderMan มันเป็นเพียงการหาค่าที่อยู่ใน brick map และลดจำนวนลำแสงเท่านั้น REYES จะแบ่งพื้นผิวเป็น micropolygons ซึ่ง RenderMan สามารถทำตรงนี้ได้ดี

ทางเลือกที่ 2 Point Clouds: แก้ปัญหา indirect illumination หรือ radiosity ด้วย point clouds (ไม่มี ray tracing)

ขั้นตอนมีดังนี้ :

  • เรนเดอร์ direct illumination เช่นกัน โดยจะมีการบันทึกเป็น point cloud (แต่ละจุดจะเก็บค่าสีของ direct illumination) แต่จะไม่มีการทำ brick map
  • เรนเดอร์ภาพขั้นสุดท้าย (final image) โดยที่ ณ จุดแต่ละจุดที่จะมีการยิงลำแสงกลับไปที่ brick map นั้น จะกลายไปมองหาค่าใน  octree แทน (octree คือรูปแบบการเก็บข้อมูลแบบต้นไม้ โดยที่โหนดภายในแต่ละโหนดจะแตกออกเป็น 8 กิ่ง – มีตัวลูก 8 ตัว) ดังนั้นจุดที่อยู่ใกล้กันจะถูกนำมาคำนวนอย่างละเอียด แต่จุดที่อยู่ไกลออกไปจะถูกมองเป็นก้อนและใช้ผลรวมมาคำนวน ซึ่งจะเหมือนกับว่า ณ​ จุดที่เราต้องการใส่แสงเงา (shading point) เราจะมองเห็นเป็นภาพมุมกว้าง (fisheye view) แต่ ณ จุดจุดนั้นเลย เราจะเห็นเป็นเหมือนเม็ดสีในระดับ pixel ซึ่งการใช้ octree จะทำให้ทุกอย่างทำงานเร็วขึ้น RenderMan จึงไม่ได้ทำการคำนวนทุกๆ จุดใน cloud และไม่มีการใช้ ray tracing เลยในวิธีนี้

ในการที่จะจัดการกับ point clouds ขนาดใหญ่มากๆ นี้ จะต้องมี  cache system ที่จะอ่านจุด (point) ได้ทุกจุดที่ต้องการ ซึ่งในวิธีของ ray tracing จะคล้ายๆ กันอยู่ตรงที่ software จะทำการคำนวนและมีการกำจัด geometry ที่ไม่ใช้งาน เพื่อลดการใช้ memory

ในอดีต TD (Technical Director) จะเลือกใช้วิธีการใดวิธีการหนึ่งใน 2 ทางเลือกนี้ในการใช้งานในภาพยนตร์ ตัวอย่างเช่น Wall-E ใช้ point clouds สำหรับทำ ambient occlusion เพราะในฉากมีขยะหนาแน่นปริมาณมาก (ในช่วงต้นของภาพยนตร์) ซึ่งถ้าใช้ ray tracing มันจะต้องคำนวนทุก geometry เพื่อที่จะสร้างลำแสงที่จะไปกระทบ ฉะนั้น Pixar team เลยเลือกที่จะใช้ point cloud แทน

จากที่กล่าวมาข้างต้นส่วนใหญ่จะพูดถึงการเดินทางของแสง diffuse (diffuse transport) แต่ถ้าจะให้เข้าถึง GI ในมุมมองที่กว้างขึ้น ควรจะพูดว่า มีเพียง photon mapping และ Monte Carlo ray tracing เท่านั้น ที่สามารถแก้ปัญหาของเส้นทางแสง specular path หรือ เอฟเฟคของ diffuse ที่มีต่อ specular  เช่น แสง caustics (Caustic คือสภาวะที่เกิดการสะท้อนแสงและหักเหแสงบนผิวโค้ง โดยเกิดจากลำแสงที่ตกกระทบในมุม tangent (มุม ณ เส้นสัมผัสโค้ง) กับพื้นผิว) Caustics เป็นปัญหาที่ยุ่งยากซับซ้อน และเป็นที่ต้องการอยู่มาก ซึ่งในงาน production หลายงาน มักจะไม่ค่อยแก้ปัญหานี้อย่างตรงไปตรงมา บ่อยครั้งที่เลือกที่จะแก้ปัญหาในลักษณะเป็นกรณีพิเศษไป

RenderMan team เคยแนะนำให้ใช้ multipass methods เช่น baking the direct illumination หรือ photon mapping แต่ทว่า multi-resolution radiosity cache เพิ่งเริ่มมีใน PRMan เวอร์ชัน 16 ฉะนั้นวิธีนี้จึงเพิ่งเริ่มเป็นผล และทำให้การใช้เทคนิคใหม่ๆ นั้นง่ายขึ้นมาก

No light (virtualy)
No light (virtually)

light from the balls only
light from the balls only

Balls with no bounce light - but note reflections
Balls with no bounce light – but note reflections

Final shot
Final shot

Christophe Hery นักวิทยาศาสตร์ระดับอาวุโสของ Pixar บอกว่า “เห็นได้ชัดว่า ตั้งแต่ก่อนล่ะ ผมเป็นสนับสนุนวิธีการ multipass approaches อย่างมาก โดยเฉพาะเทคนิคที่ใช้ point-based แต่จากงานล่าสุดของผม เรื่องของ Physically Based and Energy Conservation (หัวข้อนี้เริ่มต้นที่ ILM โดยทำร่วมกับอดีตเพื่อนร่วมงานของผม Simon Premoze – ซึ่งผมได้นำมาทำอีกครั้งและพัฒนาต่อที่ Pixar) ผมได้ค้นพบว่า Multi Importance Sampling เป็นวิธีที่เป็นไปได้ในทางปฎิบัติสำหรับการหาค่าส่องสว่าง (illumination) ที่สอดคล้องกัน ยกตัวอย่างเช่นว่า เพราะเราได้ทำการ sample BRDFs ซึ่งเราจะสามารถสลับค่า specular ของแสงที่กระจายจากรูปร่างที่กำหนดและความเข้มของแสง (intensity) กับ รูปทรงพื้นฐานที่มีขนาดเท่ากันและสีเหมือนกัน โดยที่ยังให้ผลของการสะท้อนแสงที่เหมือนกัน (ซึ่งเป็นงานที่สาหัสอยู่กับการทำงานร่วมกับ HDR textures) ที่น่าสนใจคือ กลวิธีที่ทำให้เกิด specular นี้ (ray-tracing for MIS) ส่งผลให้เกิดเงา (shadowing) ในส่วนที่เป็น diffuse และยิ่งถ้ามี radiosity cache (ใน PRMan v16) แล้ว คุณอาจจะพบว่าตัวเองอยู่ในสถานการณ์ที่ว่า เทคนิคอย่าง PBGI (Point Based Global Illumination) หรือ spherical harmonics เป็นอะไรที่ล้าสมัยไปเสียแล้ว (ถ้าจะให้เห็นชัดเจน คุณควรต้องทำ pure diffuse illumination หรืออย่างนี้สุด ก็ต้องมีสนามแสงความถี่ต่ำ (low frequency light field))”

Christophe Hery เริ่มงานที่ Pixar ในปี 2010 หลังจากที่เคยทำงานให้ ILM มา 17 ปี เขาได้รับรางวัล Technical Achievement Award สำหรับงานพัฒนาด้าน point based rendering for indirect illumination and ambient occlusion  เขาเป็นที่จดจำในวงการในฐานะที่เป็นคนหนึ่งในกลุ่มผู้นำนวัตกรรมและงานวิจัย (leading technical innovators and researchers) ในสาขา lighting and rendering และด้วยเหตุนี้ fxguide จึงได้ถามความเห็นส่วนตัวของเขาว่า นั่นหมายความว่า เขาสนับสนุนวิธี full ray traced อย่างเต็มที่ใช่ไหม

“ใช่ครับ ผมเชื่อว่า ทั้งวงการกำลังขับเคลื่อนไปในทิศทางนั้น Normalized BRDFs and area lights ทำงานประสานกัน (กับ MIS (-Multi Importance Sampling)) จะสร้างภาพที่ดูสมจริงที่ใช้การปรับแต่ง (tweaking) น้อยที่สุด ซี่งจะเป็นการเพิ่มประสิทธิภาพให้ศิลปิน (artists) จดจ่ออยู่กับการสร้างความงามให้กับภาพแต่ละ shots”

เมื่อไม่นานมานี้ ที่ Siggraph และที่อื่นๆ มีการพูดถึงความก้าวหน้าในงาน lighting เช่นการใช้  spheric harmonics แต่เทคนิคชั้นสูงนี้กลับถูกลดทอนความสำคัญลงเมื่อเริ่มมีการใช้วิธี complete ray tracing solution ซึ่ง Hery ได้อธิบายเสริมว่า:

“SHs (Spherical Harmonics) ซึ่งเป็นกลวิธีการสร้างความสว่างแบบสำเร็จรูปนั้นสามารถทำได้ “แค่” ฟื้นสร้างความสว่างที่ความถี่ต่ำ (low frequency luminaires) หรือในระดับ materials  เช่นนั้นเองมันก็เลยไม่ใช่วิธีการที่สมบูรณ์แบบและมันต้องการตัวอื่นๆ มาเสริม ยิ่งกว่านั้น มันยังมาพร้อมกับปัญหาสำคัญคือการที่ต้องคำนวณล่วงหน้าก่อน (precomputation) และการจัดเก็บ (storage) ถ้าหากมีการใช้ MIS เพื่อสร้างแสง specular ก็คงอาจจะแชร์ข้อมูลแสง light sample (และ traced visibility) และก็อาจจะได้แสง diffuse มาง่ายๆ”

และเมื่อกลวิธีหลักสำหรับสร้าง GI คือ ray traced นั้น setup ต่างๆ ก็ง่ายขึ้น: ไม่มีข้อมูลพิเศษใดๆ ให้จัดการเลย
Hery พูดอีกว่า:

“คุณสามารถที่จะทำอะไรหลายๆ อย่างให้เพิ่มขึ้นได้ (ในลักษณะที่ค่อยทวีไปอย่างเป็นระเบียบ) และมีการตอบสนองที่รวดเร็ว ด้วย PRMan v16 ผมไม่คิดว่าเราอยู่ในช่วงเวลาที่เห็นเหตุเห็นผลกับการ trace camera rays (ซึ่งควรจะใช้ Reyes tessellation มากกว่า) แต่อย่างอื่นน่ะเป็นไปได้ แต่ในอีกทางหนึ่ง Lumiere PRMan’s relighter ก็กำลังทำงานได้ด้วยดีกับ pure ray-trace hider mode”

Lumiere เป็นส่วนหนึ่งของ RenderMan RPS (Renderman Pro Server) ซึ่งจะมี API สำหรับนักพัฒนา (developer) Lumiere คือ REYES re-renderer แต่ก็มี RAYs  re-renderer/relighter (หมายเหตุ: เข้าใจว่า re-render หมายถึงการนำภาพที่มีอยู่แล้วมาเรนเดอร์ซ้ำ เช่นกรณีที่เราเรนเดอร์แสงตรง (direct illumination) แล้ว มีการเรนเดอร์อีกครั้งโดยอ้างอิงจากภาพเรนเดอร์ก่อนเพื่อจะหาแสง indirect illumination และ color bleeding ก่อนจะมาประมวลผลเป็น final image) มีหลาย studios ที่เขียน interface สำหรับเชื่อมต่อกับ Lumiere เอง เช่นเชื่อมต่อจาก Nuke, Maya หรือ stand-alone application ของสตูดิโอนั้นเอง ที่จริงแล้ว Lumiere เป็นชื่อเรียกการทำ re-rendering 2 รูปแบบที่ต่างกันที่ใช้ใน Pixar – ซึ่งก็คือ relighting Katana-style tool กับ interactive tool – ซึ่งชื่อนี้ถูกใช้ในบรรดาเครื่องมือภายใน (internal tools) ของ Pixar

Monte Carlo ray tracer

Arnold คือตัวอย่างหนึ่งของ Monte Carlo ray tracer มันเป็น stochastic ray tracer แบบไม่โน้มเอียงและมีทิศทางเดียว (unbiased, uni-directional) ซึ่งต่างจาก RenderMan ที่ใช้ ray tracing สำหรับแสงตรง (direct ) และแสง indirect  ซึ่งมันเองก็ต่างจาก ray tracer ทั้งหลายที่เกิดขึ้นก่อนหน้านี้ ด้วยมันไม่ได้ทำงานช้าและยากที่จะใช้ในงาน animation กับวัตถุที่เคลื่อนที่ Arnold เป็นตัวเรนเดอร์ที่เหมาะสำหรับ production มากๆ ซึ่งถูกออกแบบมาโดยเฉพาะสำหรับงาน VFX และ animation

Arnold สนับสนุนการทำ GI อย่างเต็มที่ และยังให้ความสมจริงในระดับสูง และขณะเดียวกันก็มีความยืดหยุ่นพอสำหรับการปรับแต่งในงาน productions

Arnold ไม่มีการใช้ rasterization, irradiance cache หรือ photon map สำหรับแหล่งกำเนิดแสง อ้างอิงคำพูดของ Eric Haines (จาก Ray Tracing News) ว่า: “เอฟเฟค Motion blur และ depth of field ทำให้ประสิทธิภาพของวิธี rasterization ด้อยลง ด้วยเพราะต้องทำ sampling เป็นจำนวนมาก ซึ่งคุณลักษณะ (เอฟเฟค) เหล่านี้มันเป็นลักษณะธรรมชาติของ stochastic ray tracing ด้วยเพราะมันไม่ได้เป็นระบบประสาน (hybrid system) ที่ใช้วิธี rasterization รูปแบบใดรูปแบบหนึ่ง จึงทำให้มันมีข้อได้เปรียบในหลายๆ ด้าน อย่างแรกเลยคือ มีการเก็บ ต้นแบบ (model) เพียงแค่เวอร์ชั่นเดียว, ไม่จำเป็นต้องมีรูปแบบหนึ่งสำหรับ rasterizer และอีกรูปแบบสำหรับ ray tracer ซึ่งการที่จะต้องมาคอยลบ memory footprint สำหรับงานเรนเดอร์ฉากใหญ่ๆ นี่เป็นอะไรที่สาหัสสากรรจ์อยู่ ดังนั้นแล้วเทคนนิคนี้จึงเป็นอะไรที่ช่วยได้เยอะ อีกทั้ง Arnold ยังใช้การบีบอัดข้อมูลแบบ compression and quantization of data (lower precision) เพื่อที่ลดการใช้งาน memory  การที่ไม่ใช้วิธีการเรนเดอร์ที่ต่างกัน 2 วิธีนั้นยังช่วยเลี่ยงเรื่องชวนปวดหัวทั้งหลายเช่น การที่จะต้องดูแลตัวเรนเดอร์ที่ต่างกันทั้ง 2 ตัว, การที่จะต้องมาแก้ปัญหาการประสานงานที่ผิดพลาด (mis-sync) ของทั้งสองตัว (เช่นว่า ตัวหนึ่งอาจจะมองเห็นพื้นผิว ณ ตำแหน่งหนึ่ง ขณะที่ตัวมองเห็นในตำแหน่งที่ต่างกัน), ต้องเผชิญกับเอฟเฟคมากมายที่จะต้องทำให้สอดคล้องกันทั้ง 2 ตัว เป็นต้น”

การที่ไม่ใช้ irradiance caches เช่น กลวิธีผสมรูปแบบต่างๆ (hybrid approach) ที่กล่าวในข้างต้น นั้นหมายความว่า Arnold จะใช้เวลาสำหรับทำ precomputations น้อยมาก นั่นหมายความว่า การเรนเดอร์สามารถเกิดขึ้นได้ทันที แทนที่จะต้องมารอคำนวนขั้นเตรียมการก่อน (precomputation) ที่จะทำการเรนเดอร์ที่สมบูรณ์ เมื่อร่วมกับ progressive rendering (ลักษณะที่ภาพเกิดขึ้นแบบคร่าวๆ ก่อนที่จะเก็บรายละเอียดไปเรื่อยๆ ) มันจึงเป็นข้อดีสำหรับการทำงาน  production ซึ่งทำให้ artist และ technical director สามารถแก้ไขปรับแต่งได้รวดเร็วขึ้น

Image Based Lighting (IBL)

สิ่งหนึ่งที่สำคัญในงาน GI คือ การให้แสงโดยอ้างอิงจากภาพ ​(image based lighting) IBL มักหมายรวมถึงการเก็บบันทึกแสงจากทุกๆ ทิศทางของโลกจริงลงในลักษณะรูปภาพ (image) โดยทั่วไปมักจะใช่วิธีใดวิธีหนึ่งในสามวิธี:

  • ถ่ายภาพลูกบอลโครเมี่ยม (Chrome ball)
  • ถ่ายภาพนิ่งหลายๆ ภาพด้วยเลนส์มุมกว่า (เลนส์ wide) หรือเลนส์ตาปลา (fisheye) 180 องศาแล้วนำมาเชื่อมภาพต่อกัน
  • ใช้กล้องถ่ายรูปชนิดพิเศษ เช่น Spheron

ภาพ HDR (High Dynamic Range image บางทีก็เรียกว่า HDRi หมายถึงภาพที่มีช่วง range ของสีที่มากกว่าปภาพปกติ ทำให้เก็บค่าความเข้มของแสงได้ จึงทำให้สามารถใช้ภาพลักษณะนี้ที่ถ่ายสภาวะแวดล้อมที่จะใช้งานนั้นโดยนำมาอ้างอิงเป็นแหล่งกำเนิดแสงได้เลย โดยแทบจะไม่ต้องพึ่งการจัดแสงใดๆ ) เหล่านี้จะนำมาฉาย (project) บนโดมหรือทรงกลม ในลักษณะคล้ายกับ environment mapping และภาพที่โปรเจคนี้จะถูกนำมาใช้จำลองแสงสำหรับวัตถุใน scene วิธีนี้จะให้แสงของโลกจริงที่มีความละเอียดสูงสำหรับงานจัดแสง (lighting) ใน scene  ซอฟท์แวร์สำหรับทำเรนเดอร์ยุคใหม่เกือบทั้งหมดสามารถที่จะใช้วิธีการจัดแสงโดยอ้างอิงจากภาพ (image-based lighting) ได้โดยอาจจะมีชื่อเรียกและวิธีการที่ใช้ที่แตกต่างกันออกไป
ข้างล่างนี้คือตัวอย่างงานจาก fxphd Renderman in Production course จากเวป fxphd.com โดย Christos Obretenov จาก Lollipop shaders. ซึ่งใน scene จะไม่มีแสง (light) เลย – การให้แสงของทั้งสามภาพนี้เป็นวิธี raytrace ของแสง diffuse, แสงสะท้อน (bounce), แสง specular โดยมีแหล่งกำเนิดแสงเป็นภาพ HDR ที่ปะติดบนโดม (HDR dome maps) เรนเดอร์ด้วย RenderMan โดยการ rendering/shading ทั้งหมดทำโดย Christos Obretenov การทำ HDR maps ทำโดย Arkell Rassiah และโมเดลโดย Jason Gagnon

Dreamworks (updated)

One Response to “The Art of Rendering by fxguide.com”

  1. Zylentfx Says:

    ขอบคุณมากครับ

    แปลได้ดีทีเดียว อยากอ่านบทความเกี่ยวกับพวกแอนิเมชั่นครับผม

Leave a Reply

:D :-) :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: