깊이 버퍼 및 작동 방법에 대한 유용한 정보를 찾을 수 없습니다. 당신이 그것을 켜고 끌 수 있다는 것을 알고 있지만, Shader 런타임, PiexelShaderFunction에서 그것을 할 수 있습니까? 클리핑은 언제 발생합니까? Pixel Shader가 시작되기 전에? PiexelShaderFunction에서 클리핑 이벤트를 추적하여 문제가 발생하면 어떻게해야합니까? 나에게 50 %의 정밀도를 제공하고 좋은 대안이다HLSL 깊이 버퍼. 셰이더 런타임에서 piexel이 다른 픽 셀을 대체하려고 할 때를 확인하십시오.
PixelShaderFunction
{
//... some code.
if (value1%2 == 0)
return (0,0,value1,value2);
else
return(value1,value2,0,0);
}
: 난 내 머리의 상단에서 해낸
PixelShaderFunction
{
//... some code.
if (clipping)
return (0,0,value1,value2);
else
return(value1,value2,0,0);
}
입니다 :
이상적으로는 나는 다음과 같은 시스템이 필요합니다 하지만 먼저 스텐실을 끄고 스텐실을 켠 상태에서 드로잉해야하기 때문에 두 번 내 장면을 그려야합니다. 런타임에 PiexelShaderFunction에서 적어도 켜고 끌 수 있다면 엄청나게 도움이 될 것입니다. 클리핑이 발생했는지 여부는 알 필요가 없습니다.
편집 : 필자는 "쓰기 마스크는 렌더링 대상에 어떤 데이터가 기록되는지 제어합니다. 출력 쓰기 마스크는 렌더 당 대상, 구성 요소 별 수준에서 어떤 데이터가 렌더링 대상에 쓰여지는지 에스)." 내가 가진 여러 렌더링 타겟 중 어느 것을 깊이 버퍼를 사용할 수 있는지 지정할 수는 없습니까? 그렇다면 XNA에서 어떻게 할 수 있습니까?
기타 : 스텐실 버퍼가 얼마나 정확하게 채워져 있으며 정확히 어떻게 제어 할 수 있습니까? 깊이 버퍼에 어떤 영향을 줍니까? 누군가가 예제에 대한 링크를 가지고 있다면 저에게주세요! MSDN은 너무 희소합니다!
감사합니다. 기본적으로 내 기본 목표는 내 지오메트리를 두 번 렌더링하지 않는 것입니다.) 두 번 렌더링하면 문제가 없습니다 (거의 :). 지구상에서 왜 픽셀 쉐이더 이후에 픽셀을 잘라내는지 제발 말씀해주십시오. 픽셀을 처리하지 않으면 성능을 얻을 수 있습니다. 아니면이 잘리는 픽셀로 뭔가를 할 수 있을까요? Mb force-return something :)? – cubrman
한 가지 더, 장면을 그린 후에 렌더 대상과 같은 깊이 버퍼에 액세스하는 방법이 있습니까? – cubrman
나는 픽셀 머릿속에서 조각의 깊이를 조작 할 수 있기 때문에 조각들을 추려 냈다고 생각한다. 새로운 구현 이후 깊이가 조작되지 않고 일부 성능이 절약되는 경우 래스터 라이저 이후의 초기 z- 제거가 사용됩니다. 그러나 단편이 컬링되면 셰이더에 도달하지 않으므로 반응 할 수 없습니다. DX10 이후로 깊이 버퍼에 직접 접근하는 것이 가능합니다 : http://bitwisegames.wordpress.com/2011/03/25/getting-direct-access-to-the-depthbuffer-in-directx10/. DX9에서는 MRT 또는 심도 프리 패스로 작업해야합니다. – Gnietschow