HLSL延遲渲染


6

我最近已切換到Visual 2015,並且.fx文件已棄用。我的項目包含用於著色器的.fx文件,所以我一直在切換。

僅在切換期間,我更改為使用延遲渲染進行照明。

到目前為止,我唯一製作的著色器是第二遍使用的像素著色器,該著色器執行"每像素x每光"計算,將其求和,然後輸出最終顏色。

但是,每當我編譯時(我實際上並沒有在運行時使用著色器,我只是對其進行了全部設置,窗口仍然只是每幀都清除為一種顏色,沒有實際渲染),但我遇到了失敗說...。

錯誤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和Jack Hoxley所著的《 Direct3D 11實用渲染》一書中用作延遲渲染示例的代碼。

我不明白為什麼他們會給出無效的源代碼。它與Visual 2015和運行時中的新編譯器有關嗎?

此外,由於我從僅使用效果到現在的原始HLSL著色器,我是否應該意識到有什麼可能會使像我這樣的人絆倒?

3

A very novice mistake, I was compiling with the old HLSL compiler. But why would that be the default? Very strange.

For anybody wondering, just right click the HLSL file in the solution explorer and go to properties -> HLSL Compiler -> General, and switch Shader Model to the one you want which was newest one for me (5.0)