文章目录

  • 自言自语
  • 一、效果和面板
  • 二、Shader
  • 总结

自言自语

很早以前学B站一个UP主的东西。今天突然想起来。果然发现看不懂了。不理解了。然后自己又啃了一遍。总算理解了。并且发现了一些不合适的地方。进行了改进和注释。Shader是URP的。要搬到builltin也是非常容易的。存档以后使用和继续改进

一、效果和面板

因为是结合粒子系统做的。利用粒子系统的各个流数据。以及粒子系统本身可以拿到的数据来进行计算 如果要让特效使用的舒服就尽量集成到粒子系统吧 反正我是这么干的。

二、Shader

Shader "FX_Partical/fx_CubeTransformParticlesAutoV2.0"
{Properties{[Header(Tips)]_Tips("===========注释说明参数本身无意义==================================================",int) =0[Space(20)]_1x("Custom1 . x   正数为纵向发射 负数为横向发射",int)=0[Space]_7x(" x的绝对值的大小决定了拉扯长度",int)=0[Space]_2x(" y 正反  1 向上  向左发射   -1 为向下 向右发射",int)=0[Space]_3x(" z 从内到外还是从外到内发射用曲线控制",int)=0[Space] _4x("w 是方块边缘条的宽窄控制--可以曲线控制",int)=0[Space][Space][Space][Space][Space(20)]  _5x("Custom2 就是Color 是控制方块内部颜色的 ",int)=0[Header(Tips)]_Tips("===========边缘颜色强度值参数影响颜色强度==================================================",int) =0[Space] _6x("方块边缘颜色为 粒子编辑器上的传统颜色条乘以了10 调色时 适当降低明度",float)=0// y 正反  1 向上  向左发射   -1 为向下 向右发射// z 拉扯长度值// w 是方块边缘条的宽窄控制// Custom2 就是Color 是控制方块内部颜色的// 粒子编辑器上的传统颜色条是控制方块边缘颜色的 由于这个传统颜色条不支持HDR 因此shader中给这个颜色乘以了10 调色时 适当降低明度//size就是控制缩放朝向...用overlifetime}SubShader{//定义管线为Tags { "RenderType"="Opaque" "RenderPipeline" ="UniversalPipeline" }LOD 100Pass{Blend OffHLSLPROGRAM// Required to compile gles 2.0 with standard srp library#pragma prefer_hlslcc gles#pragma exclude_renderers d3d11_9x#pragma vertex vert#pragma fragment frag// -------------------------------------// Unity defined keywords#pragma multi_compile_fog#pragma multi_compile_instancing#pragma multi_compile_particles#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"CBUFFER_START(UnityPerMaterial)float _Length;float _6x;CBUFFER_ENDstruct a2v{//这里对应的 粒子系统的 custom vertex stream的存储语义float4 vertex       : POSITION;//从粒子编辑器里传过来的center参数存在 TEXCOORD1中. 对于Cube来说 中心点为000float3 center : TEXCOORD1;float4 color : COLOR;float4 uv             : TEXCOORD0;float4 Custom1 : TEXCOORD2;//粒子系统的size信息经测试是可以直接传进来的float3 size : TEXCOORD3;float4 CustomeColor : TEXCOORD4;//同样的顶点信息 输入 这几句话还是关于顶点动画的 URP下要做顶点动画 就得把这几句话写上UNITY_VERTEX_INPUT_INSTANCE_ID};struct v2f{float2 uv            : TEXCOORD0;float fogCoord  : TEXCOORD3;float4 vertexColor : COLOR;float4 pos : SV_POSITION;float3 posWS : TEXCOORD5;//引入粒子系统的vertexstreamfloat4 Custom1 : TEXCOORD1;float4 CustomCol : TEXCOORD4;float4 posOS : TEXCOORD6;//这两句是指我们要定义 顶点信息的输入和输出 也就是说有这才能拿到顶点信息进行顶点动画UNITY_VERTEX_INPUT_INSTANCE_IDUNITY_VERTEX_OUTPUT_STEREO};v2f vert(a2v v){v2f o = (v2f)0;//v2f o;//第一句话是使shader支持 GPUinstance  第二句话是使我们进行的顶点动画               UNITY_SETUP_INSTANCE_ID(v);UNITY_TRANSFER_INSTANCE_ID(v, o);UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);//得到世界空间坐标顶点坐标作为标准参考值o.posWS = TransformObjectToWorld(v.vertex.xyz);//让粒子系统本身的color值能够影响到模型本身顶点色o.vertexColor = v.color;//自定义颜色流 传入shader中o.CustomCol =v.CustomeColor;//计算z增量对x y的位移坐标影响 float p0 = o.posWS.y+v.Custom1.z;float p1 = o.posWS.x+v.Custom1.z;//这里用来控制缩放从0到大粒子本身大小随着overlifetime size 的变化 最终变化为1v.vertex.xyz = lerp(v.center,v.vertex.xyz,saturate(v.size));//通过Custom1.y 来设置竖直方向  -1 为正  1 为负//通过tep(0,v.Custom1.x); 来开关 是否在Y轴或者X轴上进行移动  Clamp 用来限制值为-1,1 因为只需要方向 不需要大小变化     也可以用if来写 不过step来做开关性能更好//顶点动画的两轴缩放算法。p-2 是为了区分原本的p  这样可以区分缩放  拉伸  以及颜色变化 不过颜色变化已经融合到粒子系统中 因此这里没有使用p-1   v.vertex.y += max(0,(p0-2)*abs(v.Custom1.x))*clamp(v.Custom1.y,-1,1)* step(0,v.Custom1.x);v.vertex.x += max(0,(p1-2)*abs(v.Custom1.x))*clamp(v.Custom1.y,-1,1)*step(v.Custom1.x,0);//这里计算各个空间的顺序不要高反了 先进行顶点动画 然后再进行空间变换把顶点弄到齐次坐标裁剪空间VertexPositionInputs vertexInput = GetVertexPositionInputs(v.vertex.xyz);雾效的计算 可以不用//o.fogCoord = ComputeFogFactor(vertexInput.positionCS.z);o.pos = vertexInput.positionCS;//将变化的数值传入片元  用作修正UV因模型拉伸而造成的边框拉伸o.posOS =float4(v.vertex.x,v.vertex.y,0,0);o.Custom1 = v.Custom1;o.uv =v.uv.xy;return o;}half4 frag(v2f i) : SV_Target{//第一句话是使shader支持 GPUinstance  第二句话是使我们进行的顶点动画UNITY_SETUP_INSTANCE_ID(i);UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);//abs(i.uv.x-0.5)*2 是为了把UV分布改成  对称分布的 1 0 1 这样 做中间向两边扩散的动画效果//此处用abs是因为他会取绝对值, 用saturate就不行 因为saturate映射是小于0的也就取0了 不能做对称//通过用Custom1.w 来设置边的宽窄   abs(i.uv.x-0.5)*0.125*i.posOS.x 没什么道理 就是修正下模型拉伸时对UV拉伸的影响程度float edge =step(abs(i.uv.x-0.5)*2,(1-i.Custom1.w)+abs(i.uv.x-0.5)*0.125*i.posOS.x)*step(abs(i.uv.y-0.5)*2,(1-i.Custom1.w)+abs(i.uv.y-0.5)*0.125*i.posOS.y);//给顶点色乘以一个系数_6x, 让他能够颜色值大于1  这样能出光晕效果half4 color = lerp(i.CustomCol,i.vertexColor*_6x,1-edge);return color;}ENDHLSL}}FallBack "Hidden/Universal Render Pipeline/FallbackError"//CustomEditor "UnityEditor.Rendering.Universal.ShaderGUI.UnlitShader"
}

总结

真的是猴子搬苞米。边学边忘啊。不过总归还是能有所进步,至少能进行优化修改了。 继续加油

方块粒子动画效果——UnityShader学习笔记相关推荐

  1. 模板测试+一个好玩的顶点动画效果——UnityShader学习笔记

    文章目录 一.自言自语 效果 模板测试效果(图传错了就懒得继续换了) 模板测试代码 顶点动画面板 顶点动画效果 顶点动画shader代码 总结 一.自言自语 嗯,又是很久没写笔记了.学习的进度和效率没 ...

  2. html代码特效粒子,html5彩色方块粒子动画效果代码

    特效描述:html5 彩色方块 粒子动画效果.粒子动画 代码结构 1. HTML代码 var df = document.createDocumentFragment(); var container ...

  3. anacoda的spyder在调用matplotlib的时候无法显示动画效果【学习笔记】

    ipython console的默认设置将图像结果显示在终端,但是这样显示存在的问题是无法显示动画效果,因此需要将动画效果显示到单独的窗口,按照下面的截图即可显示. 方法一.按照如下截图显示设置,重启 ...

  4. 带顶点动画的护盾效果——UnityShader学习笔记

    文章目录 自言自语 一.效果 二.C# 三.Shader 总结 自言自语 最近又是很久没有更新笔记了.原因有二. 一.最近一直再啃一个看起来酷炫的护盾效果 啃了好久啊.直至效果满意 也理解了. 这个是 ...

  5. Unity-shader学习笔记(七)

    文章目录 Unity-shader学习笔记(七) 15 更复杂的光照 15.1 Unity的渲染路径 15.1.1 前向渲染路径 15.1.1.1 前向渲染路径的原理 15.1.1.2 Unity中的 ...

  6. UnityShader学习笔记:Caustic水纹焦散与鱼群制作水族馆

    UnityShader学习笔记:Caustic水纹焦散 贴图 代码部分 关于聚散色彩分离的疑惑 鱼群动画 本文教程原地址:https://www.alanzucconi.com/2019/09/13/ ...

  7. CSS3实现王者匹配时的粒子动画效果

    在码代码的时候会发现,很多东西都是殊途同归的,方法千千万,能解决问题的都是好办法,不一定非要把代码写的特别高深,这样反而后来的人看不懂,维护根据头疼. 所以用最简单通俗的代码,更能利于后期的维护开发. ...

  8. html5 粒子动画效果制作,8款惊艳的HTML5粒子动画特效

    原标题:8款惊艳的HTML5粒子动画特效 HTML5确实非常强大,很多时候我们可以利用HTML5中的新技术实现非常炫酷的粒子动画效果,粒子动画在HTML5应用中也是比较消耗本地资源的,尤其是CPU,但 ...

  9. Javascript Canvas 实现粒子动画效果分享

    今天和大家一起分享一下用 canvas 实现粒子动画效果的实现,就像下图的效果 要实现这样的效果,我们首先需要一段包含了 canvas 的基础 html 代码 <!DOCTYPE html> ...

最新文章

  1. Leetcode 4.28 Tree Easy
  2. 系统自动登录及盘符无法双击打开问题处理
  3. 利用yum下载rpm包并批量安装
  4. STM32学习笔记:读写内部Flash。
  5. 关于SAP UI5 CRM Reuse Fiori应用的代码审查
  6. linux端口命令是什么意思,cmd和linux的查看端口命令是什么?
  7. 响应式网格项目动画布局_响应式网格及其实际使用方式:常见的UI布局
  8. 生成n个从1到M(n = M)之间的不重复的随机数问题(洗扑克牌算法)
  9. 关于Web面试的基础知识点--Html+Css(三)
  10. Java获取资源的路径
  11. 浅谈个人对项目管理的理解
  12. Android 自定义标题栏
  13. 为了寻找美,我决定对美女图片进行图像边缘化处理
  14. 赖美云的认证照_赖美云的“瓜子牙”辣眼睛?原来牙齿美容这么重要
  15. CVE-2021-42287、CVE-2021-42278域内提权漏洞
  16. 什么是粘包?socket 中造成粘包的原因是什么? 粘包的处理方式
  17. python cannot concatenate_python相关报错及解决方式
  18. C++之memcpy的用法
  19. LED透明屏多少钱一平方?—实用LED透明屏价格表参考
  20. python实现牛顿法_牛顿法求极值及其Python实现

热门文章

  1. 苹果手机微信扫码下载pdf文件,出现空白页。
  2. CSS布局盒子模型(复习巩固)
  3. 韩语计算机级词汇表,韩语考试TOPIK单词整理中级(十)
  4. sublime text 浏览器快捷键访问设置及常用快捷键整理
  5. Oracle bitand( )函数简介
  6. Shell数组添加元素注意事项
  7. java计算机毕业设计的实验填报管理系统-源程序+mysql+系统+lw文档+远程调试
  8. Efuse--芯片存储
  9. ufs2.0测试软件,最新的UFS2.0闪存性能对比,小米MIX亮了
  10. vue3的一些新特性