Unity ShaderGraph Input节点实战指南:从基础到高级应用

发布时间:2026/6/7 16:03:34

Unity ShaderGraph Input节点实战指南:从基础到高级应用 1. ShaderGraph Input节点入门指南第一次打开ShaderGraph的Input节点列表时我完全被各种专业术语搞晕了。UV、Position、Normal这些词听起来高大上其实理解起来并不难。Input节点就像是Shader的传感器负责从外部获取各种数据。比如你想让材质随着时间变化颜色就需要Time节点想让材质对光照有反应就需要Normal节点。在Unity 2021 LTS版本中ShaderGraph的Input节点被重新分类整理现在主要分为8大类Basic基础输入Geometry几何输入Gradient渐变输入Lighting光照输入Matrix矩阵输入PBR物理渲染输入Scene场景输入Texture纹理输入每个大类下又包含若干具体节点比如Geometry下就有UV、Position、Normal等常用节点。理解这些节点的分类逻辑能帮助我们在需要时快速找到合适的节点。2. 基础输入节点实战技巧2.1 Vector节点的四种维度Vector节点是ShaderGraph中最基础也最常用的节点之一。根据维度不同分为Vector 1到Vector 4四种类型// 在Shader代码中对应的声明方式 float _Vector1; // 一维 float2 _Vector2; // 二维 float3 _Vector3; // 三维 float4 _Vector4; // 四维一维Vector通常用来控制单一数值参数比如材质的透明度二维Vector常用于UV坐标操作三维Vector适合处理位置、旋转等空间数据四维Vector则多用于颜色(RGBA)或四元数旋转。我在制作一个水面Shader时就同时用到了这四种VectorVector1控制波浪高度Vector2控制UV动画速度Vector3控制法线方向Vector4控制水面颜色和透明度2.2 Time节点的五种时间参数Time节点提供了五种不同的时间参数每种都有独特用途Time从场景开始累计的时间适合做持续动画Sine Time正弦波动的时间适合周期性变化Cosine Time余弦波动的时间与Sine Time相位差90度Delta Time上一帧到当前帧的时间差适合平滑过渡Smooth Delta Time平滑处理后的帧时间差动画更流畅实测发现用Sine Time和Cosine Time组合可以轻松实现呼吸灯效果// 伪代码示例 float brightness (sin(_SineTime) 1) * 0.5;3. 几何输入节点深度解析3.1 UV节点的四种空间模式UV节点不只是用来贴图那么简单它支持四种空间模式Default默认UV直接使用模型自带的UV坐标Raw未经归一化处理的原始UVCenter以(0.5,0.5)为中心的UV空间Tiled平铺模式的UV空间在做UV动画时我习惯用Tiled模式配合Time节点// 伪代码示例 float2 uv UV_Tiled _Time.y * float2(0.1, 0);3.2 Position节点的坐标空间转换Position节点最强大的功能是可以在四种坐标空间之间自由转换Object Space模型本地坐标系World Space世界坐标系View Space摄像机坐标系Tangent Space切线空间在制作角色边缘光效果时需要将位置从Object Space转换到View Space// 伪代码示例 float3 viewPos TransformWorldToView(TransformObjectToWorld(Position_Object));4. 高级应用PBR材质定制4.1 Dielectric Specular节点材质预设Dielectric Specular节点内置了6种常见电介质材质的F0反射率预设Common0.04大多数非金属材质Water0.02Ice0.018Glass0.04-0.08Rusted Metal0.3-0.4Custom自定义值制作玻璃材质时直接选择Glass预设比手动输入数值更准确高效。4.2 Metal Reflectance节点金属类型Metal Reflectance节点提供了10种真实金属的反射率数据Iron铁0.56Silver银0.95Aluminum铝0.83Gold金1.0Copper铜0.95Chromium铬0.6Nickel镍0.6Titanium钛0.55Cobalt钴0.6在制作中世纪盔甲时混合使用Iron和Chromium可以做出非常真实的金属质感。5. 纹理输入节点性能优化5.1 Sample Texture 2D节点的采样优化Sample Texture 2D节点支持两种采样模式Default标准纹理采样Normal法线贴图专用采样使用法线贴图时一定要选择Normal模式这样能正确处理切线空间转换。我曾在项目中错误使用Default模式采样法线贴图导致光照计算完全错误调试了整整一天才发现问题。5.2 Sampler State节点的过滤模式Sampler State节点的三种过滤模式直接影响渲染效果和性能Point最近邻过滤适合像素风游戏Linear线性过滤大多数情况的最佳选择Trilinear三线性过滤效果最平滑但性能消耗最大在移动端项目中我通常使用Linear模式在性能和画质间取得平衡。只有对画质要求极高的主机游戏才会考虑Trilinear。6. 实战案例UV动画效果实现6.1 基础UV动画最简单的UV动画只需要Time节点和UV节点创建UV节点和Time节点用Add节点将UV和Time输出相加连接到Sample Texture 2D的UV输入// 伪代码实现 float2 uv UV _Time.y * float2(0.1, 0);6.2 多图层混合UV动画更复杂的UV动画可以结合多个纹理层创建两套UV动画使用不同速度和方向用Blend节点混合两个纹理采样结果添加Vertex Color控制混合权重// 伪代码实现 float2 uv1 UV _Time.y * float2(0.1, 0); float2 uv2 UV _Time.y * float2(0, 0.05); float4 tex1 SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv1); float4 tex2 SAMPLE_TEXTURE2D(_DetailTex, sampler_DetailTex, uv2); float4 final lerp(tex1, tex2, IN.vertexColor.r);7. 顶点色遮罩高级技巧7.1 基础顶点色应用Vertex Color节点最常见的用法是作为遮罩在3D软件中为模型绘制顶点色在ShaderGraph中使用Vertex Color节点获取颜色数据作为Lerp节点的Alpha参数控制混合// 伪代码实现 float3 result lerp(colorA, colorB, IN.vertexColor.r);7.2 顶点色通道组合RGBA四个通道可以组合使用实现复杂效果R通道控制主颜色混合G通道控制细节纹理强度B通道控制高光强度A通道控制透明度我在一个角色Shader中就使用了这种技术用单个顶点色贴图控制了材质的多项属性大幅减少了纹理采样次数。8. 屏幕后效实现方案8.1 使用Scene Color节点Scene Color节点可以直接获取当前屏幕渲染结果创建Fullscreen Shader Graph添加Scene Color节点对颜色进行后处理操作如模糊、调色// 伪代码实现 float4 sceneColor SAMPLE_SCENE_COLOR(UV); float4 processedColor DoSomeEffect(sceneColor);8.2 结合Scene Depth节点Scene Depth节点可以获取像素深度信息实现景深等效果采样Scene Color和Scene Depth根据深度值计算模糊强度应用不同强度的模糊效果// 伪代码实现 float depth SAMPLE_SCENE_DEPTH(UV); float blurAmount saturate((depth - _FocusDistance) * _BlurStrength); float4 blurredColor ApplyBlur(sceneColor, blurAmount);在ShaderGraph中调试复杂效果时我习惯先用简单的颜色渐变可视化中间数据比如用不同颜色表示不同的深度范围确认逻辑正确后再实现完整效果。这种方法能大幅减少调试时间特别是在处理屏幕空间效果时特别有用。

相关新闻