水面模拟--FFT Ocean

FTT 海面模拟(DirectX11) 计算着色器(Computer Shader)中可以使用线程组并行进行计算,很适合用来计算波浪(水面、地形等)的顶点数据。在学习完DirectX11 With Windows 计算着色器:波浪(水波)后,要求完成FTT 海面模拟,并且可以使用 imgui 调节参数控制波浪大小。 FFTWaves 在《【学习笔记】Unity 基于GPU FFT海洋的实现-理论篇》FFT函数: 其中, 参数是我们水平方向的坐标, t是时间,函数 h 可以直接给我们返回在时间 t 时, 处的海面高度。 被定... 阅读详情

前言

FFTOcean是一种基于统计学模型的水面模拟算法,原论文为SIGGRAPH 的一篇文章Simulating Ocean Water。

先看一下效果

 

一、需要设置的一些参数

首先文章假设节点平面坐标X=(x,z),需要根据X来计算高度y。接着需要设定的参数有:海洋的实际大小(Lx,Lz),将海洋划分为网格的大小(N,M),海洋环境中的风速V,以及风向Vdir,还有幅度A。

二、高度场函数推导

文章先是定义高度场的计算公式为:

其中

为了方便实现,我们假设

故可以把公式(2)改写为

现在公式(1)中还需要计算的就只有h0(K)了,即公式(5)中的h0'(n',m'),h0'*(n',m')为h0'(n',m')的共轭复数,因此不需要额外推导。

       公式(6)中,V和W分别为风速和风向,需要自行设定。

高斯随机数的代码为:

float urand()
{
	return rand() / (float)RAND_MAX;
}
// Generates Gaussian random number with mean 0 and standard deviation 1.
float gauss()
{
	float u1 = urand()
Unity海洋系统开发:Ceto源码解析与高性能水面渲染实战 实时水面渲染是计算机图形学与游戏开发中的关键技术,其核心在于通过物理模拟算法实现动态波浪效果。基于频谱分析的海浪模型通过快速傅里叶变换(FFT)将频域能量分布转换为空间域的高度场与法线场,为水面提供真实的动力学基础。在工程实践中,投影网格技术通过动态细分策略实现无限海面的高效渲染,结合基于物理的着色模型处理光照、反射与折射效果。这类技术对航海模拟、开放世界游戏等需要大规模水体交互的场景具有重要价值。本文以Ceto Ocean System为例,深入解析其波浪频谱生成、FFT实现与渲染管线集成的完整架构,并探 阅读详情

相关推荐

800×600的海面波涛汹涌的效果如何在游戏中逼真呈现?FFT算法帮你搞定!

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

知道者 1279

使用FFT的海洋模拟—C++、OpenGL、过剩___下载.zip

使用FFT的海洋模拟—C++、OpenGL、过剩___下载.zip

OceanFFT:OpenGL演示

海洋FFT 真实的海浪仿真,主要基于,使用OpenGL计算着色器。 在签出演示视频。 为了追求更高的真实性,使用了与原始论文中提到的菲利普斯光谱。 FFT的Stockham公式用于更好地将问题映射到GPU并避免香草Cooley-Tukey算法所需的昂贵的位反转操作。 制作说明 通过git clone --recurse-submodules git://github.com/achalpandeyy/OceanFFT.git与子模块递归git clone --recurse-submodules git://github.com/achalpandeyy/OceanFFT.git 在根目录中运行CMake 依存关系 使用我的OpenGL框架作为子模块。 参考 对于海洋物理学: , , 有关FFT及其背后的数学运算: , , , FFT视频

基于GPU的海浪特效实时渲染

对于海浪特效的模拟能有效增强海洋场景仿真的真实感,模拟的实时性也是海洋场景仿真系统的重要需求之一.为了实现基于GPU的海浪特效实时渲染,以PM海浪谱为基础进行了研究,从而生成海浪高度场,并结合视相关反投影方法生成海浪网格,采用硬件着色器进行基于物理光照模型的实时光照处理,生成了具有较强真实感的海面效果,较好地满足了时渲染场景实时性和真实感的要求,达到了实时视景仿真系统中对海洋模块的实时仿真要求.

OceanFFT 使用指南

OceanFFT 使用指南 OceanFFT 是一个用于实时模拟海洋波浪的OpenGL演示项目,通过Fast Fourier Transform (FFT) 技术实现。本指南将帮助您了解该项目的基本结构、启动流程以及配置相关知识。 1. 目录结构及介绍 以下是 OceanFFT 项目的主要目录结构及其简要说明: Assets 包含项目中所有的资源文件,如纹理、着色器脚本等。 参考资料(re...

gitblog_00307的博客 578

FFT海浪模拟——理论部分整理(一)

自变量为x的函数f(x)可看作一个随空间变化的信号(空域信号),只要满足一定条件,它就可以表示为一堆不同频率的随空间变化的正弦信号(空域正弦信号)的线性组合(或积分)

hnbxs的博客 680

Unity shader开发:FFT-Ocean水面渲染技术全解析

FFT-Ocean是一款基于Unity引擎开发的高性能水面渲染系统,它利用快速傅里叶变换(FFT)技术模拟真实海洋波浪效果。本文将全面解析FFT-Ocean的实现原理、核心技术和使用方法,帮助开发者快速掌握这一强大的水面渲染解决方案。 ## 什么是FFT-Ocean水面渲染技术? FFT-Ocean水面渲染技术是一种基于物理的海洋模拟方法,通过快速傅里叶变换算法计算海洋表面的波浪运动。该技术能

gitblog_00005的博客 305

FFT-Ocean常见问题解答:新手必知的10个技术要点

FFT-Ocean是一款基于Unity引擎的海洋模拟项目,通过快速傅里叶变换(FFT)技术实现逼真的海浪效果。本文将解答新手在使用过程中最常见的10个技术问题,帮助你快速掌握FFT-Ocean的核心功能和使用技巧。 ## 1. 什么是FFT-Ocean?它的核心功能是什么? FFT-Ocean是一个基于Unity引擎的开源海洋模拟系统,利用快速傅里叶变换(FFT)算法实现高效、逼真的海浪效果。

gitblog_00988的博客 933

threepp海洋渲染:FFT海浪与水面特效实现

threepp是一个跨平台C++20 3D库,提供与three.js相似的高级API,特别适合实现逼真的海洋渲染效果。本文将深入探讨如何利用threepp的FFT(快速傅里叶变换)技术创建动态海浪和水面特效,让你的3D场景更加生动真实。 ## 海洋渲染的核心技术:FFT海浪模拟 FFT(快速傅里叶变换)是实现高效海浪模拟的关键技术。通过将频率域的海浪数据转换为空间域的波形,threepp能够实

gitblog_00776的博客 713

FFT-Ocean开发指南:WavesGenerator与Compute Shaders深度实践

想要在Unity中创建逼真的海洋效果吗?FFT-Ocean项目为你提供了完整的解决方案!这个基于快速傅里叶变换(FFT)的海洋波浪模拟系统,通过GPU计算实现了实时的高性能海洋渲染。在本篇完整指南中,我将带你深入了解FFT-Ocean的核心组件WavesGenerator和Compute Shaders的实现原理与实践技巧。 ## 🎯 项目概述与核心优势 FFT-Ocean是一个专门为Uni

gitblog_00085的博客 736

Unity海洋渲染新突破:FFT-Ocean的5个高效实现技巧

想要在Unity中创建逼真的海洋效果吗?FFT-Ocean项目为你提供了一个基于快速傅里叶变换(FFT)的高性能海洋渲染解决方案。这个开源工具利用GPU计算能力,实现了实时动态的海洋波浪模拟,为游戏开发和视觉效果制作带来了革命性的突破。无论你是Unity新手还是经验丰富的开发者,掌握这5个高效实现技巧都能让你的海洋场景更加真实生动。✨ ## 🌊 1. 多级联波浪系统架构 FFT-Ocean

gitblog_00487的博客 645

快速傅立叶变换(FFT)的海面模拟

快速傅立叶(FFT)变换的海面模拟 在这篇文章中,我们将根据Tessendorf的论文[1]中的方程来实现统计波浪模型,以模拟海洋水。 使用快速傅立叶变换,我们将能够实现实时交互的帧速率。以下提供两个截图,首先是简单的光照渲染,之后的是网格模型的渲染。 改文章使用了一个高度函数,其中为坐标(x,z)(我们这里令y为高度),时间为t(说明我们的高度会随时间变化)。 其中,是我们...

小龙虾的博客 6014

Unity海洋模拟插件Ocean Community Next Gen:从Gerstner波到FFT的混合渲染实战

在实时图形渲染领域,水体模拟是提升场景沉浸感的核心挑战之一,其背后涉及复杂的物理原理与图形学技术。基于物理的渲染(PBR)通过模拟光线与表面的交互,为材质表现提供了真实感基础。而针对大规模动态水面,波浪模拟技术尤为关键,它决定了水体的形态与动态真实性。从技术价值看,高效的水体渲染方案能极大降低开发门槛,让团队专注于核心创意。在游戏开发、建筑可视化及数字孪生等应用场景中,逼真的海洋效果是构建开放世界或模拟训练环境的重要环节。本文聚焦的Ocean Community Next Gen插件,正是通过整合Gerst

weixin_29015899的博客 305

Crest Ocean Render完整指南:在Unity中实现电影级海洋渲染

Crest Ocean Render是Unity引擎中领先的水体渲染系统,为游戏开发者提供了实现电影级海洋效果的专业解决方案。这个强大的工具集能够创建从平静湖泊到汹涌海洋的各种水体场景,支持内置渲染器(BIRP)、高清渲染管线(HDRP)和通用渲染管线(URP),让你在Unity项目中轻松实现逼真的水面效果。 ## 项目概览与价值定位 🎯 Crest Ocean Render不仅仅是一个水面

gitblog_01037的博客 444

探秘FFTOcean:一个高效、易用的海洋波浪模拟

探秘FFTOcean:一个高效、易用的海洋波浪模拟库 项目简介 是一个基于快速傅里叶变换(FFT)的开源库,专为实时和高性能的海洋表面波浪模拟而设计。该项目由开发者 Straw1997 创建,旨在提供一种简单的方法,让游戏开发人员、图形艺术家以及任何对模拟现实世界动态水体感兴趣的人能轻松集成到自己的应用中。 技术分析 快速傅里叶变换 (FFT):FFTOcean的核心是利用了FFT算法进行计算,这...

gitblog_00074的博客 561

fft-ocean:实现真实海洋渲染的WebGL技术

fft-ocean:实现真实海洋渲染的WebGL技术 项目介绍 在现代WebGL技术的应用中,创建逼真的海洋环境一直是一个挑战。fft-ocean 是一个开源项目,通过Three.js框架实现了一种快速傅里叶变换(Fast Fourier Transform,FFT)的海洋渲染方法。这个项目不仅提供了一个展示真实海洋场景的演示,还允许用户通过键盘在场景中自由移动,并选择不同的环境设置,例如夜晚、日...

gitblog_00037的博客 829

【亲测免费】 FFTOcean 项目教程

FFTOcean 项目教程 1、项目介绍 FFTOcean 是一个基于 C++ 和 OpenGL 的开源项目,旨在模拟海洋水体的实时 3D 效果。该项目是根据研究员 J. Tessendorf 的论文 "Simulating Ocean Water" 实现的。通过使用快速傅里叶变换(FFT),FFTOcean 能够从 Philipps 频谱中计算出二维波高场,从而生成逼真的海洋...

gitblog_00877的博客 1089

FFTOcean:实时海洋模拟的开源利器

FFTOcean:实时海洋模拟的开源利器 项目介绍 FFTOcean 是一个基于C++实现的实时海洋水体模拟项目,灵感来源于J. Tessendorf的研究论文《Simulating Ocean Water》。该项目通过使用(逆)快速傅里叶变换(FFT)从Philipps频谱中计算出2D波高场,从而实现了一个逼真的3D海洋世界。用户可以调整风速、风向、波浪的起伏程度以及海洋深度等参数,以获得不同...

gitblog_00032的博客 952
上一篇: 水面模拟--波动方程
qq_38276704
博客等级 码龄9年 1粉丝 2原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值