Unity Shader ASE基础效果思路与代码(三):Shader混合模式、深度渐变的扩散扫描、软粒子
文章目录
- Unity Shader ASE基础效果思路与代码(三):Shader混合模式、深度渐变的扩散扫描、软粒子
- Unity Shader的混合模式
- 深度渐变的扩散扫描
- 效果展示:
- 代码与思路:
- 软粒子
- 效果展示
- 代码与思路
Unity Shader的混合模式
- Alpha Blend(Alpha混合):这是最常用的混合模式,用于处理透明物体的渲染。它根据物体的透明度值将新绘制的像素与已存在的像素进行混合。透明度较高的像素会以较高的权重混合到最终颜色中,从而实现透明效果。
- Additive Blend(加法混合):这种混合模式适用于创建发光或光线效果。它将新绘制的像素的颜色值与已存在的像素的颜色值进行相加,产生更亮的效果。通常用于创建火焰、闪光等效果。
- Multiply Blend(乘法混合):这种混合模式将新绘制的像素的颜色值与已存在的像素的颜色值进行相乘。这种混合模式适用于创建阴影或颜色叠加效果。
- Screen Blend(屏幕混合):这种混合模式将新绘制的像素的颜色值与已存在的像素的颜色值进行屏幕混合计算。它会产生一种亮度较高的效果,常用于创建光线、泛光等效果。
深度渐变的扩散扫描
效果展示:
代码与思路:
- 思路:控制一个球体缩放,该球接触到物体时,球体接触部分发光。深度渐变节点(Depth Fade)可以输出一个线性梯度,该线性梯度表示了物体表面和其他物体的距离。用这个节点可以得到接触面。
- 首先在subshader中关掉深度写入,修改Blend Mode,设置透明渲染。还有就是剔除模式(Cull Mode)关掉,默认会剔除背面,就看不到球体后面了。
- 代码与详解:
- 圈1得到接触面,width修改宽度,One Minus得到1减Depth Fade,不然就是球体发光而不是接触面发光。
- 圈2修改纹理,用屏幕空间坐标(ScreenPosition)乘参数可以让纹理不会因为球体缩放而过于稀疏和密集
软粒子
效果展示
给一个粒子系统,接触物体时,会出现下图的这种切边
使用深度渐变节点Depth Fade解决这个问题
代码与思路
比较简单,关于深度渐变节点上文已有介绍,只是粒子系统的颜色这里用顶点颜色(vertex color)控制