Point Light Soft Shadows


7

Làm thế nào để thực hiện các bóng mềm cho ánh sáng (điểm) omni. Chúng tôi sử dụng kỹ thuật ánh xạ bóng điển hình. Độ sâu được kết xuất thành khối kết cấu và addresing khá đơn giản sau đó. Chỉ cần sử dụng vector từ ánh sáng đến vị trí thế giới mảnh. Nó hoạt động hoàn hảo. Cho đến khi bạn muốn bóng mềm. Trong động cơ của chúng tôi, chúng tôi sử dụng kỹ thuật PCSS cho đèn chiếu sáng điểm. Nhưng đối với ánh sáng điểm bắt đầu rắc rối.

Làm thế nào để lấy mẫu trong 3D?

Tôi đã phát triển kỹ thuật khi cơ sở trực giao được tạo ra từ một hướng và upvector (0,1,0). Và sau đó nhân vectơ lấy mẫu (một cái gì đó như thế này (1.0, i / heightMapSize, j / heightMapSize) với cơ sở này. Nhưng điều này (tất nhiên :)) trông khá tệ đối với các vectơ gần (0,1,0) và (0, - 1,0).

Tôi sẽ đánh giá cao bất kỳ sự giúp đỡ về điều này.


Vì điều này vẫn chưa được giải quyết, tôi muốn để câu hỏi này mở ra. Có lẽ một ngày nào đó tôi sẽ đăng giải pháp của mình vì chúng tôi thực sự phải tìm ra điều này. Nhưng tôi vẫn sẽ thực sự vui mừng cho bất kỳ ý tưởng nào
Notabene

Câu hỏi của bạn thực sự không rõ ràng với tôi. Có vẻ như bạn đã thực hiện đèn điểm bằng cách sử dụng bản đồ bóng khối. Bóng mềm sử dụng kỹ thuật này giống như khi thực hiện bóng cho đèn định hướng hoặc đèn điểm. Bạn đã thực hiện các bóng mềm với một điểm sáng hoặc ánh sáng định hướng trước đây? Các nguyên tắc là như nhau.
Olhovsky

@olhovsky: Chắc chắn chúng tôi đã triển khai PCSS điển hình, vấn đề của bản đồ khối bóng tối là nó được lấy mẫu bằng vectơ 3D và bản đồ bóng sáng điểm được lấy mẫu ở dạng 2D ... vấn đề là: làm thế nào để lấy mẫu trong 3D trong khi vẫn giữ kiểu tương tự như PCSS ở dạng 2D. Cơ sở lấy mẫu trực giao của tôi tạo ra các tạo tác nhưng đã được chứng minh rằng nó hoạt động (nhưng tôi tin rằng có giải pháp tốt hơn).
Notabene

Notabene: Lọc PCF chỉ làm mềm các cạnh bóng và không giúp bạn sử dụng tốt hơn độ phân giải bản đồ bóng trong không gian ánh sáng. Cho rằng bạn cũng cần sử dụng một kỹ thuật như PSSM / CSM. Tôi đã thêm một câu trả lời mà chúng ta có thể tiếp tục thảo luận.
Olhovsky

Để đáp ứng việc lấy mẫu khối lập phương bằng một vectơ 3D: Bạn chỉ cần áp dụng bất kỳ kỹ thuật bản đồ bóng nào bạn thích cho các cạnh 2D của khối, sau đó lấy mẫu tất cả 6 mặt và trộn lẫn giữa chúng một cách thích hợp. Bạn có thể nghĩ về PSSM như cho bạn nhiều hình khối, nếu bạn muốn xem nó theo cách đó.
Olhovsky

Câu trả lời:


2

Cũng như một cách hack đơn giản đối với kỹ thuật hiện tại của bạn, bạn có thể chọn giữa hai vectơ tăng dựa trên việc liệu vectơ xem của bạn có xu hướng song song với một vectơ hay không.

Nó chỉ là một abs, so sánh và chọn theo thuật ngữ shader, vì vậy không có nhiều chi phí - đặc biệt là xem xét việc lấy mẫu và pha trộn ...


Cảm ơn về câu trả lời. Tôi đã thử những gì bạn đề xuất trước đây và bạn đúng điều này sẽ giúp, nhưng tạo ra một số vấn đề khác. Tôi nghĩ rằng kỹ thuật của tôi là ngõ cụt và tôi rất thích tìm một cái mới
Notabene

0

Bạn đang sử dụng bản đồ khối để thể hiện bóng của điểm sáng.

Trong trường hợp này, nó gần tương đương với việc có 6 đèn chiếu sáng được nối với nhau.

Bạn cần thực hiện tìm kiếm trình chặn PCSS trên mỗi 6 bản đồ bóng, để tìm giá trị bán kính cho mỗi bản đồ bóng (giống như cách thực hiện đối với một điểm sáng).

Sau đó, bạn chỉ cần pha trộn giữa mỗi giá trị penumbra như bạn đã làm cho bước ánh xạ bóng mà bạn đã thực hiện.

Điều này có thể được tối ưu hóa bởi vì một đối tượng nhận có thể bị chặn bởi một đối tượng trong tối đa 3 bản đồ bóng - vì vậy thực sự chỉ cần ba tìm kiếm chặn PCSS. Tuy nhiên, có được phiên bản đơn giản hơn làm việc đầu tiên.

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.