Làm thế nào tôi có thể giảm răng cưa trong hiệu ứng phát sáng phác thảo của tôi?


42

Tôi đang cố gắng tái tạo hiệu ứng phác thảo phát sáng trong trò chơi Left 4 Dead. Hiệu ứng này làm cho một đối tượng phác thảo phát sáng, ngay cả khi đối tượng bị chặn. Dưới đây là một ảnh chụp màn hình của hiệu ứng:

nhập mô tả hình ảnh ở đây

Tôi phần nào có thể tái tạo hiệu ứng này trong chương trình dựa trên OpenGL của mình. Đây là những gì tôi đang làm:

  • Tạo một kết cấu màu và độ sâu bằng một nửa kích thước màn hình để hiển thị các đối tượng phát sáng
  • Xóa màu phát sáng / kết cấu chiều sâu. Màu được xóa thành màu đen.
  • Đối với mỗi vật thể phát sáng, làm cho nó có kết cấu phát sáng như một màu đơn sắc
  • Thực hiện một gaussian mờ riêng biệt trên kết cấu phát sáng
  • Kết xuất cảnh độ phân giải đầy đủ như bình thường
  • Pha trộn một cách bổ sung kết cấu phát sáng với cảnh bình thường, nhưng sử dụng kết cấu độ sâu phát sáng để che giấu đối tượng, chỉ để lại đường viền mờ.

Đây là một ảnh chụp màn hình của phương pháp của tôi:

nhập mô tả hình ảnh ở đây

Dưới đây là shader mảnh kết hợp kết cấu phát sáng với cảnh:

uniform sampler2D glowColorTex;
uniform sampler2D glowDepthTex;
uniform sampler2D sceneColorTex;
void main()
{
    vec2 uv = gl_TexCoord[0].st;

    vec4 color = texture2D( sceneColorTex, uv);

    float depth = texture2D( glowDepthTex, uv).r;
    if(depth == 1.0) {
        color += 2.0 * texture2D( glowColorTex, uv);
    }

    gl_FragColor = color;
}

Như bạn có thể thấy, nó dường như hoạt động với hầu hết các phần, nhưng bí danh trên phác thảo là thực sự xấu.

Có ai có bất kỳ đề nghị để làm mịn các cạnh bên trong của phác thảo?

Tôi có nên lấy mẫu các giá trị độ sâu lân cận của từng pixel và chia tỷ lệ phát sáng dựa trên số lượng giá trị độ sâu bằng 1.0 không?

Hoặc có một cách tiếp cận tốt hơn sẽ tạo ra kết quả mượt mà hơn?

Câu trả lời:


13

Có thể thay vì kiểm tra nó dựa vào bộ đệm có độ phân giải thấp, bạn có thể sử dụng thử nghiệm stprint. Khi kết xuất cảnh bình thường, bạn chỉ hiển thị đối tượng sẽ phát sáng vào bộ đệm stpson (tôi không kiểm tra độ sâu) và sau đó trộn kết cấu phát sáng hoàn chỉnh vào, nhưng định cấu hình kiểm tra stpson để chỉ vượt qua nơi bộ đệm stpson không được đặt, do đó che đi đối tượng có độ phân giải cao.

Bằng cách này, bạn có được hình bóng chính xác của đối tượng ban đầu, trong khi việc làm mịn các cạnh sẽ chỉ dẫn đến kết quả gần đúng, nhưng có lẽ những điều này sẽ đủ cho bạn.


Cảm ơn, điều đó chắc chắn giúp. Tôi đã hy vọng một số kỹ thuật sẽ hỗ trợ một số hình thức khử răng cưa, nhưng đây vẫn là một cải tiến lớn.
flashk
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.