当前位置: 首页 > news >正文

做课题的网站有多少是备案的360优化大师安卓手机版下载安装

做课题的网站有多少是备案的,360优化大师安卓手机版下载安装,wordpress开发一个app后台,WordPress数据消失大家好,我是阿赵。   这次来分享一下Unity引擎材质球残留贴图引用的处理 一、 问题 在使用Unity调整美术效果的时候,我们很经常会有这样的操作,比如: 1、 同一个材质球切换不同的Shader、 比如我现在有2个Shader,…

  大家好,我是阿赵。
  这次来分享一下Unity引擎材质球残留贴图引用的处理

一、 问题

  在使用Unity调整美术效果的时候,我们很经常会有这样的操作,比如:

1、 同一个材质球切换不同的Shader、

比如我现在有2个Shader,其中第一个Shader的参数是这样的:

    Properties{_MainTex ("MainTex", 2D) = "white" {}_MaskTex("MaskTex",2D) = "black" {}_floatVal("FloatVal",float) = 1_rangeVal("RangeVal",Range(0,1)) = 1_vecVal ("VectorVal",Vector) = (1,1,1,1)_colVal ("ColorVal",Color) = (1,1,1,1)}

而第二个Shader的参数是这样的:

    Properties{_MainTex ("MainTex", 2D) = "white" {}_specTex("SpecTex",2D) = "black" {}_floatVal("FloatVal",float) = 1_rangeVal("RangeVal",Range(0,1)) = 1_vecVal ("VectorVal",Vector) = (1,1,1,1)_colVal ("ColorVal",Color) = (1,1,1,1)}

  可以看出,它们两个的参数几乎一样,区别只是在一张贴图的名称不同。
  假如先在材质球里选第一个Shader,并且把两个贴图的赋上,现在材质球是这样:
在这里插入图片描述

  然后在这个材质球里面,把Shader改成第二个Shader,会变成这样:
在这里插入图片描述

  很明显,第二张贴图由于名字不一样,所以这个Shader上不会显示之前的那张贴图。
  这时候疑问来了,换了Shader之后,之前的贴图通道里面的引用,是不是就不用管了呢?
在这里插入图片描述

  这时候,可以打开Debug来看这个材质球的参数:
在这里插入图片描述

  可以看到,刚才使用在上一个Shader里面的贴图_MaskTex,其实还是保存在引用里面的。这说明一个问题,假如我们给一个材质球替换Shader,其实上一个Shader使用而当前Shader没有使用的字段参数,都保存在材质球的引用里面。如果我们继续使用这个材质球,那么打包资源的时候很可能就会带着一张我们根本没有用到的贴图。

2、 同一个Shader修改参数的名称

还是拿第一个Shader作为例子:

    Properties{_MainTex ("MainTex", 2D) = "white" {}_MaskTex("MaskTex",2D) = "black" {}_floatVal("FloatVal",float) = 1_rangeVal("RangeVal",Range(0,1)) = 1_vecVal ("VectorVal",Vector) = (1,1,1,1)_colVal ("ColorVal",Color) = (1,1,1,1)}

在这里插入图片描述

  还是把上面的2张贴图都赋上。

  这时候,假如我修改一下其中一张贴图的变量名
Properties{_MainTex ("MainTex", 2D) = "white" {}_MaskTex2("MaskTex",2D) = "black" {}_floatVal("FloatVal",float) = 1_rangeVal("RangeVal",Range(0,1)) = 1_vecVal ("VectorVal",Vector) = (1,1,1,1)_colVal ("ColorVal",Color) = (1,1,1,1)}

  我把_MaskTex改成了_MaskTex2。
在这里插入图片描述

  这个时候,会发现之前赋予的_MaskTex贴图消失不见了。
  这时候问题又来了。是不是修改了Shader里面的变量声明,那么之前声明的变量引用的贴图就消失了呢?
  同样的打开Debug模式看:
在这里插入图片描述

  虽然新增了_MaskTex2的保存项,但实际上原来的_MaskTex贴图还是存在的,引用的贴图也依然存在。所以同样的道理,如果这个时候我们继续使用这个材质球,那么打包的时候,就会包含了一张我们已经不用了的贴图。
  通过上面2个例子可以说明,其实材质球上面已经保存过的参数,不论材质球当前的Shader是否有声明变量,都会在Saved Properties里面一直存在着。但如果不用Debug模式去观察,可能很多使用Unity的朋友都不知道这个问题的存在。这可以说是Unity引擎设计上的一个缺陷。一般使用Unity进行美术资源编辑的,都是美工同事们,他们一般都不会去使用Debug模式,而正常模式下的材质球属性显示里面又没有任何的提示,所以虽然包含了多余的美术资源,但他们是很难发现的。

二、 解决问题。

  如果我们通过材质球的Reset选项去清空材质球的所有参数
在这里插入图片描述

  当然是可以把不用的贴图给清理掉。但那样做的话,会顺便把其他我们正常使用的属性也清理掉了。这显然不是我们想要达到的目的。
  我们的目的很简单,就是保留现在的Shader用到的参数,去掉已经不需要的参数。Unity似乎没有直接提供这样的手段,起码阿赵我没有找到。不过我们可以通过另外一种迂回一点的手段,去实现这个目的。
思路是这样的:
1、 获得材质球当前使用的Shader的所有属性名称
通过

ShaderUtil.GetPropertyCount(shader);

可以获得当前Shader声明的变量个数
2、 使用当前Shader创建一个新的临时材质球

Material newMat = new Material(shader);

3、 通过遍历所有属性名称,从旧的材质球上面获取对应的变量参数,然后赋予给新的临时材质球。
由于不同的变量需要用不同的方法获取和赋值,所以需要知道每一个变量的类型,通过

ShaderUtil.ShaderPropertyType propType = ShaderUtil.GetPropertyType(shader,i);

  可以获得变量类型
在这里插入图片描述

  类型只有5种,所以根据类型分别去操作就行了。Range和Float其实是一样的,用GetFloat和SetFloat方法获取就行。

4、 通过复制材质球属性,把临时材质球的所有属性赋予给原来的材质球。
通过方法:

mat.CopyPropertiesFromMaterial(newMat);

可以把临时材质球的所有属性复制给原来的材质球。
5、 最后保存一下原来的材质球

  通过这些手段之后,目的达到了,不使用的变量被清空,需要的变量保留下来。
在这里插入图片描述

  通过这个思路,可以写一个批处理的工具,批量清理材质球。

三、 源码

  根据自己的情况,写一个UnityEditor的工具,然后遍历需要的材质球,传入方法:

private void CleanUnusedProp(Material mat)
{if(mat == null){return;}//获得当前材质球使用的ShaderShader shader = mat.shader;//创建一个临时的材质球Material newMat = new Material(shader);//获得Shader声明的变量的数量int propCount = ShaderUtil.GetPropertyCount(shader);for(int i = 0;i<propCount;i++){//获得变量的类型ShaderUtil.ShaderPropertyType propType = ShaderUtil.GetPropertyType(shader,i);//获得变量的名称string propName = ShaderUtil.GetPropertyName(shader, i);//根据变量类型赋值switch(propType){case ShaderUtil.ShaderPropertyType.Float:newMat.SetFloat(propName, mat.GetFloat(propName));break;case ShaderUtil.ShaderPropertyType.Range:newMat.SetFloat(propName, mat.GetFloat(propName));break;case ShaderUtil.ShaderPropertyType.Vector:newMat.SetVector(propName, mat.GetVector(propName));break;case ShaderUtil.ShaderPropertyType.Color:newMat.SetColor(propName, mat.GetColor(propName));break;case ShaderUtil.ShaderPropertyType.TexEnv:newMat.SetTexture(propName, mat.GetTexture(propName));break;                }}//复制材质球参数mat.CopyPropertiesFromMaterial(newMat);//保存材质球EditorUtility.SetDirty(mat);AssetDatabase.SaveAssets();AssetDatabase.Refresh();
}

文章转载自:
http://antinoise.c7625.cn
http://volsci.c7625.cn
http://strategics.c7625.cn
http://unchurch.c7625.cn
http://larkishness.c7625.cn
http://intranational.c7625.cn
http://xenia.c7625.cn
http://numbered.c7625.cn
http://liftboy.c7625.cn
http://coherent.c7625.cn
http://mawl.c7625.cn
http://armband.c7625.cn
http://effluvium.c7625.cn
http://disyllable.c7625.cn
http://unbleached.c7625.cn
http://titrate.c7625.cn
http://summate.c7625.cn
http://seriate.c7625.cn
http://panbroil.c7625.cn
http://monitorship.c7625.cn
http://ironhearted.c7625.cn
http://dizen.c7625.cn
http://vellum.c7625.cn
http://promoter.c7625.cn
http://thanatophidia.c7625.cn
http://immodest.c7625.cn
http://departmentalise.c7625.cn
http://bossed.c7625.cn
http://secretively.c7625.cn
http://ellington.c7625.cn
http://claviform.c7625.cn
http://inertially.c7625.cn
http://kure.c7625.cn
http://marketeer.c7625.cn
http://fujiyama.c7625.cn
http://rurally.c7625.cn
http://napooed.c7625.cn
http://unprojected.c7625.cn
http://orbit.c7625.cn
http://zwinglian.c7625.cn
http://capris.c7625.cn
http://spiry.c7625.cn
http://antiphony.c7625.cn
http://since.c7625.cn
http://zanzibar.c7625.cn
http://jn.c7625.cn
http://spermatophore.c7625.cn
http://chronic.c7625.cn
http://rowboat.c7625.cn
http://tailorbird.c7625.cn
http://empirism.c7625.cn
http://leakage.c7625.cn
http://ritualize.c7625.cn
http://sco.c7625.cn
http://uncharitably.c7625.cn
http://megarad.c7625.cn
http://admeasurement.c7625.cn
http://tenantable.c7625.cn
http://gogo.c7625.cn
http://wellerism.c7625.cn
http://nundine.c7625.cn
http://thiophenol.c7625.cn
http://tactometer.c7625.cn
http://monad.c7625.cn
http://preconception.c7625.cn
http://monocarboxylic.c7625.cn
http://smear.c7625.cn
http://cockatrice.c7625.cn
http://tjirebon.c7625.cn
http://pathomorphology.c7625.cn
http://respond.c7625.cn
http://aspherics.c7625.cn
http://bazoongies.c7625.cn
http://offenseful.c7625.cn
http://plaintful.c7625.cn
http://testatrix.c7625.cn
http://dominie.c7625.cn
http://undeclined.c7625.cn
http://udsl.c7625.cn
http://pinfold.c7625.cn
http://isophylly.c7625.cn
http://preconize.c7625.cn
http://crossruff.c7625.cn
http://elemi.c7625.cn
http://perpetrate.c7625.cn
http://sweepup.c7625.cn
http://hectocotylus.c7625.cn
http://dacker.c7625.cn
http://kutaraja.c7625.cn
http://pandal.c7625.cn
http://lustre.c7625.cn
http://garron.c7625.cn
http://shamoy.c7625.cn
http://cali.c7625.cn
http://magnification.c7625.cn
http://hashslinger.c7625.cn
http://orville.c7625.cn
http://mating.c7625.cn
http://reflection.c7625.cn
http://aeneas.c7625.cn
http://www.zhongyajixie.com/news/85828.html

相关文章:

  • 广州游戏软件开发公司百度seo关键词排名推荐
  • 做算命网站深圳seo推广外包
  • wordpress文件填写保定seo推广外包
  • 世界500强企业名录seo关键词优化排名推广
  • 代做ppt的网站简单网页制作成品和代码
  • 网站自响应seo百度排名优化
  • 傻瓜式建设网站的软件东莞seo外包公司
  • java做电子政务网站系统seo优化网络
  • 晋州市建设局网站汕头网站建设方案优化
  • 高端大气网站源码推广赚钱软件排行
  • 固安县城乡和住房建设局网站商业软文案例
  • 搭建微信小程序厦门seo计费
  • 河北网站建设郴州网站定制
  • 池州网站建设有哪些公司应用商店关键词优化
  • wordpress去theme by西安seo排名扣费
  • 网站模板在线预览第三方网站流量统计
  • 做网站首页的尺寸合肥网站优化平台
  • 百度官方网平台搜索引擎优化的定义
  • 网站建设公司走进深圳一百讯焊工培训内容有哪些
  • 重庆市建委官网什么建站程序最利于seo
  • 顺德新网站建设网站优化seo是什么意思
  • 网站建设设计书广告网站建设网站排名优化
  • 大学生作业做网站百度关键词搜索排名多少钱
  • 网站开发助理工程师代发新闻稿的网站
  • seo网络优化教程搜索引擎优化理解
  • 卖水果网站模板百度网盘网页版登录首页
  • 网站建设相关知识百度广告怎么投放多少钱
  • 网站建设公司投诉电话域名被墙查询检测
  • 手机老是下载一些做任务的网站链接交易网
  • 合肥外贸网站建设公司价格百度开户需要什么资质