2013-10-19 17 views
4

28wateslater.com에서 지연 음영 MSAA에서 this tutorial을 읽었습니다.명시 적 멀티 샘플링과 OpenGL의 일반 멀티 샘플링과의 차이점

명시 적 멀티 샘플링에서 특정 샘플에 액세스 할 수 있다고 말합니다.

예를 들어 GL_TEXTURE_2D_MULTISAMPLE에 바인딩 된 일반 텍스처에서 동일한 작업을 수행 할 수 없었습니까?

은 (EXPLICT 멀티 샘플링을 사용하지 않고) 내가 개별 샘플을 액세스하기 위해 이전에 사용하는 데 사용되는 셰이더 코드를했다 :

uniform sampler2DMS Diffuse; 

ivec2 Texcoord   = ivec2(textureSize(Diffuse) * In.Texcoord); 
vec4 colorFirstSample = texelFetch(Diffuse, Texcoord, 0); 
vec4 colorSecondSample = texelFetch(Diffuse, Texcoord, 1); 
vec4 colorThirdSample = texelFetch(Diffuse, Texcoord, 2); 

내가 명시 적 멀티 샘플링에 다른 볼 수있는 유일한 것은 그들이 쉐이더에서 texelFetchRenderbuffer()을 사용하는 것입니다 텍스처는 GL_TEXTURE_RENDERBUFFER_NV에 바인딩됩니다. 플러스 셰이더에서 RenderBuffer를 올바르게 사용할 수 없다는 것을 기억한다면 지금 할 수 있습니까?

+2

링크가 끊어졌습니다. – Ruslan

답변

7

나는 당신이 조금 혼란 스럽다고 생각합니다. OpenGL 3.2/DirectX 10이 등장하기 전에 MSAA (multisample anti-aliasing)를 수행하는 유일한 방법은 멀티 샘플 버퍼를 블 리팅하고 "해결"(여러 샘플을 말 그대로 단일 샘플로 해결하는 프로세스)하는 것입니다. 정상 출력). 이것은 모든 멀티 샘플링이 좋았던 것입니다. 셰이더에서는 명시 적으로 사용할 수 없었습니다.

GL3.2/DX10은 멀티 샘플 텍스처의 형태로 "명시 적"(프로그래밍 가능) 멀티 샘플 해상도를 도입했습니다. 셰이더에서 개별 샘플에 액세스하는 방법은 texelFetch (...)을 사용하는 것입니다. 조명 쉐이더는 G-Buffer를 가져올 때 멀티 샘플링이 가능하므로 MSAA를 지연 쉐이딩 엔진에서 구현할 수 있습니다. 이 새로운 기능은 앤티 앨리어싱과 무관 한 것들을 위해 멀티 샘플 버퍼를 사용할 수있는 가능성을 열었습니다. Stencil Routed A-Buffering이라는 기술을 통해 순서에 구애받지 않는 투명성은 즉시 염두에 듭니다.

즉, DX10 급 하드웨어를 사용하면 멀티 샘플 버퍼가 텍스처로 작동 할 수 있습니다. 이는 멀티 샘플 가져 오기를 노출하기 위해 HLSL 및 GLSL과 같은 기존 쉐이딩 언어에 대해 거의 수행되지 않아야한다는 것을 의미합니다. 당신은 밉맵과 필터링과 같은 특정 것들을 희생하지만, 당신이 그렇게 기울이면 자신을 구현할 수 있습니다. 그러나 DX10에서 부족한 점은 멀티 샘플 깊이 텍스처를 지원한다는 것입니다. DX10.1에서는이를 추가했습니다.

OpenGL 3.2 이전에는 하드웨어가 이미 ~ 2007 (DX10 릴리스) 이후에 지원했기 때문에 멀티 샘플 텍스처링을 허용하는 공급 업체별 확장 (예 : NV_explicit_multisample)이있었습니다. OpenGL 3.2 구현에서는 공급 업체 특정 항목을 무시하고 단순히 ARB_texture_multisample을 사용하십시오.

+0

Andon에게 답변 해 주셔서 감사합니다. 따라서 답변을 요약하면 다음과 같습니다. NV_explicit_multisample은 더 이상 공급 업체와 관련이 없으며 이제는 OGL 3.2 핵심 OGL의 일부가되었습니다. 앞서 언급 한 OpenGL 코드 (sampler2DMS, texelFetch)는 OGL 3.2 이상에서 OpenGL 코드를 사용하는 새로운 방법입니까? – viktorzeid

+0

다소 차이가 있습니다. 기술적으로,'ARB_texture_multisample'은'NV_explicit_multisample'을 대체 한 비 벤더 고유의 확장입니다. 이 ARB 확장은 3.2 이외의 구현에서 사용할 수 있지만 모든 3.2 이상의 구현에서 제공됩니다. –