1. 程式人生 > >3DMax腳本插件--改動材質&貼圖名稱

3DMax腳本插件--改動材質&貼圖名稱

... string 圖文 素材 jsb -a cit 跳過 fontsize

從網上淘到了一套人物的模型,當時的心情是激動無比,掏出用的不熟練的3DMax折騰了半天。突然發現了一個蛋疼的事兒,所有的模型文件,材質名稱,子材質,以及貼圖所實用的是中文命名!!

盡管說是能跑,只是這個命名也忒不規範了,將模型,資源導入了Unity。關聯產生的資源和材質名稱也都是中文的!!!

雖說是能用,只是心裏總感覺有點兒別扭。然而要改動一系列的名稱又太太太麻煩....於是我這個懶人就想到了寫一個max腳本完畢這個功能。

我搞到的素材在Max裏面打開是醬紫的,赤果果的中文命名:技術分享

從文件名稱,模型名稱,材質名稱,子材質名稱,貼圖名稱,貼圖路徑都是中文...

我的思路大概是這樣:

1)max文件名保持不變,仍然為中文,方便查找,並且這個無影響。

2.)手動改動模型名稱為自己希望的英文名,依據材質名稱 手動改動目錄下的貼圖名稱為“模型名稱 + 遞增編號”

3)通過腳本,自己主動將材質名稱改為模型名稱,假設有多維子材質,自己主動將子材質重命名為 ”模型名稱 + 遞增編號“

4)通過腳本,自己主動將材質相應的貼圖名稱&貼圖路徑名改為當前路徑下相應的貼圖


好了,廢話不多說了,上代碼:

--更換材質包括的貼圖的名稱
--arg: mat 材質名
--arg: index standard material 中貼圖的index 比方2是diffuse 7是Opacity
--arg  name 要改動的名稱
function ChangeTexName mat index name = 
(
	tex = getSubTexmap mat index
	if tex == undefined then
	(
		print("Index " + (index as string)+ " isn't exist in mat, so skip it")
	)
	else
	(
		tex.name = name
		tex.filename = maxFilePath + tex.name + ".dds"
		print (name + " texture name changed ok")
	)
)

--遍歷選擇的物體
for obj in selection do 
(
	--改動材質名稱為與對象名稱一致
	obj.material.name = obj.name
	local num = getNumSubMtls obj.material
	if num == 0 then
	(
		ChangeTexName obj.material 2 obj.name
		ChangeTexName obj.material 7 obj.name
		print "main material changed ok"
	)
	else
	(
	
		local count = 1
		--處理多維子材質,將多維子材質依照對象名稱+遞增編號重命名
		for material in obj.material do
		(
			local tempName = obj.name
			append tempName (count as string)
			material.name = tempName
			count = count + 1
			--將index 2相應的diffuse貼圖改名
			ChangeTexName material 2 tempName
			--將index 7相應的opecity貼圖改名(假設不須要刻意去掉此行)
			ChangeTexName material 7 tempName
			print "sub material changed ok"
		)
	)
	print "Name Change OK"
)



具體的凝視我寫在了代碼中,主要要註意的是一個地方,因為我的資源是使用了Diffuse和Opecity兩個貼圖,所以我這樣寫。假設要改名字的腳本是其它類型的貼圖,僅僅須要改動Index值就能夠。index的相應關系例如以下:

技術分享

以下看一下使用:

我首先依據材質編輯器中的貼圖,將目錄下的貼圖改動名稱。這時,模型會由於找不到貼圖而變成白色:

技術分享

然後。我們把模型名稱改動一下,改成jingyingbaijianke。然後執行腳本:

技術分享

因為最後一個貼圖沒實用Opecity貼圖,所以跳過了改動。這時,我們的模型貼圖又回來了。而我們打開材質編輯器,也能夠看到,全部的中文都被我們改動成我們想要的命名了:

技術分享


因為這些模型資源是一個蒙皮文件(max)+若幹個動作文件(max)+貼圖文件(dds)放在同一個文件夾下,所以我僅僅須要第一次改動一次貼圖文件名。然後每次打開一個文件之後。重命名一下模型,執行一下腳本,全部材質,子材質。貼圖名,貼圖路徑就都變成我們設定好的名稱了,哇哢哢。!

比方我又一次打開一個動作文件。開始時會提醒我貼圖丟失。我們直接點擊跳過,然後改動模型名。執行腳本。一切就都自己主動搞定了。然後我們就能夠放心大膽的把它們導入到Unity中,最後再來張帥帥噠圖片。

技術分享


3DMax腳本插件--改動材質&貼圖名稱