我正在使用DirectX 10实现一个Forward Renderer。我希望它能处理无限量的灯光,以便稍后我可以将它的性能与Deferred Renderer进行比较。所以基本上我使用的算法是:对于每个对象,对于每个光 - >设置灯光,绘制物体。使用加法混合,我为每个光渲染对象,总结每个光对其的贡献。一切都使用添加剂混合和禁用深度写入。我遇到的问题是,使用这种简单的方法,不同的对象混合在一起(因为深度写入被禁用),而我只是希望单个对象与其上的不同光贡献混合但仍然模糊其背后的其他对象。我怎样才能做到这一点? Z是预先通过解决方案吗?任何建议将非常感谢。感谢。
这是我在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;
};