庄懂的TA笔记(十三)<特效-混合模式:四种主要透明通道用法 AC,AB,AD,自定义混合>
庄懂的TA笔记(十三)<特效-混合模式:四种主要透明通道用法 AC,AB,AD,自定义混合>
效果展示:
正文:
一、特效类大纲:
1、特效 · 透
2、特效 · 动
3、特效 · 映
二、特效:AC:透切 alpha cut。
1、透切 · AlphaCutout · AC
2、代码 · AC :
1、关于AC在shader中的使用:关键代码>> Clip(alpha - _Cutoff)
_MainTex ("RGBA:RGB:色彩图,A:透贴",2d)="gray"{}
_Cutoff("透贴",range(0,1))=0.5
clip(var_mainTex.a - _Cutoff);
则,透贴完成。这个在12课的 dota2 shader的实践中 用到了这个知识。
2、关于修改SubshaderTags的含义:
subshader 下会有2 个Tags ,一个叫 Subshader Tags , 一个叫 Pass Tags。
其中这两个 Tags 下,会 兼容 不同的声明 内容。
Subshader 可以 在 脚本中出现多个,并为不同 Subshader Tags 修改不同RenderType(渲染类型)。
此节内容 只介绍 Subshader Tags 下的内容:
1、RenderType: 记住对应默认 TransparentCutout.
透明,或,不透明,这里设为透明,是因为 特效片,本就多为透明的。
2、ForceNoShadowCasting : 关闭投影 True.
因为在特效中,一般不用,或很少用阴影,而且还会增加消耗。
3、ignoreProjectoro: 不响应 投射器,关闭为True.
关闭project 的响应,(这里没过多解释,先 庄懂,后续接触到会有感性认识)
3、特效需要开启 Tilng offset
uniform sampler2D _MainTex; uniform float4 _MainTex_ST;
代码段:
Shader "Unlit/Sc013_AC02"
{Properties{_MainTex ("Texture", 2D) = "white" {}_Cutout("透贴",Range(0,1))=0.5}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass {Name "FORWARD"Tags {"LightMode"="ForwardBase"}CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile_instancing#include "UnityCG.cginc"#pragma multi_compile_fwdbase_fullshadows#pragma target 3.0UNITY_INSTANCING_BUFFER_START( Props )// UNITY_DEFINE_INSTANCED_PROP( float4, _Color)UNITY_INSTANCING_BUFFER_END( Props )uniform sampler2D _MainTex;uniform float4 _MainTex_ST;uniform float _Cutout;//输入结构struct VertexInput{float4 vertex : POSITION;float2 uv0 : TEXCOORD0;};//顶点输出结构struct VertexOutput {float4 pos : SV_POSITION;float2 uv0 : TEXCOORD0;};//输出结构>>>顶点shader>>>输出结构VertexOutput vert (VertexInput v) {VertexOutput o = (VertexOutput)0;o.pos = UnityObjectToClipPos(v.vertex);o.uv0 = TRANSFORM_TEX (v.uv0,_MainTex);return o ;}//色彩输出结构float4 frag(VertexOutput i) : COLOR {float4 var_mainTex = tex2D(_MainTex,i.uv0);clip(var_mainTex.a - _Cutout);return float4(var_mainTex);//输出最终颜色}ENDCG}}
}
三、特效:AB:透混 alpha blend:
1、混透 · AlphaBlend · AB:
2、代码 · AB :
Subshader Tags 下 :
1、RenderType: 记住对应默认 TransparentCutout.
2、ForceNoShadowCasting : 关闭投影 True.
3、ignoreProjectoro: 不响应 投射器,关闭为True.
4、新增 Queue: 渲染队列 修改为对应的 TransparentCutout
1、控制渲染顺序,控制何时被渲染。
2、渲染不透明物体,从前往后做一个渲染, 渲染透明物体时,从后往前渲染。
3、因为,在渲染透明物体前,需要先知道,被透物体身后的内容是什么,才能渲染到不透明的物体。
如何进行 前后顺序的控制呢 ?就 需用到,渲染队列。
4、Queue: = "Transparent"
Pass Tags混合方式:
1、Blend One / srcAlpha OneMinusSrcAlpha;
src 代表 源 Alpha 透明通道 , oneMinus 1- , srcAlpha 源 透明通道。
翻译过来 就是: 1 - 源透贴 .
(这里没过多解释,先 庄懂,后续接触到会有感性认识).
混合方法1:Blend One OneMinusSrcAlpha // 修改混合方式One/SrcAlpha OneMinusSrcAlpha
混合方法2:Blend SrcAlpha OneMinusSrcAlpha // 修改混合方式One/SrcAlpha OneMinusSrcAlpha
Blend One OneMinusScrAlpha ==传统写法。
Blend SrcAlpha OneMinusSrcAlpha == 预乘写法。
代码段:
Shader "Unlit/Sc013_AB02"
{Properties{_MainTex ("Texture", 2D) = "white" {}_Cutout("透贴",Range(0,1))=0.5}SubShader{Tags { "Queue"="Transparent""RenderType"="Transparent" }LOD 100Pass {Name "FORWARD"Tags {"LightMode"="ForwardBase"}Blend One OneMinusSrcAlphaCGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile_instancing#include "UnityCG.cginc"#pragma multi_compile_fwdbase_fullshadows#pragma target 3.0UNITY_INSTANCING_BUFFER_START( Props )// UNITY_DEFINE_INSTANCED_PROP( float4, _Color)UNITY_INSTANCING_BUFFER_END( Props )uniform sampler2D _MainTex;uniform float4 _MainTex_ST;uniform float _Cutout;//输入结构struct VertexInput{float4 vertex : POSITION;float2 uv0 : TEXCOORD0;};//顶点输出结构struct VertexOutput {float4 pos : SV_POSITION;float2 uv0 : TEXCOORD0;};//输出结构>>>顶点shader>>>输出结构VertexOutput vert (VertexInput v) {VertexOutput o = (VertexOutput)0;o.pos = UnityObjectToClipPos(v.vertex);o.uv0 = TRANSFORM_TEX (v.uv0,_MainTex);return o ;}//色彩输出结构float4 frag(VertexOutput i) : COLOR {float4 var_mainTex = tex2D(_MainTex,i.uv0);float opacity = var_mainTex.a * _Cutout;float3 finalRGB = var_mainTex * opacity;return float4(finalRGB,opacity);//输出最终颜色}ENDCG}}
}
四、特效:AD:透叠 alpha add
1、透叠 · Addtive · AD :
2、代码 · AD :
AB 与 AD 没有 太大区别, 唯一区别在 Pass Tags 下,Blend One One.
代码段:
Shader "Unlit/Sc013_AD02"
{Properties{_MainTex ("Texture", 2D) = "white" {}_Cutout("透贴",Range(0,1))=0.5}SubShader{Tags { "Queue"="Transparent""RenderType"="Transparent" }LOD 100Pass {Name "FORWARD"Tags {"LightMode"="ForwardBase"}Blend One OneCGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile_instancing#include "UnityCG.cginc"#pragma multi_compile_fwdbase_fullshadows#pragma target 3.0UNITY_INSTANCING_BUFFER_START( Props )// UNITY_DEFINE_INSTANCED_PROP( float4, _Color)UNITY_INSTANCING_BUFFER_END( Props )uniform sampler2D _MainTex;uniform float4 _MainTex_ST;uniform float _Cutout;//输入结构struct VertexInput{float4 vertex : POSITION;float2 uv0 : TEXCOORD0;};//顶点输出结构struct VertexOutput {float4 pos : SV_POSITION;float2 uv0 : TEXCOORD0;};//输出结构>>>顶点shader>>>输出结构VertexOutput vert (VertexInput v) {VertexOutput o = (VertexOutput)0;o.pos = UnityObjectToClipPos(v.vertex);o.uv0 = TRANSFORM_TEX (v.uv0,_MainTex);return o ;}//色彩输出结构float4 frag(VertexOutput i) : COLOR {float4 var_mainTex = tex2D(_MainTex,i.uv0);float opacity = var_mainTex.a * _Cutout;float3 finalRGB = var_mainTex * opacity;return float4(finalRGB,opacity);//输出最终颜色}ENDCG}}
}
五、特效:工具 · 混合模式:
1、更多混透模式:
2、混合原理:
这里 解释,Src 和 Dst 的关系,以 PS 图层为例。
Src : 源 上图层代号为 Src. 或 对象主体 为 源 。
Dst : 目标 下图层,被叠层,代号为 Dst. 或 身后背景 为 目标 。
SrcFactor : 源乘子,多种形式如 上图列表。
DstFactor : 目标乘子,多种形式如 上图列表。
Op: 混合运算符,加减乘除 多种形式如 上图列表。
例:Src * SrcFactor op Dst * DstFactor.
源 * 源乘子 加减乘除 目标 * 目标乘子。
3、美术自定义混合面板:
1、两种 操作 面板:
不封装,全暴漏。 前期 套餐 供选择。
封装,有限选择。 后期确定固定 选择。
4、不封装,全暴漏 代码实现:(这节课只介绍这个,封装后续介绍)
5、常用模式:
代码段:
Shader "Unlit/Sc013_Blend02"
{Properties{_MainTex ("Texture", 2D) = "white" {}_Cutout("透贴",Range(0,1))=0.5[Enum(UnityEngine.Rendering.BlendMode)]_BlendSrc("混合源乘子",int)=0[Enum(UnityEngine.Rendering.BlendMode)]_BlendDst("混合目标乘子",int)=0[Enum(UnityEngine.Rendering.BlendOp)]_BlendOp("混合运算符",int)=0}SubShader{Tags { "Queue"="Transparent""RenderType"="Transparent" }LOD 100Pass {Name "FORWARD"Tags {"LightMode"="ForwardBase"}BlendOp [_BlendOp]Blend [_BlendSrc] [_BlendDst]CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile_instancing#include "UnityCG.cginc"#pragma multi_compile_fwdbase_fullshadows#pragma target 3.0UNITY_INSTANCING_BUFFER_START( Props )// UNITY_DEFINE_INSTANCED_PROP( float4, _Color)UNITY_INSTANCING_BUFFER_END( Props )uniform sampler2D _MainTex;uniform float4 _MainTex_ST;uniform float _Cutout;//输入结构struct VertexInput{float4 vertex : POSITION;float2 uv0 : TEXCOORD0;};//顶点输出结构struct VertexOutput {float4 pos : SV_POSITION;float2 uv0 : TEXCOORD0;};//输出结构>>>顶点shader>>>输出结构VertexOutput vert (VertexInput v) {VertexOutput o = (VertexOutput)0;o.pos = UnityObjectToClipPos(v.vertex);o.uv0 = TRANSFORM_TEX (v.uv0,_MainTex);return o ;}//色彩输出结构float4 frag(VertexOutput i) : COLOR {float4 var_mainTex = tex2D(_MainTex,i.uv0);float opacity = var_mainTex.a * _Cutout;float3 finalRGB = var_mainTex * opacity;return float4(finalRGB,opacity);//输出最终颜色//return opacity;}ENDCG}}
}
六、任务委托:
1、作业:
庄懂的TA笔记(十三)<特效-混合模式:四种主要透明通道用法 AC,AB,AD,自定义混合>相关推荐
- 庄懂的TA笔记(六)<FakeEnvReflect 生锈,锈迹效果>
庄懂的TA笔记(六)<FakeEnvReflect && 生锈,锈迹效果> 一.作业~点评: OldSchool<Lambert+phong>==基础光照+反射 ...
- 庄懂的TA笔记(九)<菲涅尔 + MatCap + CubeMap>
庄懂的TA笔记(九)<菲涅尔 + MatCap + CubeMap> 课程内容: 1.菲涅尔 0.效果展示.公式: 菲涅尔现象: Fresnel(菲涅尔) 用到的两个向量 NdirWS ...
- 庄懂的TA笔记(五)<漫反射 镜面反射>
1.漫反射: 黑话: 常用向量:(全要记) nDir:法线方向,点乘操作,简称,n; lDir:光照方向,点乘操作,简称,l: vDir:观察方向,点乘操作,简称,v: rDir:光反射方向,点乘操作 ...
- AE489 4K卡通水火焰手绘烟雾漫画泡泡文字闪光特效元素包带Alpha透明通道ae模板
AE489 4K卡通水火焰手绘烟雾漫画泡泡文字闪光特效元素包带Alpha透明通道ae模板 模板用途:液体,综艺节目动画元素,泡泡文字,卡通,卡通泡泡,文字效果,火,独特,闪光效果,手绘,烟,标题,水 ...
- LED屏幕3D特效的四种原理
2D与3D的区别在于,前者是平面显示,而后者是立体显示.从2D到带眼镜观看3D,再到裸眼3D技术,无不说明技术的进步.随着裸眼3D技术越来越成熟,LED显示屏厂家在LED电子大屏幕的基础上搭载3D技术 ...
- 庄懂老师TA学习笔记 - 渲染流程
视频链接 庄懂的技术美术入门课(美术向)-直播录屏-第1课_哔哩哔哩_bilibili 首先我们用一张图来看一下基础的渲染流程 第一步:读取模型的结构 大家都知道,在建模软件中,我们是通过创建一个一个 ...
- 一篇不懂庄懂的学习笔记-技术美术入门课作业解析(UE4版)
前言:最近学习庄懂大佬的技术美术入门课,因为一直不太习惯Unity连连看,所以转到UE4来操作了.菜鸡实操,希望有大佬批评指正. 传送门:庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili ...
- 庄懂老师TA学习笔记 - 半兰伯特光照模型
先看一下兰伯特光照模型的公式 Max(0, nDir ·lDir) 通过公式我们知道,当法线方向和光照方向的反方向的角度大于90度时,点乘就会出现负数的结果,所以我们使用与0取最大值来排除掉这些没有实 ...
- 【Android笔记】Activity的四种启动模式
在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity. 可能会希望一个Activity跳转到原来某个Activity实例,而不是产生大量重复 ...
最新文章
- UA STAT675 统计计算I 随机数生成8 Adaptive Rejection Sampling
- UNITY2018.3 在editor下运行时new memoryprofiler显示 shader占用内存很大的问题在安卓上并没有看到...
- 标题要在3~5字之间-三年总结
- pandas合并groupby_pandas实践之GroupBy()
- android sdk 2.9.5.0,如何找到问题Android SDK 3.0错误:(9,5)错误:资源android:attr/colorError未找到...
- java keytool证书工具使用小结
- Postgres中tuple的组装与插入
- 关于MySQL优化的几个问题
- Win2008 R2 IIS FTP防火墙的配置
- linux wps2016_2016年排名前7的Linux游戏
- MySQL存储过程的使用
- 理解 Linux 条件变量
- QQ群红包裂变吸粉引流 玩法解析实战操作
- Spring Boot 集成Spring Schedule定时任务执行功能(动态修改执行时间)
- 空间数据挖掘与空间大数据的探索与思考(三)
- 苹果手机通话记录删除了怎么恢复?
- (TT三)Nginx+fastDFS
- Eureka解密(1)------ 注册实例服务发现理解
- 这四个原因会导致域名解析错误
- 利用LVS(Linux Virtual Server)系统实现Web服务器集群的负载均衡
热门文章
- python locust提取参数_python+locust性能测试学习笔记
- 一种混合包管理和容器管理方案,及在tinycorelinux上安装containerd和openfaas
- 1355 斐波那契的最小公倍数
- Java多线程编程——线程同步与线程安全问题及synchronized关键字
- SHOGUN toolbox的一些使用心得
- 测度论与概率论笔记4:测度空间上的积分(上)
- mandatory和immediate
- -bash: cd: /usr/bin/mysql:_linux下mysql的卸载、安装全过程amp;amp;mysql安装后bash:mysql:command not found...
- ThingsBoard 设备OTA
- 安道拓Adient EDI 830物料需求预测报文详解