如何将模型从Blender导出到Unity3d

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将模型从Blender导出到Unity3d相关的知识,希望对你有一定的参考价值。

参考技术A 为了与unity中坐标对应,我们可以在blender中对模型进行旋转,模型的blender中“顶视图”为模型的“前”(人物正面)。

blender“右视图”为“左”(人物的左侧),以此类推其他视图。

3
模型旋转好以后,我们“ctrl+a”菜单选择“位移”,然后勾选左边的“位移”、“旋转”、“比例”,这样可以应用模型当前旋转为初始状态。本回答被提问者采纳

将带有纹理的简单模型从 Blender 导出到 three.js

【中文标题】将带有纹理的简单模型从 Blender 导出到 three.js【英文标题】:Exporting a simple model with texture from Blender to three.js 【发布时间】:2014-09-12 01:20:23 【问题描述】:

注意:我想避免在 javascript 代码中修改模型,并在 Blender 中完成所有模型设计。

注意#2:虽然这个问题很长,但它实际上是一个基本问题(标题说明了一切)。以下是问题的“演练”。

我正在尝试将 Blender 模型作为 DAE 模型导出到 threejs.org,但纹理模型有问题(我也尝试过 JSON 和 OBJ+MTL 格式):

为了让事情变得更简单,以下是我执行(但失败)为包含立方体、相机和灯光的简单“启动文件”添加纹理的步骤:

    选择立方体 在材质面板中,确保选中立方体的默认材质。 在纹理面板中,确保选择了“Tex”(材质的默认纹理)。 对于此纹理,将 Type 设置为“图像或电影” 在面板的图像部分,打开一个grass1.jpg(512x512图像)作为纹理。 在 Mapping 部分中,将 Coordinates 更改为 UV。 将模型导出为 Collada 模型,选中“包含 UV 纹理”、“包含材质纹理”和“复制”复选框。

您可以在这些步骤中提到download blend, dae, and texture file。

然后我使用以下代码加载 DAE 模型,但出现此错误并且未显示多维数据集:

256 [.WebGLRenderingContext]GL 错误:GL_INVALID_OPERATION: glDrawElements:尝试访问属性 2 中超出范围的顶点 WebGL:错误太多,不会再向控制台报告此上下文的错误。

<script src="js/three.min.js"></script>
<script src="js/OrbitControls.js"></script>
<script src="js/ColladaLoader.js"></script>
<script>
    var scene, camera, renderer;
    init();
    animate();

    function init() 
        scene = new THREE.Scene();
        var WIDTH = window.innerWidth,
            HEIGHT = window.innerHeight;

        renderer = new THREE.WebGLRenderer(antialias:true);
        renderer.setSize(WIDTH, HEIGHT);
        document.body.appendChild(renderer.domElement);

        camera = new THREE.PerspectiveCamera(45, WIDTH / HEIGHT, 0.1, 10000);
        camera.position.set(10,10,10);
        scene.add(camera);

        window.addEventListener('resize', function() 
        var WIDTH = window.innerWidth,
            HEIGHT = window.innerHeight;
            renderer.setSize(WIDTH, HEIGHT);
            camera.aspect = WIDTH / HEIGHT;
            camera.updateProjectionMatrix();
        );  

        var loader = new THREE.ColladaLoader();

        loader.load( 'models/untitled.dae', function(geometry) 
            dae = geometry.scene;
            scene.add(dae);
            var gridXZ = new THREE.GridHelper(100, 10);
            gridXZ.setColors( new THREE.Color(0x8f8f8f), new THREE.Color(0x8f8f8f) );
            gridXZ.position.set(0,0,0);
            scene.add(gridXZ);
        );

        controls = new THREE.OrbitControls(camera, renderer.domElement);
    

    function animate() 
      requestAnimationFrame(animate);
      renderer.render(scene, camera);
      controls.update();
    
</script>

这是Blender在提到7个步骤后的截图:

更新:使用 JSON exporter for Blender 导出为 js 文件也不起作用,并导致同样的错误。

更新 2: 导出到 OBJ+MTL 并使用 OBJMTLLoader 加载它们后出现同样的错误。

【问题讨论】:

r.68 最近发布了,你真的应该切换到那个版本(不是说它解决你的问题,但在处理代码某处)。 @Leeft:当然!我目前在r67。会试一试的。 你能提供一个现场例子的链接吗? @WestLangley 当然:ztco.ir/emulate/index.html 您的网格几何体没有 UV,但您的网格材质有纹理。 【参考方案1】:

问题是您没有为模型设置 UV 坐标。默认情况下,每个面都应用整个纹理,但在混合器中导出时 UV 为空白。

您想专门设置 UV 坐标。这些是显示如何将纹理应用到每个面的坐标。

确保在搅拌机中对模型进行 UV 解包。进入编辑模式(选项卡),选择所有面,按“u”,然后单击“展开”。然后尝试重新导出。

Unwrap 只是一种方法,还有很多。在搅拌机中尝试不同的方法以获得您想要的结果(可能是“重置”选项)。

【讨论】:

谢谢!我也把这个问题发到了Blender.SE,但是那边的人帮不了我。这篇Wikipedia 和Blender 的文章也帮助我更好地理解了这个问题。 您好,抱歉这么晚了,我也遇到了类似的问题,但是UV贴图并没有解决问题。可能是因为我使用的是循环渲染引擎而不是搅拌机渲染? 您是否遇到与原始海报相同的错误?您可能应该提出一个新问题。如果您遇到“越界”类型错误(属性类型 2 是 UV),请确保您导出的模型具有 UV 坐标。

以上是关于如何将模型从Blender导出到Unity3d的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Blender 导出到 unity3d

将变形目标从 Blender 导出到 Three.js

如何从Blender导出fbx纹理以用于Monogame

如何将blender的模型和动画数据导出为"mbac"文件,"mtra"文件?

将 Blender 粒子系统头发导出到 Three.JS

导入到 SceneKit 时导出的 Blender 模型“面对”错误