水面渲染小结

水体渲染指南3——Gerstner波形和FFT波形模拟水 ​大家好。前面两节课,我们讲了平面水的效果设置,以及如何绑定真实的数据。今天,我们就来看看Gerstner波形和FFT波形模拟水。 阅读详情

水面渲染小结

 

本文版权归我所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。
由于本人水平有限,难免出错,欢迎大家和我交流。
作者:clayman
Blog:
http://blog.youkuaiyun.com/soilwork
clayman_joe@yahoo.com.cn

      
       
从几何模型上来看,水面其实和地面是一样的,可以看做普通的均匀网格,不同点在于地形中,顶点高度是固定的,而水面是动态的。此外,对于水面来说,还有许多特殊的光学效果。为了更好的描述渲染效果,下面借用了《Water Effect》一文中的部分图片。

 

一.           水面动画

       当然,第一步就是让水面运动起来。对均匀网格来说,需要计算出每个顶点的位置和法线。实际上,如果仅模拟比较平静的水面,甚至只需计算法线就行了,这也是目前游戏中常见的做法。

       仅使用法线来模拟水面的好处是可以极大的简化几何模型,最简单的情况下,一个网格就能代表整个水面,你甚至不必担心如何处理LOD计算。它的实现思想就是bump mapping,区别在于这里我们使用动态的normal map。可以实时计算出每条法线的位置,也可以从预先处理好的normal map中获得这些信息。显然,适用后者计算量可以减少很多。在Farcry中,水面实际上只使用了一张normal map,在vertex shader中,对纹理坐标进行不同的缩放和偏移,从而获得动态水面。对这种方法来说,normal map质量的好坏对最终效果有很大影响。下面的代码显示了通过混合三层不同的波来模拟水面的情况:

     bumpCoord1 = texCoord + time*0.02;

     bumpCoord2 = texCoord * 2.0f + time * 0.02;

     bumpCoord3 = texCoord / 2.0f + time * 0.01;

     half3 vBumpTexA = tex2D(tex0, bumpCoord1).xyz;

     half3 vBumpTexB = tex2D(tex0, bumpCoord2).xyz;

     half3 vBumpTexC = tex2D(tex0, bumpCoord3).xyz;

     half3 vBumpTex = normalize(2.0 * (vBumpTexA.xyz + vBumpTexB.xyz+vBumpTexC.xyz) - 3.0);

 

    上述方法最大的缺点就是对于起伏较大的水面来说,就无能为力了,由于仅仅使用法线来表示水面起伏,因此,当近距离观察时,可以看到水面实际是静止的。为了进一步增加真实性,让顶点真正运动起来是必须的。如何来计算水面运动呢?简单来说,可以把水面运动看作一系列正弦或余弦波的叠加。根据不同的时间和顶点坐标位置,计算出当前顶点的高度。然而,实践中我们却更偏向于适用Gerstner Wave。以下是3D Gerstner Wave的3D波动方程,注意这里的x是一个矢量

800×600的海面波涛汹涌的效果如何在游戏中逼真呈现?FFT算法帮你搞定! FFT,即快速傅里叶变换,它是用于处理周期性信号的强大算法。说白了,FFT能将复杂的波形拆解成一系列简单的正弦波,再将这些正弦波组合起来形成逼真的海浪效果。举个例子,你可以想象大海上的波浪就像一堆叠加起来的不同频率的正弦波。有的波浪大,有的波浪小,而FFT算法正是能迅速计算出这些波形的幅度、频率和相位,让我们只需通过数学运算就可以生成动态变化的海面。 阅读详情

相关推荐

cesium+Three.zip

Cesium和Three.js都是用于3D可视化的,网上资料不少,但是能用的不多,本代码保证可以运行,有需要的同学可以下载学习

水面的反射与折射 有倒影 波光粼粼的水面

模拟了水面水波的反射与折射,有倒影 波光粼粼的水面

SMRATS(一) SMARTS+PPO baseline运行教程

python类方法 class Agent: @classmethod def from_function() python typing 含义 为防止弱类型python出现忘记变量类型的问题,python3.5及之后版本增加了对应的类型提示。 输入和输出类型 函数接受并返回一个字符串,注释像下面这样: def greeting(name: str) -> str: return 'Hello ' + name 常用的typing类型 int,long,float: 整型,

Freshduke的博客 1414

机械工程师如何用Codex实现CAD自动化:从重复劳动到智能设计

在机械设计领域,CAD二次开发长期面临学习门槛高、维护成本大的难题。随着AI编程助手如Codex的出现,通过自然语言生成可执行代码,工程师无需精通编程即可实现图纸批量处理、BOM表自动生成、参数化建模等任务。这种技术将重复性操作自动化,显著提升设计效率,让工程师聚焦于核心创新。应用场景涵盖批量修改图纸属性、跨软件数据流转、自动打印等。本文分享机械工程师利用Codex落地自动化的实战经验与避坑指南。

weixin_32296621的博客 359

别再只调API了!深度拆解Dify文件上传的两种传参方式(sys.file vs. inputs.upload_file)

本文深度解析Dify平台文件上传的两种传参方式——sys.file与inputs.upload_file,详细对比其设计原理、技术实现及适用场景。通过代码示例和性能分析,帮助开发者在本地大模型应用中做出精准技术选型,提升文件处理效率与系统稳定性。

weixin_29063979的博客 268

FPGA篮球计分器:从需求分析到模块化实现的实战指南

本文详细介绍了FPGA篮球计分器的设计与实现,涵盖需求分析、模块化设计及实战调试。重点解析了24秒精确倒计时、12分钟比赛计时、比分统计和数码管显示等核心模块的Verilog实现,提供了按键消抖、状态机设计和BCD码处理等关键技术细节,帮助开发者掌握FPGA数字系统设计方法。

sql99的博客 218

手把手教你学 NPU 驱动开发--第一部分:基础准备 开发环境搭建:Linux 内核编译与 NPU 仿真平台配置

摘要:本文详细介绍了搭建Linux内核编译与NPU仿真平台的完整流程。主要内容包括:1) 准备ARM64交叉编译工具链;2) 编译支持KGDB调试的Linux内核;3) 构建最小根文件系统;4) 使用QEMU模拟自定义NPU设备;5) 配置KGDB调试环境。文章重点讲解了如何通过修改设备树添加虚拟NPU设备,并提供了开源NPUIP Gemmini作为实验对象。最后展示了简单的"Hello NPU"驱动验证方法,为后续NPU驱动开发奠定了基础。文中还附有常用命令速查表,方便开发者快速搭建调

MHD0815的博客 384

从 SEGW 到 SADL 的那根线,彻底理解 OData Data Source Mapping

本文摘要(150字): 在SAP Gateway的SADL型OData服务开发中,"Map to Data Source"是关键配置环节。与传统RFC映射不同,SADL映射不是针对单个CRUDQ操作,而是建立OData模型与SADL业务实体间的完整语义对应关系。通过属性映射和关联映射,系统能自动处理数据获取和导航请求。映射编辑器支持三种模式:属性映射处理字段对应,关联映射处理模型间关系,动作映射处理业务操作。映射的本质是建立语义翻译表,决定了后续OData请求如何转化为后端业务实体访问,而非简单的字段重命名

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 61

反光柱定位算法实战03:VEnus代码解析和纯反光柱定位中的可改进方向

本文深入解析了开源框架VEnus的反光柱定位与建图实现流程,包括强度提取、聚类、数据关联、位姿优化等核心模块。同时指出其三大局限:匹配质量脆弱性、单一传感器依赖和地图扩展逻辑缺失,并提出改进方向:融合里程计/IMU数据、引入图优化后端、建立动态地图维护机制。该分析为基于反光柱的定位系统优化提供了实用参考,有助于提升工业场景下的定位鲁棒性和精确性。

Studying…… 520

RK3399快速上手 | 01- 开发环境搭建(固件烧写、编译工具链安装、kernel编译)

一、编译工具链 编译工具链使用gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu。 下载地址: https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/arm-linux-gnueabihf/ wget https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/arm-linux-gnueabi

Mculover666的博客(嵌入式) 8836

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: XNA Kick Start (五)
下一篇: 关于在amazon买书
soilwork
博客等级 码龄23年 290粉丝 116原创
评论 20
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值