庄懂着色器_L19_顶点动画
庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili
Shader "AP01/L19/Translation"
{Properties{_MainTex ("RGB:颜色 A:透贴", 2d) = "gray"{}_Opacity ("透明度", range(0, 1)) = 0.5_MoveRange ("移动范围", range(0.0, 3.0)) = 1.0_MoveSpeed ("移动速度", range(0.0, 3.0)) = 1.0}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;uniform float _MoveRange;uniform float _MoveSpeed;// 输入结构struct VertexInput{float4 vertex : POSITION; // 顶点位置 总是必要float2 uv : TEXCOORD0; // UV信息 采样贴图用};// 输出结构struct VertexOutput{float4 pos : SV_POSITION; // 顶点位置 总是必要float2 uv : TEXCOORD0; // UV信息 采样贴图用};// 声明常量#define TWO_PI 6.283185// 顶点动画方法void Translation (inout float3 vertex){vertex.y += _MoveRange * sin(frac(_Time.z * _MoveSpeed) * TWO_PI);}// 输入结构>>>顶点Shader>>>输出结构VertexOutput vert (VertexInput v){VertexOutput o = (VertexOutput)0;Translation(v.vertex.xyz);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 "AP01/L19/Scaling"
{Properties{_MainTex ("RGB:颜色 A:透贴", 2d) = "gray"{}_Opacity ("透明度", range(0, 1)) = 0.5_ScaleRange ("缩放范围", range(0.0, 0.5)) = 0.2_ScaleSpeed ("缩放速度", range(0.0, 3.0)) = 1.0}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;uniform float _ScaleRange;uniform float _ScaleSpeed;// 输入结构struct VertexInput{float4 vertex : POSITION; // 顶点位置 总是必要float2 uv : TEXCOORD0; // UV信息 采样贴图用};// 输出结构struct VertexOutput{float4 pos : SV_POSITION; // 顶点位置 总是必要float2 uv : TEXCOORD0; // UV信息 采样贴图用};// 声明常量#define TWO_PI 6.283185// 顶点动画方法void Scaling (inout float3 vertex){vertex *= 1.0 + _ScaleRange * sin(frac(_Time.z * _ScaleSpeed) * TWO_PI);}// 输入结构>>>顶点Shader>>>输出结构VertexOutput vert (VertexInput v){VertexOutput o = (VertexOutput)0;Scaling(v.vertex.xyz);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 "AP01/L19/Rotation"
{Properties{_MainTex ("RGB:颜色 A:透贴", 2d) = "gray"{}_Opacity ("透明度", range(0, 1)) = 0.5_RotateRange ("旋转范围", range(0.0, 45.0)) = 20.0_RotateSpeed ("旋转速度", range(0.0, 3.0)) = 1.0}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;uniform float _RotateRange;uniform float _RotateSpeed;// 输入结构struct VertexInput{float4 vertex : POSITION; // 顶点位置 总是必要float2 uv : TEXCOORD0; // UV信息 采样贴图用};// 输出结构struct VertexOutput{float4 pos : SV_POSITION; // 顶点位置 总是必要float2 uv : TEXCOORD0; // UV信息 采样贴图用};// 声明常量#define TWO_PI 6.283185// 顶点动画方法void Rotation (inout float3 vertex){float angleY = _RotateRange * sin(frac(_Time.z * _RotateSpeed) * TWO_PI);float radY = radians(angleY);float sinY, cosY = 0;sincos(radY, sinY, cosY);vertex.xz = float2
(vertex.x * cosY - vertex.z * sinY,vertex.x * sinY + vertex.z * cosY);}// 输入结构>>>顶点Shader>>>输出结构VertexOutput vert (VertexInput v){VertexOutput o = (VertexOutput)0;Rotation(v.vertex.xyz);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 "AP01/L19/AnimGhost"
{Properties{_MainTex ("RGB:颜色 A:透贴", 2d) = "gray"{}_Opacity ("透明度", range(0, 1)) = 0.5_ScaleParams ("天使圈缩放 X:强度 Y:速度 Z:校正", vector) = (0.2, 1.0, 4.5, 0.0)_SwingXParams ("X轴扭动 X:强度 Y:速度 Z:波长", vector) = (1.0, 3.0, 1.0, 0.0)_SwingZParams ("Z轴扭动 X:强度 Y:速度 Z:波长", vector) = (1.0, 3.0, 1.0, 0.0)_SwingYParams ("Y轴起伏 X:强度 Y:速度 Z:滞后", vector) = (1.0, 3.0, 0.3, 0.0)_ShakeYParams ("Y轴摇头 X:强度 Y:速度 Z:滞后", vector) = (20.0, 3.0, 0.3, 0.0)}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;uniform float4 _ScaleParams;uniform float3 _SwingXParams;uniform float3 _SwingZParams;uniform float3 _SwingYParams;uniform float3 _ShakeYParams;// 输入结构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;};// 声明常量#define TWO_PI 6.283185// 顶点动画方法void AnimGhost (inout float3 vertex, inout float3 color){// 缩放天使圈float scale = _ScaleParams.x * color.g * sin(frac(_Time.z * _ScaleParams.y) * TWO_PI);vertex.xyz *= 1.0 + scale;vertex.y -= _ScaleParams.z * scale;// 幽灵摆动float swingX = _SwingXParams.x * sin(frac(_Time.z * _SwingXParams.y + vertex.y * _SwingXParams.z) * TWO_PI);float swingZ = _SwingZParams.x * sin(frac(_Time.z * _SwingZParams.y + vertex.y * _SwingZParams.z) * TWO_PI);vertex.xz += float2(swingX, swingZ) * color.r;// 幽灵摇头float radY = radians(_ShakeYParams.x) * (1.0 - color.r) * sin(frac(_Time.z * _ShakeYParams.y - color.g * _ShakeYParams.z) * TWO_PI);float sinY, cosY = 0;sincos(radY, sinY, cosY);vertex.xz = float2(vertex.x * cosY - vertex.z * sinY,vertex.x * sinY + vertex.z * cosY);// 幽灵起伏float swingY = _SwingYParams.x * sin(frac(_Time.z * _SwingYParams.y - color.g * _SwingYParams.z) * TWO_PI);vertex.y += swingY;// 处理顶点色float lightness = 1.0 + color.g * 1.0 + scale * 2.0;color = float3(lightness, lightness, lightness);}// 输入结构>>>顶点Shader>>>输出结构VertexOutput vert (VertexInput v){VertexOutput o = (VertexOutput)0;AnimGhost(v.vertex.xyz, v.color.rgb);o.pos = UnityObjectToClipPos(v.vertex); // 顶点位置 OS>CSo.uv = TRANSFORM_TEX(v.uv, _MainTex); // UV信息 支持TilingOffseto.color = v.color;return o;}// 输出结构>>>像素half4 frag(VertexOutput i) : COLOR{half4 var_MainTex = tex2D(_MainTex, i.uv); // 采样贴图 RGB颜色 A透贴half3 finalRGB = var_MainTex.rgb * i.color.rgb;half opacity = var_MainTex.a * _Opacity;return half4(finalRGB * opacity, opacity); // 返回值}ENDCG}}
}
庄懂着色器_L19_顶点动画相关推荐
- 庄懂着色器_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)下 ...
- 庄懂着色器_L18_序列帧与极坐标
庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili 序列帧_Sequence 小人是一个AB的模型,外面鬼火是AD模式,是一个双Pass的Shader 代码部分 Pass可以都是有一个名字 ...
- Opengl-几何着色器(劫持顶点的家伙)
前言 我们知道在片段着色器和顶点着色之间,有一个几何着色器,我们之前说过它但是一直没有讲,这里了解一哈. 几何着色器的输入是一个图元(如点或三角形)的一组顶点.几何着色器可以在顶点发送到下一着色器阶段 ...
- 【视觉高级篇】19 # 如何用着色器实现像素动画?
说明 [跟月影学可视化]学习笔记. 如何用着色器实现固定帧动画 <!DOCTYPE html> <html lang="en"><head>&l ...
- unity无光照着色器(顶点片元着色器)使用TAA抗锯齿后角色移动时模糊(虚影)解决方案
1.unity系统内置的着色器,移动时没有模糊, 2.一开始想到的是,顶点着色器一般不处理光照,可能是光照与无光照渲染顺序不同所至 2.渲染管线,内置着色器并不和自定义着色器一起提交GPU, 3.TA ...
- ThreeJS 着色器打造震撼海洋动画
高颜值的网页往往能够吸引更多的用户,随着用户审美的提高,普通的图片拼凑的网站已经很难引起用户的兴趣,将一些动画用在网页中往往更能吸引眼球.下面介绍如何使用WebGL渲染器实现震撼的动画效果. 1. 选 ...
- threejs 源码解析_ThreeJS 物理材质shader源码分析(顶点着色器)
ThreeJS 物理材质shader源码分析(顶点着色器) Threejs将shader代码分为ShaderLib和ShaderChunk两部分,ShaderLib通过组合ShaderChunk的代码 ...
- opengl顶点数据传送和着色器处理(vao,vbo)
OpenGL学习脚印: 顶点数据传送和着色器处理1 写在前面 本节内容翻译和整理自<Learning Modern 3D Graphics Programming>Chapter1内容.作 ...
最新文章
- 【Kotlin】Kotlin 语言集合中的高阶函数详解 ( 数据类 data class | maxBy | minBy | filter | map | any | count | find )
- 借入单的后续处理-借入归还
- 驻定相位原理(POSP)以及线性调频信号的频谱
- NLB+Cluster(一)
- P4983-忘情【wqs二分,斜率优化】
- javascript里用php,php中使用javascript - 程序园
- JavaScript下的进制转换
- 关于局部变量在内存中的地址
- 一个程序员的简洁职业生涯规划
- java 方法体 out 参数_Java方法详解
- 7部署rancher步骤_Rancher发布K3s,真会玩。。
- 自己给打印机怎么加粉墨,联想兄弟打印机加粉步骤
- ftp登录常用命令和工作模式简介
- 台达plc与串口软件通讯测试,台达PLC串口通信
- cc域名转入可以吗?其特点是什么?
- Infor CloudSuite Industrial (SyteLine) 工序外协基本流程
- 哪些人不适合做程序员
- DataStage问题汇总
- 计算机硬盘越大运行速度越大吗,电脑的内存越大越好吗?如果只加大内存,电脑反而会被拖慢!...
- 【Node.js-6】consolidate模板引擎集成、router路由介绍
热门文章
- css 网站黑白色,纯CSS代码将整个网站页面变成黑白色整站灰色
- 小工具--理财计算器
- Seaborn使用violinplot函数可视化分组小提琴图(violin plot)、使用inner函数设置在小提琴图中使用虚线显示分位数位置(inner = ‘quartile‘)
- Linux文件编程常用函数详解——read()和write()函数
- win10, cuda 9.0, python 3.5环境下复现 Flow-Guided Feature Aggregation for Video Object Detection 问题总结
- 老飞飞魅力飞飞关于攻击辅助研究带易语言源码视频教程
- [转]机器视觉代码大全
- 动图ps在html不动,教你如何用ps把动态图片加到静态图片上
- 今天我又发现一个宝藏应用:时光序-个人日程管理应用,记录生活的方方面面!
- mysql 连续天数_MYSQL面试题:统计连续打卡天数