天晴动作工具组文档
首页
C3相关
天晴盒子
脚本文档
开发公约
  • MAXScript2020 Help (opens new window)
  • 3dsmax-2023-MAXScript Help (opens new window)
  • 3dsmax-2023-Max-Python Help (opens new window)
  • DeveloperSDK2023 Help (opens new window)
教程
更新
关于
  • 动画重定向
  • 3ds Max 文件降版本
  • GIF播放器
  • 表情绑定助手
  • MAXtoUnrealTools
  • MMD4Max
  • AnimFiltersMax2021
  • 分类
  • 标签
  • 归档
首页
C3相关
天晴盒子
脚本文档
开发公约
  • MAXScript2020 Help (opens new window)
  • 3dsmax-2023-MAXScript Help (opens new window)
  • 3dsmax-2023-Max-Python Help (opens new window)
  • DeveloperSDK2023 Help (opens new window)
教程
更新
关于
  • 动画重定向
  • 3ds Max 文件降版本
  • GIF播放器
  • 表情绑定助手
  • MAXtoUnrealTools
  • MMD4Max
  • AnimFiltersMax2021
  • 分类
  • 标签
  • 归档

开发公约

# 3dsMax 开发者公约

提示

这只是个人简单的开发声明和平时制作脚本工具时的一些细节,只是想在对 max 文件做出某些数据修改时尽量能避免和其他开发者的数据发生冲突。

如果你是新人,建议和我一起来,在行业保持一致的默契规则,方便他人也是方便自己。

如果你是老人,请教教我!!!

# GUID - AppData : -81259732468513268

id_ranges = -81259732468513268
id_path = -9125973246851326

getAppData rootnode id_ranges

1
2
3
4
5

如上,场景 rootnode 上 有两个,被书签插件占用,保存有动画片段。

# GUID - AppData : 777, 77

777 , 77 这两个数被 save&loadSelectionSets.mse 这个选择集合并插件所使用。

分别是 选择集名称,时间轴信息。

fn AMSS_savenamedsel =
(

	for obj in objects do
	(
		setAppData obj 777 ""
		setAppData obj 77 (animationRange.start as string +"|" +animationRange.end as string)
		id = getAppData obj 1001 
		if id == undefined do (
			id = genGUID()
			setAppData obj 1001 id 
		)

	)

	try
	(
		if getNumNamedselsets() != 0 then
		(
			for i in 1 to getNumNamedselsets() do
			(
				a = #()
				NamedSelectionSetManager.GetNamedSelSetList &a i 
				b = makeUniqueArray a
				if b.count == 1 and b[1] == undefined do 
				(
					Continue
				)
				for j in 1 to (getNamedselsetItemcount i) do
				(
					obj = getNamedselsetItem i j
					if isValidNode obj do (
						temp_ = getAppData obj 777
						if temp_ != undefined or temp_.count > 0 do (
							selSetString = temp_ + getNamedselsetName i + "|"
							try (setAppData obj 777 selSetString) catch ()
						)
					)
				)
			)
		)
	)catch ()
)
callbacks.addscript #filepresave "AMSS_savenamedsel()" id:#savens
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

如上代码,该脚本在每次保存文件时,都将将 【选择集信息】 【时间轴信息】【GUID】保存到物体上。

# GUID - AppData : 1001

3dsMax 中并没有直接给 物体 object 分配 GUID ,但是 很多情况下我们需要一个全局唯一又是可以被保存的 ID 来识别标记 object 。

这里推荐使用 AppData 的 1001 数据通道保存GUID。

fn set_node_guid node_obj =
(
	id = getAppData node_obj 1001 
	if id == undefined do (id = genGUID())
	setAppData node_obj 1001 id 
	id 
)

fn AMSS_GenGUID n = 
(

	if isValidNode n do 
	(
		id = getAppData n 1001 
		if id == undefined do (
			id = genGUID()
			setAppData n 1001 id 
		)
	)
)
callbacks.removescripts id:#saveguid
callbacks.addscript #nodeCreated "AMSS_GenGUID (callbacks.notificationParam())" id:#saveguid


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

目前 1001 这个数据通到只有 天晴动作工具组 里的 骨骼镜像工具 用到,用来标记骨骼的配对的镜像骨骼。该工具 目前占用 1001, 1002, 1003 三个数据通道, 而其的历史版本有用到数据通道 100 保存镜像数据。

# Name - AppData : 5

相信很多人都有使用过 getNodebyName ,按名字查对物体的 这个函数,个人是十分不建议大量使用该函数,因为物体名字有被改的风险。

但是又有些情况下,我们不得不使用该函数,比如从外部导入 数据,只有一个物体名字特征, 而数据来源的格式我们也无法控制。

当后期在次更新数据时,也只能硬头皮按名字查找物体,但是又不想出现物体被改名,重名而无法正确查找的情况。

这里推荐使用 AppData 的数据通道 5 来保存 Name 名字。

# render hidden - AppData : 813

渣渣渲屏,在隐藏无需渲染物体时 标记,用于事后恢复状态.

最近更新
01
GVHMR视频动捕部署
04-20
02
关于蒙皮权重镜像匹配问题介绍以及解决方案
03-19
03
简易Biped绑定框架方案
03-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 ND|99u:199505| 鄂ICP备2022012500号 | 鄂公网安备 42022202000122号

共产主义:是对生产资料的共享,不是对生活资料财产的均分

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×