모션 블러를위한 객체 공간으로의 광선 변환


12

내 raytracer는 다양한 객체를 지원합니다. 그것들을 교차시키기 위해 광선을 물체 공간으로 변환하는 표준 기술을 사용합니다. 모션 블러를 추가 할 때까지 환상적으로 작동합니다.

모션 블러를 하나의 변환이 아닌 일련의 변환 (토론을 단순화하기 위해 정확히 2라고 가정)으로 모델링합니다. 내 접근 방식은 두 키 프레임에서 광선의 역변환을 수행하고 위치 / 방향을 뛰어 넘는 것입니다.

이것은 번역에는 잘 작동하지만 회전에 대해서는 분해됩니다. 예를 들어 30도 및 90도 회전하는 두 개의 삼각형이 있습니다.

rotation1
(4 개의 샘플, MN 재구성, 적색 샘플은 2 개의 키 프레임 근처에서 나옴)

모퉁이에서 lerped 샘플이 두 정점 사이에 직선으로 놓여있을 것으로 기대합니다. 대신, 그들은 바깥쪽으로 솟아 오릅니다. 이것은 잘못이다. 더 흥미로운 변형이있는 더 흥미로운 장면에서는 다양한 실패 모드가 발생합니다. 예를 들어 다음은 45 회전을하는 프로펠러입니다.

회전 2
(100 샘플, 법선 시각화)

일부 문제는 BVH가 깨지기 때문에 발생합니다 (객체의 극단이 키 프레임에 있다고 가정).

포워드 변환 만 수행하여 (레이가 아닌 트랜스 폼 오브젝트)이 모든 것을 고칠 수 있지만, 가능한 오브젝트 (삼각형 만 해당)에만 작동합니다.


레이트 레이서가 오브젝트가 아닌 광선을 변환하여 변형 (특히 회전)에 대한 선형 근사치를 생성하도록하려면 어떻게해야합니까?

답변:


7

키 프레임 사이의 광선 위치 / 방향을 확인하는 것은 키 프레임 사이의 역행렬을 허용하고 lerped 행렬에 의해 변환하는 것과 같습니다. 문제는 키 프레임이 다른 회전을 갖는 경우 lerped 매트릭스는 일반적으로 전단, 불균일 스케일 등으로 "이상한"것입니다.

그러한 경우에 대해 특별히 테스트하고 강화하지 않는 한 일부 교차 좌표계 및 음영 처리 루틴이 왜곡 된 좌표계에서 제대로 작동하지 않더라도 놀라지 않을 것입니다. (예를 들어, 두 단위 벡터의 내적을 취하는 것은 직교 좌표계와 같은 전단 좌표계에서 같은 답을 제공하지 않습니다.)

이것은 추측에 불과하지만 평행 이동, 회전 및 배율 (해당되는 경우)이 개별적으로 (회전 부분에 쿼터니언을 사용하여) 결합되어 재결합되는 보간 방법을 선택하면 더 효과적 일 수 있습니다.


정방향 변환 된 객체를 보호하는 것이 역방향 변환 된 광선을 보호하는 것과 동일합니까? 예를 들어, lerp 후 광선을 다시 정규화하고 그에 따라 적중 거리를 조정할 수 있습니다. 결과는 바뀌지 않습니다.
imallett

@imallett 광선을 렌핑하는 것은 역행렬을 lerable하는 것과 동등해야하지만, 반드시 순방향 행렬을 lerable하거나 객체를 lerable하는 것은 아닙니다 (반전은 선형 연산이 아니므로). 그리고 나는 lerp가 사물을 완전히 고친 후에 광선을 다시 정규화한다고 생각하지 않습니다. 교차 루틴 등에서 수학을 망칠 수있는 전단 된 비 균일 스케일 좌표계에 여전히있을 수 있습니다.
Nathan Reed

[편집 참조; 더 나은 그림] 적어도, 나는 정규화가 교차점의 문제를 배제해야한다고 생각합니다. 그러나 그것이 제가 생각한 것입니다. 광선을 견디는 것은 물체를 견디지 ​​않습니다. 당신의 대답에서 당신은 [inverse?] TRS를 기다린 다음 재결합하는 것을 제안했습니다. 이것이 프로덕션 렌더러가하는 방식입니까?
imallett

3

비선형 보간에 대한 단일 선형 근사치 인 AFAICS를 사용하면 크게 멀어 질 것이라고 생각하지는 않지만 Gribel et al의 래스터 화에서 모션 블러에 대한 이 논문 / 프레젠테이션 이 도움이 될 수 있습니다.


나는 그것을 대략적인 선형 근사치로 나눕니다. 이러한 여러 단계로 더 복잡한 변환을 처리 할 수 ​​있습니다 .¶ 문제는 변환을 비선형으로 만드는 것이 아니라 선형 근사를 올바르게 만드는 것입니다.
imallett
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.