当前位置: 首页 > news >正文

UE4 材质学习笔记13(格斯特纳波)

一.格斯特纳波

要让水面动起来,必须要保证平面有足够的三角面。我们可以在材质里的细节面板打开曲面细分,可以分裂三角面且使之数量更多,选择“扁平曲面细分,其作用是切割我的三角面,然后给我做一大堆三角面出来。

这样会更加消耗性能,最好是测量摄像机和平面的距离,然后根据距离来减少曲面细分乘数,因此距离摄像机越远 三角面越少,但是这次只是先使用一个常量控制。

接着创建几何公式移动顶点,模拟海浪的效果。这个公式就是Gerstner公式或Gerstner波。

第一个加进入的是波浪长度,虚幻以厘米为单位,450就相当于4.5米的波浪长度,也意味着这是每个波浪之间的空间大小,然后用2pi除以这个长度之后乘上重力常数。

这一部分用来控制波浪的速度。

现在我们还需要的是位置与方向,所以引入绝对世界位置,默认的是包含材质偏移的,这是顶点移动后的世界位置,我们实际上不能移动它或者使用它,因为这是着色器的一部分 它将移动顶点,因此我们需要选择“绝对世界位置(排除材质着色器偏移),这将为我们提供顶点在移动之前的位置

我们也需要一个表示波浪方向的常量值,这将为我们提供波浪流入的方向,所以新建一个三维向量表示方向。cos节点提供波浪式运动,这个cos节点的周期默认为1,需要设置成2PI,接着乘上一个向量,这个值的用处是调整除了Z轴(上下方向)以外的所有部分,因为我们只想让顶点上下移动,此后我们还要乘以另一个常量,那是代表着振幅或者波浪高度

做完这些就可以连接到根节点的世界场景位置偏移。

然后可以看到水正在上下移动

这效果很不错,但是我们还缺少一些东西。首先缺少的是Gerstner数学公式中的陡峭度控制,所以此时我们的波浪是极致的平滑,这一项就是能控制波浪的浪峰的尖锐程度或波浪的陡峭程度

首先增加一个常量用于控制陡峭度 该值范围在0至1之间

我们改变了表面的形状了,但我们还没改变表面法线的朝问,所以就会产生一种非常奇怪的视错觉,就好像我们的表面仍然极致平坦 但其实不是,然后我们需要在数学公式中重新计算表面法线,然后与我们的波纹法线结合起来。只需要将新计算的法线通过blendangelcorrectednormals混合结合起来。

现实中 波浪实际上会以许多不同速度向许多不同方向移动,接下来利用我在这里创建的所有这些节点来创建波浪,把它们变成一个函数,调用该函数几次并为其提供不同的参数

然后在材质中多次调用这个函数并给予不同参数

最终效果:

现在我们的波浪看起来更加混乱,将这三个波浪结合在一起的目的是打破这种过于重复的样式

http://www.lryc.cn/news/465637.html

相关文章:

  • 简述 C# 二维数据集合 List 的创建、遍历、修改、输出
  • ps2024 一键安装教程 永久使用!
  • ScrollView 真机微信小程序无法隐藏滚动条
  • 【日志】编辑器开发——修复根据Excel表格数据生成Json文件和配置表代码报错
  • C#线性查找算法
  • GPT+Python)近红外光谱数据分析与定性/定量建模技巧
  • Spark动态资源释放机制 详解
  • 基于径向基神经网络(RBF)的构网型VSG自适应惯量控制MATLAB仿真模型
  • 简单汇编教程9 字符串与字符串指令
  • Taro构建的H5页面路由切换返回上一页存在白屏页面过渡
  • 【学习笔记】网络设备(华为交换机)基础知识 9 —— 堆叠配置
  • jeston编译配置cuda加速版opencv
  • ApacheShiro反序列化 550 721漏洞
  • Github + 自定义域名搭建个人静态站点
  • 使用OpenCV进行视频边缘检测:案例Python版江南style
  • DataWhale10月动手实践——Bot应用开发task04学习笔记
  • 关于 IntelliJ IDEA 2024 安装使用
  • React是如何工作的?
  • llama.cpp 去掉打印,只显示推理结果
  • Word、PDF转换为图片Java
  • iOS IPA上传到App Store Connect的三种方案详解
  • Java中的Arrays类
  • GUI编程
  • (multi)map和set--C++
  • jmeter响应断言放进csv文件遇到的问题
  • 复旦大学全球供应链研究中心揭牌,合合信息共话大数据赋能
  • 达那福发布新品音致系列:以顶尖降噪技术,开启清晰聆听新篇章
  • 当物理学奖遇上机器学习:创新融合的里程碑
  • 模拟电路2
  • 大数据面试题整理——MapReduce