纹理映射和RTS单位地形突出显示
在上一节中,我们介绍了如何创建透明的全息着色器。 让我们看看我们还可以对曲面着色器做些什么,以及如何通过脚本与着色器进行交互。
第2.8章
表面着色器和纹理贴图,打包和混合纹理
显然本章已经过时了……
我在上面制作了纹理填充着色器,它在另一个混合纹理的每个点使用RGBA值混合了4个纹理,但是遇到了一个错误:
“在第19行,太多的纹理插值器将用于ForwardBase传递(最大10个中的11个)。”
我尝试了一些方法来使它起作用,但是无论如何似乎并没有经常使用这种技术,因此决定继续前进而不是停留在它上面。 如果其他人知道解决此问题的聪明方法,我很想知道解决方案!
第2.9章
表面着色器和纹理贴图,在地形周围创建一个圆
此着色器的目的是在例如RTS中的一个单元周围绘制一个圆,该圆与任意复杂度的对象一致。 绘制平面很容易,不需要自定义着色器-您可以将纹理应用于四边形-但是,如果尝试在地形复杂的几何体上绘制平面,则可能会看到它穿过山丘或悬停地面等其他重要事物
首先创建一些地形。 给它一些丘陵和山谷,但不要落伍。
这是新的着色器:
着色器的工作方式是获取圆的参数(其颜色,半径,宽度和中心位置),并确定地形纹理上任何点的当前世界位置是否在_ Radius + _RadiusWidth距离内我们给定的中心位置_Center。 如果是,则将地形上该点的颜色分配给_Color 。 否则,它将仅使用由地形确定的地形常用颜色。
制作新的Radius材质,并将新的着色器连接到该材质。 在之前创建的地形对象上的“地形设置”下,将“材质”属性更改为新的“ 半径”材质,以便对“ Radius.shader ”参数的任何更改都会影响地形的材质。 我忘了这首回合,所以不要像我这样笨拙。
您会注意到我也包括Radius.cs脚本。 这是我们在本书中第一次遇到它,但是关于Unity着色器的重要一点是,您可以从脚本中访问它们的输入变量。 在这种情况下,我已将此脚本附加到球体GameObject上,并将其位置用作新着色器上_Center参数的输入向量。 通过此脚本,还可以更改着色器绘制的圆的半径和颜色。
确保Radius材质上的Albedo( _MainTex)参数设置为地形使用的纹理! 毕竟,这就是我们要画一个红色圆圈的东西。 如果您的地形使用其他纹理,则不会出现红色圆圈。
考虑到此着色器的简单性,结果令人印象深刻。 我们的着色器开始变得不错了!