庄懂着色器_L18_序列帧与极坐标
庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili
![](/assets/blank.gif)
![](/assets/blank.gif)
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_序列帧与极坐标相关推荐
- 庄懂着色器_L21_CyberPunk
庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili 案例_赛博小人 模型准备 平常所说的1U,2U对应Unity的是0U,1U 3Dsmax的顺序是从1开始的;Unity_UV的顺序是从0 ...
- 庄懂着色器_L05_镜面反射
庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili 漫反射-Diffuse 镜面反射-Specular 常用向量 漫反射 跟Camera或者人眼的观察视角无关 镜面反射 跟Camera ...
- 庄懂着色器_L09_Fresnel/Matcap/Cubemap
庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili 环境反射的做法有Matcap和Cubemap 菲涅尔现象 菲涅尔连连看部分 Fresnel = pow(1-ndotv,powVal)下 ...
- 庄懂的技术美术入门课(美术向)——01~02学习笔记
目录 Lecture 01 1) 工程搭建示范 a) 准备工作 b) 创建Shader 2) 理论介绍 a) 结构(Struct) b) 简单的渲染管线 c) 模型->输入结构 d) 输入结构- ...
- 个人学习笔记——庄懂的技术美术入门课(美术向)01
个人学习笔记--庄懂的技术美术入门课(美术向)01 0 前言 1 工程搭建示范 2 理论 2.1 结构(struct) 2.2 渲染管线 3 操作 3.1-2 向量/标量/点积等若干线代基础 3.3 ...
- 庄懂的技术美术入门课(美术向) Lesson1
庄懂的技术美术入门课(美术向) Lesson1 一.关于结构和渲染管 1.1 结构 1.2 渲染管线 模型到输入结构的过程是选取.采集模型文件中的信息,可以提供给后续渲染用的相关信息 顶点Shader ...
- 个人学习笔记——庄懂的技术美术入门课(美术向)03
个人学习笔记--庄懂的技术美术入门课(美术向)03 1 回顾渲染流程 2 尝试shader代码 3 Lambert试试 4 节点组 5 作业 1 回顾渲染流程 老师以美术绘画的角度理解渲染管线,比较形 ...
- OpenGL超级宝典(第7版)笔记11 帧缓存运算 计算着色器 清单 3.13
OpenGL超级宝典(第7版)笔记11 帧缓存运算 计算着色器 清单 3.13 文章目录 OpenGL超级宝典(第7版)笔记11 帧缓存运算 计算着色器 清单 3.13 1 帧缓存运算 1.1 裁剪测 ...
- 使用着色器模拟雾效果
上一篇关于天空盒的blog谈到了雾效果,那么这次来讨论一下用着色器实现雾效果的具体实现方法. 雾在大自然中是一种常见的天气现象,比如清晨时分在山上就能看到这种效果.我们可以使用OpenGL轻松地模拟出 ...
最新文章
- 推荐 | 机器学习开源项目 Top 10
- 实验一:JDK下载与安装、Eclipse下载与使用总结心得
- python监控错误语句,基于Python的关键字监控及告警
- php 时间 (年,月,星期,天,小时,秒)的查找
- 我们是如何通过全球第一免费开源ERP Odoo做到项目100%交付
- 将一个BYTE数组转换成16进制字符串和10进制字符串格式
- mipi和isp处理_图像信号处理 (ISP) 流水线
- asp.net中验证控件的使用方法
- java 热布署 开源_一种简单快捷的 java 热部署方式
- pytorch torch.optim.Optimizer
- python常用格式化_python的常用三种格式化方法
- 虚拟机怎么给c盘分配磁盘空间_虚拟机VMware V15.5详细图文安装教程
- android runtime异常,在做android下拉刷新时遇到异常java.lang.RuntimeException: Can't create handle...
- Redis的高级应用-事务处理、持久化、发布与订阅消息、虚拟内存使用
- 利用fitz将pdf文件的每一页输出为高精度的PNG图片
- 基于STM32+华为云IOT设计智能称重系统
- 测试用例设计——错误猜测法
- 阳春三月,正是樱花绽放时,借此机会给午饭献上鲜艳艳的视觉盛宴!
- linux系统编程1--文件编程open和close
- 机车安装鸿蒙系统,华为鸿蒙系统2.0版本来了:9月11日发布 打通PC、手表、车机等...