Shader 文件规范
着色器文件(*.shader
)以 JSON 格式编写,包含以下元素。
Source: AZSL 源文件 (
*.azsl
) 的文件路径。该路径可以是该着色器文件的相对路径,也可以是资产根目录的相对路径。RasterState: 光栅器的渲染状态配置。
DepthStencilState: 输出合并器的深度模版状态。
CompilerHints: 着色器编译器链的设置容器。每个平台对这些设置的支持程度可能不同。
有关设置的完整列表,请参见
Gems\Atom\RHI\Code\Source\RHI.Edit\ShaderCompilerArguments.cpp
中的ShaderCompilerArguments::Reflect
。注意:AZSLc 只是编译链中生成 HLSL 代码的第一个编译器。还有其他各种编译器,如 dxc 和 spirv-cross,可执行额外的翻译和编译。ProgramSettings: 着色器程序设置的容器。
- EntryPoints: 要构建的着色器入口点列表。如果省略 EntryPoints 设置,构建器将查找以 VS、PS 或 CS 开头或结尾的有效函数,分别对应顶点着色器、片段着色器和计算着色器。
- Name: 着色器入口点函数的名称,该函数在 AZSL 源文件 (
.azsl
) 中定义。 - Type: 着色器函数的类型。支持的类型有 “Vertex”, “Fragment”, 和 “Compute”。
- Name: 着色器入口点函数的名称,该函数在 AZSL 源文件 (
- EntryPoints: 要构建的着色器入口点列表。如果省略 EntryPoints 设置,构建器将查找以 VS、PS 或 CS 开头或结尾的有效函数,分别对应顶点着色器、片段着色器和计算着色器。
DrawList: 绘制列表的名称,使用此着色器的 DrawItems 应在此列表中排队等待渲染。此名称必须与要渲染的一个或多个通道(
*.pass
文件)中的绘制列表名称相匹配。
注意:这是着色器资产文件中可用元素的高级细分。了解完整规范的最可靠方法是检查
Gems\Atom\Code\Source\RPI.Edit\Shader\ShaderSourceData.cpp
中的ShaderSourceData::Reflect()
。有关上述各种呈现状态,如深度模版状态(DepthStencilState)和光栅状态(RasterState),请参见
Gems\Atom\RHI\Code\Source\RHI.Reflect\RenderStates.cpp
。
下面是着色器文件的示例,MinimalPBR_ForwardPass.shader
。
{
"Source" : "./MinimalPBR_ForwardPass.azsl",
"DepthStencilState" :
{
"Depth" :
{
"Enable" : true,
"CompareFunc" : "GreaterEqual"
},
"Stencil" :
{
"Enable" : true,
"ReadMask" : "0x00",
"WriteMask" : "0xFF",
"FrontFace" :
{
"Func" : "Always",
"DepthFailOp" : "Keep",
"FailOp" : "Keep",
"PassOp" : "Replace"
}
}
},
"CompilerHints" : {
"DxcDisableOptimizations" : false
},
"ProgramSettings":
{
"EntryPoints":
[
{
"name": "MinimalPBR_MainPassVS",
"type": "Vertex"
},
{
"name": "MinimalPBR_MainPassPS",
"type": "Fragment"
}
]
},
"DrawList" : "forward"
}