TT Lab
博客

한국어 English 日本語 中文

开始
博客

博客

万神殿穹顶是如何支撑近两千年的:用 Blender 制作的解说视频

状态:草稿 (2026-10-31)。 建筑物的数据是通过查阅下方“出处”中的资料确认的,资料之间存在差异的地方则记录为范围。视频和图表中的 3D 模型为简化模型,模型计算出的数值已单独标注为“模型计算”(并非实际建筑物的测量值)。 系列:“通过 3D 看建筑结构”第 1 篇。

目录

罗马万神殿是至今仍保留着完整屋顶的古代建筑。其穹顶内部直径约 43 米,且为全无钢筋的混凝土结构。在无钢筋混凝土穹顶中,它至今仍被认为是世界最大的(Masi 等,2018)。本文是由“3D 图形 + 简短解说”形式的视频制作成果,旨在探讨该穹顶不会倒塌的原因。

视频

根据网站的视频规则(无声音,每段 30 秒以内),将四个章节分别制作成视频片段。台词为屏幕下方的字幕。

视频:第 1 章 问题与背景:环顾外部,通过眼洞俯视内部
视频:第 2 章 四个减重设计:厚度、骨料、格子天花板、眼洞
视频:第 3 章 受力流向:纵向裂缝、拱券、压缩环、阶梯式圆环
视频:第 4 章 总结:减轻重量,剩余力量转化为压力

1. 这是一座什么样的建筑

项目 数值 出处
建造时期 哈德良皇帝时期(在位 117–138 年)。一般认为在公元 118 年至 128 年左右,或更晚 Masi 等 2018, Plunkett 2016
穹顶内部直径 约 43.3 米。根据测量为 43.3–44.08 米 Masi 等 2018(引用 de Fine Licht 1968), Moore 2002, Plunkett 2016
高度 几乎等于内部直径。比例上,直径 43.3 米的球体正好可以内切并接触地面 Masi 等 2018, Moore 2002
钢筋 无。未包含钢铁或其他加固材料 Moore 2002, Masi 等 2018
圆柱墙厚度 约 6 米(柱子部分约 20 英尺) Moore 2002
穹顶厚度 底部约 5.9 米 → 顶部约 1.5 米。其他资料整理为底部 4 米 → 眼洞处 1 米 Masi 等 2018, Plunkett 2016
眼洞直径 约 9 米(约 30 英尺)。也有资料记录为 27 英尺(约 8.2 米) Moore 2002, PBS Building Big
格子天花板 5 层,每层 28 格,共计 140 格 Moore 2002, Masi 等 2018
阶梯式圆环 穹顶底部外部有 7 层 Moore 2002

它并不是一个精确的球形。根据精密测量,穹顶和圆柱体与完美的半球形和圆柱体略有偏差(Plunkett 2016)。视频和图表以直径 43.3 米的球体为基准进行了简化。

2. 混凝土抗压不抗拉

石头和混凝土能够很好地承受下压的力(压力),但对于拉扯的力(拉力)则很容易开裂。根据 Masi 等人(2018)在穹顶分析中使用的数值,混凝土抗压强度约为 5 MPa,而穹顶混凝土的抗拉强度设定为 0.08 MPa。两者相差 60 倍以上(这是从实验文献中选取的 分析用假设值)。

因此,万神殿的设计可以从两个方向来解读。一个是 直接减轻重量,另一个是 使剩余的力量转化为向下的压力。

3. 四个减重设计

판테온 원형당 단면(단순화 모형)과 콘크리트 밀도 안쪽 지름 약 43.3 m 높이도 거의 같다(공이 바닥에 닿는다) 원통 벽 약 6 m 계단식 고리 7단 꼭대기 두께 약 1.5 m 오큘러스 지름 약 8에서 9 m 돔 아래쪽 약 6 m 위 1,350 가운데 1,500 아래 1,600 원통 벽 1,750 기초 2,000 밀도 kg/m³: Mark & Hutchinson 1986 의 값(Masi 외 2018 표 1). 구역 경계 높이와 기초 크기는 그림을 위한 개략값.
图表:万神殿圆形大厅剖面图(简化模型)与各区域混凝土密度
  1. 厚度。 穹顶底部较厚,越往上越薄。从底部的约 5.9 米到顶部的约 1.5 米(Masi 等 2018)。
  2. 骨料。 罗马混凝土是在使用火山灰(Pozzolana)的砂浆中混合碎石(骨料)制成的(Masi 等 2018)。基础使用了较重的凝灰岩(Travertine),而穹顶最高处则使用了较轻的凝灰岩(Tuff)和浮石(Pumice)(Moore 2002)。分析论文中使用的各区域密度分别为:基础 2,000、圆柱墙 1,750、穹顶下部 1,600、中部 1,500、顶部 1,350 kg/m³(Masi 等 2018 表 1,明确表示采用了 Mark & Hutchinson 1986 的数值)。不过,密度在哪个高度发生变化以及使用了几种材料,目前尚未最终确定(Plunkett 2016)。
  3. 格子天花板。 穹顶内部被挖空为 5 层 × 28 格。这既是装饰,也是减轻重量的结构(Moore 2002, Masi 等 2018)。
  4. 眼洞。 顶部中心留出了直径约 9 米的空洞。它既是采光的窗户,也是消除了穹顶最高处重量的位置。

越往上越轻的原因在于,越是高处的重量,越会增大穹顶底部向外推的力(推力)。较轻的顶部混凝土减少了支撑墙所承受的推力,使穹顶更加稳定(Plunkett 2016)。

模型计算。 在视频的简化模型中,我们将各项设计逐一恢复,并比较了“穹顶起始高度以上”的质量(计算脚本详见下文的“如何制作”)。

恢复的设计 模型穹顶质量
(保持模型原样) 基准
将骨料一路延伸至顶部,保持与底部相同的 1,600 kg/m³ +2.7%
如果填满格子天花板 +6.7%
如果用相同厚度封住眼洞 +0.5%
如果将台阶上方外表皮一直延伸至顶部,保持 5.9 米厚度 体积 +34%

由于此表会根据模型区域边界和格子深度的设定而产生巨大变化,因此请仅将其作为规模的参考。这并非实际建筑物的质量比较。就质量而言,“厚度”影响最大,眼洞影响较小,但眼洞和顶部骨料位于 最高处,因此其减少推力的效果大于质量比例。

4. 受力流向:产生裂缝的穹顶如何支撑

균열 전과 뒤: 돔이 버티는 방식 균열 전(이론): 고른 두께의 반구 위쪽: 둘레 방향도 누름(압축) 아래쪽(붉은 띠): 둘레가 벌어지는 당김 → 세로 균열 경계는 약 52° 높이(이론), 실제 균열은 약 54°–57° 까지 균열 뒤: 위에서 본 돔 점선 = 세로 균열, 화살표 = 아치가 미는 힘 가운데 고리 = 아치들이 맞대는 압축 고리(오큘러스 둘레)
图表:出现裂缝前,底部在周向受到拉伸;出现裂缝后,多道拱券依靠眼洞压缩环支撑

纵向裂缝。 厚度均匀的半球形穹顶由于自身重量,底部周边会倾向于向外扩张(周向拉伸)。理论上其分界线约为 52° 高度(Masi 等 2018 引用 Flügge)。万神殿穹顶内部存在从下向上延伸的纵向裂缝,在 2030 年代的调查中绘制出了 14 条。裂缝停止于约 54° 高度(Mark & Hutchinson 1986, Moore 2002 的整理)至约 57° 高度(Masi 等 2018)之间。由于顶部在周向也处于受压区域,因此裂缝无法继续扩展。

多道拱券。 出现裂缝的穹顶不再是一个整体外壳,而是像 多道楔形拱券一样工作,从圆柱墙上方靠向顶部。拱券依靠下压的力站立。Mark & Hutchinson(1986)持这一观点,而 Masi 等人(2018)的三维分析也证实了出现裂缝的穹顶正是这样运作的。Masi 等人认为裂缝的主要原因是早期混凝土的收缩和自重。

眼洞压缩环。 拱券相互抵触的位置是眼洞的周边。由于该环承受着拱券来自四面八方的推力,因此该环承受着压力。万神殿眼洞周边有砌砖叠砌的边框和青铜环(Moore 2002)。

阶梯式圆环。 对于穹顶底部外部的 7 层阶梯,学术界有不同的解释。

5. 总结

万神殿穹顶通过几何形状避开了材料的弱点(抗拉力不足)。通过设计成越往上越薄、越轻来减少推力,即使出现裂缝,剩余的结构也能像拱券一样仅靠压力支撑。眼洞周边的圆环承接了这些拱券,厚实的圆柱墙则将这些力传递到基础。

这个视频是如何制作的

工具。 使用 Blender 5.2.3 LTS(官方发行版)、Blender 的 Python API、Eevee 渲染器,视频剪辑使用 ffmpeg,字幕文字通过 Python(Pillow)绘制。字体采用 Blender 内置的 Noto Sans CJK(SIL Open Font License)。没有下载任何 3D 素材,全部通过脚本制作。

程序化建模。 将建筑物的半个剖面定义为(半径,高度)多边形,并绕纵轴旋转以生成立体图形。由于每个密度区域的剖面都按高度切割并分别旋转,因此如果移除前半部分,切面将显示出各区域的颜色。

def spin_profile(name, poly, a0, a1, seg=96, mat=None):
    """(r, z) 다각형을 a0→a1 (라디안) 만큼 돌린 닫힌 회전체."""
    bm = bmesh.new()
    verts = [bm.verts.new((r * cos(a0), r * sin(a0), z)) for r, z in poly]
    face = bm.faces.new(verts)
    bmesh.ops.spin(bm, geom=[face] + verts + list(face.edges), cent=(0, 0, 0),
                   axis=(0, 0, 1), angle=a1 - a0, steps=seg, use_duplicate=False)
    bmesh.ops.recalc_face_normals(bm, faces=bm.faces)
    ...

# 앞쪽 반(π..2π)과 뒤쪽 반(0..π)을 따로 만든다. 단면 보기는 앞쪽 반을 들어 올려 치우는 것.
for half, (a0, a1) in {"back": (0, pi), "front": (pi, 2 * pi)}.items():
    for name, poly, mat in pieces:            # 기초·원통 벽·돔 아래·가운데·위·오큘러스 고리·계단
        ob = spin_profile(f"{name}_{half}", poly, a0, a1, mat=mat)

140 个格子天花板是通过为每个格子创建一个六面体并通过布尔运算(差集)挖出来的,挖出的面被赋予了单独的材质,以便在第 2 章中发出蓝光。裂缝、拱券和箭头通过将曲线的“终点比例”作为关键帧从 0 更改为 1 来实现生长动画。摄像机、显示/隐藏和背景颜色全部通过一个时间轴(以秒为单位)设置了关键帧。

渲染。 1920×1080,30 fps,3,000 帧(100 秒)使用 Eevee(64 采样,开启光线追踪)在一台笔记本电脑(Apple 芯片 GPU)上渲染完成。每帧中位时间 0.86 秒(最慢的一帧 1.43 秒),包括保存等在内的总耗时为 45 分钟 33 秒。生成场景的脚本本身在 4 秒内即可完成(包含布尔运算)。

字幕与剪辑。 本来计划通过语音合成(TTS)加入旁白,但这一版本仅制作了字幕。该网站的视频规则也不接收音轨。字幕、姓名牌和图例在每一帧中用透明层叠加后,通过 ffmpeg 打包为 H.264,针对网站使用场景,按章节进行了剪切,分辨率缩减至 1280×720,并清除了编码器信息等元数据。图例颜色并非来自材质颜色,而是直接从渲染的截面中提取的(因为色彩管理的原因,屏幕色彩与材质值有所不同)。

出处

登录后即可点赞

评论

还没有评论。

登录后即可发表评论