近期做了一个玲珑宝塔,在做低模的时候为了与高低模的ID完美匹配,需要将所有对象的名字进行重命名整理。其实对于重命名这一块儿3DMAX已经有对应的功能,但是整理出来后没有任何逻辑可言,我就想着如果可以从上到下(按顺序)进行命名多好,于是,就有了这个文章。当然,若你还有其他需要定制的需求欢迎联系,见文末方式。
3DMAX与脚本
一、需求概述
目前高模已经有了,需要根据高模拓一个低模出来。为了最后高低模烘焙方便,每个模型部件的高模都需要标注high,对应的低模都需要标注low,就像这样:
tower_high_001
tower_low_001
在创建低模之前,需要对高模的名字进行整理。在MAX中,已经有对应的功能可以实现重命名,比如这里:
但是这样重命名有个弊端,你会发现编号1的模型在这里,编号2的模型就飞到了其他地方,杂乱无章,如果可以根据模型坐标的高度对模型进行重命名,就大善了。对,就是这个需求!
二、3DMAX使用脚本
1. 关于3DMAX与python
并不是所有版本的MAX都支持Python,经过了解发现:
从 3ds Max 2021 开始,Autodesk 引入了对 Python 3 的原生支持。
比如我用的2025版本,内部的python引擎是V3.11.4
当然,如果你用的版本比较低,建议去研究一下MAXScript,也不是很难,本篇主要讲解一下Python。
2. 关于交互式输入法
在MAX中直接按下F11,就会出现这个窗口:
记得选Python,就可以了,然后输入自己的脚本,按下Shift + Enter,就可以开始执行了。
我这里给你放一段测试代码,创建一个box,可以试一下子。
import pymxs
rt = pymxs.runtime
# 创建一个正方体
mybox = rt.Box()
mybox.name = "MyBox"
# 设置正方体的位置和大小
mybox.position = rt.Point3(0, 0, 0)
mybox.length = 10
mybox.width = 10
mybox.height = 10
# 更新视口
rt.redrawViews()
# 打印正方体的信息
print(f"Created box with name: {mybox.name}, Position: {mybox.position}, Size: {mybox.length}, {mybox.width}, {mybox.height}")
3. 关于脚本式输入法
同样的位置,可以打开脚本编辑器,记得选择是python:
同样,可以直接把代码写在这里,但是注意,这里运行代码方式稍微不同,快捷键是Ctrl + E:
这种方式适合大型脚本,交互式输入适合小型脚本。
对了,你也可以将上边创建box的代码放在这里试一下,很nice。
三、开始进行重命名
介绍完怎么使用,我们开始讲一下怎么应用于实战。
1. 选择所有物体
因为我接下来的代码是基于选中物体的,所以就直接先选中所有物体。
2. 打开脚本输入编辑器
输入这串代码并运行。
import pymxs
rt = pymxs.runtime
# 获取所有选定的对象
selected_objects = rt.selection
# 按对象的 Z 坐标(高度)排序
sorted_objects = sorted(selected_objects, key=lambda obj: obj.position.z)
# 按顺序重命名对象
for i, obj in enumerate(sorted_objects):
# 格式化索引为三位数
index = f"{i + 1:03d}"
obj.name = f"tower_high{index}"
print("Objects renamed to Tower_highXXX format.")
只要序号连续,位置就是临近的,岂不完美。至于代码解释,啊这,篇幅有限就不过多讲解了,后续工作过程中若遇到值得分享的代码,我会及时发出来,如果你有需要定制的内容,可以随时联系。
四、文章最后
注意咯,我在这里,有问题或有需要可以随时联系。
(若找不到主图可以直接搜“第五设计”店铺)