You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Unity Shader Graph修改顶点时的切线/副切线与法线映射问题

贝塞尔曲线变形网格的法线映射失效问题

我实现了一套Shader,可将线性道路网格沿贝塞尔曲线变形,同时支持常规UV映射与世界空间映射。但在随网格扭曲法线和切线后,部分区域出现着色异常。

排查结果

  • 已确认法线和切线的旋转逻辑正确,但网格存在镜像区域,必须借助tangent.w分量翻转副切线才能保证法线映射计算正确。
  • Shader Graph的Vertex输出仅支持3分量Tangent输入,无法传入副切线(即tangent.w),这是法线映射失效的核心原因。
  • 尝试手动覆盖UV会导致着色异常,推测是因为Shader仍在使用原始网格切线,而非自定义计算后的切线。

额外疑问

  • FBX与gltFast导入网格时,切线生成逻辑不一致,导致tangent.w的取值存在差异。
  • 调用Mesh.RecalculateTangents()确认镜像UV对应的tangent.w为-1,但URP Shader仍无法正确利用该值完成着色。
  • Shader Graph支持网格变形与自定义UV采样,但缺少避免法线映射出错的必要输入:Vertex节点没有副切线/tangent.w输入,也无法在此阶段修改UV;虽可在片元阶段修改UV,但切线无法在此调整。

相关材料

  • 自定义HLSL函数
  • Shader Graph截图
  • 着色异常区域截图
  • 法线与切线可视化截图

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

火山引擎 最新活动