Unity Material 类的使用

最近需要将一批材质的shader,转换到另一个效果类似的shader,由于材质数量太多,要指定贴图,各种参数,将会是一项很大的工作,因此就写了个工具,切换shader,并自动将原始材质的参数复制到新的材质。

这项工作本不难,但是开发过程中发现,除了Material的SetTexture,SetFloat等接口,能将部分shader参数读取,并赋值到新的材质,材质Inspector面板上其它参数的读写接口并不明确。

后来通过分析材质文件(xxx.mat)得出与材质面板中参数的对应关系,终于搞定。这里记录分析过程:

首先就是.mat文件了,我们用任何一款txt编辑器打开。

然后,我们修改材质的Inspector参数,并保存,对比之前的文件,看看哪些参数发生了变化,并确认2个shader对应的数据是哪些,代码中进行映射。

下面是.mat文件结构,以及Material类中定义的访问这些数据的接口:

// 表示这是材质文件,对应Material类

Material:

//材质tag设定,使用接口Material.GetTag()读取,Material.SetOverrideTag()接口修改

stringTagMap:

// 渲染类型,面板上的Rendering Mode

RenderType: TransparentCutout

// shader keywords,接口:

// shaderKeywords,EnableKeyword(),DisableKeyword(),IsKeywordEnabled()

m_ShaderKeywords: _ALPHATEST_ON _NORMALMAP

// 贴图数据,接口Texture相关

m_TexEnvs:

// shader中定义的贴图的名字

_BaseColor:

// Tiling 参数

m_Scale:

// Offset 参数

m_Offset:

// shader float 参数,接口:SetFloat,GetFloat

m_Floats

// shader color 参数,接口:SetColor,GetColor

m_Colors

 

材质的参数,不止这些,而且不同的shader,实现一个效果,可能定义使用了不同的参数,需要我们修改,对比来找到对应关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值