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

Ursina引擎如何加载MTL文件为自定义3D模型着色

报错核心原因
  • .mtl是OBJ格式模型配套的材质描述文件,仅记录材质颜色、反光度、关联纹理路径等参数,本身不是存储像素数据的纹理图片。报错是因为代码把MTL文件作为纹理传入加载逻辑,引擎识别到mtl不属于支持的图片格式,直接抛出异常。
  • Vectary导出OBJ格式模型时会同步生成三类文件:.obj网格文件、.mtl材质配置文件、若干.png/.jpg格式的纹理贴图,三类文件的路径匹配错误是加载失败的核心诱因。
正确加载操作步骤

1. 导出与文件整理

  • 从Vectary导出模型时选择OBJ格式,导出设置中勾选「导出材质」「导出单独纹理文件」,不要选择打包为单文件的不兼容格式。
  • 导出完成后检查文件:确保你有和模型同名的.obj、.mtl文件,以及MTL中引用的所有纹理图片。用记事本打开MTL文件,找到所有map_Kd开头的行,把行尾路径里的绝对地址、多层文件夹前缀全部删掉,只保留纹理图片的纯文件名(比如把C:/export/tex/friendly_diffuse.png改成friendly_diffuse.png)。
  • 新手最稳妥的文件放置方式:把obj、mtl、所有纹理图片放在同一个独立文件夹内,不要分散存放。

2. 正确加载代码

Ursina加载OBJ模型时会自动读取同目录下同名的MTL文件,不需要手动指定加载MTL,禁止把MTL路径传给texture参数,这是触发本次报错的直接原因。
参考代码如下:

from ursina import *
from pathlib import Path

app = Ursina()

# 替换为你存放模型、材质、纹理的文件夹路径
application.asset_folder = Path(__file__).parent / "your_model_folder"

# 仅需传入obj文件名,MTL和关联纹理会自动绑定
model_entity = Entity(
    model="friendly.obj",
    scale=1
)

EditorCamera()
app.run()

3. 异常排查

  • 若模型加载后显示为全白/无材质:再次检查MTL文件内map_Kd行标注的纹理文件名,和文件夹内实际的纹理文件名是否完全一致(注意文件名大小写,部分引擎版本大小写敏感)。
  • 若提示纹理路径不存在:可以把所有纹理图片移动到Ursina项目默认的textures文件夹,obj和mtl文件移动到默认的models文件夹,保持MTL内纹理名为纯文件名即可自动识别。
  • 不要尝试将MTL文件转换为图片格式,MTL本身不存储像素数据,转换后无法正常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:12:52