Chuyển đổi tia sang không gian đối tượng cho Motion Blur


12

Raytracer của tôi hỗ trợ nhiều đối tượng. Để cắt chúng, tôi sử dụng kỹ thuật tiêu chuẩn để biến các tia sáng thành không gian đối tượng. Điều này hoạt động tuyệt vời cho đến khi tôi thêm mờ chuyển động.

Tôi mô hình hóa chuyển động mờ như một chuỗi các biến đổi (để đơn giản hóa thảo luận, hãy nói chính xác hai) thay vì một. Cách tiếp cận của tôi là lấy biến đổi nghịch đảo của tia ở cả hai khung hình chính và lerp các vị trí / hướng.

Điều này có vẻ hoạt động tốt cho các bản dịch, nhưng nó bị hỏng cho xoay. Ví dụ, đây là hai hình tam giác trải qua các góc quay 30 và 90 độ:

xoay1
(4 mẫu, tái tạo MN, các mẫu màu đỏ đến từ gần hai khung hình chính)

Ở các góc, tôi sẽ mong đợi các mẫu được xếp nằm trên một đường thẳng giữa hai đỉnh. Thay vào đó, chúng phình ra bên ngoài. Cái này sai. Trong những cảnh thú vị hơn với các biến đổi thú vị hơn, nó gây ra một loạt các chế độ thất bại. Ví dụ: đây là một chân vịt trải qua một vòng quay 45:

xoay 2
(100 mẫu, định mức trực quan)

Một số vấn đề là do sự phá vỡ của BVH (nó giả định sự cực đoan của các vật thể nằm ở khung hình chính), nhưng ngay cả một kết xuất vũ phu cũng không chính xác.

Tôi có thể sửa tất cả những điều này bằng cách chỉ thực hiện các phép biến đổi chuyển tiếp (biến đổi đối tượng, không phải tia), nhưng điều này chỉ hoạt động đối với các đối tượng có thể (chỉ thực sự là tam giác).


Làm cách nào tôi có thể làm cho raytracer của mình tạo ra các xấp xỉ tuyến tính để biến đổi (đặc biệt là xoay) bằng cách biến đổi các tia chứ không phải các đối tượng?

Câu trả lời:


7

Việc định vị các vị trí / hướng tia giữa các khung hình chính phải tương đương với việc nới lỏng các ma trận nghịch đảo giữa các khung hình chính và biến đổi theo ma trận được sắp xếp. Rắc rối là, nếu các khung hình chính có các góc quay khác nhau, ma trận được nới lỏng nói chung sẽ là một cái gì đó "kỳ lạ", với sự cắt, tỷ lệ không hình thành, v.v.

Tôi sẽ không ngạc nhiên nếu một số thói quen giao nhau và tô bóng của bạn không hoạt động đúng trong một hệ tọa độ bị méo như vậy, trừ khi bạn đã kiểm tra cụ thể và làm cứng chúng trước những trường hợp như vậy. (Ví dụ: lấy sản phẩm chấm của hai vectơ đơn vị sẽ không đưa ra câu trả lời giống nhau trong một hệ tọa độ bị cắt như trong một hệ trực giao.)

Đây chỉ là một phỏng đoán, nhưng nó có thể hoạt động tốt hơn nếu bạn chọn phương pháp nội suy trong đó dịch, xoay và tỷ lệ (nếu có thể) được tách riêng (sử dụng tứ phân vị cho phần xoay) và kết hợp lại.


Bạn có chắc chắn nới lỏng đối tượng biến đổi về phía trước giống như nới lỏng tia biến đổi ngược không? Ví dụ, tôi có thể tái chuẩn hóa tia sau lerp (và chia tỷ lệ khoảng cách đánh cho phù hợp). Điều này không thay đổi kết quả.
imallett

@imallett Lerping tia phải tương đương với ler các ma trận nghịch đảo, nhưng không nhất thiết phải ler các ma trận về phía trước hoặc nới lỏng đối tượng (vì đảo ngược không phải là một hoạt động tuyến tính). Và tôi không nghĩ rằng việc tái chuẩn hóa tia sau khi lerp khắc phục hoàn toàn mọi thứ - bạn vẫn có thể ở trong một hệ tọa độ bị cắt xén, không đồng nhất có thể làm hỏng toán học trong các giao thức của bạn và tương tự.
Nathan Reed

[Xem chỉnh sửa; hình ảnh tốt hơn] Ít nhất, tôi nghĩ việc tái chuẩn hóa nên loại trừ các vấn đề với giao lộ - nhưng đó là những gì tôi nghĩ; lerping tia không lerping đối tượng. Trong câu trả lời của bạn, bạn đề nghị nới lỏng [nghịch đảo?] TRS và sau đó kết hợp lại. Đây có phải là cách sản xuất renderer làm điều đó?
imallett

3

Tôi không nghĩ rằng bạn sẽ đi quá xa với AFAICS, một phép tính gần đúng tuyến tính duy nhất cho phép nội suy khá phi tuyến tính, nhưng có lẽ bài báo / bài thuyết trình này của Gribel et al về làm mờ chuyển động trong quá trình rasterisation có thể giúp ích.


Tôi chia nó thành một xấp xỉ tuyến tính, khá điển hình. Người ta có thể xử lý các phép biến đổi phức tạp hơn với nhiều bước như vậy. Vấn đề của tôi không nằm ở việc biến đổi phi tuyến, mà là làm cho phép tính gần đúng tuyến tính với nó chính xác.
imallett
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.