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

Infinite Liquid Glass

可拖拽的果冻玻璃卡片墙:视频在玻璃里折射,整面网格像布一样晃,WebGPU 一眼炫。

Infinite Liquid Glass 截图 打开网站 ↗
大白话拆解

它是什么:一面可以拖的「果冻玻璃」卡片墙:每张卡片像厚玻璃,视频在里面弯折、散出彩虹边,整面网格还会像布一样晃。

好在哪:它一眼就炫——没有场景灯光,却全是透亮和反光;拖一下有黏滞回弹,比静态酷站更像玩具。

怎么做到的:

  1. 玻璃其实是一张平片:用数学算出「到圆角边缘的距离」,再假装出厚度、折射和边缘高光。
  2. 卡片铺在一个大球面上并首尾相接,所以怎么拖都像没有尽头。
  3. 后来又在 GPU 上跑了一层布料模拟,网格会滞后、起涟漪,字也跟着玻璃一起扭。
完整技术拆解

今日拆解 · Infinite Liquid Glass

为何选它

8 条里它视觉冲击最强:一整面「果冻玻璃」视频卡片,拖一下会像布料一样晃、折射、色散,却没有任何场景灯光。Codrops 2026-09-08 刚拆完,社交向热度也在;比精美落地页更值得当今日最炫。

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

Three.js r185生产 chunk:"REVISION",0,"185";data-engine 写入 three.js r${…REVISION}
WebGPURenderer同 chunk 导出 / 使用 WebGPURenderer;教程与 meta description 均写 WebGPU
TSL(Three.js Shading Language)chunk 含 MeshBasicNodeMaterial、NodeMaterial、TSL 节点图符号;教程全文用 TSL 写 SDF 玻璃
@react-three/fiberchunk 含 Symbol.for("@react-three/fiber.fromRef")、pmnd.rs R3F docs 链接。具体 semver 未在 bundle 字面量找到 → 教程写 R3F v10,版本号标「推测」
@pmndrs/glyphchunk:createBackend({integration:"@pmndrs/glyph/three"});MSDF 相关符号密集
Next.js 16.3.0HTML 大量 /_next/static/immutable/…;chunk:window.next={version:"16.3.0",appDir:!0}
Motion(手势 / spring)chunk 含 motionValue、MotionConfigContext、Mini animate()。未找到明确 motion@x.y.z 字面量 → 库确认,版本推测
GPU cloth / XPBD 风格约束(TSL compute)chunk 含 viscosity、bending、anchorDamping、.compute( 与 WGSL compute 路径;教程写明 XPBD cloth solver in TSL compute passes
未使用 / 未证实未找到 经典 MeshPhysicalMaterial.transmission 主路径(教程明确改用假玻璃 SDF);未找到 Three.js WebGLRenderer 作为主渲染器字面量

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

1. WebGPU + TSL 假玻璃(确认)

卡片是细分平面,不是厚玻璃网格。用圆角矩形 SDF 算到边缘的距离,再做成高度/法线,在 MeshBasicNodeMaterial 的 colorNode 里做折射采样、Fresnel 环境反射和边缘 rim。场景里没有灯——「亮」全是假出来的。

2. 视频当折射内容(确认)

折射采样的是卡片自己的视频纹理(教程:HLS 流作纹理)。多 tap、不同 IOR → 色边色散。TSL 里用 JS for 展开 tap 次数。

3. 「无限」网格其实在球面上(确认 · 教程 + 结构)

平面坐标 wrap 后映射到大球表面,中间正对你、边缘侧倾缩小;拖出边界的卡片会从另一边接回来。推测:实例化或对象池复用卡片 mesh。

4. 拖拽弹簧(确认库 · 细节推测)

Motion 的 motionValue / pan 手势在 chunk 中出现;教程写 position/velocity 存在 React 外,R3F 帧循环直读、拖拽时零 re-render。

5. 真的「液」——GPU 布料(确认)

教程更新:XPBD cloth,TSL compute。Bundle 里有 viscosity、bending、anchorDamping 与 compute pass。卡片坐在布料补丁上,拖网格会滞后、起涟漪再回弹。文字后来改用 @pmndrs/glyph MSDF,跟着玻璃变形(确认 integration 字符串)。

6. 伪代码(忠实于教程 + bundle 符号)

boot:
  renderer = new WebGPURenderer(...)          # Three r185
  // R3F Canvas on WebGPU
  material = MeshBasicNodeMaterial({ colorNode: fakeGlassTSL(...) })
  labels = pmndrs/glyph MSDF on cards

fakeGlassTSL(uv):
  d = roundedBoxSDF(uv)
  height = bevelHeight(d)
  normal = finiteDifference(height)
  color = chromaticRefract(videoTex, normal, ior, dispersionTaps)
  color = mix(color, envSample(reflect), fresnel) + rim(d)
  return color

cloth (each frame, GPU):
  XPBD / constraint step: distance + bending + anchors + viscosity
  write card positions on sphere patch
  drag force from Motion pan velocity

drag:
  Motion pan → motionValue(x,y) → frame loop reads (no React re-render)

如果我来重做(步骤清单)

  1. Next.js + R3F,主路径只用 three/webgpu + TSL。
  2. 先做平面卡片 + SDF 假玻璃 + 视频折射(单 pass,不开灯)。
  3. wrap 网格映射到球面;Motion pan 驱动偏移。
  4. 再加 TSL compute 布料(粘度、弯曲、锚点)。
  5. 标签用 @pmndrs/glyph MSDF,避免 DOM 跟不上布料形变。
  6. 用 ?debug 暴露白边、IOR、粘度等参数。
小白课

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

1技术栈小白版

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

Three.js r185网页里的「3D 工具箱」:帮你摆物体、管相机、跟显卡说话,不用从零写底层图形接口。

在这件作品里整面玻璃卡片墙、球面布局和后来的布料变形,都跑在 Three.js r185 这条管线上。

怎么认出来浏览器里能实时转、拖、晃的 3D,而不是一段固定视频。

WebGPURenderer新一代「显卡直通车」:比老的 WebGL 更接近现代显卡的工作方式,算布料、算玻璃都更有余力。

在这件作品里主渲染器走 WebGPURenderer,所以上百张会晃的玻璃卡片还能保持流畅。

怎么认出来用较新的 Chrome / Edge 打开更稳;地址栏或控制台有时能看到 WebGPU 相关提示。

TSL(Three.js Shading Language)用搭积木的方式写「每个像素怎么上色」的说明书,而不是手写一大坨底层着色器字符串。

在这件作品里圆角玻璃的厚度、折射、彩虹边,都是 TSL 节点算出来的。

怎么认出来玻璃边缘有色散(像棱镜那样的细彩虹),中间视频会弯折。

MeshBasicNodeMaterial一种「自己决定颜色、不靠场景灯光」的材料卡片。

在这件作品里假玻璃的最终颜色写在它的 colorNode 里;场景里可以一盏灯都没有,仍然又亮又透。

怎么认出来画面很亮、很「玻璃」,但你找不着一盏真正的灯具模型。

@react-three/fiber把 React 的组件写法接到 Three.js 场景上的「翻译官」。

在这件作品里页面结构用 React / R3F 来组织画布与卡片;拖拽数值则放在 React 外面以免拖一下就整页重绘。

怎么认出来肉眼难辨;它是组织代码的方式,不单独长成一种特效。

@pmndrs/glyph把字体做成「在 3D 里也能扭、还能保持清晰」的字模工具。

在这件作品里卡片上的标题说明用 MSDF 字画在场景里,这样布料一晃,字也跟着玻璃一起变形。

怎么认出来字不是网页普通 HTML 叠上去的硬字幕,而会随玻璃一起扭动、折射。

Next.js 16.3.0做网站的「装配车间」:负责把页面、脚本、资源打成浏览器能直接打开的包。

在这件作品里整站以 Next App Router 形式发布,地址栏资源路径带 `/_next/static/…`。

怎么认出来打开开发者工具的网络面板,会看到许多 `/_next/` 开头的文件。

GPU cloth / XPBD(粘度·弯曲·锚点)把网格想成一张有弹性的果冻布:被扯开后会慢慢荡回去,而不是瞬间复位。

在这件作品里每张卡片坐在布料补丁上;GPU 上算距离、弯曲、锚点和粘度,所以拖拽有黏滞和涟漪。

怎么认出来松开鼠标后,墙面还会晃几下再停住。

2今日知识点

设计理论 · 第 1 课

设计和艺术的区别:设计要解决问题

艺术常常先问:「我想表达什么?」设计常常先问:「谁在用?卡在哪?怎样更顺?」两者都可以很美,但设计的美是为了帮人把事做成。

Infinite Liquid Glass 看起来像纯炫技,它其实在解决一个很具体的问题:工作室有很多带视频的项目,要让访客愿意逛、记得住、还想拖一下。普通缩略图网格能「展示」,却很难「被拿起来玩」。

所以作者选了「果冻玻璃卡片 + 无限拖拽」:玻璃感让视频更贵、更好看;拖拽和回弹让浏览变成身体记忆。美不是目的本身,是解决方案的一部分。

一句话分辨:如果去掉交互与信息结构,只剩氛围——更偏艺术装置;如果氛围是在服务「找到项目 / 愿意停留 / 理解工作室」——那就是设计。

对你有用的判断题:看一个酷站时先问「它在帮谁解决什么?」再问「特效有没有让这件事更容易」。答得清,你就开始用设计师的眼睛看了。

它从哪里来

现代意义上的「设计」(design)在工业革命后越来越强调功能与批量生产中的问题解决,而不只是装饰。

20 世纪的设计教育(例如包豪斯相关传统)反复强调:形式要追随用途,美观与好用不该拆开。

数字产品时代,这个区分更明显:界面可以像艺术品一样精致,但若用户完不成任务,仍会被看作设计失败。

创意前端圈里的「demo」常常骑在艺术与设计之间——今天的案例恰好展示了:最炫的技术,也可以是在回答一个展示与浏览的问题。

经典参考

  • Don Norman《设计心理学》(The Design of Everyday Things)入门必读:用门把手、炉灶等例子讲「好用」为什么比「好看」更先要被想清楚。
  • Codrops 原文 · Infinite Liquid Glass作者自己说明:这是工作室项目网格的实验,技术选择都服务于「可拖、可看视频、还像玻璃」。
  • 包豪斯(Bauhaus)概述 · 百科或博物馆介绍帮助建立「现代设计教育从哪来」的大背景,不必一次读完。
怎么看 / 怎么练 · 约 8 分钟
  1. 打开 Infinite Liquid Glass,拖两下。用一句话写下:它在帮「谁」做「什么事」?(例如:帮访客快速感受工作室的项目质感。)
  2. 再打开任意一个只有静态大图的作品集站,对比:哪一个更容易让你停留超过 30 秒?你的身体(拖、滑)有没有被邀请参与?
  3. 最后问自己:如果把玻璃特效全关掉、只留普通方格缩略图,这个站要解决的问题还成立吗?成立多少——这就是「设计还是纯炫」的刻度。

小词典

设计
为特定的人解决特定问题,并让解决方案好用、好懂;美观通常是手段之一。
艺术
更自由地表达感受、观点或形式探索;不一定要帮别人完成任务。
用例 / 使用情境
「谁在什么场合要完成什么」——设计决策的出发点。
示能(affordances)
物品看起来就提示你能怎么用;比如卡片墙「看起来就能拖」。

3知识地图进度

设计理论第 1 课 / 共 14 课
这条线已学 3 课全部已学 10 / 89
下一课建议理论 第 2 课 · 格式塔(上):接近与相似 打开知识地图 ›
当天另外 7 个
小游戏
Balloon Text Simulation
可抓可拽的气球字母:GPU 布料求解让每个笔画像充气橡胶,一扯就变形。
小游戏
Desert Explorer
全着色器生成的沙丘世界:第三人称行走 + 沙地法术,Opus 系作品在社区刷屏。
小游戏
Fractr
WebGPU 分形飞行器:Mandelbulb 等结构里 6DOF 乱飞,像钻进数学宇宙。
网站
Illoca
给建筑师的 AI 原生 3D 工作台:从想法滚到可编辑的 2D/3D,交互块很会说话。
网站
Jesper Landberg
今日 Awwwards SOTD:独立设计工程师作品集,Three.js + GSAP 把个人气质做成可逛的舞台。
网站
Still Garden
水墨感生成花园:从阿基拉到墨色,WebGPU 程序化长出一座会呼吸的园子。
小游戏
Wind Waker JS
浏览器里开船逛《风之杖》大海:WebGPU + TSL 重做海面,社交向怀旧神作。

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