• 3DMax脚本插件--改动材质&贴图名称


    从网上淘到了一套人物的模型,当时的心情是激动无比,掏出用的不熟练的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中,最后再来张帅帅哒图片。


  • 相关阅读:
    Spring如何解决循环依赖
    AbstractQueuedSynchronizer之AQS
    Spring中各种扩展原理及容器创建原理
    SpringAOP和TX事务的源码流程
    Spring的IOC常用注解(含源码)
    采用lua脚本获取mysql、redis数据以及jwt的校验
    Redis常用数据类型及其存储结构(源码篇)
    Redis分布式锁
    雪花算法
    springboot2.2.6项目接入Nacos流程
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7327743.html
Copyright © 2020-2023  润新知