Coding a Brick Tower [video]
摘要
作者使用数学SDF在Shader Toy中创建了一个由砖块和砂浆组成的塔,实现了圆周和垂直重复以及随机化。
暂无内容
查看缓存全文
缓存时间: 2026/06/20 23:19
TL;DR: 作者在 Shader Toy 中用数学 SDF 构建一个由砖块和砂浆组成的塔,实现了圆周和垂直方向的重复,并添加随机化使外观更自然。
## 项目起因
作者收到一封邮件,请求帮助创建一个由砖块堆叠而成的塔的 3D 模型——不用 Blender 或多边形,只用数学。于是作者决定录制整个探索过程,从基本立方体开始,逐步实现圆周重复、垂直重复、随机化,最后处理砂浆与砖块的融合。
## 基础立方体 SDF
在 Shader Toy 中,已有渲染球体的代码(基于有符号距离场)。作者重新编写了一个立方体的 SDF 函数:对于空间点 `P` 和立方体大小 `B`(三维向量),先对各坐标取绝对值再减去 `B`,然后取最大值。若最大值为负,说明点在立方体内部,直接返回该值(即到最近面的距离);否则通过钳制得到外部点到立方体的距离。验证时设置尺寸为 0.5 米,后调整为砖块尺寸:高 10 cm、宽 20 cm、长 30 cm。
## 圆周方向重复(环形域)
使用柱坐标中的角度将圆分成 12 个扇区(每个扇区角度 `2π/12`)。对空间任意点 `P`,计算其所在扇区 ID(角度整除扇区大小),然后将该点旋转回第一个扇区(通过旋转矩阵)。这样只需在第一个扇区定义一块砖,其他扇区自动复制。作者选择 12 个扇区,效果良好;也可改为 16 或 11 个。
## 垂直方向重复(层)
类似地,用垂直坐标 `y` 除以层间距(设为 30 cm),得层 ID。将任意垂直位置的平移到第一层(上下移动层间距乘以层 ID)。同时加入限制,使层 ID 范围在 -10 到 3 之间,以便观察内部。砖块之间加圆角 5 cm,并适当增大间距。
## 随机化
为打破整齐堆叠,基于层 ID 生成随机旋转角度,使每层砖块错位。进一步对每个砖块(由扇区 ID 和层 ID 组合)生成随机哈希 `R1`,用于改变砖块突出砂浆的距离(0~10 cm);另一个随机哈希 `R2` 改变砖块宽度(在 30 cm 基础上浮动 ±5 cm)。注意确保只向外突出,不向内凹陷。
## 添加砂浆(管状几何体)
砂浆设计为空心圆柱(管道)。作者临时创建二维盒子 SDF(类似三维但仅两坐标),再用柱坐标将三维点转换成二维:取 `x` 和 `z` 长度作为径向距离,`y` 保持垂直。偏移径向距离至管道半径(1.5 米),调用二维盒子 SDF 得到管道距离。管道壁厚设为 10 cm,高度适当调整(底部下移 1 米,总高约 2.5 米)。注意管道评估需使用未扭曲的原始点坐标 `OP`,否则会受旋转和平移影响。
## 融合砖块与砂浆
最终场景几何体的有符号距离是砖块距离和管道距离的**最小值**(即最近表面)。但视频结尾处作者注意到一个伪影(砖块 ID 不连续),推测与取整函数有关,暂时忽略。核心问题(砖块与砂浆的融合)尚未完全解决,但思路已清晰:利用最小化操作将两个 SDF 组合。
## Source
[Video: Coding a Brick Tower](https://www.youtube.com/watch?v=DAMiS2PGTEE)
相似文章
BrickAnything:基于几何条件的可构建砖块生成与结构感知标记化
BrickAnything是一种自回归框架,通过点云和结构感知树标记化,从多种3D表示中生成物理可构建的砖块结构,确保几何保真度和结构稳定性。
@Gorden_Sun: 再开源一个技能:一键生成可视化数学讲解视频 提示词: 安装这个Skill:https://github.com/GordenSun/mathVideoMaker… 然后使用这个Skill给小学生讲解:给小学生讲解□+28=□x5 下方2个…
Gorden_Sun 开源了 mathVideoMaker 技能,可在 Cursor Agent 中一键生成可视化数学讲解视频和交互式网页,支持小学生数学题讲解等场景,并包含自动检查机制以确保质量。
@Saccc_c: 发现一个动画生成神器,直接把自然语言转化成酷炫Lottie动效 下面视频演示的效果都可以一次直出,很牛逼 (提示词指南放评论区了,可以直接喂给AI帮你写好高质量提示词) 把它和HyperFrames这类视频制作工具结合,又会有不少玩法 终…
一个开源工具,利用AI代理(如Claude Code/Codex)将自然语言直接转化为可生产的Lottie动效,支持一键安装和提示词指南。
@MinLiBuilds: workflow,神了。 打开 Claude Code,输入以下 prompt,一键得到小游戏: 做个徒手御剑的网页:摄像头识别手势,指挥成群发光飞剑跟手飞、变阵(花/盾/龙/巨剑大阵),赛博修仙画风;手势识别用现成开源库别造轮子,其余你…
展示如何利用Claude Code和workflow,通过一条prompt自动生成一个使用摄像头手势识别的赛博修仙风格网页小游戏。
@MainCaseZ: https://x.com/MainCaseZ/status/2055633839058555266
一位装修从业者分享自己如何利用蚂蚁百灵Ring-2.6-1T等AI工具,将装修经验转化为像素风格经营游戏,强调AI帮助他将模糊想法拆解成可执行的结构,而非直接完成游戏。