Tạo tác bản đồ bóng


8

Tôi đã chơi xung quanh với ánh xạ bóng trong OpenGL bằng các kết cấu có chiều sâu. Kết cấu chiều sâu là tốt và tôi có thể ánh xạ nó lên cảnh nhưng tôi có một số đồ tạo tác kỳ lạ ở mặt sau của vật thể:

Sphere đúc một cái bóng, với các đồ tạo tác ở phía sau

Câu hỏi của tôi là những gì gây ra điều này và làm thế nào tôi có thể sửa chữa nó?

Trình tạo bóng mảnh tôi đang sử dụng khá đơn giản (Tôi đã loại bỏ màu cho đơn giản trong trường hợp bạn đang tự hỏi tại sao không có màu xanh ở đây):

in vec4 vShadowCoord;

uniform sampler2DShadow shadowMap;

out vec4 fragColor;

void main()
{
    float bias = 0.005;
    float visibility = 1.0;
    if (texture(shadowMap, vec3(vShadowCoord.xy, vShadowCoord.z / vShadowCoord.w)) < (vShadowCoord.z - bias) / vShadowCoord.w)
        visibility = 0.25;

    fragColor = vec4(visibility);
}

Chỉnh sửa: Theo yêu cầu, ảnh chụp màn hình ví dụ làm việc tối thiểu chỉ sử dụng mã ở trên (không có màu).

Cùng hình cầu, trừ màu


1
Bạn có thể xác nhận xem mã được hiển thị (với màu xanh đã bị xóa) cũng gây ra các vật phẩm không? Nếu bạn đã thu hẹp mã thì hiển thị hình ảnh từ mã được thu hẹp sẽ giúp loại trừ mọi chi tiết không liên quan và làm nổi bật vấn đề.
trichoplax

Đúng vậy, tôi đã hình dung mình sẽ chụp ảnh màn hình với màu sắc ở đó nếu không nó trông còn xấu hơn :)
Blarglenarf

Tôi có thể hiểu điều đó, nhưng vì đó là sự xấu xí mà bạn đang yêu cầu trợ giúp, bạn có thể có cơ hội tốt hơn để ai đó nhìn thấy vấn đề nếu bạn bao gồm cả ảnh chụp màn hình phù hợp với mã.
trichoplax

1
Đủ công bằng. Tôi đã thêm một ảnh chụp màn hình.
Blarglenarf 31/08/2015

Bạn đã thử chơi xung quanh nhiều hơn một chút với sự thiên vị?
cifz

Câu trả lời:


11

Vấn đề này trông giống như các tạo tác mụn trứng cá bản đồ tiêu chuẩn. Ngoài ra phương trình chiếu sáng của bạn không đầy đủ hoặc sai. Ánh sáng không ảnh hưởng đến khuôn mặt với những người bình thường quay mặt khỏi nó. Điều này cũng có nghĩa là với một phương trình thích hợp, mặt "tối" của quả cầu không nên có bất kỳ vật phẩm trị mụn nào.

Có ba nguồn tạo tác trị mụn:

  • Nguồn mụn đầu tiên là bản đồ bóng chính xác. Hãy chắc chắn rằng các mặt phẳng gần và xa của ánh sáng đúc bóng càng chặt càng tốt. Tất cả các vật thể trước mặt phẳng gần có thể bị phá hủy, vì độ sâu chính xác của chúng không quan trọng.
  • Nguồn mụn thứ hai là độ phân giải bản đồ bóng. Đối với ánh sáng định hướng, bạn nên thực hiện các bản đồ bóng xếp tầng với ít nhất 3 tầng 1024x1012 cho khoảng cách khoảng 100-200m bóng. Thật khó để che khoảng cách bóng tương tự với một bản đồ bóng với phép chiếu đồng nhất.
  • Nguồn mụn thứ ba là bộ lọc bản đồ bóng rộng như PCF, vì sử dụng một giá trị so sánh độ sâu duy nhất trên một hạt nhân rộng là không đủ. Có nhiều phương pháp để khắc phục nó, nhưng không có phương pháp nào mạnh cả.

Tóm lại, một sự thất vọng chặt chẽ với một vài tầng và một số điều chỉnh sai lệch là đủ để làm cho trường hợp chung hoạt động (ánh sáng định hướng). Bắt đầu điều chỉnh bằng cách vô hiệu hóa bộ lọc bóng và tinh chỉnh để chỉ lọc khi bản đồ bóng cơ bản đủ mạnh.

Ngoài ra, ngoài độ lệch độ sâu không đổi (mà bạn hiện đang sử dụng), bạn cũng nên thêm độ lệch độ sâu độ dốc và độ lệch độ sâu độ dốc tối đa. Cả hai có thể được thực hiện dưới dạng trạng thái kết xuất hoặc mã shader trong khi kết xuất Shadowmap. Độ lệch độ dốc dốc đơn giản là một giá trị thiên vị ma thuật được chia tỷ lệ theo dấu chấm (bình thường, lightDir).

Có một số phương pháp thú vị bổ sung và hầu hết chúng được thực hiện trong bản demo tuyệt vời: Matt Pettineo - "Lấy mẫu các kỹ thuật bóng" .

  • Lật tẩy trong quá trình kết xuất bản đồ bóng (giao dịch trị mụn cho Peter panning).
  • Ánh xạ bóng bù bình thường làm điều kỳ diệu cho các vấn đề sai lệch, nhưng đòi hỏi phải có các quy tắc đỉnh xung quanh trong quá trình tô bóng.
  • Các phương pháp dựa trên phương sai (ESM, VSM, EVSM) loại bỏ hoàn toàn các vấn đề sai lệch, nhưng có những nhược điểm khác (rò rỉ ánh sáng và / hoặc các vấn đề về hiệu suất).
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.