diff --git "a/_posts/shader_book/2023-02-26-\347\247\273\345\212\250\350\256\276\345\244\207\347\235\200\350\211\262\345\231\250\351\200\202\351\205\215.md" "b/_posts/shader_book/2023-02-26-\347\247\273\345\212\250\350\256\276\345\244\207\347\235\200\350\211\262\345\231\250\351\200\202\351\205\215.md" index 3f0a782f271..20166449a24 100644 --- "a/_posts/shader_book/2023-02-26-\347\247\273\345\212\250\350\256\276\345\244\207\347\235\200\350\211\262\345\231\250\351\200\202\351\205\215.md" +++ "b/_posts/shader_book/2023-02-26-\347\247\273\345\212\250\350\256\276\345\244\207\347\235\200\350\211\262\345\231\250\351\200\202\351\205\215.md" @@ -117,4 +117,30 @@ tags: [U3D, Shader,Cookbook,中文版] o.Alpha = c.a; o.Normal = UnpackNormal(tex2D(_NormalMap, IN.uv_NormalMap)); } - ``` \ No newline at end of file + ``` + 现在我们优化了我们的变量,接下来我们将利用Unity内建的 **光线函数变量(lighting function variable)**,这样我们就可以控制光线该如何被着色器处理。通过这样做,我们极大的减少着色器需要处理的光线数量。按照下面的代码修改着色器中的 **#pragma** 声明: + `#pragma surface surf SimpleLambert noforwardadd` +
+ 我们之后还会通过让法线贴图和漫反射纹理共享UV来继续优化着色器。为了这个优化,我们简单的通过在 **UnpackNormal()** 函数中用 **_MainTex** 的UV替换掉 **_NormalMap** 的UV,从而修改着色器的 **UV查找(UV lookup)**: + ```c# + void surf (Input IN, inout SurfaceOutput o) + { + // Albedo comes from a texture tinted by color + fixed4 c = tex2D (_MainTex, IN.uv_MainTex); + o.Albedo = c.rgb; + o.Alpha = c.a; + o.Normal = UnpackNormal(tex2D(_NormalMap, IN.uv_MainTex)); + } + ``` + 4. 由于我们已经不再需要法线贴图的UV了,所以我们需要确保在 **输入结构体(Input struct)** 中移除掉跟法线贴图UV相关的代码: + ``` c# + struct Input + { + half2 uv_MainTex; + }; + ``` + 5. 最后,我们通过告诉着色器只需要工作在一些特定的渲染器中从而进一步优化我们的着色器: + `#pragma surface surf SimpleLambert exclude_path:prepass noforwardadd` +
+ 优化的最终结果显示我们几乎注意不到视效质量上的不同,但我们却减少了这个着色器在屏幕上绘制的次数。我们在下一个知识点将会学习如何确定着色器的绘制次数,这里我们关心的是我们通过更少的数据消耗而取得了相同的效果。所以当你在创建自己的着色器的时候也要留意这一点。下图向我们展示了我们的着色器的最终效果: + ![diagram](https://linkliu.github.io/game-tech-post/assets/img/shader_book/diagram74.png){: .shadow width = "90%" } diff --git a/assets/img/shader_book/diagram74.png b/assets/img/shader_book/diagram74.png new file mode 100644 index 00000000000..65b7430f5e6 Binary files /dev/null and b/assets/img/shader_book/diagram74.png differ