การแปลงรังสีเป็นวัตถุอวกาศสำหรับภาพเคลื่อนไหวเบลอ


12

My raytracer รองรับวัตถุหลากหลายประเภท ฉันใช้เทคนิคมาตรฐานในการแปลงรังสีให้เป็นพื้นที่วัตถุ มันใช้งานได้ดีมากจนกระทั่งฉันเพิ่มการเคลื่อนไหวเบลอ

ฉันทำแบบจำลองการเคลื่อนไหวเบลอเป็นลำดับของการแปลง (เพื่อทำให้การสนทนาง่ายขึ้นสมมติว่ามีสองอย่าง) แทนที่จะเป็นแบบเดียว วิธีการของฉันคือใช้การแปลงผกผันของรังสีที่ทั้งเฟรมหลักและวางตำแหน่ง / ทิศทาง

ดูเหมือนว่ามันจะทำงานได้ดีสำหรับการแปล แต่มันก็แยกย่อยสำหรับการหมุนเวียน เช่นนี่คือรูปสามเหลี่ยมสองรูปที่อยู่ระหว่างการหมุน 30 และ 90 องศา:

rotation1
(4 ตัวอย่าง, การสร้างใหม่ MN, ตัวอย่างสีแดงมาจากใกล้กับสอง keyframes)

ที่มุมฉันคาดว่าตัวอย่าง lerped จะอยู่บนเส้นตรงระหว่างจุดยอดทั้งสอง พวกเขากลับนูนออกมาด้านนอก นี่เป็นสิ่งที่ผิด ในฉากที่น่าสนใจยิ่งขึ้นด้วยการแปลงที่น่าสนใจมากขึ้นมันทำให้เกิดโหมดความล้มเหลวที่หลากหลาย เช่นนี่คือใบพัดหมุน 45 รอบ:

การหมุน 2
(100 ตัวอย่างภาพปกติ)

ปัญหาบางอย่างเกิดจากการแตกหักของ BVH (ซึ่งถือว่าส่วนใหญ่ของวัตถุอยู่ที่คีย์เฟรม) แต่ถึงแม้แรงเดรัจฉานบังคับจะไม่ถูกต้องก็ตาม

ฉันสามารถแก้ไขทั้งหมดนี้ได้โดยทำการแปลงไปข้างหน้าเท่านั้น (เปลี่ยนวัตถุไม่ใช่รังสี) แต่ใช้ได้กับวัตถุที่เป็นไปได้เท่านั้น (รูปสามเหลี่ยมเท่านั้นจริง ๆ )


ฉันจะทำให้ raytracer ของฉันสร้างการประมาณเชิงเส้นเพื่อการแปลง (โดยเฉพาะการหมุน) โดยการแปลงรังสีไม่ใช่วัตถุได้อย่างไร

คำตอบ:


7

การเยื้องตำแหน่ง / ทิศทางของรังสีระหว่าง keyframes ควรเท่ากับการ lerping เมทริกซ์ผกผันระหว่าง keyframes และการแปลงโดยเมทริกซ์ lerped ปัญหาคือถ้าคีย์เฟรมมีการหมุนที่ต่างกันเมทริกซ์ lerped นั้นโดยทั่วไปจะเป็นบางสิ่งที่ "แปลก" ด้วยการตัดขนาดที่ไม่สม่ำเสมอ ฯลฯ

ฉันจะไม่แปลกใจถ้ารูทีนและการแรเงาบางส่วนของคุณไม่ทำงานอย่างถูกต้องในระบบพิกัดที่บิดเบี้ยวเว้นแต่ว่าคุณได้ทำการทดสอบเป็นพิเศษและเสริมความแข็งแกร่งให้กับกรณีเหล่านี้ (ตัวอย่างเช่นการใช้ผลิตภัณฑ์ดอทของเวกเตอร์สองหน่วยไม่ได้ให้คำตอบเหมือนกันในระบบพิกัดแบบตัดเฉือนเหมือนใน orthonormal

นี่เป็นเพียงการคาดเดา แต่อาจทำงานได้ดีขึ้นหากคุณเลือกวิธีการแก้ไขที่การแปลการหมุนและสเกล (ถ้ามี) ถูก lerped แยกต่างหาก (โดยใช้ quaternions สำหรับส่วนการหมุน) และรวมกันอีกครั้ง


คุณแน่ใจหรือไม่ว่า lerping วัตถุที่แปลงไปข้างหน้านั้นเหมือนกับ lerping ray transformed backward หรือไม่? ตัวอย่างเช่นฉันสามารถปรับสภาพของรังสีให้เป็นปกติหลังจาก lerp (และปรับระยะการยิงให้เหมาะสม) สิ่งนี้ไม่เปลี่ยนผลลัพธ์
imallett

@imallett Lerping ray ควรจะเทียบเท่ากับ lerping matrices แต่ไม่จำเป็นต้องทำการ lerping the matrices หรือ lerping วัตถุ (เนื่องจากการผกผันไม่ใช่การดำเนินการเชิงเส้น) และฉันไม่คิดว่าการปรับสภาพรังสีให้เป็นปกติหลังจากที่ lerp แก้ไขสิ่งต่าง ๆ โดยสิ้นเชิง - คุณยังสามารถอยู่ในระบบพิกัดที่ไม่ได้สัดส่วนที่ตัดเฉือนซึ่งสามารถทำให้คณิตศาสตร์ผิดพลาดในกิจวัตรการแยก
นาธานรีด

[ดูการแก้ไข; รูปภาพที่ดีกว่า] อย่างน้อยฉันคิดว่าการปรับมาตรฐานควรแยกแยะปัญหาเกี่ยวกับจุดตัด - แต่นั่นคือสิ่งที่ฉันคิด การ lerping ray ไม่ได้เป็นการ lerping วัตถุ ในคำตอบของคุณคุณแนะนำให้ lerping [inverse?] TRS จากนั้นรวมใหม่อีกครั้ง นี่เป็นวิธีที่ผู้สร้างการผลิตทำหรือไม่
imallett

3

ฉันไม่คิดว่าคุณจะไปไกลขนาดนั้นด้วย AFAICS การประมาณเชิงเส้นเดียวของการประมาณค่าเชิงเส้นที่ไม่ใช่เชิงเส้น แต่บางทีบทความ / งานนำเสนอนี้โดย Gribel et al กับการเคลื่อนไหวเบลอในการแรสเตอร์อาจช่วยได้


ฉันแบ่งมันออกเป็นการประมาณเชิงเส้นซึ่งเป็นเรื่องปกติ หนึ่งสามารถจัดการการแปลงที่ซับซ้อนมากขึ้นด้วยขั้นตอนดังกล่าวหลายขั้นตอน problem ปัญหาของฉันไม่ได้อยู่ที่การแปลงแบบไม่เชิงเส้น แต่เป็นการประมาณเชิงเส้นให้ถูกต้อง
imallett
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.