【unity shader/风格化水表面渲染/基础笔记】urp代码版02-岸边泡沫的生成
前言
上一节,达成了水面与水底的深度判断,结果用RawDepth
表示。这一节梳理利用深度关系生成岸边的泡沫。
设计函数_getFoam(RawDepth)
float sinWave = _getFoam(RawDepth) ;
_getFoam函数
这个函数的作用是生成岸边的泡沫,使用sin函数利用RawDepth
生成岸边的条纹,同时RawDepth
改承担mask的任务,迫使条纹只在岸边生成
变量设计
[Space][Header(_______BlendCtrl_______)][Space]_FoamBlend("Water-Shore mixture", Range(0,1)) = 0 //水面和岸边的衔接柔和程度,在这里用作mask过度控制[Space][Header(_______FoamCtrl_______)][Space]_FoamRange("Foam Range", Range(0,1)) = 0_FoamFreq("Foam Freq", Float) = 10_FoamSpeed("Foam Speed", Float) = 1
sin函数生成wave
- _FoamRange整体微调波长
- _FoamFreq频率调整,泡沫生成间隔
- _FoamSpeed速度
float _getFoam(float depth){depth = clamp(depth/_FoamRange,0,1);float a = depth * _FoamFreq + _Time.y * _FoamSpeed;float sinWave = sin(a)return sinWave;}
fig1 clamp(depth/_FoamRange,0,1)
fig2 多余的波峰
删除多余的波峰
float FoamDepth = smoothstep(_FoamBlend, 1, depth);
fig3 根据depth做简单的计算,生成对比度更高的mask
mask加入计算后 _getFoam
函数如下所示
float _getFoam(float depth){depth = clamp(depth/_FoamRange,0,1);float a = depth * _FoamFreq + _Time.y * _FoamSpeed;float FoamDepth = smoothstep(_FoamBlend, 1, depth);float sinWave = sin(a) * (1-FoamDepth);return sinWave;}
异形条纹
添加采样噪声的选项
float _getFoamWave(float depth, float wave_noise){depth = clamp(depth/_FoamRange,0,1);float a = depth * _FoamFreq + _Time.y * _FoamSpeed;float FoamDepth = smoothstep(_FoamBlend, 1, depth);float sinWave = sin(a) + wave_noise;sinWave = sinWave * (1-FoamDepth);return sinWave;}
函数_getFoamWave
的新的变量wave_noise就是我们采样的noise数据
泡沫消融和增强
处理方式不唯一
现在得到了边缘不平以及明暗各异的条纹现在所做的是加入_FoamDissolve
这一控制变量
depth- _FoamDissolve
这一算式代表:离岸越近,消融程度越高
float _getFoamWave(float depth, float wave_noise){depth = clamp(depth/_FoamRange,0,1);float a = depth * _FoamFreq + _Time.y * _FoamSpeed;float FoamDepth = smoothstep(_FoamBlend, 1, depth);float FoamDepth_oneminus = 1-FoamDepth;float sinWave = sin(a) + wave_noise + (depth- _FoamDissolve);sinWave = sinWave * FoamDepth_oneminus;return sinWave;}
极端地将 _FoamDissolve
归0,条纹之间过度生硬
为了解决这一问题将二分处填充0-1的插值
float _getFoamWave(float depth, float wave_noise){depth = clamp(depth/_FoamRange,0,1);float a = depth * _FoamFreq + _Time.y * _FoamSpeed;float FoamDepth = smoothstep(_FoamBlend, 1, depth);float FoamDepth_oneminus = 1-FoamDepth;float sinWave = sin(a) + wave_noise + depth - _FoamDissolve;sinWave = smoothstep(FoamDepth_oneminus-_FoamFade,1,sinWave);sinWave = sinWave * FoamDepth_oneminus;return sinWave;}
最后的结果如上图所示
【unity shader/风格化水表面渲染/基础笔记】urp代码版02-岸边泡沫的生成相关推荐
- 【unity shader/风格化水表面渲染/基础笔记】urp代码版01-水面与水底的深度判断
目录 1 场景搭建与实现思路 2 深度图获取与原理 获取方式 深度图计算原理 变换过程 3 重建世界坐标 采样深度图 重建方法1 重建方法2 4 结果 仅做学习,如有错误望指正 涉及的知识点:dept ...
- 【unity shader/风格化水表面渲染/基础笔记】urp代码版03-水表面颜色
前言 上一节生成了岸边的泡沫.本节主要梳理水表面的上色过程,这部分涉及半透明渲染和fresnel颜色 颜色 首先,岸边_ShallowCol和远离岸边_DeepCol的颜色应该有所区分.这里依旧利用上 ...
- 【unity shader/风格化水表面渲染/基础笔记】urp代码版05-焦散模拟
前言 前面4章完成了波浪动画.上色.岸边泡沫的生成.本章梳理水底的焦散模拟. 焦散模拟 我们可以使用类似的水纹的贴图作色散分离,或者直接使用分离的三通道贴图. 下面的代码设置了宏_DISPERSION ...
- 《Unity Shader 入门精要》读书笔记
<Unity Shader 入门精要>读书笔记 --记录一下自己看书时遇到的一下困惑的地方和自己的一些想法,愿明天的我更加强大 1.要正确获得阴影和光照衰减效果,需要#pragma mul ...
- Unity Shader 龙珠Z卡通渲染分析
Unity Shader 龙珠Z卡通渲染分析 一.角色渲染效果整体分析角色渲染效果整体分析 二.轮廓线效果 三.三阶梯度漫反射 四.高光 一.角色渲染效果整体分析角色渲染效果整体分析 渲染效果整体截图 ...
- 《Unity Shader入门精要》学习笔记
简单说明 为控制渲染过程提供一层抽象,避免许多繁琐配置:用ShaderLab编写,使用一些嵌套在{}的语义: 定义了要显示材质所需的全部,不仅仅是着色器代码 Unity Shader != Shade ...
- Unity Shader入门精要 | 渲染路径、光源类型和阴影
目录 渲染路径 前向渲染 (Forward Rendering) 顶点照明渲染 (Vertex Lit Rendering) 延迟渲染 (Deferred Rendering) 光源类型 平行光 (D ...
- 《Unity Shader入门精要》学习笔记第11章 让画面动起来
本文章用于帮助自己学习,因此只记录一些个人认为比较重要或者还不够熟悉的内容. 原作者:http://blog.csdn.net/candycat1992/article/ 第十一章 让画面动起来 11 ...
- 《Unity Shader入门精要》学习笔记第5章 开始Unity Shader学习之旅
本文章用于帮助自己学习,因此只记录一些个人认为比较重要或者还不够熟悉的内容. 原作者:http://blog.csdn.net/candycat1992/article/ 第五章 开始Unity Sh ...
最新文章
- 产品方法论之:菜鸟做加法,高手做减法!
- mysql重置密码以及授予权限
- python安全攻防---信息收集---ICMP主机探测 以及optionparser的使用
- spark1.6 maven java_Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】...
- 解决python访问中突发requests.exceptions.ConnectionError:Max retries exceeded with url报错
- ASA 5520配置failover及双出口
- python在人工智能应用锁_饮冰三年-人工智能-Python-35权限管理(万能的权限通用模块)...
- 注解@Component,@Controller,@Service,@Repository简单了解
- Open3D绘制3D坐标,绘制点云
- openssl 加密解密
- 聚类分析方法的研究与应用综述
- 查询MAC地址和接口的对应关系
- 以太坊编程涉及那些开发语言?
- 分析型项目的模型管理建议(建议收藏)
- 使用Origin根据数据的二维图(单x,单y)进行线性拟合
- Teamtoken:管理员工在企业的数字资产
- 如何快速入门模具设计?
- wps中ppt转html,wps ppt转换视频 dps转换ppt/ppt转视频的方法
- 统计机器翻译中的几篇经典文献
- AD BOM表导出
热门文章
- 冬至由来介绍PPT模板
- 科幻史诗《沙丘》即将上映,影评人准备好写作工具了吗?
- java面试中经常会被问到分布式面试题
- 锐成SSL证书周年庆 四步教您开启HTTPS安全防护
- 极案例 | 用AI助力家装隐蔽工程,极视角为艾佳生活打造水路走线识别
- 谷歌商店两大平替:适用安卓/鸿蒙党
- OpenCascade Primitives BRep - Sphere
- 操作系统之进程的状态和转换详解
- python 训练集 测试集 验证集划分_将自己的图片数据集分成训练集、验证集和测试集并用 Tensorflow2.0 导入...
- Django框架实现跨域的菜鸟教程