【我的渲染技术进阶之旅】解决Cinema 4D制作的3D模型无法导入Blender的问题

这篇具有很好参考价值的文章主要介绍了【我的渲染技术进阶之旅】解决Cinema 4D制作的3D模型无法导入Blender的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、问题描述

今天UI输出了个3D模型给我,
blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D

然后我导入到Blender的时候出错,如下所示:

  1. 选择导入-> Wavefront(.obj) 去导入obj格式的3D模型
    blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D
  2. 选择对应的obj文件,然后点击【导入OBj】按钮
    blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D
  3. 好嘛,直接报错,如下所示:
    blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D
  4. 错误一闪而过,不慌,错误窗口消失之后,点击下面这个X按钮,即可查看详情
    blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D
  5. 查看详情,看起来像是加载material材质出错了
    blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D
Python: Traceback (most recent call last):
  File "C:\Program Files\Blender Foundation\Blender 3.2\3.2\scripts\addons\io_scene_obj\__init__.py", line 135, in execute
    return import_obj.load(context, **keywords)
  File "C:\Program Files\Blender Foundation\Blender 3.2\3.2\scripts\addons\io_scene_obj\import_obj.py", line 1233, in load
    create_materials(filepath, relpath, material_libs, unique_materials,
  File "C:\Program Files\Blender Foundation\Blender 3.2\3.2\scripts\addons\io_scene_obj\import_obj.py", line 428, in create_materials
    load_material_image(context_material, context_mat_wrap,
  File "C:\Program Files\Blender Foundation\Blender 3.2\3.2\scripts\addons\io_scene_obj\import_obj.py", line 171, in load_material_image
    _generic_tex_set(mat_wrap.base_color_texture, image, 'UV', map_offset, map_scale)
  File "C:\Program Files\Blender Foundation\Blender 3.2\3.2\scripts\addons\io_scene_obj\import_obj.py", line 165, in _generic_tex_set
    nodetex.translation = translation
  File "C:\Program Files\Blender Foundation\Blender 3.2\3.2\scripts\modules\bpy_extras\node_shader_utils.py", line 20, in wrapper
    return func(self, *args, **kwargs)
  File "C:\Program Files\Blender Foundation\Blender 3.2\3.2\scripts\modules\bpy_extras\node_shader_utils.py", line 792, in translation_set
    self.node_mapping.inputs['Location'].default_value = translation
ValueError: bpy_struct: item.attr = val: sequences of dimension 0 should contain 3 items, not 2

二、分析问题

2.1 查看material材质的mtl文件

打开rabbit.mtl查看内容如下所示,从第一行注释我们可以看出来是由Cinema 4D制作的3D模型
blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D

# WaveFront *.mtl file (generated by Cinema 4D)

newmtl AnimalFace_Rabbit
Ka 0 0 0
map_Ka -o 0.000 1.000 AnimalFace_Rabbit_Albedo.png
Kd 0.80000001192093 0.80000001192093 0.80000001192093
map_Kd -o 0.000 1.000 AnimalFace_Rabbit_Albedo.png
Ke 0 0 0
map_Ke -o 0.000 1.000 AnimalFace_Rabbit_Albedo.png
Ks 0.25 0.25 0.25
Ns 40
illum 7
norm -o 0.000 1.000 AnimalFace_Rabbit_Normal.png

2.2 mtl文件介绍

在我的博客 【我的OpenGL学习进阶之旅】关于3D模型知识之:什么是obj文件和mtl文件 里面有介绍了mtl文件的格式,这里重新介绍一下:


# Blender MTL File: 'None'
# Material Count: 1

newmtl Scene_-_Root
Ns 225.000000
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.0 0.0 0.0
Ni 1.450000
d 1.000000
illum 2
map_Kd diffuse.jpg
map_Bump normal.png
map_Ks specular.jpg

mtl 文件结构说明:

  1. newmtl xxx表示定义一个名为 xxx 的材质;如我们代码使用了Scene_-_Root这个材质
  2. Ns 表示材质的反射指数,反射指数越高则高光越密集,取值范围在一般为 [0,1000];
  3. Ni 表示材质的折射值(折射率),定义当前材料中的光密度(也称为折射率)。值的范围可以从 0.001 到 10。值 1.0 表示光在穿过对象时不会弯曲。玻璃的折射率为 1.5 ;
  4. d 表示指定溶解因子(dissolve),即这种材料溶解到背景中的程度。 1.0 的因子是完全不透明的。 0.0 的因子是完全透明的。
  5. Tr 表示材质的透明度(与 d 的取值相反),默认值为0.0(完全不透明);
  6. Tf 表示材质的滤光折射率,三维向量表示;
  7. illum 表示材质的光照模型;使用数值指定照明模型。有关 illum 关键字的更多详细信息,请参见下面的注释。值 0 表示最简单的照明模型,依赖于由 map_Kd 语句中指定的纹理贴图修改的材质的 Kd(如果存在)。该资源的编译器认为照明模型的选择与 3D 打印用途无关,并且在某些软件应用程序导入时会被忽略。例如,threejs Javascript 库中的 MTL Loader似乎忽略了 illum 语句。
  8. Ka 表示材质的环境光(Ambient Color)(r,g,b);以说明整个场景中分散的光(有关phong反射模型的Wikipedia条目),使用RGB组件的0到1之间的值。
  9. Kd 表示材质的散射光(Diffuse Color)(r,g,b);它通常将大部分颜色贡献给对象参见 [Wikipedia entry for Diffuse Reflection]。在此示例中,Kd 表示灰色,它将被 map_Kd 语句中指定的彩色纹理贴图修改
  10. Ks 表示材质的镜面光(Apecular Color)(r,g,b);表面闪亮且镜面状的颜色[有关镜面反射的Wikipedia条目]。
  11. Ke 表示材质的发射光,它与环境光,散射光和镜面光并存,代表材质发出的光量;
  12. map_Ka 表示为材质的环境反射指定纹理文件(纹理采样值与环境光相乘作为输出颜色的一部分加权);
  13. map_Kd 表示为材质的漫反射指定纹理文件;
  14. map_Ke 表示为材质的发射光指定纹理文件;
  15. map_d 表示为材质的透明度指定纹理文件;
  16. bump 表示指定材质的凹凸纹理文件,凹凸纹理修改表面法线,用于凹凸纹理的图像表示相对于平均表面的表面拓扑或高度(没用过)。

MTL Files Material Definitions for OBJ Files
blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D
blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D

2.3 对比mtl文件和mtl语法并修改

2.3.1 norm不对

  • 对比找出语法错误
    通过对比,我们发现有个属性似乎不是mtl的语法,即norm,如下所示:
    blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D

  • 正确语法
    通过对比,感觉norm应该对应的是map_Bump ,
    参考 https://en.wikipedia.org/wiki/Wavefront_.obj_file
    blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D

    # some implementations use 'map_bump' instead of 'bump' below
    map_bump lemur_bump.tga
    
    # bump map (which by default uses luminance channel of the image)
    bump lemur_bump.tga
    

    使用map_bump 或者bump 都可以。

  • 修改代码如下:

    blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D

    # WaveFront *.mtl file (generated by Cinema 4D)
    
    newmtl AnimalFace_Rabbit
    Ka 0 0 0
    map_Ka -o 0.000 1.000 AnimalFace_Rabbit_Albedo.png
    Kd 0.80000001192093 0.80000001192093 0.80000001192093
    map_Kd -o 0.000 1.000 AnimalFace_Rabbit_Albedo.png
    Ke 0 0 0
    map_Ke -o 0.000 1.000 AnimalFace_Rabbit_Albedo.png
    Ks 0.25 0.25 0.25
    Ns 40
    illum 7
    map_Bump -o 0.000 1.000 AnimalFace_Rabbit_Normal.png
    
    
    
    

改完之后重新让Blender导入,还是有问题

2.3.2 map_Ka、map_Kd 、map_Ks、map_Bump 的格式不对

2.3.2.1 正确语法
  • https://en.wikipedia.org/wiki/Wavefront_.obj_file
    blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D

  • MTL material format (Lightwave, OBJ)

blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D
map_Ka,map_Kd,map_Ks语法,关于-o的参数说明如下所示:
blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D
在渲染期间,Ka、Kd 和 Ks 值以及 map_Ka、map_Kd 和 map_Ks 值根据以下公式混合:

 result_color=tex_color(tv)*decal(tv)+mtl_color*(1.0-decal(tv))

其中 tv 是纹理顶点

result_color” is the blended Ka, Kd, and Ks values.

“result_color”是混合的 Ka、Kd 和 Ks 值。

下面列出语句的选项。

-blendu on | off
-blendv on | off
-clamp on | off
-imfchan r | g | b | m | l | z
-mm base gain
-o u v w
-s u v w
-t u v w
-texres value

正确示例:

blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D

newmtl bumpy_leath
 Ka spectral ident.rfl 1
 Kd spectral ident.rfl 1
 Ks spectral ident.rfl 1
 illum 2
 map_Ka brown.mpc
 map_Kd brown.mpc
 map_Ks brown.mpc
 bump -bm 2.000 leath.mpb

blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D

 Ka spectral ident.rfl 1
 Kd spectral ident.rfl 1
 Ks spectral ident.rfl 1
 illum 2
 map_Ka -o 0.200 0.000 0.000 logo.mpc
 map_Kd -o 0.200 0.000 0.000 logo.mpc
 map_Ks -o 0.200 0.000 0.000 logo.mpc
2.3.2.2 修改代码

参考上面的语法说明,要么删除冗余参数,要么填写3个参数,

这里我们简单的标记的代码不需要,删了,如下所示:
blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D
修改之后代码如下:
blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D

# WaveFront *.mtl file (generated by Cinema 4D)

newmtl AnimalFace_Rabbit
Ka 0 0 0
map_Ka  AnimalFace_Rabbit_Albedo.png
Kd 0.80000001192093 0.80000001192093 0.80000001192093
map_Kd  AnimalFace_Rabbit_Albedo.png
Ke 0 0 0
map_Ke  AnimalFace_Rabbit_Albedo.png
Ks 0.25 0.25 0.25
Ns 40
illum 7
map_Bump  AnimalFace_Rabbit_Normal.png

改完之后重新让Blender导入,至于可以导入了,如下所示:
blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D

2.5 重新导出obj格式和mtl文件

发现Cinema 4D生成的obj格式和mtl文件有问题,虽然改为之后可以导入到Blender中,但是感觉怪怪的,那么我就重新导出Blender生成的obj格式和mtl文件。

  1. 选择导出-> Wavefront(.obj) 去导入obj格式的3D模型
    blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D

  2. 选择保存的目录和自定义保存的模型名称
    blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D

  3. 点击【导出OBJ】,这样就导出来了
    blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D

  4. 对比两个目录
    blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D
    对比mtl文件发现,Blender重新导出的格式看着排版舒服多了
    blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D
    obj文件也重新输出,对比如下:
    blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D

  5. 复制纹理图片
    先将两个遗漏的纹理图片复制到新目录
    blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D
    blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D
    复制完后,只有obj和mtl文件不一样
    blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D

  6. 修改mtl文件
    我们发现重新导出的mtl文件,还引用的老目录的那两个纹理图片,而且路径还是绝对路径,这得修改,因为我们最终是要将这个obj模型渲染到手机上。

blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D
修改完后代码如下:

# Blender MTL File: 'None'
# Material Count: 1

newmtl AnimalFace_Rabbit.004
Ns 39.999995
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.250000 0.250000 0.250000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Bump AnimalFace_Rabbit_Normal.png
map_Kd AnimalFace_Rabbit_Albedo.png
map_Ke AnimalFace_Rabbit_Albedo.png

blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D
路径是相对路径,直接指向复制过来在同一个目录下的两个纹理图片
blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D
7. 重新导入Blender验证

将修改后的mtl文件保存,然后重新导入obj文件,展示如下,正常
blender mtl文件,# 计算机图形学,3d,blender,ui,cinema 4D
好吧,这样我们就保存了一份由Blender输出的3D模型。

三、总结

Cinema 4D制作的3D模型无法导入Blender的问题,这一次是因为材质.mtl文件有语法问题,通过分析解决并重新导出由Blender制作的3D模型。文章来源地址https://www.toymoban.com/news/detail-784293.html

  • Wavefront .obj file
  • MTL material format (Lightwave, OBJ)

到了这里,关于【我的渲染技术进阶之旅】解决Cinema 4D制作的3D模型无法导入Blender的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【我的OpenGL学习进阶之旅】Assimp库支持哪些3D模型格式?

    在通过LearnOpenGL学习 OpenGL 知识的时候,有介绍如何通过Assimp来加载3D模型,并了解了Mesh网格的概念。 Assimp Mesh网格 3D模型 在 https://learnopengl-cn.github.io/03%20Model%20Loading/01%20Assimp/ 中有介绍使用 Assimp 库来加载 3D 模型 .obj 格式。 一个非常流行的模型导入库是Assimp,它是 Open Asse

    2024年02月05日
    浏览(30)
  • 【C4D】OC渲染器常见问题以及解决方案

    很多刚入坑的朋友,在安装或者打开oc时总是会遇到渲染器报错的问题。今天我也给大家总结了几个最常见的的oc报错以及解决方式,强烈建议收藏,一定会有用得上的时候! 如果oc提示这样的弹框,说明你需要在OC的设置中勾选试用GPU设备. 解决方案:OC设置中-设备-勾选用

    2024年02月04日
    浏览(323)
  • C4D-学习笔记-4-渲染(ProRender渲染介绍)

    HDR天空贴图旋转 选中材质,坐标,就可以旋转了。 平行光/无限光 可以通过旋转来调整平行光的角度。 平行光 没有投影 解决办法,左上角选项,投影,打开 渲染器差异 标准:标准渲染器 物理:更真实的渲染器,效率更高 硬件OpenGL:暂时不用了解 ProRender :显卡渲染器 P

    2024年02月05日
    浏览(38)
  • C4D R26 渲染学习笔记(1):C4D版本选择和初始UI框介绍

    C4D通过R来进行版本区分,现在2023年5月22日最新版的是R26。说一下特殊版本。 C4D版本 介绍 特点 R19 OC快乐版3.07最高版本,OC是C4D最具性价比的渲染器,OC学习成本低,渲染速度快,但是注意OC 3.07只支持10系N卡,20系及以上N卡只能用正版OC 白嫖OC渲染器 R21 和R19区别不大,但是教

    2024年02月13日
    浏览(27)
  • 支持C4D的GPU云渲染平台有哪些?

    目前国内支持GPU云渲染的农场较多,但能“稳定支持”的农场相对较少,还是受限于技术稳定性。 ​ 国内支持GPU云渲染的几家大平台分别是:瑞云、炫云、渲云、蓝海创意云、renderG、渲染101; 稳定支持的渲染农场,以软件C4D+OC为例,仅瑞云、炫云和渲染101平台了! 关于计

    2024年02月19日
    浏览(33)
  • 【C4D基础】导入图片、选择工具、线性切割、显示与渲染、旋转

    CINEMA 4D R18 学习笔记 方法一: 单击鼠标中键(选择视图) → 【模式】→ 【视图设置】 → 【背景】→【…】 方法二(快捷键): 选择视图(F2顶视图)/(F3右视图)/(F4正视图)/(F5所有视图) → shift + v → 【背景】→【…】 提示:(F1透视视图)下无法添加背景图片,

    2024年02月05日
    浏览(31)
  • 我的AI之旅开始了

    知道重要,但是就是不动。 今天告诉自己,必须开始学习了。 用这篇博文作为1月份AI学习之旅的起跑点吧。 从此,无惧AI,无惧编程。 AI之路就在脚下。 AI,在我理解,就是让机器变得更加智能,能够以人思考和行为的方式去实行某种操作,更大更快更强。 编程和AI的关系

    2024年01月16日
    浏览(34)
  • 我的单片机入门之旅

    单片机作为现代电子技术的重要组成部分,广泛应用于各个领域。而作为一个初学者,我对单片机一无所知。但是,通过不断的学习和实践,我逐渐掌握了单片机的基本概念和使用方法。在我的单片机入门之旅中,经历了许多困难和挑战,但也取得了很大的进步和收获。 在开

    2024年03月22日
    浏览(35)
  • 我的苹果手机的越狱之旅

    最近因为业务需要,需要一台越狱手机;就把测试机6plus拿来做越狱使用,在此之前先大致说明一下越狱的原理、应用、流程以及可能存在的问题: 越狱是指通过一些技术手段,使iOS设备可以访问到iOS系统的全部控制权,从而可以实现更多的自定义和操作。以下是苹果手机越

    2024年02月11日
    浏览(31)
  • 我的Office Outlook插件开发之旅(一)

    目的 开发一款可以同步Outlook邮件通讯录信息的插件。 方案 VSTO 外接程序 COM 加载项 VSTO 外接程序对Outlook的支持,是从2010版本之后开始的。 VSTO 4.0 支持Outlook 2010以后的版本,所以编写一次代码,就可以在不同的版本上运行。 COM 加载项十分依赖于.NET Framework框架和Office的版本

    2024年02月08日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包