ฉันจะลดนามแฝงในเอฟเฟกต์การเรืองแสงร่างของฉันได้อย่างไร


42

ฉันพยายามจำลองเอฟเฟกต์ร่างเรืองแสงในเกม Left 4 Dead เอฟเฟกต์ทำให้วัตถุมีการเรืองแสงแม้ว่าวัตถุจะถูกบัง นี่คือภาพหน้าจอของเอฟเฟกต์:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันสามารถทำซ้ำเอฟเฟกต์นี้ในโปรแกรมที่ใช้ OpenGL ได้บ้าง นี่คือสิ่งที่ฉันกำลังทำอยู่:

  • สร้างพื้นผิวสีและความลึกที่มีขนาดครึ่งหนึ่งของขนาดหน้าจอสำหรับแสดงวัตถุที่เรืองแสง
  • ล้างพื้นผิวสี / แสงที่เรืองแสง สีจะถูกล้างเป็นสีดำ
  • สำหรับวัตถุที่ส่องแสงแต่ละอันให้ฉายไปบนพื้นผิวเรืองแสงเป็นสีทึบ
  • ทำการเบลอเกาส์แยกไม่ออกบนพื้นผิวเรืองแสง
  • ทำให้ฉากความละเอียดเต็มตามปกติ
  • ผสมผสานพื้นผิวเรืองแสงเข้ากับฉากปกติอย่างแนบเนียน แต่ใช้พื้นผิวความลึกของแสงเรืองแสงเพื่อปกปิดวัตถุออกมาเหลือเพียงโครงร่างที่เบลอ

นี่คือภาพหน้าจอของแนวทางของฉัน:

ป้อนคำอธิบายรูปภาพที่นี่

นี่คือ shader ส่วนที่รวมพื้นผิวเรืองแสงกับฉาก:

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;
}

อย่างที่คุณเห็นมันทำงานได้เป็นส่วนใหญ่ แต่นามแฝงบนโครงร่างนั้นแย่มาก

ใครบ้างมีคำแนะนำสำหรับการทำให้ขอบด้านในของโครงร่างราบรื่นขึ้น?

ฉันควรจะสุ่มตัวอย่างค่าความลึกที่อยู่ใกล้เคียงของแต่ละพิกเซลและปรับขนาดการเรืองแสงตามจำนวนค่าความลึกที่เท่ากับ 1.0 หรือไม่

หรือมีวิธีการที่ดีกว่าที่จะให้ผลลัพธ์ที่ราบรื่นยิ่งขึ้น?

คำตอบ:


13

บางทีแทนที่จะตรวจสอบกับบัฟเฟอร์ความลึกความละเอียดต่ำคุณอาจใช้การทดสอบลายฉลุ เมื่อเรนเดอร์ฉากปกติคุณแค่เรนเดอร์วัตถุที่ควรเรืองแสงลงใน stencil buffer (โดยไม่ต้องทำการทดสอบเชิงลึกผมคิดว่า) จากนั้นผสมผสานพื้นผิวเรืองแสงที่สมบูรณ์เข้าด้วยกัน แต่กำหนดค่า stencil-test ให้ผ่าน ไม่ได้ตั้งค่าดังนั้นจึงทำการพรางวัตถุที่มีความละเอียดสูง

วิธีนี้คุณจะได้ภาพเงาที่แน่นอนของวัตถุต้นฉบับในขณะที่การปรับให้เรียบของขอบจะนำไปสู่ผลลัพธ์โดยประมาณเท่านั้น แต่บางทีสิ่งเหล่านี้อาจเพียงพอสำหรับคุณ


ขอบคุณที่ช่วยอย่างแน่นอน ฉันหวังว่าจะมีเทคนิคที่จะสนับสนุนการต่อต้านนามแฝงในรูปแบบบางอย่าง แต่นี่ก็ยังเป็นการปรับปรุงที่สำคัญ
flashk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.