首页>Game>source

我正在使用标准渲染管道和 unity_ObjectToWorld 着色器中用于某些计算的变量.在启用动态批处理之后,这些计算就被打破了.看来 unity_ObjectToWorld 批处理对象时将其设置为默认值.是设计使然吗? 我没有在文档中找到任何内容。

最新回答
  • 2021-1-4
    1 #

    这已在手册中进行了说明,其中描述了动态和静态批处理:

    Dynamic batching works by transforming all GameObject vertices into world space 在CPU上

    Internally, static batching works by transforming the static GameObjects into world space 并为其建立一个共享的顶点和索引缓冲区

    在这里:

    Some shaders (mostly ones that do object-space vertex deformations) do not work when Draw Call Batching is used – that’s because batching transforms all geometry into world space ,因此"对象空间"丢失了。

    自然地,由于批处理中的所有顶点在渲染之前都已预先转换为CPU侧的世界空间,因此 仅仅是身份矩阵.在GPU着色器中没有其他工作要做,并且由于批处理中的对象可能来自多个不同的对象空间,因此,这个变量无法保留有关所有对象的信息。

    我们在此之前有关于此主题的一些常见问题解答,并暗示了如何针对需要对象空间数据的着色器解决此问题,而不会完全放弃批处理。

    unity_ObjectToWorld

  • graphics:Opengl在500行中指向三角形问题
  • animation:导入到Unity中时,已装配的Blender模型变形