Files
engine/docs/zh/graphics/material/shaderLab/renderState.mdx
SwayYan 66116ba675 Refactor ShaderLab documention (#2611)
* refactor: shaderlab doc
2025-04-18 11:46:46 +08:00

88 lines
2.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 渲染状态设置
---
在 Galacean 引擎中,每个 Shader `Pass` 代表一次 GPU 绘制过程,因此我们可以对每个 `Pass`
的渲染状态进行单独设置。在 ShaderLab 中我们有2种设置方式。
### 1. 显示赋值
```glsl showLineNumbers {4, 10}
...
Pass "0" {
...
BlendState blendState {
Enabled = true;
ColorBlendOperation = BlendOperation.Add;
...
}
BlendState = blendState;
...
}
...
```
如全局变量[章节](./global)所示,通过在各个层级全局变量域中声明渲染状态变量,然后通过 `BlendState = blendState` 进行指定。
### 2. 全局变量域中声明指定
```glsl showLineNumbers {4}
...
Pass "0" {
...
BlendState {
Enabled = true;
ColorBlendOperation = BlendOperation.Add;
...
}
...
}
...
```
<Callout type="info">
1. `DepthState`、`StencilState` 和 `RasterState` 的设置同理。
2. 全局变量域也可以是 `SubShader` 或`Shader` 层级,其作用域跟其他全局变量遵循同一[规则](./global/#全局变量作用域)。即如果是在 `SubShader` 层级全局变量域中设置的渲染状态,会对该 `SubShader` 下所有 `Pass` 生效。
</Callout>
## 渲染状态属性设置
单个渲染状态属性设置同样也有2种方式。
```glsl showLineNumbers {7,9}
Shader "Demo" {
...
BlendState customBlendState
{
Enabled = true;
// 常量赋值方式
SourceColorBlendFactor = BlendFactor.SourceColor;
// 变量赋值方式
DestinationColorBlendFactor = material_DstBlend;
}
...
Pass "0" {
...
BlendState = customBlendState;
...
}
}
```
上述案例中对于 `BlendState` 属性赋值展示了 2 种方式: **常量赋值** 和 **变量赋值** 方式:
### 常量赋值
赋值语句右端为指定的对应引擎枚举变量譬如BlendFactor.SourceColor。
<Callout type="warning">
渲染队列的设置例外: `RenderQueueType = Transparent;`
</Callout>
### 变量赋值
赋值语句右端为任一变量名,变量具体值可由开发者通过脚本方式在运行时通过 `ShaderData.setInt("material_DstBlend", BlendFactor.SourceColor)` API 进行指定。