DirectX 10에서 포워드 렌더러를 구현하고 있습니다. 무제한의 라이트를 처리하여 나중에 성능을 지연 렌더러와 비교할 수 있습니다. 그래서 기본적으로 제가 사용하고있는 알고리즘은 : 모든 객체에 대해, 모든 빛에 대해 -> 빛을 설정하고, 객체를 그립니다. 첨가제 블렌딩을 사용하여 각 조명에 대한 객체를 렌더링하여 각 조명의 기여도를 합산합니다. 모든 것은 혼합 블렌딩을 사용하고 깊이 쓰기를 사용하여 작동합니다. 내가 가지고있는 문제는이 단순한 접근 방법을 사용하면 다른 객체가 서로 블렌딩된다는 것입니다 (깊이 쓰기가 비활성화되어 있기 때문에). 단일 객체를 다른 광원 기여와 혼합하되 그 뒤에있는 다른 객체를 가리고 싶습니다. . 어떻게해야합니까? Z 프리 패스가 솔루션입니까? 모든 제안은 매우 감사하겠습니다. 감사.DirectX10의 멀티 패스 포워드 렌더러
이 내 HLSL 셰이더에서 사용하는 블렌딩과 깊이/스텐실 상태입니다 : 당신이 멀티를 깊이 프리 패스가 최선입니다 사용하여 구현하려는 경우
DepthStencilState NoDepthWritesDSS
{
DepthEnable = true;
DepthWriteMask = Zero;
StencilEnable = true;
StencilReadMask = 0xff;
StencilWriteMask = 0xff;
FrontFaceStencilFunc = Always;
FrontFaceStencilPass = Incr;
FrontFaceStencilFail = Keep;
BackFaceStencilFunc = Always;
BackFaceStencilPass = Incr;
BackFaceStencilFail = Keep;
};
BlendState BlendingAddBS
{
AlphaToCoverageEnable = false;
BlendEnable[0] = true;
SrcBlend = ONE;
DestBlend = ONE;
BlendOp = ADD;
SrcBlendAlpha = ZERO;
DestBlendAlpha = ZERO;
BlendOpAlpha = ADD;
RenderTargetWriteMask[0] = 0x0F;
};