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


序列帧_Sequence

小人是一个AB的模型,外面鬼火是AD模式,是一个双Pass的Shader

代码部分

Pass可以都是有一个名字的,这样一个Pass写完之后,其它的Shader想调用这个Pass,然后里面内容完全不想改,可以使用" UsePass (调用Pass名字)"

LightMode
Unity的手游一般都是ForwardBase前项渲染
使用SRP自定义渲染管线是可以自己声明一个LightMode,你的相机在渲染场景的时候,它会有一个模式,这个模式只会渲染这个模式下的Shader,相当于为什么你写的那个shader没有原先写的那个角色那些shader,为什么你完全都没有写关于阴影的事情,你只把Autolight和Lighting两个cginclude包含进来,它有就投影了呢?因为FallBack回退的shader里面它会有一个Pass,它的LightMode是shadowcast产生阴影,然后是它在渲染阴影的时候,它的相机的LightMode是shadowcast,然后它会在你的shader里面去找,我要找一个Pass,里面的LightMode是shadowcast,然后看看这个是LightMode是ForrwardBase,啊,不是的,这个是LightMode是ForwardAdd,啊也不是的!这个是shadowcast,那我就用这个shadowcast去渲染阴影,其实这个 渲染阴影是一个渲染距离

火焰序列图_Wrap Modex选择 Repeat
Shader "AP01/L18/Sequence"
{Properties{_MainTex    ("RGB:颜色 A:透贴", 2d) = "gray"{}_Opacity    ("透明度", range(0, 1)) = 0.5_Sequence   ("序列帧", 2d) = "gray"{}_RowCount   ("行数", int) = 1_ColCount   ("列数", int) = 1_Speed      ("速度", range(0.0, 15.0)) = 1}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 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 = v.uv;                                // 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}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 _Sequence; uniform float4 _Sequence_ST;uniform half _Opacity;uniform half _RowCount;uniform half _ColCount;uniform half _Speed;// 输入结构struct VertexInput{float4 vertex : POSITION;       // 顶点位置 总是必要float3 normal : NORMAL;float2 uv : TEXCOORD0;          // UV信息 采样贴图用};// 输出结构struct VertexOutput{float4 pos : SV_POSITION;       // 顶点位置 总是必要float2 uv : TEXCOORD0;          // UV信息 采样贴图用};// 输入结构>>>顶点Shader>>>输出结构VertexOutput vert (VertexInput v){VertexOutput o = (VertexOutput)0;v.vertex.xyz += v.normal * 0.03;            // 顶点位置法向挤出o.pos = UnityObjectToClipPos(v.vertex);     // 顶点位置 OS>CSo.uv = TRANSFORM_TEX(v.uv, _Sequence);      // 前置UV ST操作float id = floor(_Time.z * _Speed);         // 计算序列idfloat idV = floor(id / _ColCount);          // 计算V轴idfloat idU = id - idV * _ColCount;           // 计算U轴idfloat stepU = 1.0 / _ColCount;              // 计算U轴步幅float stepV = 1.0 / _RowCount;              // 计算V轴步幅float2 initUV = o.uv * float2(stepU, stepV) + float2(0.0, stepV * (_ColCount - 1.0));   // 计算初始UVo.uv = initUV + float2(idU * stepU, idV * stepV);   // 计算序列帧UVreturn o;}// 输出结构>>>像素half4 frag(VertexOutput i) : COLOR{half4 var_Sequence = tex2D(_Sequence, i.uv);      // 采样贴图 RGB颜色 A透贴half3 finalRGB = var_Sequence.rgb;half opacity = var_Sequence.a * _Opacity;return half4(finalRGB * opacity, opacity);        // 返回值}ENDCG}}
}极坐标_PolarCoord_代码部分
极坐标的换算只能在像素Shader里面去做
Shader "AP01/L18/PolarCoord"
{Properties{_MainTex    ("RGB:颜色 A:透贴", 2d)   = "gray"{}[HDR]_Color      ("混合颜色", color)         = (1.0, 1.0, 1.0, 1.0)_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                       // 修改混合方式CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#pragma multi_compile_fwdbase_fullshadows#pragma target 3.0// 输入参数uniform sampler2D _MainTex;uniform half _Opacity;uniform half3 _Color;// 输入结构struct VertexInput{float4 vertex : POSITION;       // 顶点位置 总是必要float2 uv : TEXCOORD0;          // UV信息 采样贴图用float4 color : COLOR;};// 输出结构struct VertexOutput{float4 pos : SV_POSITION;       // 顶点位置 总是必要float2 uv : TEXCOORD0;          // UV信息 采样贴图用float4 color : COLOR;};// 输入结构>>>顶点Shader>>>输出结构VertexOutput vert (VertexInput v){VertexOutput o = (VertexOutput)0;o.pos = UnityObjectToClipPos( v.vertex);    // 顶点位置 OS>CSo.uv = v.uv;                                // UV信息 支持TilingOffseto.color = v.color;return o;}// 直角坐标转极坐标方法float2 RectToPolar(float2 uv, float2 centerUV){uv = uv - centerUV;float theta = atan2(uv.y, uv.x);    // atan()值域[-π/2, π/2]一般不用; atan2()值域[-π, π]float r = length(uv);return float2(theta, r);}// 输出结构>>>像素half4 frag(VertexOutput i) : COLOR{// 直角坐标转极坐标float2 thetaR = RectToPolar(i.uv, float2(0.5, 0.5));// 极坐标转纹理采样UVfloat2 polarUV = float2(thetaR.x / 3.141593 * 0.5 + 0.5,    // θ映射到[0, 1]thetaR.y + frac(_Time.x * 3.0)      // r随时间流动);// 采样MainTexhalf4 var_MainTex = tex2D(_MainTex, polarUV);// 处理最终输出half3 finalRGB = (1 - var_MainTex.rgb) * _Color;half opacity = (1 - var_MainTex.r) * _Opacity * i.color.r;// 返回值return half4(finalRGB * opacity, opacity);}ENDCG}}
}

庄懂着色器_L18_序列帧与极坐标相关推荐

  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. 庄懂的技术美术入门课(美术向)——01~02学习笔记

    目录 Lecture 01 1) 工程搭建示范 a) 准备工作 b) 创建Shader 2) 理论介绍 a) 结构(Struct) b) 简单的渲染管线 c) 模型->输入结构 d) 输入结构- ...

  5. 个人学习笔记——庄懂的技术美术入门课(美术向)01

    个人学习笔记--庄懂的技术美术入门课(美术向)01 0 前言 1 工程搭建示范 2 理论 2.1 结构(struct) 2.2 渲染管线 3 操作 3.1-2 向量/标量/点积等若干线代基础 3.3 ...

  6. 庄懂的技术美术入门课(美术向) Lesson1

    庄懂的技术美术入门课(美术向) Lesson1 一.关于结构和渲染管 1.1 结构 1.2 渲染管线 模型到输入结构的过程是选取.采集模型文件中的信息,可以提供给后续渲染用的相关信息 顶点Shader ...

  7. 个人学习笔记——庄懂的技术美术入门课(美术向)03

    个人学习笔记--庄懂的技术美术入门课(美术向)03 1 回顾渲染流程 2 尝试shader代码 3 Lambert试试 4 节点组 5 作业 1 回顾渲染流程 老师以美术绘画的角度理解渲染管线,比较形 ...

  8. OpenGL超级宝典(第7版)笔记11 帧缓存运算 计算着色器 清单 3.13

    OpenGL超级宝典(第7版)笔记11 帧缓存运算 计算着色器 清单 3.13 文章目录 OpenGL超级宝典(第7版)笔记11 帧缓存运算 计算着色器 清单 3.13 1 帧缓存运算 1.1 裁剪测 ...

  9. 使用着色器模拟雾效果

    上一篇关于天空盒的blog谈到了雾效果,那么这次来讨论一下用着色器实现雾效果的具体实现方法. 雾在大自然中是一种常见的天气现象,比如清晨时分在山上就能看到这种效果.我们可以使用OpenGL轻松地模拟出 ...

最新文章

  1. 推荐 | 机器学习开源项目 Top 10
  2. 实验一:JDK下载与安装、Eclipse下载与使用总结心得
  3. python监控错误语句,基于Python的关键字监控及告警
  4. php 时间 (年,月,星期,天,小时,秒)的查找
  5. 我们是如何通过全球第一免费开源ERP Odoo做到项目100%交付
  6. 将一个BYTE数组转换成16进制字符串和10进制字符串格式
  7. mipi和isp处理_图像信号处理 (ISP) 流水线
  8. asp.net中验证控件的使用方法
  9. java 热布署 开源_一种简单快捷的 java 热部署方式
  10. pytorch torch.optim.Optimizer
  11. python常用格式化_python的常用三种格式化方法
  12. 虚拟机怎么给c盘分配磁盘空间_虚拟机VMware V15.5详细图文安装教程
  13. android runtime异常,在做android下拉刷新时遇到异常java.lang.RuntimeException: Can't create handle...
  14. Redis的高级应用-事务处理、持久化、发布与订阅消息、虚拟内存使用
  15. 利用fitz将pdf文件的每一页输出为高精度的PNG图片
  16. 基于STM32+华为云IOT设计智能称重系统
  17. 测试用例设计——错误猜测法
  18. 阳春三月,正是樱花绽放时,借此机会给午饭献上鲜艳艳的视觉盛宴!
  19. linux系统编程1--文件编程open和close
  20. 机车安装鸿蒙系统,华为鸿蒙系统2.0版本来了:9月11日发布 打通PC、手表、车机等...

热门文章

  1. 手机是否已被他人监控了?如果出现这3种现象,大家还是小心点
  2. 3.5mm 耳机插座 5脚
  3. c语言实现层次遍历二叉树完整代码
  4. Mac mini安装内存条和Xcode安装
  5. [shader]玻璃效果
  6. 大屏页面三种缩放:按分辨率进行缩放、等比缩放(展示全部内容、展示部分内容和滚动条)
  7. js判断移动端是否安装某款app的方法
  8. 阿里飞冰函数式插件转对象式
  9. 码率含义以及计算大小
  10. java批改算数题,一秒批改数学题 小猿口算横式题目批改准确率达99.9%