概念页
AC Black Flag 水深遮罩
Black Flag Waterplane
GAT #64:水面平面切开船体是常见伪影。大船靠「看不见船腹」与位移遮罩推水;小船用只写深度的隐形盖板(Depth Mask),让后续水面深度测试失败,船舱保持干燥。
问题
完整流体—刚体交互太贵,水面常是大平面,会穿过船体。大船甲板视角往往看不到船腹;小船敞口则一眼见水。
大船(旁证)
- Bug 录像显示船下水面被「推开」。
- 匿名开发者:浮力球是测入水速度以驱动水花粒子;水面下压靠投影到水上的小位移遮罩;并确认小船用裁剪平面一类做法。
- 文中强调:仅靠浮力球解释不了精确船形「坑」。
小船:Depth Mask
常见凑合:抬高漂浮、加「假船腹」挡板(如 Fallout 4)。Black Flag 小船水位足够高却仍无舱内水面。
观察:船口上方有一层隐形盖板几何。
流程(原文 + Attila 所指 DepthMask):
- 先画地形、角色、船等不透明物;
- 画隐形盖板,但只写入深度缓冲(不贡献颜色);
- 再画水面:盖板已占用的深度使舱内片元深度测试失败 → 看不见舱内水。
sequenceDiagram participant Opaque as 不透明船与场景 participant Lid as 隐形盖板 participant Water as 水面 Opaque->>Lid: 先写入颜色与深度 Lid->>Lid: 仅写深度 Lid->>Water: 舱内深度已占用 Water-->>Water: 舱内片元被深度拒绝
证据(原文)
- 浪高于盖板时漏水可见;
- 舱内仍可能刷泡沫 → 逻辑仍认为有水;
- 关掉盖板那次 draw call,舱内水面出现。
对照与替代(原文 Update/评论)
- Battlefield 2 两栖载具:很早画窗几何作遮罩,再画地形/水;泡沫阶段可能再画一次窗。
- 模板(stencil)门户遮罩:水位较平更稳,大浪对穿时可能挖洞;好处是不改深度。
- Minecraft 1.9、Subnautica SDF 裁剪、仅写深度的透明多边形等社区变体。
适用与代价
| 适用 | 代价 |
|---|---|
| 小船/载具要「干舱」且不做真流体 | 盖板高度限制;大浪溢出 |
| 不想改水面着色器复杂裁剪 | 占用深度,影响依赖深度的后续效果 |
| 与粒子飞溅逻辑解耦 | 视觉无水但逻辑/泡沫仍可能认为有水 |
出处
- Assassin’s Creed: Black Flag – Waterplane (GAT #64)
- simonschreibt.de/gat/black-flag-waterplane
- Simon Schreibt《Game Art Tricks》#64 AC: Black Flag – Waterplane
相关页面
图形学深度缓冲Z-Buffer深度缓冲是几乎所有图形硬件用来解决可见性的算法:为每个像素存一个当前最近图元的深度值,新片元更近才写入颜色和深度。它简单、和图元数量成线性关系、允许大多数图元以任意顺序绘制,但不能直接处理半透明。图形学透明渲染与 Alpha 混合Transparency & Alpha Blending本页讲最简单的"视角相关"透明:半透明物体只衰减其后方物体的颜色。z-buffer 每像素只存一个表面,所以透明物体通常要从后往前用 over 运算符混合;顺序无关透明 (OIT) 方法用多遍渲染、逐像素链表或近似公式避免排序,各有内存、性能或准确性代价。预乘 alpha 让过滤、混合和合成更正确高效。图形学合并阶段与帧缓冲Merging & Framebuffer合并阶段把像素着色算出的片元颜色和缓冲区里已有的颜色结合起来,同时负责深度测试、模板测试和混合。它通常不可编程但高度可配置,也叫 ROP(光栅操作或渲染输出单元)。帧缓冲是系统中所有缓冲区的总称。图形学粒子系统Particle Systems粒子系统是一组按某种算法运动的小物体,用于火、烟、爆炸、水流、星系等,同时负责动画(生成、移动、变化、删除)和渲染。粒子通常渲染成公告板;难点在半透明排序、光照(逐顶点、逐像素低分辨率光照图块)以及接收/投射/自阴影(透射率溅射、傅里叶不透明度贴图、消光体积)(RTR4 13.8 节)。游戏美术Game Art Tricks 案例索引Game Art Tricks Case IndexSimon Schreibt《Game Art Tricks》站有约 90 篇技法观察。本库只收录高价值案例拆解页,不镜像整站;原文一律链到 simonschreibt.de,raw 仅存本批摘要笔记供核对。