Unity Material Instance
- 何时产生
- 如何产生
- 如何使用
- sharedMaterial成员是啥
我随手下的插件每次运行就发现材质名称后方有两个(instance),做了搜索和测试。结论如下
Unity的Material Instance和Unreal的不同,并不是直接在资源目录里通过原材质直接创建的。目前看必须通过运行时代码操作才能产生,不能提前创建。
Material Instance主要用于相同着色器,不同配置参数。unity的Shader定位类似unreal的Material,集成了着色器算法的功能,而unity的material则对应到Unreal的instance,给相同算法搭配不同参数。
材质共享SharedMaterial
正常来说默认的材质就是共享材质,给两个物体使用相同材质时,修改其中任意一个的参数都会影响到另一个物体的表现。因为他们本质使用的是同一个数据。
在建筑演示类的项目中,同一个材质的物体可以共享材质,比如木门、门框、柜子的主体可以用一个材质,比如门把手都用同一个材质。需要调整效果时肯定是统一修改的。
修改renderer的sharedMaterial是什么呢
大佬的严谨验证
我认为renderer下materilal成员和sharedMaterial成员没啥成分区别,只是访问material会认为需要产生实例,不对存在工程文件里的材质资源造成影响。
那么如果material已经是实例,那sharedMaterial本身就已经跟硬盘上的资源没有关系。不想产生访问material产生的问题就可以直接修改sharedmaterial。(未验证,夜深了回头补充)
游戏里的材质
对于游戏而言使用同一种材质的情况反而很少,除了完全相同的物体通常都需要一些定制改变。其中大部分变体也是必须在制作中实时查看的,不可能通过运行时代码去赋予不同的参数。
我的instance应用
接上一篇文章,我正在制作一个护盾效果。
游戏机制要求怪物受到伤害后护盾颜色产生变化,这种变化肯定是对应每个怪物各自一套。如果使用sharedmaterial会造不论怪物血多血少都显示一样的颜色。
这里就需要使用material instance。
如何创建instance
- New Material(meshRenderer.material)
- var temp_or_member_var = meshRenderer.material
- var temp_or_member_var = meshRenderer.materials[i] (多材质时)
- Function(mershRenderer.material)
通过实验,基本所有传值操作都会使材质创建实例(instance),哪怕只是给一个空的函数传递参数。
其中New Material()获得的引用并不是操作之后物体上的实例,给new获得的材质更改参数不会作用到当前的物体上。
两个instance的来源
已经是实例的材质进行操作并不会直接造成资源名后面(instance)(instance)。
目前测试只有 new Material(xx)之后,把instance换回去,再引用才会发生。
Unity Material Instance相关推荐
- Unity GPU Instance踩坑记录
Unity GPU Instance踩坑记录 Unity中GPUInstance主要有两种:一种是unity自动进行的,或者调用Graphics.DrawMeshInstancedIndirect等A ...
- unity Gpu Instance
参考网址: https://blog.csdn.net/leonwei/article/details/73274808 https://docs.unity3d.com/ScriptReferenc ...
- unity material之tiling和offset属性
在Unity中,使用材质或者着色器是通过创建一个材质来实现的,新建一个材质,会要求选择使用哪个着色器,默认的是Diffuse着色器.确定了着色器后,在材质属性面板中就会出现该着色器需要用到的一些属性, ...
- unity Material的批量修改和单独处理
蹭一波1024的热度,祝大家节日快乐. Material unity为我们提供了Material这一模块,使得我们对游戏对象的各种渲染操作更加便捷. 一个完整的Material由shader和Text ...
- Unity material修改图片的UV通道
勾选Swap UVs切换uv,达到可以切换导入模型的主uv和次uv的目的. 贴图贴到Detail Albedo X2 修改UV Set 就可以了 如果想动态修改2个以上的UV通道,需要代码实现 进一步 ...
- Unity中的静态合批、动态合批、GPU Instance 以及SRP Batching
文章目录 Unity中的静态合批.动态合批.GPU Instance 以及SRP Batching 四种合批简介 GPU instancing static Batching Dynamic batc ...
- Unity中基于Gpu Instance进行大量物体渲染的实现与分析(一)
图 一个使用gpu instance绘制4000棵树的场景 在3D渲染中,尤其是现代3D游戏中,我希望能够绘制越来越多的场景物体,这对于设备(尤其是移动端)的性能是个极大的考验,对于新一代的渲染ap ...
- Google Filament 源码学习(三):Material System (二)
目录 Filament Materials Guide Introduction 相关术语与概念 Material Models Lit Model Base Color Metallic Rough ...
- Unity游戏优化指南大全(持续更新中!)
Unity游戏优化指南大全 三个官方优化提示: 性能和优化 (Performance and Optimization) - 关于性能分析器以及性能和优化技巧的 Unity 学习教程. Best pr ...
最新文章
- Android APK加壳技术方案----代码实现
- 2015-03-06——正则表达式基础
- zk reconnect
- Go语言中cannot convert adminname (type interface {}) to type *: need type assertion的解决办法...
- Http协议之报文·方法·状态码
- SQL Server 全文索引创建
- xgboost 怎么读_【泰语单词】“祸从口出”泰语怎么表达?意想不到的简单
- C/C++[codeup 2044]神奇的口袋
- qt的qmap根据key进行归类,汇总
- 二阶有源低通滤波器设计
- 神秘诡异的量子世界是如何毁掉科学家三观的?
- 2022-2028年中国密码机行业竞争现状及投资策略研究报告
- js距离单位换算_js实现单位互换px/cm/mm篇
- 经验分享:新媒体运营离不开的几款运营软件
- RxJava 与 Retrofit 结合的最佳实践
- mysql的password()函数和md5函数
- RL——Policy Gradient类方法
- 巨简单 在eclips上面新建一个网页动态项目
- CRM系统和OA系统是否可以共用一个系统,如何操作?
- linux远程root拒绝,ubuntu拒绝root用户ssh远程登录解决办法