Thuật toán hiện đại nhất cho các trường độ cao theo dõi tia là gì?


15

Đã có rất nhiều bài báo trong nhiều năm về các kỹ thuật khác nhau để vẽ địa hình trường độ cao trong một máy dò tia. Một số thuật toán chiếu trực tiếp vào lưới (hoặc thông qua một góc phần tư); một số khác biến đổi địa hình thành một lưới đa giác và sử dụng phép thử giao tuyến tam giác tia tiêu chuẩn. Nghiên cứu dường như đã được tiến hành trong vài năm qua và thật khó để tìm thấy những bài báo được viết trong thập kỷ trước, nhưng sự cân bằng giữa bộ nhớ và tính toán (cả CPU và GPU) vẫn đang thay đổi.

Loại thuật toán nào cho hiệu năng tốt nhất trên các máy tính để bàn cao cấp hiện nay? Hoặc nếu không có một câu trả lời duy nhất, làm thế nào để các đặc tính hiệu suất của các thuật toán tốt nhất hiện tại khác nhau?


Phản xạ không gian màn hình: tạo trường chiều cao bằng cách sử dụng bộ đệm độ sâu và khung, tia theo dõi nó để có được phản xạ thô. Tôi không biết về các chi tiết, nhưng tôi tưởng tượng Crysis, Killzone, Frostbite gần đây, v.v. sẽ sử dụng một số kỹ thuật tinh vi để có được nó nhanh chóng. Bạn đã xem xét điều này?
David Kuri

1
@DavidKuri Cảm ơn, đó là một con trỏ tốt để làm thế nào để có được sự di chuyển nhanh của lõi. Cần có rất nhiều tối ưu hóa cho trường chiều cao tĩnh hơn, không hoạt động tốt trên theo dõi không gian màn hình, chẳng hạn như mipmaps tiền điện toán hoặc tứ giác tối thiểu, vì vậy tôi vẫn hy vọng có câu trả lời bao gồm điều đó.
Dan Hulme

Này Dan BTW bạn đang tìm giải pháp CPU hay GPU? Và kết xuất thời gian thực hay không thời gian thực?
Alan Wolfe

@AlanWolfe Công dụng của tôi là GPU và phi thời gian thực (tức là thông lượng tối đa thay vì chất lượng hình ảnh tốt nhất bạn có thể quản lý trong 16 ms), nhưng tôi vẫn đưa ra các câu trả lời thú vị nhanh trên CPU hoặc chủ yếu cho các trình kết xuất tương tác.
Dan Hulme

Bạn có thể thử tạo trường khoảng cách đã ký từ bản đồ chiều cao. Đó là một kết cấu 3d lưu trữ khoảng cách đến bề mặt tiếp theo. Điều này cho phép "di chuyển tia nhanh hơn". Unreal Engine 4 sử dụng điều này cho việc che khuất môi trường trung bình, bóng mềm và bóng địa hình nói chung
user1888

Câu trả lời:


11

Đối với công nghệ hiện đại, hãy tìm bài báo này: "Mipmap tối đa để kết xuất trường chiều cao động nhanh, chính xác và có thể mở rộng", Tevs et al. 2008

Ý tưởng cơ bản là bỏ qua nhiều không gian bằng cách có kiến ​​thức về giá trị tối đa trên các khu vực rộng lớn của địa hình. Nếu tia vẫn ở trên mức đó, bỏ qua khu vực rộng lớn tiếp theo.

Nếu bạn nhìn vào Hình 8, bạn sẽ thấy sự so sánh giữa các bước tuyến tính cơ bản so với các mipmap tối đa. Kết quả bước tuyến tính trong 200 bước, có thể được thực hiện theo thời gian thực trên gpus hiện đại nhưng vẫn thực sự chậm. Max mipmaps làm tương tự trong khoảng 10 bước, tất cả trong shader.


Tôi chấp nhận câu trả lời này vì bản thân bài báo rất hay và phần "Công việc liên quan" của nó có vẻ khá toàn diện. Ngay cả khi tôi không sử dụng chính xác kỹ thuật này, tôi chắc chắn tôi sẽ có thể điều chỉnh thứ gì đó cho trường hợp sử dụng của mình từ tài liệu này và các tài liệu tham khảo.
Dan Hulme

Bạn đã tìm thấy bất kỳ bản demo nào với mipmaps tối đa chưa? Cảm ơn.
raRaRa

Tôi chưa đọc bài báo này, nhưng "mipmaps tối đa" này nghe có vẻ rất giống với kỹ thuật được sử dụng cho Ánh xạ bước hình nón (giúp cải thiện ánh xạ tắc thị sai bằng cách bỏ qua các vùng lớn nhờ hình nón).
Julien Guertault

@JulienGuertault Tôi sẽ nói đây là dấu vết HiZ đơn giản. đó là một phương pháp an toàn để chắc chắn về những gì bạn đạt được. Nhưng không nhanh lắm so với các phương pháp không an toàn như tìm kiếm nhị phân.
v.oddou

3

Thứ tốt nhất mà cá nhân tôi thấy là những thứ inigo quillez, được sử dụng trong những thứ demoscene. Ray di chuyển địa hình, thực hiện các bước lớn hơn mà bạn nhận được từ máy ảnh càng xa vì chi tiết (thông thường) ít quan trọng hơn ở khoảng cách (ngoại trừ = tường mỏng!). Ông sử dụng thông tin thâm nhập và các số liệu dễ dàng nhận được khác để mô phỏng sự che khuất xung quanh và các kỹ thuật chiếu sáng tinh vi khác.

Đây là bản demo của nội dung đang hoạt động: https://www.youtube.com/watch?v=_YWMGuh15nE

Và đây là trang của IQ về việc bắn tia địa hình, một cách đọc khá thú vị: http://www.iquilezles.org/www/articles/terrainmarching/terrainmarching.htmlm

BTW, trong các trò chơi hiện đại, kỹ thuật "phản chiếu không gian màn hình" thường chỉ là một cuộc diễu hành đối với bộ đệm Z của cảnh được kết xuất. Bộ đệm Z thực sự chỉ là một trường chiều cao.

Tôi đã thấy một số cuộc nói chuyện về điều này tại siggraph 2014, và trong khi một số người đang sử dụng các kỹ thuật tương tự như IQ, một số người đã làm những việc thậm chí không tốt như IQ, thật thú vị khi xem: P


1
Thuật toán trong liên kết của bạn rất đơn giản. Nó trông kém tinh vi hơn một số giấy tờ tôi tìm thấy từ những năm chín mươi. Nó có vẻ như là một điểm khởi đầu tốt, nhưng tôi hy vọng giải pháp hiệu suất cao nhất cho một hệ thống sản xuất, không chỉ là "raytracer đầu tiên của tôi".
Dan Hulme

Công cụ này được sử dụng trong mã demoscene và phản xạ không gian màn hình trong các trò chơi hiện đại tiên tiến nhất. Mã nhanh nhất đôi khi là đơn giản nhất. Tôi sẽ không loại bỏ nó vì sự đơn giản của nó. Sẽ rất thú vị để xem nếu bạn nhận được bất kỳ phản hồi khác mặc dù.
Alan Wolfe

2
Điều còn thiếu trong phản ứng của bạn là IQ sử dụng lưới chiều cao tiêu chuẩn như một dự đoán ban đầu để khởi động tia sáng trên địa hình thực tế. Đầu tiên anh ta tái hiện một phiên bản low-poly của địa hình bằng cách sử dụng rasterization tiêu chuẩn, và sau đó chạy một pixel shader trên hình ảnh bắt đầu chiếu tia ở độ sâu raster trừ đi một số ngưỡng bảo thủ. Đây là cách duy nhất để thực sự làm cho thời gian thực này.
Benedikt Bitterli

Tôi tin rằng chỉ một phần của những gì bạn đang nói là đúng. anh ta sử dụng phương pháp phỏng đoán dựa trên chiều cao địa hình (cùng với khoảng cách từ máy ảnh) để tìm ra cách tia có thể di chuyển xa, nhưng theo như tôi đã nghe, anh ta không sử dụng rasterization. Dưới đây là một ví dụ về công việc của anh ấy, không sử dụng rasterization, nhưng điều đó không có nghĩa là không có triển khai nào sử dụng rasterization: shadertoy.com/view/MdX3Rr
Alan Wolfe

Tôi hơi bối rối rằng câu hỏi là về phương pháp dò tia, và câu trả lời này là về việc di chuyển bằng tia. Có một sự khác biệt cơ bản giữa hai và những gì họ có thể đạt được.
Julien Guertault

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.