繁体   English   中英

为什么我的Vertex Animation着色器在“场景”和“游戏”视图中产生不同的结果?

[英]Why does my Vertex Animation shader produce different results in Scene and Game view?

我最近一直在玩游戏,现在我写了一个简单的顶点动画着色器,它基于一些值在我拥有的某些植被上置换顶点。

到目前为止,一切正常,但是与“场景与游戏”并排查看游戏时,我遇到了一些问题。 由于某种原因,它们会产生不同的结果,我无法弄清楚。 游戏和场景摄像机都设置为“等轴测”。

现在的样子: GIF链接

在右侧(场景),您可以看到植被的外观。

这是相关的代码位:

// 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...)

您的模型会在“游戏”视图中动态批处理 但是在“场景”视图中不会发生。

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

您可以将DisableBatching添加到SubShader中以禁用动态批处理。

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

DisableBatching标签可以用来暗示这一点。 共有三个可能的值:“ True”(始终禁用此着色器的批处理),“ False”(不禁用批处理;这是默认设置)和“ LODFading”(当LOD褪色处于活动状态时禁用批处理;主要在树上使用)。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM