unity粒子系统自带了软粒子shader,目的是当粒子的billboard与场景中的多边形相交时,产生一个过渡,避免出现生硬的边界

本文还原一下这个shader处理方式

运行效果图如下:

基本原理就是,在shader的片元处理阶段,判断当前像素点的视深,与_CameraDepthTexture里的深度差值,

如果深度小于某个阀值,对alpha进行加一个衰减,产生过渡效果

对应的shader代码如下:

Shader "lsc/UnlitShader_softparticle"
{Properties{_MainTex ("Texture", 2D) = "white" {}}SubShader{Tags { "RenderType"="Opaque" }LOD 100Blend SrcAlpha OneMinusSrcAlphaPass{CGPROGRAM#pragma vertex vert#pragma fragment frag// make fog work//#pragma multi_compile_fog//#pragma multi_compile_particles#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;//UNITY_FOG_COORDS(1)float4 vertex : SV_POSITION;float4 screen_space : TEXCOORD1;};sampler2D _MainTex;float4 _MainTex_ST;sampler2D _CameraDepthTexture;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.uv, _MainTex);//UNITY_TRANSFER_FOG(o,o.vertex);// lsc 计算屏幕空间 xy为屏幕坐标, z为视深o.screen_space = ComputeScreenPos(o.vertex);COMPUTE_EYEDEPTH(o.screen_space.z);return o;}fixed4 frag (v2f i) : SV_Target{// sample the texturefixed4 col = tex2D(_MainTex, i.uv);// lsc 去掉齐次因子(只能在片元着色器里去掉,保证线性插值)float2 screen_pos = i.screen_space.xy / i.screen_space.w;// lsc 取出深度纹理float depth01 = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, screen_pos.xy);// lsc 取出线性视深度,即摄影机空间的z坐标float linearDepthZ = LinearEyeDepth(depth01);// lsc 根据深度差值,计算附加的透明度alpha_scalefloat dep_diff = linearDepthZ - i.screen_space.z;float alpha_scale = (dep_diff - 1.0f) / 1.0f;float final_alpha = alpha_scale * col.a;col.a = final_alpha;// apply fog//UNITY_APPLY_FOG(i.fogCoord, col);return col;}ENDCG}}
}

unity软粒子softparticle仿真实现相关推荐

  1. Unity Shader - BRP - Soft Particle - 软粒子

    文章目录 环境 SoftParticleCommon.cg Alpha blend Additive blend UniformSetSoftParticleThreshold.cs CustomGr ...

  2. 关于Unity中粒子效果的使用

    粒子效果 1: 游戏中会有很炫酷的特效,比如爆炸,水花,火焰等; 2: unity提供粒子编辑器,方便特效人员来开发很炫酷的特效; 3.粒子效果一般有专门的粒子特效师来做,我们只需要拿来用就好了,很多 ...

  3. Unity将粒子光效导出成png序列帧

    这个功能并不是很实用,不过美术同学有这样的需求,那么就花了一点时间研究了下. 我们没有使用Unity的引擎,但是做特效的同学找了一批Unity的粒子特效,希望导出成png序列帧的形式,然后我们的游戏来 ...

  4. comsol分析时总位移代表什么_基于COMSOL的气动软体执行器仿真

    COMSOL-based simulation of pneumatic soft actuators Part of this work has been submitted. Copyright ...

  5. unity 彩带粒子_超级技术贴:Unity粒子遇上着色器,引爆视觉特效

    下面来分析粒子系统驱动的数据,Michał使用粒子的尺寸(Size)和颜色(Color)来控制一些着色器参数.为了更好的进行参数调整,MeltingObject脚本除了引用了"熔化" ...

  6. unity火焰粒子效果

    github传送门. https://github.com/ddghost/unity3d_n/tree/粒子效果 这次作业要做的是粒子效果,我就来做一个火焰的效果吧. 下面就是成果(emmm...感 ...

  7. unity 彩带粒子_Unity3D_(Shuriken粒子系统)制作简单的烟花爆炸效果

    Unity中的粒子系统可以用于制作特效,如开枪火花效果,简单爆炸效果等.(毕竟程序员不是设计师,简单的特效都没有问题,要制作一些非常美观的特效还是需要多了解跟美术有关的知识.) 粒子系统实现一个简单的 ...

  8. Unity 降低粒子占用的Batches

    优化前 优化后 优化过程 这个特效由两个粒子特效组成,把每个粒子特效的OrderInLayer重新设置确保不要重复,见下图: particleSystem的batch优化 一,单个光效的batch优化 ...

  9. 使用unity制作虚拟钢琴仿真(附开发文件)

    ​​​​​​​1 选题背景及意义 制作虚拟钢琴仿真的背景和意义如下: 1.1背景: (1)虚拟现实技术的不断发展 虚拟现实技术(Virtual Reality, VR)是指通过计算机技术模拟出一种全新 ...

最新文章

  1. 系统复制-快速重装系统
  2. 怎么在eclipse里调试WebDriver的源代码
  3. 小工具发布,QCountDown-语音倒计时
  4. 数据库事务转载基础二:MySQL事务隔离级别详解
  5. 怎样把开启的服务放到后台?
  6. SAP Cloud for Customer移动端应用SAP推荐的网络时延参数
  7. Spring Quartz的原理
  8. 《模式识别原理及工程应用》——第2章 基于贝叶斯决策理论的分类器 2.1 分类器的描述方法...
  9. 90+深度学习开源数据集整理|包括目标检测、工业缺陷、图像分割等多个方向...
  10. bmi计算器公式_bmi计算器免费版客户端
  11. 新浪微博自动化运维平台实践
  12. XML 教程(一文彻底搞懂XML)
  13. day09 文件操作相关
  14. nvm 卸载详细流程
  15. mybatis中更新mysql时间多了一秒
  16. leetcode807. 保持城市天际线(java)
  17. python3-输入华氏度转化为摄氏度
  18. freeCodeCamp “使用 CSS 和 HTML 创建更复杂的形状”练习-----创建“爱心”❤️形状
  19. Nvidia显卡命名的各部分的含义
  20. php等级水平评定标准,网球水平定级标准~看看你什么等级

热门文章

  1. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  2. Response.setContentType类型按文件扩展名首字母分类大全
  3. c语言编程文章排版,一种简单英文词典排版系统的实现 C语言编程
  4. 用ansible自动化搭建web、sql服务器、lvs调度器
  5. idea加密解密C++实现
  6. 对数 java_Java对数函数及Java对数运算
  7. linux mysql 服务停止不了_Linux服务器mysql数据库自动停止的解决方法
  8. 什么是Activity?Activity的生命周期!
  9. html中缩放级别为1,更改浏览器缩放级别
  10. Linux防火墙firewall只允许特定IP访问