庄懂的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,自定义混合>相关推荐

  1. 庄懂的TA笔记(六)<FakeEnvReflect 生锈,锈迹效果>

    庄懂的TA笔记(六)<FakeEnvReflect && 生锈,锈迹效果> 一.作业~点评: OldSchool<Lambert+phong>==基础光照+反射 ...

  2. 庄懂的TA笔记(九)<菲涅尔 + MatCap + CubeMap>

    庄懂的TA笔记(九)<菲涅尔 + MatCap + CubeMap> 课程内容: 1.菲涅尔 0.效果展示.公式: 菲涅尔现象:  Fresnel(菲涅尔) 用到的两个向量  NdirWS ...

  3. 庄懂的TA笔记(五)<漫反射 镜面反射>

    1.漫反射: 黑话: 常用向量:(全要记) nDir:法线方向,点乘操作,简称,n; lDir:光照方向,点乘操作,简称,l: vDir:观察方向,点乘操作,简称,v: rDir:光反射方向,点乘操作 ...

  4. AE489 4K卡通水火焰手绘烟雾漫画泡泡文字闪光特效元素包带Alpha透明通道ae模板

    AE489 4K卡通水火焰手绘烟雾漫画泡泡文字闪光特效元素包带Alpha透明通道ae模板 模板用途:液体,综艺节目动画元素,泡泡文字,卡通,卡通泡泡,文字效果,火,独特,闪光效果,手绘,烟,标题,水 ...

  5. LED屏幕3D特效的四种原理

    2D与3D的区别在于,前者是平面显示,而后者是立体显示.从2D到带眼镜观看3D,再到裸眼3D技术,无不说明技术的进步.随着裸眼3D技术越来越成熟,LED显示屏厂家在LED电子大屏幕的基础上搭载3D技术 ...

  6. 庄懂老师TA学习笔记 - 渲染流程

    视频链接 庄懂的技术美术入门课(美术向)-直播录屏-第1课_哔哩哔哩_bilibili 首先我们用一张图来看一下基础的渲染流程 第一步:读取模型的结构 大家都知道,在建模软件中,我们是通过创建一个一个 ...

  7. 一篇不懂庄懂的学习笔记-技术美术入门课作业解析(UE4版)

    前言:最近学习庄懂大佬的技术美术入门课,因为一直不太习惯Unity连连看,所以转到UE4来操作了.菜鸡实操,希望有大佬批评指正. 传送门:庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili ...

  8. 庄懂老师TA学习笔记 - 半兰伯特光照模型

    先看一下兰伯特光照模型的公式 Max(0, nDir ·lDir) 通过公式我们知道,当法线方向和光照方向的反方向的角度大于90度时,点乘就会出现负数的结果,所以我们使用与0取最大值来排除掉这些没有实 ...

  9. 【Android笔记】Activity的四种启动模式

    在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity. 可能会希望一个Activity跳转到原来某个Activity实例,而不是产生大量重复 ...

最新文章

  1. UA STAT675 统计计算I 随机数生成8 Adaptive Rejection Sampling
  2. UNITY2018.3 在editor下运行时new memoryprofiler显示 shader占用内存很大的问题在安卓上并没有看到...
  3. 标题要在3~5字之间-三年总结
  4. pandas合并groupby_pandas实践之GroupBy()
  5. android sdk 2.9.5.0,如何找到问题Android SDK 3.0错误:(9,5)错误:资源android:attr/colorError未找到...
  6. java keytool证书工具使用小结
  7. Postgres中tuple的组装与插入
  8. 关于MySQL优化的几个问题
  9. Win2008 R2 IIS FTP防火墙的配置
  10. linux wps2016_2016年排名前7的Linux游戏
  11. MySQL存储过程的使用
  12. 理解 Linux 条件变量
  13. QQ群红包裂变吸粉引流 玩法解析实战操作
  14. Spring Boot 集成Spring Schedule定时任务执行功能(动态修改执行时间)
  15. 空间数据挖掘与空间大数据的探索与思考(三)
  16. 苹果手机通话记录删除了怎么恢复?
  17. (TT三)Nginx+fastDFS
  18. Eureka解密(1)------ 注册实例服务发现理解
  19. 这四个原因会导致域名解析错误
  20. 利用LVS(Linux Virtual Server)系统实现Web服务器集群的负载均衡

热门文章

  1. python locust提取参数_python+locust性能测试学习笔记
  2. 一种混合包管理和容器管理方案,及在tinycorelinux上安装containerd和openfaas
  3. 1355 斐波那契的最小公倍数
  4. Java多线程编程——线程同步与线程安全问题及synchronized关键字
  5. SHOGUN toolbox的一些使用心得
  6. 测度论与概率论笔记4:测度空间上的积分(上)
  7. mandatory和immediate
  8. -bash: cd: /usr/bin/mysql:_linux下mysql的卸载、安装全过程amp;amp;mysql安装后bash:mysql:command not found...
  9. ThingsBoard 设备OTA
  10. 安道拓Adient EDI 830物料需求预测报文详解