第1章 用物理模型进行高效的水模拟

2023-11-16

一,用物理模型进行高效的水模拟
一句话概括:基本网格的几何波动+动态法线贴图。
1.1现状
1,快速傅里叶FFT在大中尺寸栅格取得逼真效果,并能适用于顶点shader和像素shader
2,能基于体素(Voxel)对简化的Navier-Stokes方程求解
1.2gpu水模拟目前的改进
1,顶点着色器,
(1)四个正弦波相加,可以计算水面的高度和方位
(2)三个Gerstner波可以计算水面高度
2,像素着色器
周期波函数加和,来创建动态的平铺(tiling)凹凸贴图,从而获得水面细节
1.2正弦近似值的加和
需要运行两个表面模拟:(1)表面网格的几何波动(2)网格上法线图的扰动
由简单的正弦函数波叠加得到一个连续函数。这个连续函数可以描述水面上所有点的高度和方向。
如果在顶点水平位置对函数取样,则可以使网格细分形成连续水面。
类似,如果在纹理空间中,对近似正弦叠加的发现取样,通过rtt,可以产生表面的法线图。
为每帧渲染法线图,允许有限数量的正弦波相互独立运行,可以大大提高渲染的逼真度。

水纹理的波纹好坏决定着模拟的逼真度,波纹表面的几何波动提供了呈现纹理的精细框架结构。

波的选择:波长,振幅,速度,方向。所有波的总表面是正弦波的叠加。Wi(x,y,t)=Ai*sin(Di(x,y)*yi+t*ki

为了提供场景动力学的变量,将在约束中随机产生这些波参数。随着时间的变化,不断将一个波淡出,再以一组不同的参数将其淡入。这些参数是相关的。

法线是副法线和切线的叉积 。副法线是对x求偏导,切线是对y求偏导。在表面上的三维位置p是p(x,y,t)=(x,y,H(x,y,t))。

几何波数量限制为4个。分为方向波和圆形波。方向波每个Di是波寿命常数。对于圆形波,方向必须在每个顶点计算,它是从波中心Ci到顶点的规范化向量。Di(x,y) = [ ((x,y)-Ci)/|(x,y)-Ci|].

对于大的水体,是水吹动产生模型,用方向波。对于较小的池塘中的水,产生波的原因不是由于风,用圆形波。

海水建模用Gerstner波函数,可以提供一些表面的微妙运动,顶点朝着每个浪头移动形成更尖的峰,在表面上浪头更尖。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第1章 用物理模型进行高效的水模拟 的相关文章

  • 射线和椭球相交精度提高

    我需要提高我的一个功能的精度大气散射 GLSL 片段着色器 https stackoverflow com a 19659648 2521214它计算单射线和轴对齐椭球体之间的交集 这是矿山大气散射着色器的核心功能 旧的原始着色器已打开fl
  • 如何使用 ShaderModifier 更改 SCNGeometry 中特定三角形的颜色

    首先 在继续之前 我已经阅读了 SceneKit 使用纹理坐标在纹理上绘制 https stackoverflow com questions 26129111 ios8 scenekit painting on texture with
  • 使用 python opengl (PyOpenGL) 创建几何着色器失败

    我想使用 glCreateShader GL GEOMETRY SHADER 创建 Geometry shader 但出现错误 Traceback most recent call last File test py line 9 in
  • texture2D().r 和texture2D().a 是什么意思?

    我在用OpenGL ES在Android编程中 当我在着色器中将YUV NV21 转换为RGB时 例如 vec3 yuv vec3 texture2D u TextureY vTextureCoord r 0 0625 texture2D
  • Unity3D Sprite ...但是单面的?

    团结优秀Sprites Unity优秀的新精灵 http docs unity3d com ScriptReference Sprite html 除其他有价值的优点外 实际上是双面的 在 2D 或 3D 用例中 您可以翻转这些小混蛋 但仍
  • 使用GL着色器语言的相机帧yuv到rgb转换

    我从字节数组中的 android 相机预览回调获取相机帧并将其传递给 jni 代码 由于我们不能在 C 中使用字节 因此我将其转换为整数数组 如下所示 JNIEXPORT void JNICALL Java com omobio armad
  • Unity3D - 用于精灵裁剪的着色器

    我正在尝试创建一个可用于在游戏中剪辑 2D 精灵的着色器 我在中找到了该着色器另一个问题 https stackoverflow com questions 16397023 unity3d a shader that will clip
  • 处理中点/笔划的景深着色器

    最近我一直在使用下面的景深着色器 最初来自ofx后处理 https github com neilmendoza ofxPostProcessing blob master src DofPass cppOpenFrameworks 库 用
  • OpenGL 实现多通道

    我在移植一些已成功实现的代码时遇到问题着色玩具 https www shadertoy com view XdyfWK对于桌面 OpenGL 问题是我需要创建一个 FrameBufferObject FBO 以便我可以进行离屏计算 稍后将其
  • Three.js 使用 WebRTC 并应用 Shader

    我不知道如何将着色器应用于具有视频纹理的 Three js 对象 我一直在使用 webRTC 和 Three js 并使用标准材质成功将视频纹理映射到网格上 var material new THREE MeshBasicMaterial
  • OpenGL 统一缓冲区 std140 布局

    我正在尝试通过 GeForce 8600 GT 上的统一块将整数数组传递给片段着色器 一切均根据 GLSL version 330 在应用程序方面我有 int MyArray 7102 filling binding etc glBuffe
  • OpenGL ES 2.0 多个程序或多着色器还是什么?它是如何工作的?

    问题 TL DR 我的问题从根本上来说是我不知道 OpenGL ES 2 0 期望我如何编写和使用多个着色器 或者如果甚至建议 期望一个人会这样做 这里的基本问题是 如果我有一个苹果 一块发光的岩石和一个模糊网格 它们都在同一个 3D 世界
  • 您应该如何有效地批处理复杂的网格?

    渲染复杂网格的最佳方法是什么 我在下面写了不同的解决方案 想知道您对它们有何看法 让我们举个例子 如何渲染 Crytek Sponza 网格 PS 我不使用Ubershader 只使用单独的着色器 如果您通过以下链接下载网格 http gr
  • 对数/线性 Z 缓冲区阴影贴图

    问题在于 伪影出现在距离很远的阴影中 我想尝试制作一个对数深度缓冲区 但我不明白应该在哪里完成以及如何完成 我对全向阴影贴图使用点光源方法 顶点着色器 version 460 core layout location 0 in vec3 a
  • 编写每个三角形/面具有纯色的 GLSL 片段着色器的方法

    我有顶点和三角形数据 其中包含每个数据的颜色triangle 面 不是每个顶点 即单个顶点由多个面共享 每个面可能具有不同的颜色 我应该如何在 GLSL 中解决这个问题以获得每个的纯色分配face正在渲染 通过平均顶点相邻多边形的颜色来计算
  • 如何使着色器淡入某种颜色?

    这是我当前使用的着色器 它通过缓慢降低不透明度来淡化对象 我想褪成紫色 如何才能做到这一点 着色器 frag uniform sampler2D texture uniform float opacity void main vec4 pi
  • 使用 GLSL 着色器在同一片段着色器中定义的多个子例程类型无法正常工作

    我正在开发一个使用 GLSL 着色器的程序 我编写了 2 种不同的方法来用 2 种不同的方法计算 ADS 环境光 漫反射 镜面反射 着色 为了正确完成这项工作 我使用子例程来使用一种或另一种方法来计算 ADS 着色 这是片段着色器代码的一部
  • 使用 OpenGL 着色器进行数学计算 (C++)

    我有一个矩阵 例如 100x100 尺寸 我需要对每个元素进行计算 matrix i j tt 8 5例如 我有一个巨大的矩阵 我想使用 OpenGL 着色器来实现该算法 我想使用着色器 例如 uniform float val unifo
  • 更改 Qt OpenGL 窗口示例以使用 OpenGL 3.3

    我正在尝试更改 Qt OpenGL 示例以使用更现代的 opengl 版本 330 似乎合适 所以我做了 在 main cpp 上设置版本和配置文件 设置着色器版本 更改着色器以使用统一 它现在构建没有任何错误 但我只看到一个空白窗口 我错
  • 根据 GLSL 中向量的特定分量执行最小-最大的最快方法?

    我需要在我的 GLSL 代码中多次调用这种函数 vec2 minx vec2 a vec2 b if a x lt b x return a else return b 我担心过度分支 有没有办法避免 if else 结构 我建议使用 GL

随机推荐

  • java中访问修_Java中常见的访问/非访问修饰符

    Java中常见的访问 非访问修饰符 Java中常见的访问 非访问修饰符 1 Java中有下列常见访问修饰符 private 私有变量和方法 非外部类 只能被声明它们的类的实例所使用 default 类中的数据 方法和它本身能够被声明为默认d
  • 如何新建Quartus工程—FPGA入门教程

    这一章我们来实现第一个FPGA工程 LED流水灯 我们将通过流水灯例程向大家介绍一次完整的FPGA开发流程 从新建工程 代码设计 综合实现 管脚约束 下载FPGA程序 掌握本章内容 大家就算正式的开始入门FPGA开发了 1 1 2 新建工程
  • 老Java程序员花两天做了个消消乐(天天爱消除)

    老Java程序员花两天做了个消消乐 天天爱消除 引言 一直就想做一个消消乐 这次正好找到了素材 就自己琢磨写了一个 我觉得这个游戏难点就在消除 以及消除后的下落 其他的地方也就还好 这次做完了写个文章大家唠一波 效果图 实现思路 1 绘制窗
  • PostgreSQL

    PostgreSQL 是一个免费的对象 关系数据库服务器 ORDBMS 在灵活的BSD许可证下发行 PostgreSQL 开发者把它念作 post gress Q L PostgreSQL 的 Slogan 是 世界上最先进的 开源关系型数
  • VMware16虚拟机安装及配置(保姆级教程),这一篇就够了

    1 虚拟机VMware的下载官网地址 https www vmware com cn html VMware 安装 1 打开下载好的 exe 文件 即可开始安装 2 点击下一步 3先勾选我接受许可协议中的条款 然后点击下一步 4 自定义安装
  • 05-----撤销add,commit,push的方法(包括如何删除已经push到远程库的单个文件或者文件夹)

    1 撤销add添加的多余文件 git reset filename 撤销add到缓冲区的部分文件 2 撤销commit的多余文件 git log 先使用查看已经提交的commitId节点 git reset commit id 回退到上一个
  • 为什么我选用了springcloud而不是dubbo

    写好的代码越来越满足不了需求 因为需求总是在不断的变化 在技术选型时 实在是心有余而力不足 思来想去 就考虑了使用微服务架构来实现 功能模块化 今天主要讲讲为什么需要微服务架构 还是以故事的形式呈现 一 认识微服务 阶段一 单体服务 话说小
  • C语言密码破译

    请用C语言编程序将 China 译成密码 密码规律是 用原来的字母后面第4个字母代替原来的字母 例如 字母 A 后面第4个字母是 E 用 E 代替 A 因此 China 应译为 Glmre 请编一程序 用赋初值的方法使 cl c2 c3 c
  • IntelliJ IDEA(编码篇):集成Junit4插件,快速生成测试类

    目录 安装JUnitGenerator V2 0 修改JUnitGenerator V2 0的配置 生成JUnit4测试用例 注意 安装JUnitGenerator V2 0 1 通过网络安装 如下 2 手动下载插件安装 插件下载 http
  • 全网最简单解决方式1045-Access denied for user root@localhost(using password:YES)

    最近 Javaweb小学期 和 数据库小学期 答辩 极限赶大作业 唉 1045 Access denied for user root localhost using password YES 连接数据库时出现了这个问题 网上大概有3种解决
  • React Hooks:Effect无限回调踩坑

    场景 我的目的是通过Effect来模拟组件的componentDidMount 在渲染完成之后 通过setTimeout来处理操作 向keyIndex中push一个新的元素 并更新keyIndex 但是这个操作我确定只会执行一次 错误代码如
  • a和ajax跳转页面,ajax 页面跳转

    ajax 页面跳转 内容精选 换一换 面包屑组件 是项目中常用的一种组件 结构大致是 首页 菜单1 菜单2 菜单3 接入配置完成后 伙伴可以在能力开放页面配置伙伴平台回跳地址 以便于客户在完成订单支付后能返回到伙伴销售平台或者客户支付订单需
  • 适合下班后的副业,4个比较实际的副业兼职

    每一个上班族 都有一个发财的梦想 希望可以通过自己的努力 让领导看到自身价值 得到赏识 快速升职加薪 赚得盆满钵满 这样是不错 而且不少上班族单纯依靠工作就实现了这样的梦想 但是对于绝大部分普通人来说 还只存在于 想 如果现有的工作暂时没有
  • pdf注释上锁_如何在iPad上突出显示和注释PDF

    pdf注释上锁 Khamosh Pathak Khamosh Pathak The iPad is a great way to read PDFs but what if you want to highlight parts of it
  • STM32采用普通的IO口来测量PWM的频率

    STM32测量外部输入信号的频率的方法有很多 采用内部定时器输入捕获功能 采用普通的IO口设置外部中断 定时器的当时测量PWM信号的频率 这两种方式比较推荐使用第一种 比较使用内部的资源可以节省CPU资源的利用 当然当内部资源不够使用的时候
  • Unity LensFlares(镜头炫光)踩坑以及解决总结

    镜头光晕 Lens Flares 模拟相机镜头内的折射光线的效果 主要作用就是让太阳光 其他光源更加真实 Build in Build in管线中 可以直接添加Lens Flare组件即可获得效果 URP 2019 在Unity2019版本
  • 【mcuclub】CO2及TVOC检测-SGP30

    一 实物图 二 原理图 编号 名称 功能 1 VCC 电源正 2 GND 电源地 3 SDA 串行地址和数据输入 输出 4 SCL 串行时钟输入 三 简介 SGP30是一款单一芯片上具有多个传感元件的金属氧化物室内气体传感器 内部集成4个气
  • 电赛分几种_参加电赛需要具备哪些知识呢?

    本文转载自 微信公众号 47竞赛 ID gh 1814a7d91c55 经微信公众号授权转载 如需转载与原文作者联系 电赛需要准备哪些知识呢 先分析一下电赛的题目 你会发现 题目主要分为控制类 仪器仪表类 信号源类 电源类 放大器类 高频通
  • QT 布局,控件自适应大小 自动缩放 自动布局

    目录 前言 1 先来说简单的布局控件自适应 说明我们实现了自动布局 3 通过代码设置控件自动缩放重写resizeEvent 4 源码 https upload csdn net creation uploadResources 866208
  • 第1章 用物理模型进行高效的水模拟

    一 用物理模型进行高效的水模拟 一句话概括 基本网格的几何波动 动态法线贴图 1 1现状 1 快速傅里叶FFT在大中尺寸栅格取得逼真效果 并能适用于顶点shader和像素shader 2 能基于体素 Voxel 对简化的Navier Sto