ue4-shader-自定义shader代码hlsl
ue4-shader-自定义shader代码hlsl.
tips: 相关测试在 CustomNode 目录下
自定义表达式节点
- 官方文档: https://docs.unrealengine.com/en-us/Engine/Rendering/Materials/ExpressionReference/Custom
- How to use HLSL and UE4. Introduction (边缘检测 示例) - https://www.parallelcube.com/2017/12/02/hlsl-introduction/
右键新建一个 custom 节点
加入 hlsl 代码, 修改相关参数.
具体代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20float3 blur = Texture2DSample(In, InSampler, UV);
for (int i = 0; i < r; i++)
{
blur += Texture2DSample(In, InSampler, UV + float2(i * dist, 0));
blur += Texture2DSample(In, InSampler, UV - float2(i * dist, 0));
}
for (int j = 0; j < r; j++)
{
blur += Texture2DSample(In, InSampler, UV + float2(0, j * dist));
blur += Texture2DSample(In, InSampler, UV - float2(0, j * dist));
}
blur /= 2*(2*r)+1;
return blur;这里有几个需要注意的地方:
- 参数命名和hlsl代码中的必须完全一致, 大小写敏感
- Texture2DSample 中的第二个参数 InSampler 是与 In 相关的, 必须按照这样的写法来写. 输入贴图参数名是 XXX, 那么第二个参数就是 XXXSampler
- Texture2DSample 中的第一个参数 In 是一个 TextureObject, 而不是 TextureSample. 输入传入的是是一个 TextureSample, 会报错:
undeclared identifier 'TexSampler'
踩坑: 报错 undeclared identifier 'TexSampler'
传入的参数错误, 应该传入一个 TextureObject, 而不是 TextureSample.