Skip to content

Commit

Permalink
移动设备着色器适配
Browse files Browse the repository at this point in the history
  • Loading branch information
linkliu committed Mar 22, 2023
1 parent 940eff8 commit 89d0670
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 0 deletions.
19 changes: 19 additions & 0 deletions _posts/shader_book/2023-02-26-移动设备着色器适配.md
Original file line number Diff line number Diff line change
Expand Up @@ -144,3 +144,22 @@ tags: [U3D, Shader,Cookbook,中文版]
<br>
优化的最终结果显示我们几乎注意不到视效质量上的不同,但我们却减少了这个着色器在屏幕上绘制的次数。我们在下一个知识点将会学习如何确定着色器的绘制次数,这里我们关心的是我们通过更少的数据消耗而取得了相同的效果。所以当你在创建自己的着色器的时候也要留意这一点。下图向我们展示了我们的着色器的最终效果:
![diagram](https://linkliu.github.io/game-tech-post/assets/img/shader_book/diagram74.png){: .shadow width = "90%" }

***
<br>

- **原理介绍**
现在我们了解了一些能优化我们着色器的方法,现在我们更进一步的探索,去了解这些技术为什么会起作用,并且看一看一些其他的你自己可以尝试的技术。
<br>
我们留意一下每一个变量,当我们定义它们的时候,保存在它们每一个中的数据的大小。如果你熟悉编程,你应该理解你可以定义不同类型大小的值和变量。也就是说一个浮点类型事实上占用了最大的内存消耗。下面的描述向我们更多的陈述了这些变量的细节:
- **Float**:一个浮点类型是一个32位精度的值并且是我们看到的三种数据类型中最慢的。它还有与之对应的其他浮点类型值 **float2****float3****float4**
- **Half**:half 变量类型是一个缩减了位数的16位浮点值,它适合用来保存UV和颜色值,相比于float类型它要快很多。跟上面的浮点类型类似,half类型也有与之对应的其他类型,它们是 **half2****half3**,和 **half4**
- **Fixed**:fixed 类型是三种类型中大小最小的,但它可以用于光线计算和颜色计算,它也有与之对应其他fixed类型:**fixed2****fixed3****fixed4**

<br>
在优化我们的简单着色器的第二个阶段中,我们在 **#pragma** 声明中定义了一个 **noforwardadd**。它是一个基础开关,它会自动告诉Unity任何使用这个特定着色器的游戏对象,只会接收单一方向上的逐像素的光。任何其他被这个着色器计算的光线,都会被强制作为逐顶点光线,被Unity自身生成的球谐值处理。当我们在在场景中放置一个其他类型的光线来照射我们的球体的时候,这一点尤其明显,因为我们的着色器是使用法线贴图做的逐像素操作。
<br>
这很棒,但是如果你想要在场景中添加很多的方向光,并且想控制使用它们中的哪一个作为主要的逐像素光会怎样呢?很好,如果你又留意的话,每一个光都有一个 **Render Mode** 下拉框。如果你点击这个下拉框,你会看到你又好几个选项可以设置。它们分别是 **Auto****Important****Not Important**。你可以选中一个光线,通过设置渲染模式为 **Important** 来告诉Unity,比起逐顶点光,这个光线更应该考虑作为一个逐像素光,反之亦然。如果光线的渲染模式保持 **Auto**,那就是让Unity来决定最佳的处理方案。
<br>
在你的场景中另外再放置一个光源,并且移除掉着色器当前的主纹理。你将会发现第二个点光源【这里不知道作者的这个点光源什么时候加的,操作步骤里面又没有】对法线贴图没有反应,仅有我们最开始创建的方向光有反应。这里的概念是,通过将其他额外的光作为顶点光来计算从而节省了逐像素操作,通过将主要的方向光作为逐像素光来计算从而节省了性能。下图演示了这个概念,可以看到点光源对法线贴图没有反应:
![diagram](https://linkliu.github.io/game-tech-post/assets/img/shader_book/diagram75.png){: .shadow width = "90%" }
Binary file added assets/img/shader_book/diagram75.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 89d0670

Please sign in to comment.