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

Unity生成Voronoi Mesh出现畸变,移除Shader高度图后消失求因

Voronoi Mesh畸变与高度图的关联原因分析

核心原因:顶点着色器高度偏移+三角扇拓扑的UV分布冲突

你遇到的Mesh畸变,本质是高度图的应用逻辑和Mesh拓扑不匹配导致的:

  1. 三角扇拓扑的天然缺陷:你的代码用三角扇(以第一个顶点为中心,依次连接其余顶点)构建Voronoi区域Mesh,这种拓扑会让区域内的三角形大小差异极大——中心附近的三角形极小,边缘的三角形却异常宽大。
  2. 顶点级高度采样的放大扭曲:如果你的Shader是在顶点着色器中通过UV采样高度图,直接修改顶点Y轴位置,那么边缘大三角形的两个顶点之间,UV对应的高度图位置跨度会非常大,顶点高度值的突变会被插值放大,最终导致Mesh表面出现扭曲畸变。而移除高度图后,顶点位置不再被修改,自然就不会有畸变。

次要排查点

  • 预制体Mesh的资源冲突:你当前是先修改原始预制体的MeshFilter再实例化,这可能导致多个实例共享错误的Mesh数据。正确流程应该是先实例化预制体,再给实例的MeshFilter赋值:
    var prefab = Resources.Load<GameObject>("test");
    var instance = Instantiate(prefab, Vector3.zero, Quaternion.identity);
    MeshFilter meshfilter = instance.GetComponent<MeshFilter>();
    meshfilter.mesh = mesh;
    
  • UV对应关系验证:虽然你同时反转了顶点和UV列表,确保了一一对应,但可以尝试去掉Reverse()操作,确认是否是顶点顺序(顺时针/逆时针)导致的法线异常,间接影响高度图的显示效果。

解决方法

  1. 将高度采样移至片段着色器:放弃在顶点着色器中修改顶点位置,改用片段级的高度采样(比如视差映射Parallax Mapping),让每个像素独立采样高度图,避免顶点插值带来的扭曲。
  2. 优化Mesh拓扑:不要用简单的三角扇,而是用专业的多边形三角化算法(比如Unity自带的Triangulator工具类)将Voronoi多边形拆分成大小均匀的三角形,缩小顶点间的UV跨度,让高度插值更平滑。
  3. 调整UV映射方式:如果必须保留顶点级高度偏移,可以尝试将UV改为基于区域自身的局部坐标(而非全局坐标),比如以Voronoi站点为原点计算局部UV,减少大三角形内的UV跨度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:35:20