我最近一直在玩游戏,现在我已经编写了一个简单的顶点动画着色器,根据一些值取代了我所拥有的一些植被上的顶点。
到目前为止,它一直没问题,但是在使用Scene& amp;游戏。由于某些原因,它们会产生不同的结果,我无法弄明白。游戏和场景相机都设置为等轴测。
以下是它现在的样子: GIF Link
在右侧(场景),您可以看到植被应该如何看。
这里是相关的代码位:
// Distance from vertex to model origin.
fixed localDistance = distance(v.vertex.xyz, fixed3(0,0,0));
// Some displacement values.
fixed s = sin(_Time.y * _WindY + v.vertex.x);
fixed c = cos(_Time.y * _WindY + v.vertex.z);
// Add the values to the Y of the vertex.
v.vertex.y += _Shakiness * s * c * localDistance * 0.2;
o.vertex = UnityObjectToClipPos(v.vertex);
(Then we pass the vertex on to the fragment, and so on...)
答案 0 :(得分:0)
您的模型在游戏视图中为dynamically batched。但在场景视图中,它并没有发生。
动态批处理:对于足够小的网格,它会在CPU上转换它们的顶点,将许多相似的顶点组合在一起,并一次性绘制它们。 因为它通过将所有GameObject顶点转换为CPU上的世界空间来工作,所以如果该工作小于进行绘制调用,那么这只是一个优势。
您可以向SubShader添加DisableBatching以禁用动态批处理。
当使用绘制调用批处理时,某些着色器(主要是执行对象空间顶点变形)不起作用 - 这是因为批处理将所有几何体转换为世界空间,因此“对象空间”丢失
DisableBatching标记可用于表示。有三个可能的值:“True”(始终禁用此着色器的批处理),“False”(不禁用批处理;这是默认值)和“LODFading”(当LOD淡入激活时禁用批处理;主要用于树)。