Left 4 Dead oyununda parlayan anahat efektini kopyalamaya çalışıyorum. Etki, nesne tıkalı olsa bile nesnelerin dış hatlarının parlamasına neden olur. İşte etkinin ekran görüntüsü:
OpenGL tabanlı programımda bu etkiyi biraz kopyalayabiliyorum. Şu anda ne yapıyorum:
- Parlayan nesneleri oluşturmak için ekran boyutunun yarısı kadar olan bir renk ve derinlik dokusu oluşturun
- Parlaklık rengini / derinlik dokularını temizleyin. Renk siyah olarak temizlenir.
- Her parlayan nesne için, onu parıltı dokusuna düz bir renk olarak verin
- Kızdırma dokusu üzerinde ayrılabilir bir gauss bulanıklığı gerçekleştirin
- Tam çözünürlük sahnesini normal olarak oluşturun
- Kızdırma dokusunu normal sahne ile birlikte karıştırın, ancak nesneyi maskelemek için yalnızca bulanık anahattı bırakarak ışıma derinliği dokusunu kullanın.
İşte yaklaşımımın bir ekran görüntüsü:
Işıma dokusunu sahne ile birleştiren parça gölgelendiricisi:
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;
}
Gördüğünüz gibi, çoğu zaman işe yarayacak gibi görünüyor, ancak ana hattaki diğer adı gerçekten kötü.
Anahatın iç kenarını yumuşatmak için önerisi olan var mı?
Her pikselin komşu derinlik değerlerini örneklemeli ve 1,0'a eşit derinlik değerlerinin sayısına göre parlamayı ölçeklemeli miyim?
Yoksa daha yumuşak sonuçlar üretecek daha iyi bir yaklaşım var mı?