在unity中结合FBX Exporter合并mesh并导出Fbx

这篇具有很好参考价值的文章主要介绍了在unity中结合FBX Exporter合并mesh并导出Fbx。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目标是把多个mesh合并成一个或者几个,降低drawcall,但是又不想标记成static的,也不想进3dmax合并的一个尝试。
首先在Window -> Package Manager里安装FBX Exporter,我的unity版本是2020,2019应该也可以
在unity中结合FBX Exporter合并mesh并导出Fbx
安装成功后发现右键GameObject,可以导出fbx了。
在unity中结合FBX Exporter合并mesh并导出Fbx

接下来就是合并多个mesh

假设我有这么100个cube,我想让他合并成1个mesh
在unity中结合FBX Exporter合并mesh并导出Fbx
首先直接用Fbx Export导出试试
在unity中结合FBX Exporter合并mesh并导出Fbx
导出后还是很多个cube,和我想要的不一样
在unity中结合FBX Exporter合并mesh并导出Fbx

我目前的想法是读取每个mesh的顶点 nv 法线信息,然后triangles在新的mesh的时候,每次加上之前点数量,感觉上连面就没有问题了。
然后不同的材质需要分不同的mesh。

首先要获取所有选中物体的mesh,之后我暂时根据material的名字记录在一个Dictionary<string, List> meshByMaterial里(以后应该把string改成 直接的material)

合并之后的mesh放在新创建的物体下

       GameObject newObjsRoot = new GameObject(name + "__combine");
        newObjsRoot.transform.position = Vector3.zero;
        foreach (KeyValuePair<string, List<MeshFilter>> keyPair in meshByMaterial)
        {
            //材质一样的mesh 放到一个父物体下
            currentMaterialParent = new GameObject(keyPair.Key).transform;
            currentMaterialParent.transform.SetParent(newObjsRoot.transform);

            CombineMeshes(keyPair.Value);
        }

在每次创建新mesh时,先清空之前的数据

    private static void ClearMeshAttribute()
    {
        vertices = new List<Vector3>();
        uvs = new List<Vector2>();
        normals = new List<Vector3>();
        indices = new List<int>();
        // addMaxIndics = 0;

        tangents = new List<Vector4>();
        addMaxIndics = 0;

    }

获取每个mesh的顶点在世界坐标下的位置


        for (int i = 0; i < newVertices.Length; i++)
        {
            vertices.Add(meshObj.transform.TransformPoint(newVertices[i]));
        }

存储一个GameObject缩放方向的V3,Obj要是有负数的缩放,法线和traingle顺序都需要改。

 Vector3 fixV3 = new Vector3(
                     meshObj.transform.localScale.x < 0 ? -1 : 1,
                     meshObj.transform.localScale.y < 0 ? -1 : 1,
                     meshObj.transform.localScale.z < 0 ? -1 : 1
                 );

存储法线

        for (int i = 0; i < newNormals.Length; i++)
        {
            newNormals[i] = new Vector3(
                newNormals[i].x * fixV3.x,
                newNormals[i].y * fixV3.y,
                newNormals[i].z * fixV3.z
            );
        }

// local scale 是负数 要反转面

   
        if (fixV3.x * fixV3.y * fixV3.z < 0)
        {
            for (int i = 0; i < newIndices.Length; i += 3)
            {
                int change = newIndices[i + 1];

                newIndices[i + 1] = newIndices[i + 2];
                newIndices[i + 2] = change;

            }

        }

然后每个mesh的Indices中的每个数要加上之前存储mesh的顶点数。完事之后再把当前mesh的顶点数存下来

 for (int i = 0; i < newIndices.Length; i++)
        {
            int index = newIndices[i] + addMaxIndics;
            indices.Add(index);

        }
          addMaxIndics = vertices.Count;

然后发现,顶点数过多的时候,面会有很奇怪的破损,查了下有人说unitymesh有最大顶点限制65535,所以如果超过这个数字,就新建一个mesh存储。

    if (newVertices.Length + vertices.Count >= maxVerticesCount)
        {
            CreateNewMesh(material);
            ClearMeshAttribute();
        }

最终CreateNewMesh给mesh赋值,生成

点击Window/combineMeshEditor
在unity中结合FBX Exporter合并mesh并导出Fbx
场景里出现了在unity中结合FBX Exporter合并mesh并导出Fbx
FBX Exporter 导出后,可看出是一个mesh
在unity中结合FBX Exporter合并mesh并导出Fbx

TODO 用unity 的CombineMeshes来完成以上功能

项目地址 https://gitee.com/go_x/unity-project.git文章来源地址https://www.toymoban.com/news/detail-409037.html

到了这里,关于在unity中结合FBX Exporter合并mesh并导出Fbx的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【unity】 untiy中如何导出FBX

    打开unity 菜单中Window -----Package Manager 点击下面的Adv… 勾上Enable 选择 I understand 关掉窗口 选择下面的 Unity Registry 点击安装 安装好以后 GameObject — Export To FBX…就可以了 选中你需要导出的文件 ,就可以直接导出FBX文件了 知道你存放的路径就看到了

    2024年02月15日
    浏览(46)
  • Unity导出FBX模型中的动画片段

    导出选中的FBX中的AnimationClip文件到文件夹中

    2024年02月13日
    浏览(45)
  • Unity场景素材导出为 FBX文件的方法

    一、Unity场景素材导出为 FBX文件的方法:http://t.csdn.cn/Xyjxe 二、Unity场景素材导出为 OBJ文件的方法:http://t.csdn.cn/08RY3 三、Unity地形导出为 OBJ文件的方法 (大家可以打开我的博客主页进行查看此系列其它文章) 文章目录 系列文章目录 前言 一、Unity导出FBX文件 安装插件 网盘下

    2024年02月05日
    浏览(72)
  • Unity运行时导出FBX模型的解决方案

    本文章是写如何在运行时导出场景中的游戏对象到FBX格式的文件。该解决方案支持导出游戏对象在Hierarchy下的层次结构、Transform组件信息、材质贴图、静态Mesh网格、SkinnedMesh、骨骼信息以及动画等。也支持将场景中的摄像机组件以及灯光组件导出到FBX模型。 目前该解决方案仅

    2023年04月08日
    浏览(55)
  • Unity导出FBX到blender-最后选择Binary

    1.打开文件 -window-package....  2.点右上角的设置符号-选择 advanced..... 3.打勾    4.左键选择Package:in project,选 unity registry 5.下滑找到FBX...   6.install 7.在hierarchy选择自己要导出的模型 8.在gameobject-export.....   9.跳出来这个选项选择-Binary-我也不知道为什么反正ascll导入不了blender 10

    2024年02月07日
    浏览(43)
  • Houdini>RBD(搅拌大米效果)并导出FBX到unity

    动图录制软件:Cockos Incorporated | LICEcap 参考链接:导出除了ABC外,比较小的FBX文件用法 一、引用模型的处理:         1、大米 模型创建 + 多层复制 + 碰撞刚体         2、容器 模型创建 + 底面 + 碰撞刚体         3、玻璃棒 模型创建 + 添加搅动动画 + 碰撞刚体 二

    2024年02月08日
    浏览(46)
  • Blender模型资源如何正确导出FBX并导入Unity(一):3D模型

      目录 前言 一、问题分析 二、正确搭配 总结 第一次使用Blender制作游戏资源并导出FBX到Unity时,往往会出现不正确的缩放,旋转等问题,本文对一些常用的导出选项做一些说明 软件版本:Blender3.4 Unity2021 我们先看一下如果使用Blender默认配置导出FBX到Unity会怎么样 问题包括

    2024年02月08日
    浏览(173)
  • Blender个人使用记录【导出FBX格式】【导入Unity中出现白模问题(Blender向)】

    以下说明仅用于记录个人使用Blender和Unity时遇到的问题及其解决方法(并不一定适用所有人),通过B站、CSDN、知乎等地方搜索了一系列有关解决模型导入Unity出现白模的问题,发现不少对新手而言讲解的不明白不清楚的,亦或是不实用的。故将自己遇到的问题记录下来以供参

    2024年02月01日
    浏览(72)
  • 教你如何使用GPA导出模型,另送一个 GPA CSV2MESH Tool in unity

    以前写过一篇:Unity - RenderDoc 抓帧导出 FBX(带UV) 我估计GPA是怕收律师函,因为如果 GPA 将所有资源一键提取,一键导出,那么可能很多开发商会告他 可以看到也好几个帖子问 GPA 官方,都是被官方忽悠回答了: UV MAPS capture GPA: No UV map support? (除了这个,我自己还搜索过还

    2023年04月09日
    浏览(39)
  • golang 自定义exporter - 服务连接数 portConnCount_exporter 导出器

    需求: 1、计算当前6379 、3306 服务的连接数 2、可prometheus 语法查询 下面代码可直接使用: 注: 1、windows 与linux的区分 第38行代码 localAddr := fields[1] //windows为fields[1] , linux为fields[3] 2、如需求 增加/修改/删除 端口,可参考第70 71行即可 代码 生成 二进制文件 执行 网页访问

    2024年02月13日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包