Blender使用经验总结
1.在使用Python二次开发时,可以借助Script面板中输出操作调用的python script信息。比如你在场景中添加一个模型,面板中可以看到操作代码(有些代码可能是看不到)。想写某个代码,可以先操作下,把生产的过程语句复制script编辑器中运行(有些时候需要根据情况稍微改一下代码,至少给你写代码相当于粗略写了一下)
2.是用自动补齐功能。比如在使用bpy.ops.wm.obj_import不知道后面的参数.你可以将代码复制到python命令行窗口,bpy.ops.wm.obj_import( 然后右键补齐,就能列出函数后面的参数.在编写python代码时很有用。
遇到的问题
1.py.ops.wm.obj_import这个接口在3.3以后的版本,到入的obj再到出的gltf再gltfviewr中浏览。模型很暗。bpy.ops.import_scene.obj导出的模型虽然光照没问题,但是纹理有错位。
2.如何让模型显示自己真实位置。【Object】|【Set Origin】|【Origin to Geometry】
3.解决导出的gltf在gltfViewer中模型暗的问题,主要是将Principled BSDF中材质Transmission属性由1改为0即可:
def resetMeteriaParam():
for obj in bpy.data.objects:
if obj.type=='MESH':
material_slots = obj.material_slots
for index in range(0,len(material_slots)):
material= material_slots[index].material
print(material)
principled_node=None
for node in material.node_tree.nodes:
if node.type=="BSDF_PRINCIPLED":
principled_node=node
break
if principled_node is not None:
inputs = node.inputs #访问 Material 对象的 node_tree。 并获取节点“Principled BSDF”并获取节点的输入
for i in inputs:
if i.name=="Transmission":
transmission_value=inputs["Transmission"].default_value
print(transmission_value)
inputs["Transmission"].default_value=0
print(inputs["Transmission"].default_value)
print(i)
if i.name=="Transmission Weight":
inputs["Transmission Weight"].default_value=0
if i.name=="Metallic":
inputs["Metallic"].default_value=0
后续补充:
Obj和Fbx导出gltf有个参数metallicFactor也会影响明暗程度。obj默认时0明亮,fbx导出时默认是1暗的。所以为避免默认情况。同意设置为0.
参考
Cesium中glb模型颜色暗淡解决
Blender Python
- Blender 目录下的scripts可以作为优先学习资源
- 其他参考链接
Blender Python程序化建模教程
[Blender Python] 模型文件导入导出
Blender材质处理Python API
How to get material with Python API in Blender
https://s-nako.work/category/blender/ (这个博客园写了大量关于Python 操作Blender代码)
Blener中执行python几种方式
-
Python Console
是python 命令交互窗。
- 按Tab键推测可能后续代码
- 选中命令行语句右键可以补齐代码
-
Scripting 工具栏
可以编写python并进行调试
-
Blender执行外部 python 脚本
Blender.exe -b -P xxx.py
BSDF相关知识汇总
【基于物理的渲染(PBR)白皮书】(一) 开篇:PBR核心知识体系总结与概览
【基于物理的渲染(PBR)白皮书】(二) PBR核心理论与渲染光学原理总结
【基于物理的渲染(PBR)白皮书】(三)迪士尼原则的BRDF与BSDF相关总结
【渲染】Disney BSDF 深度解析
浙公网安备 33010602011771号