仅在切换期间,我更改为使用延迟渲染进行照明。
唯一的着色器到目前为止,我已经完成了第二遍使用的Pixel Shader,该着色器执行Per Pixel x Per Light计算,求和并输出最终颜色。
编译(我实际上没有在运行时中使用着色器,我只是设置了所有东西,窗口仍然只是每帧都清除为一种颜色,没有实际渲染),我遇到了一个失败,提示... />
错误X4502:着色器模型ps_4_0_level_9_3不允许读取位置语义。
这是我在项目中仅有的导致此错误的着色器。
我省略了getGBufferAttributes和calculateLighting方法,因为我知道它们不是问题。
Texture2D NormalTexture : register(t0);
Texture2D DiffuseAlbedoTexture : register(t1);
Texture2D SpecularAlbedoTexture : register(t2);
Texture2D PositionTexture : register(t3);
cbuffer LightParams
{
float3 LightPos;
float3 LightColor;
float3 LightDirection;
float2 SpotlightAngles;
float4 LightRange;
};
cbuffer CameraParams
{
float3 CameraPos;
};
float4 main(in float4 screenPos : SV_Position) : SV_Target0
{
float3 normal;
float3 position;
float3 diffuseAlbedo;
float3 specularAlbedo;
float specularPower;
getGBufferAttributes(screenPos.xy, normal, position, diffuseAlbedo, specularAlbedo, specularPower);
float3 lighting = calculateLighting(normal, position, diffuseAlbedo, specularAlbedo, specularPower);
return float4(lighting, 1.0f);
}
用于此着色器的代码高度基于Jason Zink,Matt Pettineo的《 Direct3D 11实用渲染》一书中用作延迟渲染示例的代码。和Jack Hoxley。
我不明白为什么他们会给出无效的源代码。它与Visual 2015和运行时中的新编译器有关系吗?
此外,由于我从仅使用效果到现在的原始HLSL着色器,我应该注意什么可能会让像我这样的人绊倒?
#1 楼
一个非常新手的错误,我正在使用旧的HLSL编译器进行编译。但是,为什么这是默认值呢?非常奇怪。对于任何想知道的人,只需在解决方案资源管理器中右键单击HLSL文件,然后转到属性-> HLSL编译器->常规,然后将Shader Model切换到您想要的最新模型即可对我来说(5.0)