2010-09-08 39 views
25

Vì vậy, tôi đang ở một điểm mà tôi nên bắt đầu chiếu sáng các mô hình màu phẳng của tôi. Ứng dụng thử nghiệm là một trường hợp thử nghiệm để thực hiện chỉ các phương pháp mới nhất, vì vậy tôi nhận ra rằng lý tưởng nó nên được thực hiện dò tia (vì lý thuyết, nó có thể là lý tưởng cho đồ họa thời gian thực trong một vài năm).Làm thế nào để thực hiện tìm kiếm tia trong OpenGL hiện đại?

Nhưng tôi bắt đầu từ đâu?

Giả sử tôi chưa bao giờ thực hiện ánh sáng trong OpenGL cũ, vì vậy tôi sẽ chuyển trực tiếp đến các phương pháp không được chấp nhận. Ứng dụng hiện đã thiết lập đúng các đối tượng đệm vertex, đỉnh, đầu vào bình thường và màu sắc và nó vẽ chính xác và biến đổi các mô hình trong không gian, bằng một màu phẳng.

Có nguồn thông tin nào sẽ lấy một từ các đỉnh màu phẳng đến tất cả những gì cần thiết cho kết quả cuối cùng thích hợp thông qua GLSL không? Lý tưởng nhất với bất kỳ phương pháp chiếu sáng bổ sung nào khác có thể được yêu cầu để bổ sung cho nó.

Trả lời

24

Tôi sẽ không khuyên bạn nên thử dò tìm tia thực tế trong OpenGL vì bạn cần rất nhiều mẹo và thủ thuật cho điều đó và nếu bạn hỏi tôi, sẽ không có điểm nào trong việc thực hiện điều này nữa. Nếu bạn muốn thực hiện tìm kiếm tia trên GPU, bạn nên sử dụng bất kỳ ngôn ngữ GPGPU nào, chẳng hạn như CUDA hoặc OpenCL vì nó làm cho mọi thứ trở nên dễ dàng hơn nhiều (nhưng vẫn còn, xa tầm thường).

Để minh họa vấn đề thêm một chút: Để chiếu tia, bạn cần theo dõi các tia thứ cấp và kiểm tra giao điểm với hình học. Do đó, bạn cần truy cập vào hình học theo cách thông minh bên trong trình đổ bóng của bạn, tuy nhiên bên trong trình đổ bóng phân đoạn, bạn không thể truy nhập hình học, nếu bạn không lưu trữ nó "được mã hóa" vào một số kết cấu. Trình đổ bóng đỉnh cũng không cung cấp cho bạn thông tin hình học này một cách tự nhiên, và các trình đổ bóng hình học chỉ biết những người hàng xóm để ở đây sự cố đã bắt đầu. Tiếp theo, bạn cần tăng tốc cấu trúc dữ liệu để có được bất kỳ tỷ lệ khung hình hợp lý nào. Tuy nhiên, vượt qua ví dụ: một Kd-Tree bên trong một shader là khá khó khăn và nếu tôi nhớ lại chính xác, có một số giấy tờ chỉ duy nhất về vấn đề này. Nếu bạn thực sự muốn đi tuyến đường này, mặc dù, có rất nhiều giấy tờ về chủ đề này, nó không phải là quá khó để tìm thấy chúng.

Trình theo dõi tia yêu cầu các mẫu truy cập được thiết kế rất tốt và bộ nhớ đệm để đạt hiệu suất tốt. Tuy nhiên, bạn chỉ có ít quyền kiểm soát các bên trong GLSL và tối ưu hóa hiệu suất có thể trở nên thực sự khó khăn.

Một điểm cần lưu ý khác là, ít nhất là với kiến ​​thức của tôi, theo dõi tia thời gian thực trên GPU hầu như bị giới hạn trong các cảnh tĩnh vì ví dụ: kd-tree chỉ hoạt động (tốt) cho các cảnh tĩnh. Nếu bạn muốn có cảnh động, bạn cần cấu trúc dữ liệu khác (ví dụ: BVHs, iirc?) Nhưng bạn liên tục cần phải duy trì những cấu trúc đó. Nếu tôi đã không bỏ lỡ bất cứ điều gì, vẫn còn rất nhiều nghiên cứu hiện đang diễn ra chỉ về vấn đề này.

+4

Btw: google scholar là bạn của bạn trên những nội dung như thế này. Làm thế nào về http://scholar.google.de/scholar?q=glsl+ray+tracing – zerm

+3

OpenCL nó là ... –

+0

Ý của bạn là "cấu trúc dữ liệu tăng tốc"? – bluejamesbond

18

Bạn có thể khó hiểu một số điều.

OpenGL là trình quét. Buộc nó để làm raytracing là có thể, nhưng khó khăn. Đây là lý do tại sao raytracing không phải là "lý tưởng cho đồ họa thời gian thực trong một vài năm". Trong một vài năm, chỉ có hệ thống hybrid mới có thể thực hiện được.

Vì vậy, bạn có ba tài sản.

  • Tinh khiết raytracing. Chỉ hiển thị quad toàn màn hình và trong trình đổ bóng phân đoạn của bạn, hãy đọc mô tả cảnh của bạn được đóng gói trong bộ đệm (như kết cấu), duyệt qua cấu trúc phân cấp và tính toán các giao điểm hình tam giác.
  • Hybrid raytracing. Rasterize cảnh của bạn theo cách thông thường, và sử dụng raytracing trong shader của bạn trên một số phần của cảnh thực sự đòi hỏi nó (khúc xạ, ... nhưng nó có thể được đồng thời trong rasterisation)
  • Rasterization tinh khiết. Trình đổ bóng phân đoạn thực hiện công việc bình thường của nó.

Chính xác bạn muốn đạt được điều gì? Tôi có thể cải thiện câu trả lời tùy theo nhu cầu của bạn.

Dù sao, this SO question có liên quan cao. Ngay cả khi thực hiện cụ thể này có một lỗi, nó chắc chắn là con đường để đi. Một khả năng khác là mởCL, nhưng khái niệm thì giống nhau.

Các vấn đề liên quan