blender2.79,一些自己常用的小脚本

主要是在用blender的时候一些常用的的脚本
比如场景中很多的集体操作
比如我选择一堆的物体我想直接一起设置相同的缩放比怎么办呢?
我这里直接通过小脚本来,还有对所有的对象设置属性等等
这里就放了一些脚本,

python 有一些坑就是,缩进很坑,要小心使用的编辑器
我这里使用的是sublime Text

import bpy 
import os 


def GetSelectedObjects():
	selected_objects = [ o for o in bpy.context.scene.objects if o.select ]
	return selected_objects;



# 进行改名,大写变小写并修改前缀
def changeLowerName():
	objs = bpy.data.objects
	for (k,v) in  objs.items(): 
		if v.type == "MESH":
			oobj = objs[k]
			uname = oobj.name
			ss = uname[:2];
			if (ss == "HH_"):
				uname = "ks" + uname[2:];
			oobj.name = uname.lower();
			# print(ss);
			#oobj.name = oobj.name.lower();
	return;
# 对所有没有ks_前缀的添加前缀
def ChangeByAddName():
	objs = bpy.data.objects
	for (k,v) in  objs.items(): 
			if v.type == "MESH":
				uname = v.name
				ss = uname[:3];
				if (ss != "ks_"):
					uname = "ks_" + uname;
				v.name = uname;
				v.data.name = uname;
	return;
#统一设置父节点
def changeNameByParent(parentName):
	objs = bpy.data.objects
	uParent = objs[parentName];
	if (not uParent):
		return;
	for (k,v) in  objs.items():
		if (v.parent == uParent):
			v.data.name = v.name;
	return;
# 查询所有模型的资源地址
def findTexSource():
	objs = bpy.data.objects
	for (k,v) in  objs.items(): 
		if v.type == "MESH":
			mtl = v.active_material;
			tex = mtl.active_texture
			if (tex.type == "IMAGE"):
				print(tex.image.filepath);
				# source = tex.image.source
				# if (source.type == "FILE"):
				# print(source);


# findTexSource();

# 对所有模型设置相同的材质
def SetSameMtl(mtlName):
	uMtl = bpy.data.materials[mtlName]
	if (uMtl):
		objs = bpy.data.objects
		for (k,v) in  objs.items(): 
			if v.type == "MESH":
				v.active_material = uMtl
#打印使用的的材质有哪些
def FindNouseDifMtl(mtlName):
	objs = bpy.data.objects
	for (k,v) in  objs.items(): 
		if v.type == "MESH":
			mtl = v.active_material;
			if (mtl and mtl.name != mtlName):
				print(k, mtl.name);


# 查询不同的文理地址的材质并打印
def findDifMtl():
	testDict = {}
	objs = bpy.data.objects
	for (k,v) in  objs.items(): 
		if v.type == "MESH":
			mtl = v.active_material;
			tex = mtl.active_texture
			if (tex.type == "IMAGE"):
				testDict[tex.image.filepath] = True;

	for (k,v) in testDict.items():
		print(k);


# 查询用到指定材质的对象名字并打印
def findUseMtlMesh(mtlName):
	objs = bpy.data.objects
	for (k,v) in  objs.items(): 
		if v.type == "MESH":
			mtl = v.active_material;
			if (mtl.name != mtlName):
				print(k);

# 对所有模型对象进行缩放
def SetScaleAll(sc):
	objs = bpy.data.objects
	for (k,v) in  objs.items(): 
		if v.type == "MESH":
			v.scale = [sc,sc,sc]
# 对选择的模型设置统一的缩放比率
def SetSelectObjectsScale(sc):
	objs = GetSelectedObjects();
	for v in  objs: 
		if v.type == "MESH":
			v.scale = [sc,sc,sc]

# 设置所有模型的父节点
def SetParentAll(parentName):
	objs = bpy.data.objects
	oobj = objs[parentName];
	print(oobj)
	if (not oobj):
		return;
	print("==start==>")
	for (k,v) in  objs.items():
		if (parentName != k and v.type == "MESH" and not v.parent):
			v.parent = oobj;
# 针对一些模型设置父节点
def SetParentAll(parentName):
	objs = bpy.data.objects
	oobj = objs[parentName];
	print(oobj)
	if (not oobj):
		return;
	print("==start==>")
	for (k,v) in  objs.items():
		# uk = k[:2];
		# print("uk:"+uk)
		if (parentName != k and v.type == "MESH" and not v.parent and k[:3] == "ks_"):
			v.parent = oobj;

# 设置所有模型的z值
def SetZAll(zz):
	objs = bpy.data.objects
	print("==start==>")
	for (k,v) in  objs.items():
		if (v.type == "MESH"):
			location = v.location
			location[2] = zz;
			v.location = location;
# 对所有的模型的移动加锁
def UnlockAllLocation():
	objs = bpy.data.objects
	print("==start==>")
	for (k,v) in  objs.items():
		if (v.type == "MESH"):
			v.lock_location = [False, False, False]
	return;

# 打印选中的模型的节点名字
def UpdateSelectedObjects():
	objs = GetSelectedObjects();
	print(objs);
	print(len(objs))
	for obj in objs:
		print(obj.name);
	return;
# 设置所有选中的点的属性
def SetSelectedObjects(key,value):
	objs = GetSelectedObjects();
	for obj in objs:
		obj[key] = value;
	return;
# 设置所有选中的模型的父节点
def SetSelectedObjectsParent(parentName):
	objs = bpy.data.objects
	oobj = objs[parentName];
	objs = GetSelectedObjects();
	if (not oobj):
		print("can not find parent ")
		return;
	for obj in objs:
		obj.parent = oobj;
	return;
# 统一对对节点的名字进行修改
def FindAndCheckResetMesh():
	objs = bpy.data.objects
	for (k,v) in  objs.items():
		if (v.type == "MESH" and k[:3] == "ks_"):
			ukey = k;
			dataName = v.data.name;
			ii = ukey.find('.');
			if (dataName.find('.') > -1 and ii > -1):
				if (ii > -1):
					ukey = ukey[:ii];
				uObj = objs[ukey];
				v.data = uObj.data;
	return;

如果自己如果要拓展或者想使用可以直接

在这里插入图片描述

打开就可以查很多相关的api使用了

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Blender 2.79是一款开源的三维建模和动画软件,广泛应用于游戏开发、影视制作、建筑设计等领域。对于想要学习Blender软件的人来说,教程是提供指导和帮助的重要资源之一。 Blender 2.79的PDF教程包含了详细的软件功能介绍和操作步骤,可以帮助初学者快速上手和掌握基本技巧。教程主要以文字和图片的形式呈现,清晰明了,便于学习者理解和跟随。 PDF教程涵盖了Blender 2.79的各个方面,包括界面使用、模型建立、材质贴图、灯光布置、动画制作等内容。通过教程的学习,用户可以逐步了解Blender的功能特点和工作流程,逐步从简单的建模开始,掌握复杂的场景制作和动画效果的实现。 对于初学者而言,Blender的界面和功能可能会有些复杂和难以理解,但通过教程的系统学习,用户可以快速熟悉软件的操作和工作方式。同时,用户也可以根据自己的学习节奏和需求,自由选择教程中的内容和顺序,以提高学习效果。 PDF教程不仅提供了基础的操作指导,还可以帮助用户解决具体问题和应用需求。虽然Blender在网上有许多免费的视频教程和社区资源,但PDF教程可以通过打印或离线查看,方便用户随时学习和查阅。 总的来说,Blender 2.79的PDF教程是学习和掌握这一软件的有效工具。通过系统的学习和实践,用户可以逐步掌握Blender的操作技巧和创作方法,提升自己的设计和动画能力。无论是初学者还是有一定经验的用户,都可以通过教程找到适合自己的学习路径,并不断提升自己在Blender中的技术水平。 ### 回答2: Blender 2.79是一款功能强大的开源三维建模和动画软件。有许多关于Blender 2.79的PDF教程可以帮助用户学习和掌握使用这个软件的技巧和技术。 这些教程通常包括基础知识、工具和功能的介绍,以及如何使用Blender 2.79进行建模、材质和纹理的创建、动画和渲染等方面的指导。教程通常会从简单的概念和操作开始,逐步引导用户掌握复杂的技术和技巧。 通过阅读Blender 2.79的PDF教程,用户可以学习如何使用Blender 2.79进行基本的物体建模,创建复杂的材质和纹理,并运用动画技术制作生动的场景和角色。此外,教程还可以帮助用户了解Blender 2.79的渲染功能,从而提高作品的质量和逼真度。 Blender 2.79的PDF教程可以帮助用户解决在使用过程中遇到的问题,并提供一些实用的技巧和窍门。这些教程适合初学者和有一定经验的用户,可以根据自己的需求和水平进行选择。 总之,Blender 2.79的PDF教程是学习和掌握这款软件的重要资源。通过阅读教程,用户可以获得丰富的知识和技能,从而更好地应用Blender 2.79进行三维建模和动画制作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值