前言


上一节,达成了水面与水底的深度判断,结果用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-岸边泡沫的生成相关推荐

  1. 【unity shader/风格化水表面渲染/基础笔记】urp代码版01-水面与水底的深度判断

    目录 1 场景搭建与实现思路 2 深度图获取与原理 获取方式 深度图计算原理 变换过程 3 重建世界坐标 采样深度图 重建方法1 重建方法2 4 结果 仅做学习,如有错误望指正 涉及的知识点:dept ...

  2. 【unity shader/风格化水表面渲染/基础笔记】urp代码版03-水表面颜色

    前言 上一节生成了岸边的泡沫.本节主要梳理水表面的上色过程,这部分涉及半透明渲染和fresnel颜色 颜色 首先,岸边_ShallowCol和远离岸边_DeepCol的颜色应该有所区分.这里依旧利用上 ...

  3. 【unity shader/风格化水表面渲染/基础笔记】urp代码版05-焦散模拟

    前言 前面4章完成了波浪动画.上色.岸边泡沫的生成.本章梳理水底的焦散模拟. 焦散模拟 我们可以使用类似的水纹的贴图作色散分离,或者直接使用分离的三通道贴图. 下面的代码设置了宏_DISPERSION ...

  4. 《Unity Shader 入门精要》读书笔记

    <Unity Shader 入门精要>读书笔记 --记录一下自己看书时遇到的一下困惑的地方和自己的一些想法,愿明天的我更加强大 1.要正确获得阴影和光照衰减效果,需要#pragma mul ...

  5. Unity Shader 龙珠Z卡通渲染分析

    Unity Shader 龙珠Z卡通渲染分析 一.角色渲染效果整体分析角色渲染效果整体分析 二.轮廓线效果 三.三阶梯度漫反射 四.高光 一.角色渲染效果整体分析角色渲染效果整体分析 渲染效果整体截图 ...

  6. 《Unity Shader入门精要》学习笔记

    简单说明 为控制渲染过程提供一层抽象,避免许多繁琐配置:用ShaderLab编写,使用一些嵌套在{}的语义: 定义了要显示材质所需的全部,不仅仅是着色器代码 Unity Shader != Shade ...

  7. Unity Shader入门精要 | 渲染路径、光源类型和阴影

    目录 渲染路径 前向渲染 (Forward Rendering) 顶点照明渲染 (Vertex Lit Rendering) 延迟渲染 (Deferred Rendering) 光源类型 平行光 (D ...

  8. 《Unity Shader入门精要》学习笔记第11章 让画面动起来

    本文章用于帮助自己学习,因此只记录一些个人认为比较重要或者还不够熟悉的内容. 原作者:http://blog.csdn.net/candycat1992/article/ 第十一章 让画面动起来 11 ...

  9. 《Unity Shader入门精要》学习笔记第5章 开始Unity Shader学习之旅

    本文章用于帮助自己学习,因此只记录一些个人认为比较重要或者还不够熟悉的内容. 原作者:http://blog.csdn.net/candycat1992/article/ 第五章 开始Unity Sh ...

最新文章

  1. 产品方法论之:菜鸟做加法,高手做减法!
  2. mysql重置密码以及授予权限
  3. python安全攻防---信息收集---ICMP主机探测 以及optionparser的使用
  4. spark1.6 maven java_Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】...
  5. 解决python访问中突发requests.exceptions.ConnectionError:Max retries exceeded with url报错
  6. ASA 5520配置failover及双出口
  7. python在人工智能应用锁_饮冰三年-人工智能-Python-35权限管理(万能的权限通用模块)...
  8. 注解@Component,@Controller,@Service,@Repository简单了解
  9. Open3D绘制3D坐标,绘制点云
  10. openssl 加密解密
  11. 聚类分析方法的研究与应用综述
  12. 查询MAC地址和接口的对应关系
  13. 以太坊编程涉及那些开发语言?
  14. 分析型项目的模型管理建议(建议收藏)
  15. 使用Origin根据数据的二维图(单x,单y)进行线性拟合
  16. Teamtoken:管理员工在企业的数字资产
  17. 如何快速入门模具设计?
  18. wps中ppt转html,wps ppt转换视频 dps转换ppt/ppt转视频的方法
  19. 统计机器翻译中的几篇经典文献
  20. AD BOM表导出

热门文章

  1. 冬至由来介绍PPT模板
  2. 科幻史诗《沙丘》即将上映,影评人准备好写作工具了吗?
  3. java面试中经常会被问到分布式面试题
  4. 锐成SSL证书周年庆 四步教您开启HTTPS安全防护
  5. 极案例 | 用AI助力家装隐蔽工程,极视角为艾佳生活打造水路走线识别
  6. 谷歌商店两大平替:适用安卓/鸿蒙党
  7. OpenCascade Primitives BRep - Sphere
  8. 操作系统之进程的状态和转换详解
  9. python 训练集 测试集 验证集划分_将自己的图片数据集分成训练集、验证集和测试集并用 Tensorflow2.0 导入...
  10. Django框架实现跨域的菜鸟教程