You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多物体共用材质时Shader Graph顶点位置节点异常问题

问题分析与解答

问题描述

使用Shader Graph对2D网格顶点做简单偏移时,物体在坐标原点表现正常,但偏离中心越远扭曲越严重;切换物体空间/世界空间后结果无变化,检测发现场景中物体相对空间未生效,实际基于世界原点计算。进一步发现仅多个物体共用同一材质时出现该问题,给每个物体分配独立材质实例后问题解决,但手写Shader无此现象,禁用动态批处理、调整SRP批处理配置均无效。

环境:URP 14.0.8、Unity 2022.3.5f、Shader Graph 14.0.8

原因分析

  1. Shader Graph实例化属性传递缺陷
    共享材质时,Shader Graph默认的部分节点(尤其是空间转换、顶点偏移相关节点)未正确绑定每个物体的实例化数据缓冲区。手写Shader会显式使用UNITY_MATRIX_M等内置矩阵处理每个物体的空间转换,而Shader Graph若未开启实例化支持或未标记相关属性为Per-Instance,会导致所有共享材质的物体复用同一空间转换参数,进而出现基于世界原点的错误偏移计算。

  2. Per-Instance属性未正确配置
    若在Shader Graph中自定义了偏移相关参数,未将其设置为Per-Instance属性,共享材质时所有物体会共用同一个参数值,无法基于自身物体空间做独立偏移,最终出现随物体位置变化的扭曲。

  3. SRP批处理兼容性问题
    URP的SRP批处理在处理共享材质时,会批量传递实例化数据,但Shader Graph的部分节点逻辑未兼容该流程,导致空间转换时错误忽略了每个物体的模型矩阵,直接使用世界空间原点作为参考。

解决建议

  • 打开Shader Graph的Graph Settings,勾选Enable GPU Instancing,确保共享材质时每个物体的实例化数据(如模型矩阵)能被正确传递。
  • 将所有需要每个物体独立的属性(如偏移强度、自定义空间参数)设置为Per-Instance属性(在属性面板中勾选Per Instance)。
  • 调整顶点偏移计算流程:先在物体空间完成顶点偏移操作,再通过Object to World节点转换为世界空间,避免直接使用世界空间坐标做偏移计算。

内容的提问来源于stack exchange,提问作者MrWorld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 00:19:54