Unity 导入FBX提取材质贴图

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

需求

当我们在建模软件制作好fbx,导入Unity时,会发现fbx有自带的材质,贴图,蒙皮,网格等多种资源,但是使用起来很不方便,所以想,在向unity导入fbx之后,直接就把里边的材质和贴图提取出来,并且不是默认的 Lit ,而是其它的自己写的shader

成果展示

FBX导入时提取材质

背景知识

当我们在Unity中选中一个fbx资产的时候,可以在右侧的检视面板看到这样的一些按钮
Unity 导入FBX提取材质贴图
具体的解释可以看官方文档
https://docs.unity3d.com/cn/current/Manual/FBXImporter-Materials.html#material_description

其中我们比较关心的是:
Import via MaterialDescription (Experimental) 导入时,Unity 使用 FBX 文件中嵌入的材质描述来生成材质。与先前的导入方法相比,此方法可提供更准确的结果,并且支持更广泛的材质类型
Use External Materials (Legacy) 将导入的材质提取为外部资源。
Naming 定义材质的命名策略。
Search 定义 Unity 尝试在使用 Naming 选项定义的名称时查找现有材质的位置。

另一部分需要了解的是Unity里的 AssetPostprocessor 类,这个类可以帮助我们实现一些,关于导入导出资产时的相关回调
比如说:

OnPreprocessModel() 在导入模型(.fbx、.mb 文件等)之前获取通知。

OnPostprocessModel() 在模型完成导入时获取通知

OnPreprocessMaterialDescription 这个函数是在把 ModelImporter.materialImportMode 设置为 ImportViaMaterialDescription时,Unity 才会调用此函数

还有其他的一些方法可以在官方文档中查看
https://docs.unity.cn/cn/current/ScriptReference/AssetPostprocessor.html

代码实现

 	List< string> materialName =new List<string>() { };
    Dictionary<string, string> matTextureMap = new Dictionary<string, string>() { };
	//当材质为通过description时调用 根据描述获得相关信息
    void OnPreprocessMaterialDescription(MaterialDescription description, Material material, AnimationClip[] materialAnimation)
    {      
        materialName.Add( description.materialName);

        List<string> props = new List<string>();
        description.GetTexturePropertyNames(props);

        TexturePropertyDescription textureProperty;
        foreach (string item in props)
        {
            if (description.TryGetProperty(item, out textureProperty))
            {
                if (!matTextureMap.ContainsKey(description.materialName))
                {
                    matTextureMap.Add(description.materialName, textureProperty.texture.name);
                }
            }
        }
        
    }
 void OnPreprocessModel()
    {   
        if (!assetPath.ToLower().EndsWith(".fbx"))
        {
            return;            
        }       

        ModelImporter mi = assetImporter as ModelImporter;
        //设置fbx ModelImporter的相关属性
        mi.materialImportMode = ModelImporterMaterialImportMode.ImportViaMaterialDescription;
        mi.materialLocation = ModelImporterMaterialLocation.External;
        mi.materialName = ModelImporterMaterialName.BasedOnMaterialName;
        mi.materialSearch = ModelImporterMaterialSearch.Everywhere;    
    }
//提取材质 设置shader属性 赋贴图
 void OnPostprocessModel(GameObject g)
    {
        foreach (string matName in materialName)
        {
            string matPath = assetPath.Substring(0, assetPath.LastIndexOf('/') + 1) + "Materials/" + matName + ".mat";

            Material m = (Material)AssetDatabase.LoadAssetAtPath(matPath, typeof(Material));

            Shader shader = Shader.Find("X51/透明顶点颜色");

            if (shader == null)
            {
                Debug.Log("没找到shader");
                return;
            }

            if (m != null)
            {
                m.shader = shader;
                if (matTextureMap.ContainsKey(matName))
                {
                    string textPath = assetPath.Substring(0, assetPath.LastIndexOf('/') + 1);
                    textPath += g.name + ".fbm/" + matTextureMap[matName] + ".dds";

                    Texture texture = (Texture)AssetDatabase.LoadAssetAtPath(textPath, typeof(Texture));

                    m.SetTexture("_Tex1", texture);                   
                }
            }
        }

使用方法

把写好的代码放在Unity的Editor文件夹下,就能直接拖入fbx,看到成果啦文章来源地址https://www.toymoban.com/news/detail-481966.html

到了这里,关于Unity 导入FBX提取材质贴图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Blender如何给fbx模型添加材质贴图并导出带有材质贴图的模型

    推荐:使用 NSDT场景编辑器快速助你搭建可二次编辑的3D应用场景 此教程适合新手用户,专业人士直接可直接绕路。   本教程中介绍了利用Blender建模软件,只需要简单几步就可以为模型添加材质贴,图,并且导出带有材质的模型文件。 1、第一步,打开Blender软件,导入模型

    2024年02月13日
    浏览(50)
  • Mac Unity导入FBX模型时出现材质丢失,模型为白膜的情况

    刚开始学习unity,很多地方的都不懂,导入FBX模型,别人电脑上都是正常的,就我的是白膜,为此我还更换了unity编辑器的版本,换了和同事相同的版本,然而并没有什么用,网上的解决方法都试过了,没有效果,在自己的探索之下,终于把模型的材质完好的贴上了,其实并不

    2024年02月11日
    浏览(60)
  • 3dmax导出fbx模型壳材质贴图丢失

    目录  1、问题描述  2、解决  3、操作  4、导出模型检验 1、问题描述 从3dmax导出的fbx模型没有贴图,如下图所示。  2、解决 查看模型材质,发现是壳材质,壳材质包含原始材质和烘焙材质,仅保留原始材质赋给模型即可,但存在缺点:亮度缺失。  3、操作 首先点选原始材

    2024年02月11日
    浏览(70)
  • Unity如何将fbx格式模型的材质拆分、编辑模型

    如图所示的fbx模型,我们没法直接编辑其材质,需要分离出来 按如图所示操作, 点击应用,可以看到材质已经分离出来,可以编辑了

    2024年02月11日
    浏览(51)
  • 【Unity基础】2.网格材质贴图与资源打包

        大家好,我是Lampard~~     欢迎来到Unity基础系列博客,所学知识来自B站阿发老师~感谢      第一次接触3D物体的话,会觉得好神奇啊,这个物体究竟是由什么组成的呢?其实3D物体基本就是由网格,材质和纹理3个部分构成的 (1)网格     那什么是网格?首先需要知道

    2024年01月22日
    浏览(44)
  • 【Unity3D】使用 FBX 格式的外部模型 ( 向 Unity 中添加 FBX 模型 | 向 Scene 场景中添加 FBX 模型 | 3D 物体渲染 | 3D 物体材质设置 )

    Unity 中使用的 3D 模型格式为 FBX , 使用如下建模软件 可制作该类型模型 : 3Dmax Maya ZBrush Cinema4D Blender 建模完成后 , 将 3D 模型导出为 FBX ( .fbx ) 格式 即可在 Unity 中使用 ; 在 Project 文件窗口 中的 Asstes 目录 下 , 创建一个模型目录 Models , 将 模型文件直接从文件系统中拖到该目录中

    2023年04月15日
    浏览(82)
  • 【Unity】【FBX】如何将FBX模型导入Unity

    网上能够找到不少不错的FBX模型资源,大大加速游戏开发时间。如何将这些FBX导入Unity呢? 打开Unity项目文件,进入场景。 点击Projects面板,右键选择Import New Assets 选中FBX文件后导入。Assets文件夹中就会出现相应资源。 这个时候导入的FBX只是模型,没有任何材质。继续导入

    2024年02月03日
    浏览(48)
  • 【瑞模网】Unity3D基础:贴图与材质球

    一、贴图与材质球 材质(Material):物体的质地,物体看起来是什么做的 贴图(Texture):普通的材质图片 贴图 + 着色器(Shader) = 材质球 所谓着色器(Shader)实际上就是一小段程序

    2023年04月12日
    浏览(68)
  • Unity - 实现模型动态伸长缩短,贴图不变形(材质球参数篇)

     思路为修改模型材质球的Tiling参数,根据与自身localScale的值得到合适的比例,再修改Tiling值

    2024年02月03日
    浏览(67)
  • FBX动画导入Unity

    1.1 第一章 Unity导入FBX模型动画但不能动 随着AR/VR等技术发展,摸一手Unity动画总是不亏的 示例:电脑自带的3d查看器点开能自动播放的fbx文件(仅作演示) 3d查看器打开fbx文件的动画示例视频 点击导入的文件→ Materials →Location中选 Use External Materials(Legacy) → Apply 点击导入的

    2024年02月05日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包