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

举个例子
在这里插入图片描述
这里声明了 a b c d
四个变量(其实是开关 下面会说)
记住 #pragma multi_compile 必须放在 CGPROGRAM 下面
在这里插入图片描述
在c#程序里

Shader.EnableKeyword("D");

就可以了
点击shader文件
在这里插入图片描述
可以看到这里 点那个按钮 会自动编译shader并打开shader文件

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

在这里插入图片描述
在这里插入图片描述
这里显示一共有多少个变体
也可以点show 他会告诉你具体有哪些
在这里插入图片描述
也会显示这些内容
加完以后 无法刷新 可以点击
在这里插入图片描述
重新加载

那如果这样声明呢
在这里插入图片描述
你会发现编译后的文件显示的是这样的
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
在这里插入图片描述
你也可以
声明的时候用这个
在这里插入图片描述
__和字母中间有空格
这样只需占用一个变量位置
但依然是两个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的时候 你会发现这么个东西

在这里插入图片描述
这是shader 变体收集器
假如shader后是这样的
在这里插入图片描述
点加号可以看到
在这里插入图片描述
就不详细讲解了
可以看开头的教程链接
还可以
https://github.com/crossous/SocoTools

在这里插入图片描述
也可以在这里 先clear
然后玩一遍游戏
再 save to asset 成一个文件
不过这个不是特别准。

可以看看这个大佬的工具
https://github.com/crossous/SocoTools

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/23142.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

cpu 内核 逻辑处理器的关系

6核CPU&#xff0c;12个逻辑处理器 一颗内核在一个时间片内只能执行一个内核线程&#xff1b;当物理CPU使用了超线程技术后&#xff0c;在CPU的一颗内核中&#xff0c;利用就是利用其中空闲的执行单元&#xff0c;模拟出另外一个核心&#xff08;并不是真正的物理运算核心&…

详解C语言assert宏

前言&#xff1a;我们经常在写代码时&#xff0c;发现一些大牛的代码中总有一句assert&#xff08;表达式&#xff09;&#xff0c;经过在网上的学习&#xff0c;笔者也浅显的了解了assert的相关知识&#xff0c;assert一般用于规范代码&#xff0c;避免不必要的错误&#xff0…

【WOA-LSTM】基于WOA优化 LSTM神经网络预测研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【机器学习】信息量、香农熵、信息增益(增加例子,方便理解)

这节可以搭配 【机器学习】Logistic回归&#xff08;重新整理&#xff09;信息量&#xff08;信息&#xff09;信息量公式的推理过程 香农熵信息增益 【机器学习】Logistic回归&#xff08;重新整理&#xff09; B站视频&#xff1a;“交叉熵”如何做损失函数&#xff1f;打包…

css元素的显示和隐藏

1. display显示隐藏 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><st…

类和对象 --- 封装+对象特性

&#x1f442; 快乐E调 - 林澜叶 - 单曲 - 网易云音乐 &#x1f442; Plain Jane (Freestyle) - Ombre2Choc Nation - 单曲 - 网易云音乐 1.5倍速&#xff0c;跟着敲&#xff0c;初识C 目录 &#x1f3c6;封装 &#x1f333;属性和行为作为整体 &#x1f333;案例 -- 设置…

19-01 技术选型的道与术

系列目录导航&#x1f449; 什么是技术选型&#xff0c;技术选型的重要性 根据实际业务管理的需要&#xff0c;对硬件、软件以及所要用到的技术进行规格的选择狭义上的技术选型&#xff1a;团队决定选用哪种技术去解决问题&#xff0c;比如选用某个技术语言、某个技术框架去开…

人民大学与加拿大女王金融硕士项目——在现在憧憬美好的未来

未来是一个虚无缥缈的词汇&#xff0c;抓不住也看不到。未来里有着我们无限的希望&#xff0c;也有着美好的憧憬。未来究竟是怎样的呢&#xff0c;有人说现在的样子里藏着未来的模样。在职的你有没有为未来编织一副美丽的画卷呢&#xff1f;未来很远&#xff0c;远到只能靠想象…

Linux设备树:删除节点和属性的方法

[摘要]&#xff1a;本文主要介绍了在设备树中删除节点&#xff08;node&#xff09;和属性&#xff08;property&#xff09;的方法。为了便于理解&#xff0c;笔者先介绍了 dtsi 和 dts 的关系&#xff0c;然后构建了虚拟的需求场景&#xff0c;最终给出示例。 背景知识 设备…

shell 免交互

文章目录 Here Document 免交互实验多行注释基本命令 实验 Here Document 免交互 使用I/O重定向的方式将命令列表提供给交互式程序或命令&#xff0c;比如 ftp、cat 或 read 命令。是标准输入的一种替代品可以帮助脚本开发人员不必使用临时文件来构建输入信息&#xff0c;而是…

理光打印机连接电脑后不打印的原因及解决方法

理光打印机在使用时&#xff0c;可能会出现正常连接上理光打印机却没有反应的情况&#xff0c;出现无法打印的情况&#xff0c;下面&#xff0c;驱动人生为大家带来理光打印机连接后不打印的解决方案。 驱动人生分析&#xff0c;一般遇到理光打印机连接后不打印的情况&#xf…

python 的APScheduler配置的定时任务会被Miss掉

背景 python 的APScheduler配置的定时任务会被Miss掉&#xff0c;经常在控制台收到一些Miss的告警信息&#xff0c;就觉得是任务太多导致的&#xff0c;为了定位到具体的原因&#xff0c;看了一些源码&#xff0c;了解到了定时任务的6大模块的协同工作模式。异常信息及来源 异…

2022年深圳杯数学建模B题基于用电可靠性的配电网规划解题全过程文档及程序

2022年深圳杯数学建模 B题 基于用电可靠性的配电网规划 原题再现&#xff1a; 如果一批用户变压器&#xff08;下面简称用户&#xff09;仅由一个电源变电站&#xff08;下面简称电源&#xff09;供电&#xff0c;称为单供。这时配电网由电线和开关联接成以电源为根节点的树状…

Transformer应用之构建聊天机器人(二)

四、模型训练解析 在PyTorch提供的“Chatbot Tutorial”中&#xff0c;关于训练提到了2个小技巧&#xff1a; 使用”teacher forcing”模式&#xff0c;通过设置参数“teacher_forcing_ratio”来决定是否需要使用当前标签词汇来作为decoder的下一个输入&#xff0c;而不是把d…

< ElementUi组件库: el-progress 进度条Bug及样式调整 >

ElementUi组件库&#xff1a; el-progress 进度条Bug及样式调整 &#x1f449; 前言&#x1f449; 一、实现原理> 修改 el-progress 进度条样式 及 渐变进度条样式 &#x1f449; 二、案例代码&#xff08;前言效果图案例&#xff09;> HTML代码> CSS代码 &#x1f44…

C++学习day--12 循环的应用,暴力破解密码和输出动图

第 1 节 职场修炼&#xff1a;程序员到底能干多久 现状&#xff1a; 很多程序员&#xff0c;过了 30 岁&#xff0c;纷纷转行。 原因&#xff1a; 1 &#xff09;薪资过万后&#xff0c;很难进一步提升 2 &#xff09;可替代性高&#xff0c;在新人面前&#xff0c;没有…

SolVES模型在生态系统服务社会价值评估中的运用

SolVES模型&#xff08;Social Values for Ecosystem Services&#xff09;全称为生态系统服务社会价值模型&#xff0c;是由美国地质勘探局和美国科罗拉多州立大学联合开发的一款地理信息系统应用程序&#xff0c;开发该模型的目的主要是对生态系统服务功能中的社会价值进行空…

全面了解Java连接MySQL的基础知识,快速实现数据交互

全面了解Java连接MySQL的基础知识&#xff0c;快速实现数据交互 1. 数据库的重要性2. MySQL数据库简介2.1 MySQL数据库的基本概念2.2 MySQL的基本组成部分包括服务器、客户端和存储引擎。2.3 安装MySQL数据库2.3.1安装MySQL数据库2.3.2 下载MySQL安装程序2.3.3 运行MySQL安装程…

帽子设计作品——蒸汽朋克的乌托邦,机械配件的幻想世界!

蒸汽朋克是由蒸汽steam和朋克punk两个词组成&#xff0c; 蒸汽代表着以蒸汽机作为动力的大型机械&#xff0c;而朋克则代表一种反抗、叛逆的精神。 蒸汽朋克的作品通常以蒸汽时代为背景&#xff0c;通过如新能源、新机械、新材料、新交通工具等新技术&#xff0c;使画面充满想…

理解深度可分离卷积

1、常规卷积 常规卷积中&#xff0c;连接的上一层一般具有多个通道&#xff08;这里假设为n个通道&#xff09;&#xff0c;因此在做卷积时&#xff0c;一个滤波器&#xff08;filter&#xff09;必须具有n个卷积核&#xff08;kernel&#xff09;来与之对应。一个滤波器完成一…