Left 4 Dead 게임에서 빛나는 윤곽선 효과를 복제하려고합니다. 이 효과로 인해 오브젝트가 가려져 있어도 오브젝트 윤곽선이 빛납니다. 다음은 효과의 스크린 샷입니다.
OpenGL 기반 프로그램에서이 효과를 어느 정도 복제 할 수 있습니다. 이것이 내가 현재하고있는 일입니다.
- 빛나는 물체를 렌더링하기 위해 화면 크기의 절반 인 색상 및 깊이 텍스처 만들기
- 글로우 색상 / 깊이 텍스처를 지 웁니다. 색상이 검은 색으로 지워집니다.
- 각 빛나는 개체에 대해 단색으로 광선 텍스처에 렌더링
- 글로우 텍스처에서 분리 가능한 가우시안 블러 수행
- 전체 해상도 장면을 정상적으로 렌더링
- 광선 텍스처를 일반 장면과 추가로 혼합하지만 광선 깊이 텍스처를 사용하여 오브젝트를 마스크 처리하여 흐릿한 윤곽선 만 남습니다.
내 접근 방식의 스크린 샷은 다음과 같습니다.
글로우 텍스처와 장면을 결합한 프래그먼트 셰이더는 다음과 같습니다.
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과 동일한 깊이 값 수에 따라 광선의 크기를 조정해야합니까?
아니면 더 부드러운 결과를 얻을 수있는 더 나은 방법이 있습니까?