unity软粒子softparticle仿真实现
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仿真实现相关推荐
- Unity Shader - BRP - Soft Particle - 软粒子
文章目录 环境 SoftParticleCommon.cg Alpha blend Additive blend UniformSetSoftParticleThreshold.cs CustomGr ...
- 关于Unity中粒子效果的使用
粒子效果 1: 游戏中会有很炫酷的特效,比如爆炸,水花,火焰等; 2: unity提供粒子编辑器,方便特效人员来开发很炫酷的特效; 3.粒子效果一般有专门的粒子特效师来做,我们只需要拿来用就好了,很多 ...
- Unity将粒子光效导出成png序列帧
这个功能并不是很实用,不过美术同学有这样的需求,那么就花了一点时间研究了下. 我们没有使用Unity的引擎,但是做特效的同学找了一批Unity的粒子特效,希望导出成png序列帧的形式,然后我们的游戏来 ...
- comsol分析时总位移代表什么_基于COMSOL的气动软体执行器仿真
COMSOL-based simulation of pneumatic soft actuators Part of this work has been submitted. Copyright ...
- unity 彩带粒子_超级技术贴:Unity粒子遇上着色器,引爆视觉特效
下面来分析粒子系统驱动的数据,Michał使用粒子的尺寸(Size)和颜色(Color)来控制一些着色器参数.为了更好的进行参数调整,MeltingObject脚本除了引用了"熔化" ...
- unity火焰粒子效果
github传送门. https://github.com/ddghost/unity3d_n/tree/粒子效果 这次作业要做的是粒子效果,我就来做一个火焰的效果吧. 下面就是成果(emmm...感 ...
- unity 彩带粒子_Unity3D_(Shuriken粒子系统)制作简单的烟花爆炸效果
Unity中的粒子系统可以用于制作特效,如开枪火花效果,简单爆炸效果等.(毕竟程序员不是设计师,简单的特效都没有问题,要制作一些非常美观的特效还是需要多了解跟美术有关的知识.) 粒子系统实现一个简单的 ...
- Unity 降低粒子占用的Batches
优化前 优化后 优化过程 这个特效由两个粒子特效组成,把每个粒子特效的OrderInLayer重新设置确保不要重复,见下图: particleSystem的batch优化 一,单个光效的batch优化 ...
- 使用unity制作虚拟钢琴仿真(附开发文件)
1 选题背景及意义 制作虚拟钢琴仿真的背景和意义如下: 1.1背景: (1)虚拟现实技术的不断发展 虚拟现实技术(Virtual Reality, VR)是指通过计算机技术模拟出一种全新 ...
最新文章
- 系统复制-快速重装系统
- 怎么在eclipse里调试WebDriver的源代码
- 小工具发布,QCountDown-语音倒计时
- 数据库事务转载基础二:MySQL事务隔离级别详解
- 怎样把开启的服务放到后台?
- SAP Cloud for Customer移动端应用SAP推荐的网络时延参数
- Spring Quartz的原理
- 《模式识别原理及工程应用》——第2章 基于贝叶斯决策理论的分类器 2.1 分类器的描述方法...
- 90+深度学习开源数据集整理|包括目标检测、工业缺陷、图像分割等多个方向...
- bmi计算器公式_bmi计算器免费版客户端
- 新浪微博自动化运维平台实践
- XML 教程(一文彻底搞懂XML)
- day09 文件操作相关
- nvm 卸载详细流程
- mybatis中更新mysql时间多了一秒
- leetcode807. 保持城市天际线(java)
- python3-输入华氏度转化为摄氏度
- freeCodeCamp “使用 CSS 和 HTML 创建更复杂的形状”练习-----创建“爱心”❤️形状
- Nvidia显卡命名的各部分的含义
- php等级水平评定标准,网球水平定级标准~看看你什么等级
热门文章
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- Response.setContentType类型按文件扩展名首字母分类大全
- c语言编程文章排版,一种简单英文词典排版系统的实现 C语言编程
- 用ansible自动化搭建web、sql服务器、lvs调度器
- idea加密解密C++实现
- 对数 java_Java对数函数及Java对数运算
- linux mysql 服务停止不了_Linux服务器mysql数据库自动停止的解决方法
- 什么是Activity?Activity的生命周期!
- html中缩放级别为1,更改浏览器缩放级别
- Linux防火墙firewall只允许特定IP访问