我正在尝试使用MRT实现延迟着色。为此,我需要在两个渲染目标中累积颜色和法线。我为此定义了两个R32G32B32A32
纹理。
像素缓冲区输出到两个渲染目标。但是,如何指示它累积值,而不是替换或混合它们?
我尝试定义以下混合状态:
blendState.RenderTarget[0].BlendEnable = TRUE;
blendState.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
blendState.RenderTarget[0].SrcBlend = D3D11_BLEND_ONE;
blendState.RenderTarget[0].DestBlend = D3D11_BLEND_ONE;
blendState.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;
blendState.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE;
blendState.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ONE;
blendState.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
blendState.RenderTarget[1].BlendEnable = TRUE;
blendState.RenderTarget[1].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
blendState.RenderTarget[1].SrcBlend = D3D11_BLEND_ONE;
blendState.RenderTarget[1].DestBlend = D3D11_BLEND_ONE;
blendState.RenderTarget[1].BlendOp = D3D11_BLEND_OP_ADD;
blendState.RenderTarget[1].SrcBlendAlpha = D3D11_BLEND_ONE;
blendState.RenderTarget[1].DestBlendAlpha = D3D11_BLEND_ONE;
blendState.RenderTarget[1].BlendOpAlpha = D3D11_BLEND_OP_ADD;
但我得到的价值观很奇怪。
请帮忙!我如何积累价值?
答案 0 :(得分:1)
要实现延迟着色,技术上不应累积法线或颜色,因为当您执行延迟处理(光计算/遮挡/景深......)时,每个MRT纹理像素(颜色/深度/法线) ,需要从视点表示最近的对象。
因此,只有将读取/写入和比较功能的深度状态设置为较小/较小,并且根本不应该进行混合。