庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili


特效类Shader
透明剪切_AlphaCutout_AC
AC_AlphaTest经常用于卡通风格,一般卡通项目是后处理+抗锯齿+Bloom   
硬边缘比较符合卡通美术风格,后处理可以缓解锯齿,Bloom可以溢出辉光效果
AC没有排序问题,边缘太硬是优点也是缺点(边缘不是0就是1),移动端性能较差
Cutoff 
透贴可能是一个从白到黑的过渡,从哪个灰度算它是透的,从哪个灰度算它不是透的,你就要有一个标准,这个标准就是这个Cutoff的阈值
Shader "AP01/L13/AC"
{
    Properties
    {
        _MainTex ("RGB:颜色 A:透贴", 2d) = "gray"{}
        _Cutoff ("透切阈值", range(0.0, 1.0)) = 0.5
    }
    SubShader
    {
        Tags
        {
            "RenderType"="TransparentCutout"    // 对应改为Cutout
            "ForceNoShadowCasting"="True"       // 关闭阴影投射
            "IgnoreProjector"="True"            // 不响应投射器
        }
        Pass
        {
            Name "FORWARD"
            Tags { "LightMode"="ForwardBase"  }
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"
            #pragma multi_compile_fwdbase_fullshadows
            #pragma target 3.0
            // 输入参数
            uniform sampler2D _MainTex; uniform float4 _MainTex_ST;
            uniform half _Cutoff;
            // 输入结构
            struct VertexInput
            {
                float4 vertex : POSITION;       // 顶点位置 总是必要
                float2 uv : TEXCOORD0;          // UV信息 采样贴图用
            };
            // 输出结构
            struct VertexOutput
            {
                float4 pos : SV_POSITION;       // 顶点位置 总是必要
                float2 uv : TEXCOORD0;          // UV信息 采样贴图用
            };
            // 输入结构>>>顶点Shader>>>输出结构
            VertexOutput vert (VertexInput v)
            {
                VertexOutput o = (VertexOutput)0;
                o.pos = UnityObjectToClipPos( v.vertex);    // 顶点位置 OS>CS
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);       // UV信息 支持TilingOffset
                return o;
            }
            // 输出结构>>>像素
            half4 frag(VertexOutput i) : COLOR
            {
                half4 var_MainTex = tex2D(_MainTex, i.uv);      // 采样贴图 RGB颜色 A透贴
                clip(var_MainTex.a - _Cutoff);                  // 透明剪切
                return var_MainTex;                             // 返回值
            }
            ENDCG
        }
    }
}
透明混合_AlphaBlend_AB
排序有问题,不太适合做那种空间关系错杂的效果,可以实现半透明效果
特效上打底用,移动端性能比AC强,边缘效果好
AB不需要Cutoff值
渲染不透明物体,是从前往后渲染
渲染透明物体,是从后往前渲染
SrcFactor 源因子  DstFactor 目标因子
混合有两个主体,A混到B上,要混的物体是源因子A,被混到的物体是目标因子B
无论是源因子还是目标因子,它都是一个图像,它是图像的话它就有RGBA
SrcAlpha就是源因子的A通道
Shader "AP01/L13/AB"
{Properties{_MainTex ("RGB:颜色 A:透贴", 2d) = "gray"{}_Opacity ("透明度", range(0, 1)) = 0.5}SubShader{Tags{"Queue"="Transparent"               // 调整渲染顺序"RenderType"="Transparent"          // 对应改为Cutout"ForceNoShadowCasting"="True"       // 关闭阴影投射"IgnoreProjector"="True"            // 不响应投射器}Pass{Name "FORWARD"Tags { "LightMode"="ForwardBase" }Blend One OneMinusSrcAlpha          // 修改混合方式One/SrcAlpha OneMinusSrcAlphaCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#pragma multi_compile_fwdbase_fullshadows#pragma target 3.0// 输入参数uniform sampler2D _MainTex; uniform float4 _MainTex_ST;uniform half _Opacity;// 输入结构struct VertexInput{float4 vertex : POSITION;       // 顶点位置 总是必要float2 uv : TEXCOORD0;          // UV信息 采样贴图用};// 输出结构struct VertexOutput{float4 pos : SV_POSITION;       // 顶点位置 总是必要float2 uv : TEXCOORD0;          // UV信息 采样贴图用};// 输入结构>>>顶点Shader>>>输出结构VertexOutput vert (VertexInput v){VertexOutput o = (VertexOutput)0;o.pos = UnityObjectToClipPos( v.vertex);    // 顶点位置 OS>CSo.uv = TRANSFORM_TEX(v.uv, _MainTex);       // UV信息 支持TilingOffsetreturn o;}// 输出结构>>>像素half4 frag(VertexOutput i) : COLOR{half4 var_MainTex = tex2D(_MainTex, i.uv);      // 采样贴图 RGB颜色 A透贴half3 finalRGB = var_MainTex.rgb;half opacity = var_MainTex.a * _Opacity;return half4(finalRGB * opacity, opacity);                // 返回值}ENDCG}}
}
透明叠加_Addtive_AD
特效灵魂手段
Shader "AP01/L13/AD"
{Properties{_MainTex ("RGB:颜色 A:透贴", 2d) = "gray"{}_Opacity ("透明度", range(0, 1)) = 0.5}SubShader{Tags {"Queue"="Transparent"               // 调整渲染顺序"RenderType"="Transparent"          // 对应改为Cutout"ForceNoShadowCasting"="True"       // 关闭阴影投射"IgnoreProjector"="True"            // 不响应投射器}Pass{Name "FORWARD"Tags { "LightMode"="ForwardBase" }Blend One One                       // 修改混合方式CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#pragma multi_compile_fwdbase_fullshadows#pragma target 3.0// 输入参数uniform sampler2D _MainTex; uniform float4 _MainTex_ST;uniform half _Opacity;// 输入结构struct VertexInput{float4 vertex : POSITION;       // 顶点位置 总是必要float2 uv : TEXCOORD0;          // UV信息 采样贴图用};// 输出结构struct VertexOutput{float4 pos : SV_POSITION;       // 顶点位置 总是必要float2 uv : TEXCOORD0;          // UV信息 采样贴图用};// 输入结构>>>顶点Shader>>>输出结构VertexOutput vert (VertexInput v){VertexOutput o = (VertexOutput)0;o.pos = UnityObjectToClipPos( v.vertex);    // 顶点位置 OS>CSo.uv = TRANSFORM_TEX(v.uv, _MainTex);       // UV信息 支持TilingOffsetreturn o;}// 输出结构>>>像素half4 frag(VertexOutput i) : COLOR {half4 var_MainTex = tex2D(_MainTex, i.uv);      // 采样贴图 RGB颜色 A透贴不必须half3 finalRGB = var_MainTex.rgb;half opacity = var_MainTex.a * _Opacity;return half4(finalRGB * opacity, opacity);                // 返回值}ENDCG}}
}
混合模式
混合原理
在Shader里面算出来的结果就是源因子,在Shader算出结果之前的背景叫做目标因子
Shader "AP01/L13/BlendMode"
{Properties{_MainTex ("RGB:颜色 A:透贴", 2d) = "gray"{}_Opacity ("透明度", 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"          // 对应改为Cutout"ForceNoShadowCasting"="True"       // 关闭阴影投射"IgnoreProjector"="True"            // 不响应投射器}Pass{Name "FORWARD"Tags { "LightMode"="ForwardBase" }BlendOp [_BlendOp]                  // 可自定义混合算符Blend [_BlendSrc] [_BlendDst]       // 可自定义混合模式CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#pragma multi_compile_fwdbase_fullshadows#pragma target 3.0// 输入参数uniform sampler2D _MainTex; uniform float4 _MainTex_ST;uniform half _Opacity;// 输入结构struct VertexInput{float4 vertex : POSITION;       // 顶点位置 总是必要float2 uv : TEXCOORD0;          // UV信息 采样贴图用};// 输出结构struct VertexOutput{float4 pos : SV_POSITION;       // 顶点位置 总是必要float2 uv : TEXCOORD0;          // UV信息 采样贴图用};// 输入结构>>>顶点Shader>>>输出结构VertexOutput vert (VertexInput v){VertexOutput o = (VertexOutput)0;o.pos = UnityObjectToClipPos( v.vertex);    // 顶点位置 OS>CSo.uv = TRANSFORM_TEX(v.uv, _MainTex);       // UV信息 支持TilingOffsetreturn o;}// 输出结构>>>像素half4 frag(VertexOutput i) : COLOR{half4 var_MainTex = tex2D(_MainTex, i.uv);      // 采样贴图 RGB颜色 A透贴不必须half3 finalRGB = var_MainTex.rgb;half opacity = var_MainTex.a * _Opacity;return half4(finalRGB * opacity, opacity);                // 返回值}ENDCG}}
}

庄懂着色器_L13_特效篇相关推荐

  1. 庄懂着色器_L21_CyberPunk

    庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili 案例_赛博小人 模型准备 平常所说的1U,2U对应Unity的是0U,1U 3Dsmax的顺序是从1开始的;Unity_UV的顺序是从0 ...

  2. 庄懂着色器_L05_镜面反射

    庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili 漫反射-Diffuse  镜面反射-Specular 常用向量 漫反射 跟Camera或者人眼的观察视角无关 镜面反射  跟Camera ...

  3. 庄懂着色器_L09_Fresnel/Matcap/Cubemap

    庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili 环境反射的做法有Matcap和Cubemap 菲涅尔现象 菲涅尔连连看部分 Fresnel = pow(1-ndotv,powVal)下 ...

  4. 庄懂着色器_L18_序列帧与极坐标

    庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili 序列帧_Sequence 小人是一个AB的模型,外面鬼火是AD模式,是一个双Pass的Shader 代码部分 Pass可以都是有一个名字 ...

  5. cocos2d-x与着色器设计--入门篇(游云凌天原创)

    http://blog.csdn.net/danjinxiangsi/article/details/43949955 着色器(Shader)应用与计算机图形学领域,指一组提供计算机图形资源在渲染时执 ...

  6. cesium实现流入迁徙图(仿echarts)(着色器)(cesium篇.52)

    听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可"私信"博主. 效果如下所示: 下面献上完整代码,代码重 ...

  7. cesium叠加动态流线(着色器)(cesium篇.54)

    听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可"私信"博主. 效果如下所示: 下面献上完整代码,代码重 ...

  8. 使用Shader Graph实现《塞尔达传说:旷野之息》风格的着色器

    本文转自Unity Connect Unity的技术经理Ciro Continisio在Connect上分享创作模仿任天堂游戏<塞尔达传说:旷野之息>角色风格的着色器,受到不少用户的关注, ...

  9. php代码着色器,使用Shader Graph实现《塞尔达传说:旷野之息》风格的着色器(转)...

    马上注册,加入CGJOY,让你轻松玩转CGJOY. 您需要 登录 才可以下载或查看,没有帐号?立即注册 x Unity的技术经理Ciro Continisio在Connect上分享创作模仿任天堂游戏& ...

  10. 【浅墨Unity3D Shader编程】之三 光之城堡篇:子着色器、通道与标签的写法 amp; 纹理混合...

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://hpw123.net/a/C__/kongzhitaichengxu/2014/1117/120.html 作者:毛星 ...

最新文章

  1. Netflix的高可用架构建议
  2. ES权威指南[官方文档学习笔记]-14 phrase search
  3. 【PC工具】更新免费文库文档下载器,免费下载文库文档
  4. 系统通知,居然用拉取
  5. 文件上传与下载问题记录
  6. SpringSecurity 权限控制之异常处理流程图
  7. 从 DevOps 到 Serverless
  8. ZOJ 1586 QS Network
  9. Zabbix 3.0 配置企业微信报警(注册---测试)
  10. js中 style.width与 offsetWidth的区别
  11. Spring MVC Converter(类型转换器)详解
  12. linux下打开Mongodb命令行窗口,Linux系统下MongoDB的安装与基本操作
  13. mysql perl教程_使用 Perl 的 MySQL 事务
  14. 全局记录RabbitMQ的消费者消息日志
  15. 【NC204267】牛牛染颜色
  16. 【概念】数据仓库和数仓建模
  17. 超级用户su没有权限修改所属
  18. 工欲善其事必先利其器之浏览器篇
  19. 手机怎么解决同ip多账号_安卓手机用久了垃圾多怎么办?5款强力清理软件帮你解决难题...
  20. 评论:电信重组中国电信才是赢家

热门文章

  1. js calendar / wannianli
  2. Spring-IoC注解
  3. win10系统hp笔记本开机黑屏一段时间解决方法
  4. 浅淡 Apache Kylin 与 ClickHouse 的对比
  5. 线性子空间的交、并、和、维数与直和等各种关系总结
  6. 第四范式战疫侦察三部曲:追踪、筛查、推演 提升疫情防控能力
  7. 【毕业设计】基于大数据的招聘与租房分析可视化系统
  8. python小游戏之超级玛丽进阶版(1~4关)。好玩到爆炸~【内附github源码,及其详细备注】
  9. epub格式的电子书
  10. rand()和rand_r()的区别