惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hacker News: Ask HN
Hacker News: Ask HN
C
Cisco Blogs
The Hacker News
The Hacker News
T
Tor Project blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The GitHub Blog
The GitHub Blog
A
Arctic Wolf
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The Register - Security
The Register - Security
云风的 BLOG
云风的 BLOG
Simon Willison's Weblog
Simon Willison's Weblog
P
Palo Alto Networks Blog
Vercel News
Vercel News
C
CERT Recently Published Vulnerability Notes
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
M
MIT News - Artificial intelligence
I
Intezer
aimingoo的专栏
aimingoo的专栏
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 热门话题
Microsoft Security Blog
Microsoft Security Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
P
Proofpoint News Feed
P
Proofpoint News Feed
B
Blog
T
Threat Research - Cisco Blogs
博客园 - 叶小钗
Recorded Future
Recorded Future
Last Week in AI
Last Week in AI
N
News and Events Feed by Topic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Know Your Adversary
Know Your Adversary
Engineering at Meta
Engineering at Meta
G
Google Developers Blog
PCI Perspectives
PCI Perspectives
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
Application and Cybersecurity Blog
Application and Cybersecurity Blog
MyScale Blog
MyScale Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Schneier on Security
Schneier on Security
N
News | PayPal Newsroom
C
Cybersecurity and Infrastructure Security Agency CISA
H
Help Net Security
博客园 - 聂微东
H
Hackread – Cybersecurity News, Data Breaches, AI and More
G
GRAHAM CLULEY

机核

游戏性能旗舰最强之选,一加 Ace 6 至尊版国补到手价2999元起 6元钱自己更换电动车刹车线 《生化危机9:安魂曲》编剧Haris Orkin专访 摸金游戏?音乐游戏!暗区新赛季这把能弹的琴有何来历? 好评国产武侠SRPG《息风谷战略》免费DLC现已推出 | 机核 GCORES 碎片 《生化危机:安魂曲》将于5月实装首个免费更新内容 | 机核 GCORES 新锐东方游戏,谱写世界新章! 沉浸式恋爱视觉小说游戏《心象演算》免费试玩版现已正式上线 | 机核 GCORES 互动影游《代号三国:龙起》上线!穿越三国与曹操并肩、与佳人同行、与权谋博弈! 《老头收集梦想生活》,游戏酒桌会6,录音笔VOL.689 | 机核 GCORES 破界·共生——《白日梦:无限世界》五大核心游戏特点解析 价格已到史低,锐龙5 9600X/锐龙7 9700X正适合抄底 时间循环之旅即刻启程!《归环》一周目测试今日开启 热门在线韩游变魂游,洛奇衍生作能否打破“花瓶”魔咒? LG UltraGear evo 全新高端显示器系列:当“5K”遇见“AI”,不止强大,更懂热爱 反套路三国互动影游《代号三国:龙起》今日上线! 愿望单登记人数突破10万!备受瞩目的“女儿养成游戏” 《梦幻魔法公主》今日于Steam平台上线!限时八折优惠中 《黑神话:悟空》全球音乐会2026巡演将于4月29日12时开票 | 机核 GCORES “Snowguelike”生存肉鸽挖矿新作《蛙穿雪境》公布发售日期,5月7日正式上线 | 机核 GCORES 重塑移动办公、AI创作新境!全新华硕灵耀Air系列、ProArt 骁龙版震撼首发,创芯未来 均分88:《Saros》媒体评分汇总 | 机核 GCORES 上海烛龙公布合作遗迹探险游戏《吉时已到》首支预告片 | 机核 GCORES 首个独立游戏《萝薇日记》已上线Steam! 烛龙新IP《吉时已到》首曝,打造国内首款中式合作遗迹探险游戏 喜加一:《暗黑破坏神Ⅳ》国服现已开启限时免费领取本体活动 | 机核 GCORES 新版《生化危机》电影定于9月18日上映,官方网站现已上线 | 机核 GCORES 《冲就完事模拟器2》“星球大战”联动DLC正式宣布 | 机核 GCORES SteamController将于5月4日发售,售价99美元 | 机核 GCORES 事已至此,内存这么用也算省钱了,“2+1”非对称双通道应用实测 505游戏母公司现已收购《明末:渊虚之羽》IP | 机核 GCORES 基石 手动杂谈12|格斗游戏也能讲好故事 | 机核 GCORES I Love You Mr Snowball 我的向日葵小姐 会比GTA6先发售吗?最硬核的生存游戏《DAYZ》要推新DLC了 周记02:在2026遇到新怪谈 什么硬件,能让游戏Loading界面快速消失? | 机核 GCORES GadioSpec《百年风云世界杯》免费试听集 | 机核 GCORES 百年风云世界杯Vol.1丨足球崛起 | 机核 GCORES 100年前,一群人提前替我们经历了AI恐惧 | 机核 GCORES 《呼啸山庄》2026 ——一辆当代艺术的大卡车冲撞了我的大脑 手游《天穗之咲稻姬:日之香巡灵传》宣布将于7月27日停服 | 机核 GCORES 集结梦之队,征战世界杯,《最佳球会ONLINE》上线Steam 山水绝景随心拼 休闲建造游戏《千里山河录》Steam商店页公开 巫师帽、法袍、魔杖,为什么它们是影视、游戏里的法师必备三件套? 《无鞘信使》-第一章 复古风自动战斗肉鸽《终结之终结》Steam商店页面现已上线 电脑里有一款不破不立的MMO,录音笔VOL.688 | 机核 GCORES 《生化危机》30周年纪念周边发售,这次是真的“保护伞” 可靠耐用+AI全能,惠普战66 2025锐龙版深度体验 《时之书:无尽终章》关卡“大航海时代”全球首次公开 经典名作《乌龙派出所》改编经营模拟游戏《乌龙派出所~阿两的商店街物语~》正式宣布支持简体中文 明日开冲,解锁反套路三国互动影游《代号三国:龙起》即将上线 独立游戏《这是我的宝藏!》已发售~ 降低难度不是唯一解,无压力死亡也是好体验 Netflix官宣新片《普通人》:讲述韩国现代史上的权力风暴 《生化危机:安魂曲》全球销量现已突破700万份 《绝地鸭卫》PC版5月15日正式发售 亡妻回忆录?女性向情感叙事游戏《S-mail》现已正式发售 全新酷黑风格,酷睿Ultra 200S PLUS的高性价比搭档!七彩虹BATTLE-AX B860M-PLUS S WIFI7 V20 超级黑刃主板测评 胖狗 索尼发布了港台地区PS5产品价格调整公告,将于5月1日起实施 二次元怪猎+性感美女!《碧蓝幻想:无尽黄昏》开启Beta公测 这款怪谈类型中式恐怖游戏居然更新了?! 《百日战纪 -最终防卫学园-》改编漫画将于今年冬季开启连载 《如被附身,请致电我们》:匈牙利黑色幽默恐怖小说 《竹屿山房杂部卷五》(译文) 大树 超越引擎 摄影分享丨四月 碎片杂记vol.72 当老式FPS与老式动画技术碰撞出新时代的火花—《神探杰克鼠》 想做独游,如何避免首个项目就褒姒? 在线多人动作游戏《OCTOPinbs》将于5月12日上线Steam! 《酒鬼女神的酒诡》确定将于2026年登陆Steam 《CRYMELIGHT》将于11月5日(周四)正式发售!4月25日开始预购! 钢铁国度MKI部落Evolution,蛮兵部分 【钢铁国度】部落-Primal MK I,蛮兵部分 这是一个高中生用ai跑出来的作品,我自称他为物理神话 钢铁国度MKI部落Metamorphosis,蛮兵部分上 钢铁国度MKI部落Metamorphosis,蛮兵部分下 INDIE Live Expo于4月25日举办:首发9款新作,超200款独立游戏亮相 暗黑卡牌策略新作《魔忌:穷鼠啮狸》发布全新中文试玩版和发售预告片,4月30日正式上线在即 战锤40K长篇小说:变节者・苦难主宰(三)(全书完) 战锤40K长篇小说:变节者・苦难主宰(二) 战锤40K长篇小说:变节者・苦难主宰(一) 英语语言学习丨短语专题1:短语的特点 唯一的EVE战争 【少前同人】【M200】战术人形会梦见音乐会吗 【昏迷3】即将发售,前作主角悉数到场!“恶灵”宋老师化身可操控角色 业内人士:游戏公司“十有八九”使用生成式AI,包括卡普空 欢庆一周年:《光与影:33号远征队》全新纪念艺术图、超值折扣与免费更新同步上线 才刚刚开始呢 【抽奖】《星际卡车司机》推出免费大型更新,四折平史低折扣进行中 四人合作FPS游戏《佣兵猎手》抢先体验重大更新 1 现已上线 Raw Fury新作《深馅地牢 Deep Dish Dungeon》将于今秋加入 XGP 塔防幸存者游戏《魔怪来袭》推出首个 DLC 《饿狼传说:群狼之城》1周年纪念!新DLC“沃尔夫冈·克劳萨”今日参战 猫狗相伴 欢乐闯关 双人合作平台跳跃游戏《猫狗同行》上线Steam商店页 《同行:月球逃脱》(Together: Moon Escape)上线将于明日上线Steam
游戏中还原真实世界——海洋水体
Hakumen · 2024-06-14 · via 机核

前言

有时候想想物理法则真的很厉害,因为它有着去中心化的运行方式。计算机科技领域的算力在自然法则面前还差距很远。

对光线追踪有所了解的可能会知道,现有的实时光线追踪技术还是大量建立在AI推测和降噪算法的基础上,本身底层能做到的每帧采样率(基于“蒙特卡洛积分”方式,需要一定的采样数)其实很低。这个数量级要每帧模拟物理世界中的分子级别的运算还是不可能的。

例如衣服打湿的效果,玻璃上的雨水效果之类,这些视觉效果在游戏引擎中是不存在基于物理法则的“水滴”的。前者通常是一个基于打湿程度的整体布料渲染系数变化(辅助一些雨滴粒子之类),后者则往往通过一个实时生成的透明效果层来实现。

在离线渲染中,水体的物理模拟可以通过弹球系统来进行,当单个弹球足够小时其实已经比较接近水分子系统了;而在实时渲染中,水体能实现“看起来像”已经耗费了很多人类的智慧,这里面也有巨大的效果和性能的trade off。各种不同的实时渲染水体几乎还都是一事一议的来制作和优化的,例如杯子中的酒、空中的雨滴和大海中的波浪要考虑的问题就千差万别。

从这个意义上来说,现在和今后很长一段时间内游戏中其实不存在“真”的水体。所以很多时候玩家觉得游戏中的水看起来假,其实就是开发者没有足够的能力或精力去处理水体这个课题,没有做到很好的模拟和抽象;而那些水体做的好的游戏,要么是把它作为重要视觉目标来对待,要么就是他们有着长足的积累和足够的性能空间。

本文综合了比较成熟但可能不是最新的一套水体方案,大部分内容拆解自几篇SIGGRAPH论文和一套成熟的Unity水体插件(文末会附资料链接)。另外由于篇幅和个人阅历的原因,本文和此系列的其它文章一样也只能起到一个抛砖引玉的作用。

下面让我们逐章节开始:

1 基础形体:网格——Mesh

理论上最低限度可以表达水体的多边形就是一个平面,上面运行着有一定噪声扰动、法线扰动及光照计算的半透明(或不透明)着色。而稍微有点写实程度要求的水体,则不可避免要使用多边形网格来描述水面的形体。

由于水体渲染肯定是要大量使用多边形网格的,一般来说会有这些基本原则:

  • 最小顶点数

  • 保证靠近视点的细节(LOD)

  • 稳定性(不同帧之间)

  • 在视点移动时不产生噪点

  • 适配各种不同视点

这里面很多原则其实和大世界地形渲染是共有的问题意识。下面介绍一种被称为Geometry Clipmaps的设计及其后续改进的内容。

Geometry Clipmaps要点:

  • 几何(密度)延视点分布

  • 顶点位置始终对齐到世界空间的格子上(整体呈矩形分布)

  • 经过接合的几何LOD层级(*这一点后续又有所改进,变成网格不是必须接合的)

下面通过一组GIF演示一下这个方案的基本效果:

通过这一方案,就可以达到近处的网格密度高、远处相对较低,整体比较有序接合的效果;后续要对这个网格系统做基于波函数或顶点变换的形变也能继续进行。得益于现代GPU,实时运算这种数量级的多边形变换对于PC和主机已经不是问题。

由于这个方案的网格区域也不是无限大的,对于最外层网格更外侧的区域需要一定的外延填充策略。这个方案就简单的做了一下外延拓展,如果对于纹理外延拓展有了解的应该对这个模式不陌生。

最后再来看一下摄像机远近对于网格缩放的影响:

之所以需要不断动态折腾这套网格LOD,是因为毕竟算力还是应该分配到最合适的方面。这里面还有一个部分重叠(Overlay)的问题,由于篇幅原因不展开了。

最后来对比一下这套方案和《神秘海域4》中采用的大地形CDLOD(Continuous Detail LOD)方案:

*Taxicab distance直译是出租车距离,其实国内更常见的叫法应该是曼哈顿距离(Manhattan Distance)。

CDLOD——几何距离、四叉树、不能保证边缘几何正确、LOD之间没有形体关联。

CDClipmaps——曼哈顿距离、最小化CPU消耗、边缘几何有明确方案、LOD间有形体关联。

2 波和浪:模拟——Wave & Foam Simulation

有了网格系统后,海水的波和浪都是基于对网格的整体形变来运作的。只是一般来说波的影响范围没有浪那么大,因此两者也有着不同的预运算和实时运算方式;由于实时的流体计算还是开销太大了,因此实时运算也往往采用波函数等简化方案。

1)基于预计算纹理的波形

在《刺客信条3》中,开发者就通过离线预计算的FFTFast Fourier Transform 快速傅立叶变换,这里就是表现成预计算纹理)模拟了逼真的海浪效果。

To produce the waves a statistical model based on fourier transform was used, based on Jerry Tessendorf’s work (simulating ocean water). The team precomputed two sets of tiling and cycling wave displacements. These were stored as rgb textures. The water textures were projected from the camera position, thus distant waves are smaller and closer waves larger. The resulting waves are an input for vertex buffers.

译:为创建这些波浪我们采用了一个基于快速傅立叶变换的静态模型,基于Jerry Tessendorf之前关于海洋水流模拟方面的成果。团队预计算了两组平铺、可循环的波纹替代,并存入RGB纹理中。水体纹理从摄像机位置被按照近大远小的策略进行投射。最终结果的波形被输入到顶点缓冲数据中。

*作为一款十年前的方案,这种波浪现在已经是单机甚至手机3D游戏的起点甚至标配了。

2)基于波函数的波形

对于实时波函数,这里介绍一个Gerstner波函数。它演进自正弦波函数,公式如下:

看起来玄乎,其实逻辑并不复杂,大概就是定义了一组波的陡度间隔等参数,带入进去可以得到一组波型(甚至法线也可以高效的计算出,这里不展开了)。

*更多的2D波函数可以参考文末的链接。

3)基于预计算形体,以“粒子”方式作用的波形

有时候,波形也被预存成形体变换的数据(网格、深度图、法线图等),以类似“粒子”的方式作用到水体网格上。形体变换数据会基于参数输入(玩家操作、风向等)、已有波浪和发射源相关参数等属性进一步运算,在进行形变后得到最终结果。

下面视频展示了基于“粒子”方式的波形示例:

海浪的情况部分和波类似,目前主要的成熟方案还是基于预计算的。

1)基于替代纹理(displacement texture)的海浪

例如在Jacobian的替代纹理方案中,采样值大于1代表拉伸、小于1代表挤压,而小于0的值代表海浪局部重叠(折进去)。如果结合数据缓冲区,还能更好的实现海浪基于时间的指数级衰减效果。

2)基于形变数据(deformation data)的海浪

严格上说形变数据和替换纹理没有质的变化,只是形变数据不一定保存成纹理的形式,且有着更丰富的数据维度。

这部分我直接摘一段SIGGRAPH2022《地平线:西之绝境》的分享内容。

We began by doing a Houdini sim of a breaking wave. From that we extracted a cross-section for each frame. The upper image is an example. The cross section line is expressed as a deformation from a flat surface, as shown by the arrows in the lower image. The XYZ offset is converted into RGB, the thin green and purple strip underneath shows the result.

译:起初我们在Houdini(一款3D图形软件)中做海浪的模拟,并从中导出了每一帧的横截面——上图就是一个示例横截面的线条代表了在一个平面的基础上,应用基于下图所示的箭头为方向的形变。XYZ的偏移被转换为RGB值,图中的绿色和紫色的细线代表了这一结果。

We repeat the process for all the frames of the animation. Each frame gave us a horizontal strip of pixels. They’re assembled into a vertical stack to form a single 2D texture for the whole animation, as shown here. A couple of example frames are shown here, with the corresponding row of the deformation texture outlined.

译:我们对(海浪)动画的所有帧重复以上处理,每一帧都为我们提供了一条像素数据。它们被垂直堆叠整合到到一张2D纹理,如图所示包含了整个动画的信息。这里展示了一组示例帧和它们对应的形变数据——纹理中对应被圈出的那一行。

*后面还提到了一些基于这个数据组织方案的具体困难和处理,这里不展开了。这个方案的亮点是以2D纹理的方式,通过切片还原的方式存储了海浪的形变。

The two waves shown here are moving left right towards the shore. The lefthand wave is a younger version with has lower animation parameters, the righthand one is older and starting to break. To create the shape we apply the cross-section deformation along the curve of the wavefront. The deformations take a flat water surface and bend it to match their cross section. The cross sections are shown at a few places, the number is the V coordinate of the deformation texture.

Looking at the righthand one, near the camera at 0.27 the water is just starting to rise, further along at 0.4 it starts to steepen, at 0.5 it’s curling over and turning into foam.

译:这里展示了左右两道朝着岸边推进的波形。左侧的波形更新且有着更低的动画系数,右侧的波形更老并开始破碎了。通过沿着波阵面曲线应用横截面形变数据,我们创建了海浪形体——这些形变作用把海平面弯曲变成了符合截面数据的形状。图中多处展示出了横截面数据,其中的数字表示形变纹理中的V坐标数据(代表在动画序列中的位置)。

以右侧的波浪为例,靠近摄像机在0.27数字的位置,海水即将抬升;更远处0.4数字的位置海浪开始变陡;在0.5数字的位置海浪开始卷曲并变成浪花。

*关于波阵面散布曲线浪花形体细节这里不展开了。

3 水体表面渲染——Water Surface Render

水体渲染的基础还是半透明(或不透明)着色,只是基于设计的视觉模型不同需要考虑的维度不同。

以《刺客信条3》中的“简单”水体着色为例,有如下参数项:

  • 漫反射——Diffuse

  • 高光——Specular

  • 法线贴图——Normal map

  • 反射——Reflection

  • 深度和变色——Depth & tint

  • 折射与次表面散射——Refraction and ‘SSS’

  • 复杂的浪花——Complex Foam

下面通过一组图片展示这些特性逐步叠加上去的效果:

其中水的深浅主要是通过颜色透明度的变化来体现的:

而实时的SSS效果则往往是一种近似方案(trick)。例如在《刺客信条3》中他们的方案是:

To provide the effect the team used a simple SSS test based on viewing position, sun position and surface slope, this would then vary localized ‘shallowness’ or tint/opacity. It is remarkable how effective it is to fake SSS by just making the underside of back lit waves ‘less shallow’ (tint/transparent).

译:为提供这一效果,团队采用了一项简单的基于视点位置、主光源位置和表面斜率的SSS检测,以局部改变水体的“深浅度”或颜色与透明度。通过使波浪的背面“看起来更浅”的这一处理有着显著的效果。

*育碧的这一方案中还引入了一个基于距离的不透明边界,在边界外的水体可以都以不透明方式来渲染,以提升性能。

4 海浪渲染:深度剥离——Depth Peeling

做稍微复杂的半透明渲染都离不开深度剥离之前一篇介绍透明渲染的文章中也简单介绍过)。简单来说就是先基于深度从近到远排序出若干个透明层,再对它们进行从远到近渲染的过程。

下面比对一下深度剥离关闭与开启的效果:

可以看到不采用深度剥离时,无法正确表现浪花的背面及水体中更多的层次。

简单归纳一下水体深度剥离的一些细节,如下:

  • 先进行顺序无关的水体渲染,获得最靠前的水体层的深度。

  • 在得到最大深度层时,从后向前逐层渲染——依据两层之间是否在水体中计算吸收和散射值。

  • (中间层)可以应用水下视觉的后处理效果。

  • 渲染最前层采用传统折射着色(非多层折射的),但有正确的散射值。

*水体深度剥离的特殊之处在于光线可以一段在水体,一段在水体外,相应的计算参数是不同的。

5 水下渲染——Under Water Render

对于观察点在水体中的情况,额外还需要考虑体积渲染+后处理。在水体中看水面,和水面中看水中计算上没有本质区别;有了水面层的渲染结果后,水体内部的体积渲染还需要考虑一些水下的视觉特征:

1)水质特点——水下吸收度和散射度

简单点的水下视觉可以用类似距离雾(Distance Fog)的方式来进行能见度过渡。

如果追求更接近物理和更精确的视觉,一般要充分考虑水质对于不同波长的吸收和散射状态。

要比较精确的做到这一效果在实时渲染领域还是比较困难的,一般都是通过经验公式或对实验结果做LUT(Look Up Table)来实现。

2)太阳光束(God Ray)

关于表现大气中的体积光,之前我有一篇文章介绍过——简单来说就有屏幕空间后处理和体积渲染两种思路。

但是水体由于比较空气来说是更复杂的散射介质,通常就无法通过屏幕空间后处理的方式加上太阳光束了;至于体积渲染的思路,则可以完全沿用实现大气中太阳光束的那些方案。

3)焦散(Caustics)

Games101课程的闫老师很不喜欢焦散这个翻译,因为其实这是一种折射后“重聚焦”的效果。很多时候有些翻译确实有一定偏差(如果听过重轻老师说“碎拍”的翻译应该也有同感)。

下面简单介绍一种提供焦散效果的方式:

  • 首先,在帧缓冲中渲染一张(从水面向水底的)环境纹理,RGB通道存储世界空间的XYZ值,Alpha通道储存深度

  • 光线从水面折射点开始对环境纹理求交点,类似RayMarching思路,原理如图:

  • 基于这一折射后的映射关系得到焦散纹理:

  • 在渲染的场景中应用焦散纹理,就可以得到近似的焦散效果。

*这一方案当然也可以有很多可优化的方向,不过其计算范围始终是纹理坐标范围,必要时以半精度或四分之一精度来运算都能有不错的近似效果。

结语

虽然努力覆盖了很多方面,但其实大家也能发现这种概括既不全面又不详细——确实如此,因为实际上无论是渲染技术还是学术上,想在其中比较困难的例如波浪模拟、水下渲染真实性这些方面有所突破,可能都要付出数年的研究。这也是为何人类社会需要论文的原因,有价值的科研论文才是人类科技研究传递的基础。

由于篇幅原因本文还未涉及动态物体和水体的交互中的一些其它细节。例如人游泳,既然不能做到流体力学计算,那该如何进行近似而有效的模拟——诸如此类其实还会有很多课题(特别基础的喷个形变粒子就糊弄过去的肯定是能实现的,但更复杂的动态要考虑的就多了)。这类一事一议的课题在实时渲染领域还有很多。

反过来说,如果水体只是提供一种氛围,那么不做波浪形体、不做水下效果都是很常见的情况。这也是有些游戏通过卡BUG到了水下之后,发现并没有水的原因。

最后是一些资料链接: