为什么我的顶点动画着色器在场景和游戏视图中产生不同的结果?

时间:2017-03-12 18:42:51

标签: c# unity3d shader

我最近一直在玩游戏,现在我已经编写了一个简单的顶点动画着色器,根据一些值取代了我所拥有的一些植被上的顶点。

到目前为止,它一直没问题,但是在使用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...)

1 个答案:

答案 0 :(得分:0)

您的模型在游戏视图中为dynamically batched。但在场景视图中,它并没有发生。

  

动态批处理:对于足够小的网格,它会在CPU上转换它们的顶点,将许多相似的顶点组合在一起,并一次性绘制它们。   因为它通过将所有GameObject顶点转换为CPU上的世界空间来工作,所以如果该工作小于进行绘制调用,那么这只是一个优势。

您可以向SubShader添加DisableBatching以禁用动态批处理。

  

当使用绘制调用批处理时,某些着色器(主要是执行对象空间顶点变形)不起作用 - 这是因为批处理将所有几何体转换为世界空间,因此“对象空间”丢失

     

DisableBatching标记可用于表示。有三个可能的值:“True”(始终禁用此着色器的批处理),“False”(不禁用批处理;这是默认值)和“LODFading”(当LOD淡入激活时禁用批处理;主要用于树)。

enter image description here