8

EDIT: Tôi vẫn đang tìm kiếm một số trợ giúp về việc sử dụng OpenCL hoặc trình tính toán bóng đổ. Tôi muốn tiếp tục sử dụng OGL 3.3 và không phải đối phó với sự hỗ trợ trình điều khiển xấu cho OGL 4.3 và OpenCL 1.2, nhưng tôi không thể nghĩ đến việc sử dụng loại bóng này mà không sử dụng một trong hai (để phù hợp với ánh sáng và gạch). Có thể thực hiện phân loại dựa trên lát gạch mà không sử dụng GPGPU không?Trả lại hình ảnh trả lời với các vấn đề về khái niệm phân loại dựa trên Tile Tile

Tôi đã viết kết xuất bị trì hoãn trong OpenGL 3.3. Ngay bây giờ tôi không làm bất kỳ việc culling cho ánh sáng vượt qua (tôi chỉ làm cho một quad màn hình đầy đủ cho mỗi ánh sáng). Điều này (rõ ràng) có một tấn thấu chi. (Đôi khi nó là ~ 100%). Bởi vì điều này tôi đã nhìn vào những cách để cải thiện hiệu suất trong thời gian vượt qua ánh sáng. Có vẻ như cách tốt nhất trong (gần như) ý kiến ​​của mọi người là hủy cảnh sử dụng các ô không gian màn hình. Đây là phương pháp được sử dụng trong Frostbite 2. Tôi đọc bài thuyết trình từ Andrew Lauritzen trong SIGGRAPH 2010 (http://download-software.intel.com/sites/default/files/m/d/4/1/d/8/lauritzen_deferred_shading_siggraph_2010.pdf), và tôi không chắc tôi hoàn toàn hiểu khái niệm này. (và cho rằng vấn đề lý do tại sao nó tốt hơn bất cứ điều gì khác, và nếu nó là tốt hơn cho tôi)

Trong bài thuyết trình Laurtizen đi qua bóng mờ với khối lượng ánh sáng, quads, và gạch để tiêu hủy cảnh. Theo dữ liệu của mình, kết xuất đồ họa trả chậm dựa trên gạch là nhanh nhất (cho đến nay). Tôi không hiểu tại sao nó là mặc dù. Tôi đoán nó có một cái gì đó để làm với thực tế là cho mỗi gạch, tất cả các đèn được trộn với nhau. Trong bài thuyết trình, nó nói để đọc G-Buffer một lần và sau đó tính toán ánh sáng, nhưng điều này không có ý nghĩa với tôi. Trong tâm trí của tôi, tôi sẽ thực hiện điều này như sau:

for each tile { 
    for each light effecting the tile { 
    render quad (the tile) and compute lighting 
    blend with previous tiles (GL_ONE, GL_ONE) 
    } 
} 

Điều này vẫn liên quan đến việc lấy mẫu G-Buffer rất nhiều. Tôi sẽ nghĩ rằng làm điều đó sẽ có hiệu suất tương tự (nếu không tệ hơn) so với việc hiển thị một quad liên kết màn hình cho mọi ánh sáng. Từ cách diễn đạt nó, mặc dù nó có vẻ như đây là những gì đang xảy ra:

for each tile { 
render quad (the tile) and compute all lights 
} 

Nhưng tôi không thấy như thế nào ai có thể làm điều này mà không vượt quá giới hạn hướng dẫn cho các shader mảnh trên một số GPU. Bất cứ ai có thể giúp tôi với điều này? Nó cũng có vẻ như hầu như tất cả các renderer trả về dựa trên tile sử dụng các shader tính toán hoặc OpenCL (để batch các lights), tại sao điều này, và nếu tôi không sử dụng những gì sẽ xảy ra?

Trả lời

3

Nhưng tôi không biết cách thực hiện điều này mà không vượt quá giới hạn hướng dẫn cho trình đổ bóng phân đoạn trên một số GPU.

Tùy thuộc vào số lượng ánh sáng bạn có. "Giới hạn lệnh" khá cao; nó thường không phải cái gì bạn cần phải lo lắng về bên ngoài của các trường hợp thoái hóa. Ngay cả khi 100+ đèn ảnh hưởng đến một gạch, tỷ lệ cược là khá tốt mà tính toán ánh sáng của bạn sẽ không vượt quá giới hạn hướng dẫn.

Phần cứng GL 3.3 hiện đại có thể chạy ít nhất 65536 hướng dẫn động trong trình đổ bóng phân đoạn và có thể nhiều hơn nữa. Đối với 100 đèn, đó vẫn là 655 hướng dẫn mỗi ánh sáng. Ngay cả khi bạn có 2000 hướng dẫn để tính toán vị trí không gian camera, vẫn còn 635 lệnh mỗi ánh sáng. Ngay cả khi bạn đang làm Cook-Torrance trực tiếp trong GPU, điều đó có lẽ vẫn đủ.

+0

Thú vị. Tại một thời điểm tôi đã tính toán nhiều hơn một ánh sáng cho mỗi shader (7) và trên một số card đồ họa (đặc biệt là giữa và máy tính xách tay thấp GPU như GT 540) nó có vẻ như tôi vượt quá giới hạn hướng dẫn. Tôi đã đi đến kết luận này thông qua rất nhiều thử nghiệm một lỗi, và tôi hỏi về nó trong một trong những bài viết trước đó của tôi. Là tôi sai? – Spaceman1701

+1

Trong thực tế, tôi đã gặp phải vấn đề tương tự khi sử dụng NVidia 8600GT. Tôi đã đạt đến giới hạn 20 đèn hoặc nhiều hơn. Bạn đang nói về loại phần cứng @NicolBolas nào? –

+0

Hy vọng tôi sẽ có thời gian để thực hiện nó vào cuối tuần này. Tôi sẽ thấy điều gì xảy ra. – Spaceman1701

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