- RenderFormer เป็นไปป์ไลน์ neural rendering ที่เรนเดอร์จากฉากแบบเมชสามเหลี่ยมได้โดยตรง พร้อมทั้งสร้างเอฟเฟ็กต์ global illumination ได้ด้วย
- ไม่ต้องมีการฝึกหรือการปรับจูนละเอียดแยกสำหรับแต่ละฉาก
- นิยามการเรนเดอร์ใหม่เป็นการแปลงแบบ sequence-to-sequence โดยแปลงโทเค็นสามเหลี่ยมไปเป็นโทเค็นแพตช์พิกเซลโดยตรง
- ไปป์ไลน์ทั้งหมดออกแบบบนพื้นฐาน Transformer และใช้ข้อกำหนดล่วงหน้าเท่าที่จำเป็นเท่านั้น
- สร้างภาพโดย ไม่ใช้ rasterization หรือ ray tracing
บทนำ
- RenderFormer เป็นไปป์ไลน์เชิงประสาทที่เรนเดอร์ภาพได้โดยตรงจาก การแทนฉากด้วยสามเหลี่ยม
- ให้ผลลัพธ์เป็นภาพที่มีเอฟเฟ็กต์ global illumination ครบถ้วน
- โครงสร้างนี้ทำงานได้โดย ไม่ต้องฝึกหรือ fine-tune แยกในแต่ละฉาก
แนวทาง
- แตกต่างจากแนวทาง การเรนเดอร์เชิงฟิสิกส์ แบบเดิม โดยนิยามการเรนเดอร์ใหม่ให้เป็นปัญหาแบบ sequence-to-sequence transformation
- แปลงลำดับโทเค็นที่เก็บข้อมูลสามเหลี่ยมและคุณสมบัติการสะท้อน ไปเป็นลำดับโทเค็นเอาต์พุตที่แต่ละตัวแปลงเป็นแพตช์พิกเซลขนาดเล็ก
โครงสร้างไปป์ไลน์
- RenderFormer ประกอบด้วย โครงสร้าง 2 ขั้นตอน
- ขั้นตอนที่ไม่ขึ้นกับมุมมอง: โมเดลปรากฏการณ์การส่งผ่านแสงระหว่างสามเหลี่ยม
- ขั้นตอนที่ขึ้นกับมุมมอง: แปลงโทเค็นที่แทนกลุ่มรังสีให้เป็นค่าพิกเซล โดยมีลำดับสามเหลี่ยมจากขั้นตอนก่อนหน้าเป็นตัวนำทาง
- ทั้งสองขั้นตอนต่างอิงกับ สถาปัตยกรรม Transformer
- ฝึกด้วย ข้อกำหนดล่วงหน้าเพียงเล็กน้อยเท่านั้น
คุณลักษณะทางเทคนิค
- ระหว่างการเรนเดอร์ ไม่ใช้วิธีดั้งเดิมอย่าง rasterization หรือ ray tracing เลย
- ใช้ประโยชน์จาก ความสามารถในการแปลงลำดับ ของ Transformer อย่างเต็มที่
บทสรุป
- เป็นแนวทางที่สร้างภาพได้อย่าง ยืดหยุ่นและมีคุณภาพสูง เมื่อเทียบกับ เทคนิค neural rendering แบบเดิม โดยไม่ต้องมีการเตรียมล่วงหน้าหรือการปรับแต่งรายฉากเพิ่มเติม
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
สิ่งที่น่าประทับใจที่สุดคือเรื่องความเร็ว ในฉากเดียวกัน RenderFormer ใช้เวลาเพียง 0.076 วินาที ขณะที่ Blender Cycles ใช้ 3.97 วินาที (หรือ 12.05 วินาทีในค่าตั้งที่สูงกว่า) แต่ค่า SSIM อยู่ที่ 0.9526 ซึ่งแทบไม่ต่างกันเลย แนะนำให้ดูตาราง 2 และ 1 ในเปเปอร์ ความหมายในทางปฏิบัติคือ 3D ดีไซเนอร์จะสามารถดูพรีวิวเรนเดอร์แบบทันทีด้วยคุณภาพที่สูงกว่ามากผ่านโมเดล transformer แบบ on-device บนเว็บหรือแอปเนทีฟได้ อย่างไรก็ตาม ผลลัพธ์ข้างต้นวัดบน A100 GPU โดยไม่ได้ทำ PyTorch optimization และ GPU ของผู้ใช้ทั่วไปคงไม่เร็วระดับนี้ แต่ก็คาดว่ายังน่าจะเร็วขึ้นจากการเรนเดอร์แบบเดิมได้มาก หรือถ้าเป็นระบบบนเว็บ ก็อาจต่อ backend เข้ากับ A100 แล้วสตรีมภาพผลลัพธ์มายังเบราว์เซอร์ได้เช่นกัน แต่ข้อจำกัดก็ชัดเจน ยิ่งฉากซับซ้อน ความแม่นยำก็ยิ่งลดลง โดยเฉพาะเงาที่ซับซ้อน (รวมถึงพาร์ติเคิลหรือเส้นผม) ที่มีโอกาสเกิดความคลาดเคลื่อนสูง ดังนั้นงานเรนเดอร์ขั้นสุดท้ายก็ยังควรใช้วิธีดั้งเดิมเพื่อหลีกเลี่ยงอาร์ติแฟกต์ที่มักพบในภาพ/วิดีโอจาก AI ถึงอย่างนั้น ถ้าความเร็วเพิ่มขึ้นมากพอ ก็มีหวังว่าสตูดิโอแอนิเมชันขนาดใหญ่ที่ต้องเรนเดอร์พรีวิวระดับความยาวภาพยนตร์จะนำไปใช้เพื่อตรวจงานด้านดนตรีหรือเนื้อเรื่องได้
ไม่คิดว่านักวิจัยตั้งใจบิดเบือนข้อเท็จจริง แต่ถ้า Blender Cycles ทำงานบน GPU ระดับนั้น มันก็น่าจะเรนเดอร์ทุกฉากในเปเปอร์ได้ภายใน 4 วินาทีอยู่แล้ว ตัวฉากที่ใช้ในเปเปอร์ก็มีความซับซ้อนไม่มาก แถมตั้งค่า Blender ให้สุ่มตัวอย่างซ้ำ 4,000 ครั้ง ทั้งที่ในทางปฏิบัติไม่กี่ร้อยครั้งก็แทบได้คุณภาพใกล้สุดท้ายแล้ว ที่เหลือแทบไม่ช่วยอะไร ผลคือใช้ทรัพยากร GPU เกินความจำเป็น อีกอย่าง ดูเหมือนว่าจะนับเวลาขั้นตอนเตรียมเรนเดอร์เริ่มต้นของ Blender รวมเข้าไปด้วย แต่ไม่นับเวลาเริ่มต้นของ transformer ผมก็อยากรู้เหมือนกันว่าถ้าเรนเดอร์เฟรมที่สองในแต่ละระบบจะใช้เวลาเท่าไร เดาว่า Blender น่าจะเร็วกว่ามากอยู่ดี ไม่ว่าอย่างไร ผลลัพธ์ในเปเปอร์ก็น่าสนใจ แต่การตั้งค่า Blender และการเทียบเวลาอาจมีความคลาดเคลื่อนเล็กน้อย
สำหรับฉากที่โชว์กันอยู่ 76ms กลับดูช้าเสียด้วยซ้ำ แน่นอนว่าต่อไปมันคงเร็วขึ้นอีกมาก แต่จะบอกว่าดีกว่าวิธีเรนเดอร์แบบดั้งเดิมแล้วตอนนี้ก็คงยังเร็วเกินไป
การเปรียบเทียบเวลาในเปเปอร์ค่อนข้างไม่แม่นนัก สำหรับ ray tracing นั้น error จะลดลงตามรากที่สองของจำนวน sample ในเปเปอร์ใช้จำนวน sample สูงเกินจริงในการสร้างภาพอ้างอิง ขณะที่ offline renderer จริงมักใช้ sample น้อยกว่านี้ 10 ถึง 100 เท่า ภาพที่สร้างด้วย sample สูงแบบในเปเปอร์มีไว้เพื่อเทียบคุณภาพ แต่เอามาเทียบเวลากันไม่ใช่วิธีที่พบได้ทั่วไป เพราะผลลัพธ์ไม่ได้เคร่งครัดมากนัก การเปรียบเทียบกับอัลกอริทึมเรนเดอร์อื่นที่ให้ค่าประมาณใกล้เคียงกันน่าจะยุติธรรมกว่า ปัจจุบัน real-time path tracer ที่จับคู่กับ denoiser ก็สามารถเรนเดอร์ฉากที่ซับซ้อนกว่านี้มากได้ภายใน 16ms บน GPU สำหรับผู้บริโภคด้วย โดยเฉพาะโมเดล transformer นั้นใช้เวลาตามจำนวนสามเหลี่ยมและจำนวนพิกเซลแบบกำลังสองทั้งคู่ อาจมีงานวิจัยแมชชีนเลิร์นนิงสมัยใหม่ที่ช่วยปรับปรุงจุดนี้ แต่ก็คงยากจะสู้การสเกลแบบ O(log n triangles), O(n pixels) ของ path tracer แบบดั้งเดิมได้ (ในทางปฏิบัติจริงยังไวต่อจำนวนพิกเซลน้อยกว่านั้นเพราะมีความต่อเนื่องระหว่างพิกเซลข้างเคียง)
รู้สึกแปลกใจที่มีคนมองว่ามันเร็วมาก ผมเปิดอ่านเปเปอร์คร่าวๆ แล้วก็ยังไม่แน่ใจว่า Blender Cycles ใช้ CPU ของ A100 หรือรันด้วย CUDA kernel กันแน่ ถ้าเป็นเฟรมเดียว เวลาเริ่มต้นของ renderer อาจถูกนับรวมไปด้วย แต่ถ้าเป็นการเรนเดอร์เป็นลำดับเฟรม เวลาต่อเฟรมจะลดลงอย่างมาก และประเด็นเรื่องความซับซ้อนของจำนวนสามเหลี่ยม (การสเกลแบบ O(n^2)) ที่คนอื่นพูดถึงก็น่าจะมีผลชัดเจน
ในเปเปอร์ระบุว่า “runtime complexity ของ Attention layer จะเพิ่มขึ้นแบบกำลังสองตามจำนวนโทเคน ซึ่งในกรณีนี้คือจำนวนสามเหลี่ยม ดังนั้นจึงจำกัดจำนวนสามเหลี่ยมในฉากไว้สูงสุดที่ 4096”
ดีปเลิร์นนิงก็ถูกนำมาใช้กับการ denoise (ลบ noise) ของภาพเรนเดอร์ global illumination ได้สำเร็จมากเช่นกัน วิธีคือสร้างภาพ global illumination แบบหยาบด้วย ray tracing แบบดั้งเดิมก่อน แล้วให้โครงข่ายประสาทลบ noise ออกจากภาพผลลัพธ์ ลิงก์ที่เกี่ยวข้อง: Open Image Denoise
ผมมีเพื่อนที่ทำงานพัฒนา physical-based renderer จริงๆ ในอุตสาหกรรมภาพยนตร์ ฟังเรื่องงานและแนวทางทำงานในวงการนี้ทีไรก็น่าสนใจเสมอ เลยอยากรู้ว่าตอนนี้มีบริษัทไหนกำลังรับคนสายนี้อยู่บ้าง และบริษัท AI เองมีจ้างวิศวกรเรนเดอร์เพื่อสร้างสภาพแวดล้อมสำหรับเทรนโมเดลด้วยหรือเปล่า ถ้าใครกำลังมองหาวิศวกรสายวิจัย/อุตสาหกรรมด้านเรนเดอร์ที่มีประสบการณ์ ผมช่วยเชื่อมต่อให้เพื่อนได้ เพราะเขาไม่ได้ใช้โซเชียลมีเดีย
รู้สึกแปลกใจที่ไม่มีตัวอย่างไหนเลยที่แสดงวัตถุด้านหลังกล้อง ไม่แน่ใจว่านี่เป็นข้อจำกัดของการจัดตัวอย่างหรือเป็นข้อจำกัดของวิธีการเอง แต่สำหรับการคำนึงถึงการสะท้อนหรือแสงสว่าง สิ่งที่อยู่ด้านหลังกล้องเป็นองค์ประกอบสำคัญมาก
เป็นอีกครั้งที่ทำให้นึกถึง “the bitter lesson” ตอนนี้ดูเหมือนแนวโน้มนี้เริ่มมาถึงวงการกราฟิกเรนเดอร์แล้ว Nerf ใช้ prior จาก ray tracing เป็นฐาน ส่วน Gaussian splat ใช้ prior จากการ rasterization บางส่วน แต่วิธีนี้พยายามทิ้ง domain prior หรือความรู้เฉพาะทางเหล่านั้นทั้งหมด แล้วแก้ปัญหาด้วยข้อมูลและ attention ล้วนๆ รู้สึกว่านี่แหละคืออนาคตในท้ายที่สุด
น่าประทับใจที่ตอนนี้เกิดโครงสร้างแบบวงจรเชื่อมกันระหว่าง rendering และ compute โดยมี GPU เป็นศูนย์กลางอย่างสมบูรณ์แล้ว
ผลลัพธ์ดูใช้ได้ แต่ก็ให้ความรู้สึกเบลอเล็กน้อย อยากเห็นการเปรียบเทียบเวลาเรนเดอร์ระหว่าง neural network กับ renderer แบบคลาสสิกมากกว่านี้
ในงานแอนิเมชัน (โดยเฉพาะ Animated Crab และ Robot Animation) จะเห็นอาร์ติแฟกต์แบบ AI art ค่อนข้างชัด คือเวลาวัตถุหรือกล้องเคลื่อนที่จะมีอาการหมุนวนผิดธรรมชาติรอบๆ โมเดล
ในเปเปอร์มีพูดถึงการเปรียบเทียบเวลาไว้บางส่วน เมื่อเทียบกับ Blender Cycles (path tracing) วิธีแบบ neural จะเร็วกว่าอย่างมาก อย่างน้อยสำหรับฉากที่มีไม่เกิน 4K สามเหลี่ยม แต่พอฉากซับซ้อนกว่านั้นก็อาจไม่เหมาะนัก (เพราะ runtime ของ attention เพิ่มขึ้นเป็นกำลังสองตามจำนวนสามเหลี่ยม) ลิงก์เปเปอร์: PDF ของเปเปอร์ RenderFormer ส่วนตัวคิดว่าวิธีที่สมจริงอาจเป็นการใช้ neural เฉพาะกับ indirect lighting แล้วให้ rasterizer แบบดั้งเดิมสร้างภาพฐาน และค่อยเติม Global Illumination ด้วย neural เข้าไป
อาจเป็นเพราะผมยังไม่ค่อยเข้าใจ แต่ถ้าฉากเหล่านี้สุดท้ายก็ถูกเรนเดอร์ตามที่คาดหมายไว้อยู่แล้ว ผมก็สงสัยว่าวิธีนี้มีข้อดีอะไรเหนือกว่าวิธีตรงไปตรงมาที่ง่ายกว่านี้ (ถ้ามันไม่ได้เร็วกว่า ก็ทำไมต้องใช้)
จริงๆ แล้ววิธีนี้อาจให้เอฟเฟกต์ที่น่าสนใจกว่าที่เห็นภายนอกก็ได้ เช่น มองฉากหนึ่งฉากเป็นก้อน input weight ก้อนเดียว แล้วใส่ noise ลงไป หรือ interpolate (ผสม) ระหว่างฉากต่างๆ เพื่อให้ได้ผลลัพธ์ที่คาดไม่ถึง
ท้ายที่สุดแล้วผมคิดว่านี่ใกล้เคียงกับ “Cool Research” มากกว่า ประโยชน์ใช้สอยจริงยังต่ำ เพราะต้นทุนเพิ่มขึ้นแบบกำลังสองตามจำนวนสามเหลี่ยม ดังนั้นในเปเปอร์จึงจำกัดไว้ที่ 4096 ต่อฉาก
อย่างที่มีคนพูดในคอมเมนต์อื่น วิธีนี้ก็เร็วกว่าอยู่จริง เพราะ global illumination นั้นช้ามากเมื่อใช้วิธีตรง
ให้ความรู้สึกว่าเป็นงานวิจัยที่สดใหม่ดี น่าคาดหวังว่างานนำ transformer ไปใช้กับโดเมนที่ไม่ใช่ข้อความจะมีมากขึ้น เพราะมันไม่ได้เหมาะแค่กับภาษาธรรมชาติ แต่ยังใช้ได้กับข้อมูลต่อเนื่องหลายแบบและโดเมนที่มีความสัมพันธ์ระหว่างโทเคนเป็นลักษณะสำคัญด้วย อยากรู้ว่าผู้ใช้ Hacker News มองว่าโดเมนที่ไม่ใช่ข้อความแบบไหนน่าสนใจสำหรับ transformer อีกบ้าง
คิดว่าเป็นไอเดียที่ฉลาดและน่าสนใจมาก ฝึก transformer ให้แปลง scene description ที่อิงกับชุดสามเหลี่ยมไปเป็นอาร์เรย์พิกเซล 2D แล้วผลลัพธ์คือมันสามารถสร้างภาพที่แทบเหมือนกับผลจาก global illumination renderer แบบเดิมได้แทบจะทันที แม้เมื่อดูงานวิจัยตลอด 5 ปีที่ผ่านมา เรื่องที่ทำได้แบบนี้อาจไม่ควรน่าตกใจแล้ว แต่มันก็ยังน่าประทับใจมากอยู่ดี ทำให้รู้สึกว่าโครงสร้าง transformer นั้นอเนกประสงค์จริงๆ ความเร็วก็สูงมาก ภาพก็เกือบเหมือนเอาต์พุตจาก Blender โมเดลมีขนาดราว 1B พารามิเตอร์ และไม่แน่ใจว่าเป็น fp16 หรือ 32 แต่ไฟล์มีขนาดถึง 2GB อยากเห็นเดโมฉากที่สมจริงกว่านี้เพิ่ม แต่ก็ชอบที่ตอนนี้ผมสามารถดาวน์โหลดมาลองรันเองบน Mac ได้ทันที