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
 20- float3 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.
再来一波边缘检测 - Sobel 算子
