✦设计雷达
知识地图
2026-10-01 · 今日最炫

False Earth

WebGPU 程序化星球:草浪、地形与可操控角色同屏,像走进一颗假地球。

False Earth 截图 打开网站 ↗
大白话拆解

它是什么:一颗「假地球」:无尽地表、风里的草浪、可操控角色,三种相机模式来回切。

好在哪:一眼就被「能走进去的星球」抓住;草与地形在 WebGPU 上算出来,比静态酷站更像真正的世界。

怎么做到的:

  1. 主渲染走 Three.js r182 的 WebGPURenderer;场景挂在 React 19 + R3F Canvas 上。
  2. StorageBuffer + compute/TSL 在 GPU 上长出地形与草;indirect / multiDraw 撑起草海规模。
  3. BloomNode 晕亮部,SMAANode 收锯齿;cameraMode 在 Follow / FPV / Detached 间切换。
完整技术拆解

今日拆解 · False Earth

  • Live: https://false-earth.mingjyunhung.com/
  • Author: Ming Jyun Hung (momentchan)
  • Source / 教程: https://tympanus.net/codrops/2026/04/21/false-earth-from-webgl-limits-to-a-webgpu-driven-world/
  • Bundle: Vite 产物 ./assets/index-scZJOe0j.js(HTML:type="module" + /assets/*.css)
  • 证据:对本页 HTML + 主 bundle(含 const FA="182"、WebGPURenderer、three.js r${FA} webgpu、MeshStandardNodeMaterial、StorageBuffer、computeAsync、BloomNode、SMAANode、@react-three/fiber、hi.version="19.2.7"、tfe.version="9.6.1"、zustand、cameraMode / FPV / Follow / Detached、drawIndirect / multiDraw、gsap.registerPlugin)的抓取核对;Codrops 教程与仓库 package.json(three: ^0.182.0)作对照

为何选它

8 条里它视觉冲击最强:一片「像地球又不像地球」的无尽地表,草浪在风里动,角色可以走、相机能切跟随 / 第一人称 / 分离——不是静态酷站,而是可走进去的 WebGPU 世界。Codrops 2026-04 已把「从 WebGL 极限跳到 WebGPU」写透,比聪明但平面的作品更配今日最炫。

实际在源码里找到的技术栈

Three.js r182生产 bundle:const FA="182";data-engine 写成 `three.js r${FA} / three.js r${FA} webgpu`
WebGPURenderer同 bundle 出现 32 次 WebGPURenderer
MeshStandardNodeMaterialbundle 字面量 MeshStandardNodeMaterial(含 isMeshStandardNodeMaterial)
StorageBufferbundle:StorageBuffer 32 次——结构化数据留在 GPU 上读写
compute / computeAsyncbundle:compute( 36 次;computeAsync 4 次——计算着色器路径
TSL 节点图(Fn)bundle:Fn( 25 次;Codrops 教程对照:颜色/深度等走 TSL 节点链
drawIndirect / multiDrawbundle:drawIndirect、multiDraw——间接绘制大批量几何(教程强调草叶规模)
BloomNode / SMAANodebundle:BloomNode、SMAANode——后期 bloom + SMAA
React 19.2.7bundle:hi.version="19.2.7"(React)
@react-three/fiber 9.6.1bundle:rendererPackageName:"@react-three/fiber";tfe.version="9.6.1";大量 Canvas
zustandbundle:zustand 传统 API 警告字符串 + useStore 路径
相机模式 Follow / FPV / Detachedbundle:cameraMode、Follow、FPV、Detached 字面量同在
GSAPbundle:gsap.registerPlugin 路径存在
ViteHTML:./assets/index-*.js 模块脚本 + 配套 CSS——典型 Vite 产物
未使用 / 未证实未在 bundle 字面量找到 明确的 Leva / useControls 面板类名(仓库依赖有 leva,线上 minify 后未确认 UI 类名);未找到 以 WebGLRenderer 作为主渲染器字面量;草叶 Voronoi / VAT roses 的具体算法以 Codrops 教程为准(教程细节,非全部在 bundle 里以可读公式出现)

核心效果怎么工作(源码 + 标明推测)

1. WebGPU + Three.js r182 主路径(确认)

页面用 WebGPURenderer;data-engine 写成 three.js r182 webgpu。主路径不是经典 WebGLRenderer。

2. R3F + React 19 挂场景(确认)

@react-three/fiber 9.6.1 + React 19.2.7:用 Canvas 把 Three 场景嵌进 React 树;游戏状态有 zustand 痕迹。

3. StorageBuffer + compute:大地与草在 GPU 上长出来(确认类名;规模 = 教程)

StorageBuffer + compute / computeAsync 同在。Codrops 教程写明:草叶位置、风场、地形采样等走 WebGPU compute + TSL,避免 WebGL 时代的「像素打包」workaround。草叶数量与风场公式以教程为准。

4. 间接绘制撑起「一片草海」(确认符号;语义 = 教程)

drawIndirect / multiDraw 出现。教程解释:用间接绘制缓冲区告诉 GPU 画多少、从哪画——才能在可交互帧率下铺开大量草叶。

5. 后期:BloomNode + SMAANode(确认)

BloomNode 负责亮部光晕;SMAANode 做抗锯齿,远景草与地平线才不那么毛。

6. 三种相机:Follow / FPV / Detached(确认)

cameraMode 与三种模式名同在——玩家可以换「跟拍 / 第一人称 / 分离」看这颗假地球。

7. 伪代码(忠实于 bundle 符号 + 教程结构)

boot:
  React 19 + R3F Canvas
  renderer = WebGPURenderer          # Three.js r182
  store = zustand (cameraMode, …)

world (GPU):
  StorageBuffer + compute/TSL Fn     # 地形 / 草 / 风
  multiDraw / drawIndirect            # 大批量草叶
  MeshStandardNodeMaterial            # 表面标准光照感

post:
  BloomNode
  SMAANode

play:
  cameraMode ∈ {Follow, FPV, Detached}
  GSAP 辅助过渡(确认有 registerPlugin)

对照阅读

小白课

零基础也能看懂。先认识这件作品用到的技术,再学一个知识点。

1技术栈小白版

只列拆解里在源码中确认过的技术。点开看它在这件作品里做了什么。

Three.js r182网页里的「3D 工具箱」:摆物体、管相机、跟显卡说话。

在这件作品里整颗假地球的场景、相机和渲染管线都跑在 Three.js r182 上。

怎么认出来浏览器里能走路、切视角的实时 3D,而不是一段预渲染视频。

WebGPURenderer新一代「显卡直通车」:更适合在 GPU 上算草、风和地形。

在这件作品里主渲染器是 WebGPURenderer,所以大片草海还能保持可玩帧率。

怎么认出来用较新的 Chrome / Edge 打开更稳;没有适配时页面可能提示无 GPU。

StorageBuffer一块放在显卡里的「共享记事本」,计算和绘制都能直接读写。

在这件作品里地形 / 草等相关数据走 StorageBuffer,不必每帧从 CPU 传一整本地形。

怎么认出来世界在你走动时连续展开,而不是一卡一卡加载贴图块(观感层面)。

compute / computeAsync让显卡「先算一笔账」再画:风、草位置这类事适合并行算。

在这件作品里bundle 里有 compute / computeAsync;草与地形变化主要在 GPU 侧推进。

怎么认出来草浪像被风推动,而不是整张草地贴图在晃。

BloomNode / SMAANodeBloom 把够亮的部分晕成光晕;SMAA 给边缘去锯齿。

在这件作品里后期用 BloomNode 提空气感,SMAANode 收远景毛刺。

怎么认出来天际与亮部有一层柔光,草叶边缘相对干净。

cameraMode Follow / FPV / Detached三种「看世界的姿势」:跟拍、第一人称、把相机拆开旁观。

在这件作品里False Earth 用 cameraMode 在 Follow / FPV / Detached 间切换。

怎么认出来同一片地表,换视角会像换了一部电影镜头。

2今日知识点

设计理论 · 第 3 课

格式塔(下):闭合、连续、图形与背景

昨天讲了接近与相似:人会把「近的、像的」收成一组。今天补另外三条常用组织律:闭合(脑会补缺口)、连续(眼会顺着线/路径走)、图形与背景(先分出「主体」和「衬底」)。

False Earth 几乎没有画死一个完整「星球模型」。地表、草、天空是碎成许多 GPU 元素的——但你仍然读成「一片完整的地」。这就是闭合:缺口与碎片会被脑补成完形。

连续在这里也很凶:你一往前走,地平线与草浪顺着运动方向延伸,眼会跟着路径走,而不是把每一根草当成独立噪音。相机从 Follow 切到 FPV,连续感还会从「旁观一条路」变成「自己踩在路上」。

图形与背景:角色 / 可走区域是图形,无尽地表与天空是背景。设计上若图形与背景对比不够(颜色、运动、清晰度都糊在一起),人就会「找不到我该看哪」。False Earth 用可操控角色 + 草浪尺度差,把图形从背景里抠出来。

今日口诀:补全、顺着看、分出前后。做界面时问:缺口要不要让人脑补?视线有没有一条连续路径?谁是图形、谁是背景?

它从哪里来

格式塔组织律在 20 世纪初由韦特海默等人系统化;闭合、连续、图形—背景与接近、相似常一起出现在设计教材里。

平面设计里:残缺的 logo 仍能被认出,靠的是闭合;杂志排版用对齐与引导线制造连续;海报先决定「谁是主体」。

到了实时 3D / 游戏,这三条仍然管用:关卡设计师用路径连续引导玩家;美术用明暗和景深拉开图形与背景;程序化世界更依赖闭合——碎片几何仍要读成「一整片地」。

False Earth 是 2026 的 WebGPU 作品,但你秒懂「这是地表、那是天空、我可以往前走」,靠的仍是这些更早被写清的视知觉规律。

经典参考

怎么看 / 怎么练 · 约 8 分钟
  1. 打开 False Earth,先静止看 3 秒:你先分出的「图形」是角色、地平线,还是草的纹理?写下一句。
  2. 往前走几步:视线是顺着路径连续往前,还是在草叶间跳跃?用「连续」评价一句。
  3. 想象把角色衣服做成和草地几乎同色、同亮度——图形还在吗?用「图形与背景」写一条失败原因。
  4. 看任意一个 App 启动页:有没有用闭合(残缺图标仍可读)或连续(引导线/步骤条)?各举一例或写「没有」。

小词典

闭合(Closure)
图形有缺口时,大脑仍倾向把它补成完整形状。
连续(Continuity)
眼睛喜欢顺着平滑的线或路径看,而不是任意折来折去。
图形与背景(Figure–Ground)
感知时先分出「主体(图形)」和「衬底(背景)」。
WebGPU
浏览器里较新的图形接口,更适合在显卡上做大规模计算再绘制。
程序化(Procedural)
不靠一张张手绘完整地图,而用规则/算法在运行时生成内容。

3知识地图进度

设计理论第 3 课 / 共 14 课
这条线已学 3 课全部已学 10 / 89
下一课建议理论 第 4 课 · 视觉重量与平衡 打开知识地图 ›
当天另外 7 个
网站
/zeroz
大塚制药 /zeroz 品牌站:章节式 3DCG + WebGL 沉浸叙事,奖项向高交互品牌页。
小游戏
AHa-3D Real2Sim
室内 Real2Sim 三维重建演示,挂着 GPT-6 Astra 工具链叙事——AI 造 3D 场景热潮样本。
小游戏
Ball of Glass
玻璃球被物理吸引力拽着滚:R3F + Rapier,透明折射和碰撞手感都很黏。
网站
Colonia Zacamil
今日 Awwwards SOTD:可逛的 3D 街区壁画地图,日夜切换,社区故事长进 WebGL 里。
小游戏
GPU Physics Bench
成千上万实例在 WebGPU compute 里碰撞翻滚:物理一步不回 CPU,像开了挂的沙盘。
小游戏
Top Tennis
浏览器里直接打的 3D 网球:回合节奏清楚,是「打开就能玩」的 web-game。
小游戏
WebGPU Galaxy
最多约 75 万粒子的螺旋星系:拖拽施力、实时调参,GPU 上转的宇宙玩具。

设计雷达 · 每天 8 个值得看的网站、App UI 和网页小游戏