Unity Shader variants (shader 变体)

这篇具有很好参考价值的文章主要介绍了Unity Shader variants (shader 变体)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

官方地址
https://docs.unity3d.com/cn/2022.2/Manual/SL-MultipleProgramVariants.html
教程可以看这里
https://www.jianshu.com/p/48ad75f0b4b9
https://www.jianshu.com/p/3e6b84317097

变种用我自己的理解就是
能用程序控制的shader

举个例子
Unity Shader variants (shader 变体),unity,游戏引擎,c#
这里声明了 a b c d
四个变量(其实是开关 下面会说)
记住 #pragma multi_compile 必须放在 CGPROGRAM 下面
Unity Shader variants (shader 变体),unity,游戏引擎,c#
在c#程序里

Shader.EnableKeyword("D");

就可以了
点击shader文件
Unity Shader variants (shader 变体),unity,游戏引擎,c#
可以看到这里 点那个按钮 会自动编译shader并打开shader文件

在打开的文件里面你会找到
Keywords: A
Keywords: B
Keywords: C
Keywords: D
等内容

Unity Shader variants (shader 变体),unity,游戏引擎,c#
Unity Shader variants (shader 变体),unity,游戏引擎,c#
这里显示一共有多少个变体
也可以点show 他会告诉你具体有哪些
Unity Shader variants (shader 变体),unity,游戏引擎,c#
也会显示这些内容
加完以后 无法刷新 可以点击
Unity Shader variants (shader 变体),unity,游戏引擎,c#
重新加载

那如果这样声明呢
Unity Shader variants (shader 变体),unity,游戏引擎,c#
你会发现编译后的文件显示的是这样的
Keywords: A EE
Keywords: A FF
Keywords: B FF
Keywords: B EE
Keywords: C FF
Keywords: C EE
Keywords: D EE
Keywords: D FF
看见了没
他一共生成了 4 * 2 共计 8个

这就是unity 优化编译的方式

记住
指定的第一个关键字是默认生效的,即默认使用变体A和EE

shader_feature的话 作用是一样的
不过他会删除 没有材质引用过的shader
如果没引用过的 也可以放在下面这个地方
Always Included Shaders
Unity Shader variants (shader 变体),unity,游戏引擎,c#
你也可以
声明的时候用这个
Unity Shader variants (shader 变体),unity,游戏引擎,c#
__和字母中间有空格
这样只需占用一个变量位置
但依然是两个shader变体 一个是非A 一个是A
你可以用代码控制
Shader.EnableKeyword(“A”);
Shader.DisableKeyword(“A”);
如果代码不设置 那么默认就是非A
这个是全局使用的 也就说 设置了这个 全局用到这个变量的地方都会有影响

也可以 声明shaer的局部变量

#pragma multi_compile_local __ A

设置的时候需要用
Material.EnableKeyword
全局和局部声明了同样的名字
优先用局部的

var m = this.GetComponent<MeshRenderer>();
m.material.EnableKeyword("A");

关于keyworkd的限制
2022版unity是这么说的
官方文档看这里
https://docs.unity3d.com/cn/2022.2/Manual/shader-keywords.html#keyword-limits

Unity can use up to 4,294,967,294 global shader keywords. Individual shaders and compute shaders can use up to 65,534 local shader keywords. These totals include keywords used for variants, and keywords used for dynamic branching.

Every keyword declared in the shader source file and its dependencies count towards this limit. Dependencies include Passes that the shader includes with UsePass, and fallbacks.

If Unity encounters a shader keyword with the same name multiple times, it only counts towards the limit once.

If a shader uses more than 128 keywords in total, it incurs a small runtime performance penalty; therefore, it is best to keep the number of keywords low. Unity always reserves 4 keywords per shader.

反正就是节省点使用

创建shader的时候 你会发现这么个东西

Unity Shader variants (shader 变体),unity,游戏引擎,c#
这是shader 变体收集器
假如shader后是这样的
Unity Shader variants (shader 变体),unity,游戏引擎,c#
点加号可以看到
Unity Shader variants (shader 变体),unity,游戏引擎,c#
就不详细讲解了
可以看开头的教程链接
还可以
https://github.com/crossous/SocoTools

Unity Shader variants (shader 变体),unity,游戏引擎,c#
也可以在这里 先clear
然后玩一遍游戏
再 save to asset 成一个文件
不过这个不是特别准。

可以看看这个大佬的工具
https://github.com/crossous/SocoTools文章来源地址https://www.toymoban.com/news/detail-659034.html

到了这里,关于Unity Shader variants (shader 变体)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自制游戏引擎之shader预编译

    shader预编译为二进制,在程序运行时候加载,可以提升性能,节省启动时间. third_party文件里需要放依赖的第三方 因为电脑访问google的问题,无法通过 shaderc-2023.4utilsgit-sync-deps 脚本自动下载第三方,手动下载 https://codeload.github.com/KhronosGroup/SPIRV-Tools/zip/refs/tags/v2023.3.rc1 https://codeloa

    2024年02月13日
    浏览(32)
  • 【Overload游戏引擎细节分析】standard材质Shader

    提示:Shader属于GPU编程,难写难调试,阅读本文需有一定的OpenGL基础,可以写简单的Shader,不适合不会OpenGL的朋友 一、Blinn-Phong光照模型 Blinn-Phong光照模型,又称为Blinn-phong反射模型(Blinn–Phong reflection model)或者 phong 修正模型(modified Phong reflection model),是由 Jim Blinn于

    2024年02月08日
    浏览(30)
  • 【Overload游戏引擎细节分析】Lambert材质Shader分析

    一、经典光照模型:Phong模型 现实世界的光照是极其复杂的,而且会受到诸多因素的影响,这是以目前我们所拥有的处理能力无法模拟的。经典光照模型冯氏光照模型(Phong Lighting Model)通过单独计算光源成分得到综合光照效果,然后添加到材质表面特定的点。冯光照模型的主要

    2024年02月08日
    浏览(31)
  • 【Overload游戏引擎细节分析】PBR材质Shader---完结篇

    PBR基于物理的渲染可以实现更加真实的效果,其Shader值得分析一下。但PBR需要较多的基础知识,不适合不会OpenGL的朋友。 一、PBR理论 PBR指基于物理的渲染,其理论较多,需要的基础知识也较多,我在这就不再写一遍了,具体可以参看: LearnOpenGL PBR理论-英文 或者 LearnOpenGL

    2024年02月08日
    浏览(34)
  • 【Overload游戏引擎细节分析】画场景栅格的Shader分析

    Overload引擎地址: GitHub - adriengivry/Overload: 3D Game engine with editor 一、栅格绘制基本原理 Overload Editor启动之后,场景视图中有栅格线,这个在很多软件中都有。刚开始我猜测它应该是通过绘制线实现的。阅读代码发现,这个栅格的几何网格只有两个三角形面片组成的正方形,使

    2024年02月07日
    浏览(32)
  • 【Unity Shader】Shader Graph

    shader graph 入门: (对基础内容进行详细介绍) Shader Graph入门-CSDN博客 unity-shader(入门)_unity3d shader-CSDN博客 各种效果的节点配置: 【unity造轮子】Unity ShaderGraph使用教程与各种特效案例(2023/12/1更新)_unity特效-CSDN博客 大佬文章里所用的PBR Master更新后已经没有了,所以参考

    2024年02月01日
    浏览(44)
  • Unity | Shader基础知识(第一集:unity中最简单的shader)

    目录 一、unity的shader 二、创建一个shader(在创建时,选前三种都可以) 三、内容解读 1.shader一直都在 2.我们写shader在写什么 四、没有被干预的shader(最简单的shader) 相关阅读 编写着色器概述 - Unity 手册 一、unity的shader unity写的shader并不是真正意义上的shader。 官方解释:

    2024年02月04日
    浏览(42)
  • 【Unity Shader】Unity阴影

    记录下在unity中如果想实现阴影,有哪些路子可以选择,目前看有两种 1.经典的shadowmap 2.planar projection 如果开启renderer组件的cast shadows为on,开启平行光的light组件的shadow type,那么就会在物体shader中寻找LightMode=ShadowCaster的Pass进行渲染 场景有两个物体,平面和球体,使用unity内

    2024年02月09日
    浏览(40)
  • Unity | Shader基础知识(什么是shader)

    Shader的中文名叫着色器。 着色器的作用: 这个世界是3D的,包括在Unity的场景中,我们建的球球,方块块之类的,都是3D的,但是,屏幕是2D的,把3D的东西,通过颜色的汇总,显示在2D的屏幕上。 想知道颜色是怎么合到一起的,我们就找个图片,把它拆开看。 因为世界上所有

    2024年02月15日
    浏览(49)
  • Unity Shader - UI/Default shader 优化示例

    Unity : 2020.3.37f1 Pipeline : BRP 做性能优化都是慢慢都扣出来的 当然,优先处理 top 热点的 但是一些就算不是 top,但是像素面积有多,overdraw 也多不可小觑 当然,如果你能找到性能热点,那还是优先分析一下哪些 shader 占的 cycles 最高,和 A, L/S, T, 最高 还有 register 的数量尽可能

    2024年02月07日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包