# 岩质星球地表与内部

本笔记建立从质量、半径和组成到内部结构、地质活动与地表形态的最小闭环。气候的完整模型见《星球大气、海洋与气候》；此处只保留地表需要的输入。

## 地表生成、侵蚀与 Biome

### 总体生成链

内部热驱动板块与火山，大尺度构造形成大陆、山脉和裂谷，撞击与侵蚀继续改造地形，气候和水文最终决定河流、土壤与 Biome。

```tikz
\usetikzlibrary{arrows.meta}
\begin{tikzpicture}[scale=1.18, line cap=round, line join=round]
  \color{white}
  \node[draw=cyan!85, thick, rounded corners=3pt, minimum width=2.2cm, minimum height=0.72cm, align=center, fill=black!55, text=white] (node1) at (-7,0) {内部热};
  \node[draw=cyan!85, thick, rounded corners=3pt, minimum width=2.2cm, minimum height=0.72cm, align=center, fill=black!55, text=white] (node2) at (-3.5,0) {板块运动};
  \node[draw=cyan!85, thick, rounded corners=3pt, minimum width=2.2cm, minimum height=0.72cm, align=center, fill=black!55, text=white] (node3) at (0,0) {火山、山脉与裂谷};
  \node[draw=cyan!85, thick, rounded corners=3pt, minimum width=2.2cm, minimum height=0.72cm, align=center, fill=black!55, text=white] (node4) at (3.5,0) {侵蚀与水循环};
  \node[draw=cyan!85, thick, rounded corners=3pt, minimum width=2.2cm, minimum height=0.72cm, align=center, fill=black!55, text=white] (node5) at (7,0) {地表形态};
  \draw[draw=cyan!85, thick, -{Latex}] (node1.east) -- (node2.west);
  \draw[draw=cyan!85, thick, -{Latex}] (node2.east) -- (node3.west);
  \draw[draw=cyan!85, thick, -{Latex}] (node3.east) -- (node4.west);
  \draw[draw=cyan!85, thick, -{Latex}] (node4.east) -- (node5.west);
  \pgfresetboundingbox
  \path[use as bounding box] (-12,-7.6) rectangle (12,7.6);
\end{tikzpicture}
```

物理层保存高度、板块、水量和温度等可解释场；视觉层只增加材质细节，不反向修改质量、重力或侵蚀参数。

### 地形与板块

经纬度对应的球面方向为

$$\mathbf n=(\cos\phi\cos\theta,\sin\phi,\cos\phi\sin\theta),$$

表面位置为

$$\boxed{\mathbf P=\mathbf C+[R_p+H(\theta,\phi)]\mathbf n}.$$

高度由多尺度信号合成：

$$H=A_cN_c+A_mN_m+A_hN_h+H_{tectonic}+H_{impact}-H_{erosion}.$$

其中大陆项决定海陆，山地与丘陵项补充细节。fBm、山脊噪声和域扭曲分别用于多尺度起伏、尖锐山脊和非规则纹理；噪声必须采样球面方向，避免 UV 接缝与极点畸变。

球面板块可按最近种子划分：

$$P(\mathbf n)=\arg\min_i\arccos(\mathbf n\cdot\mathbf s_i).$$

最近与次近种子的距离接近时即为边界带。相邻板块相向形成山脉、俯冲带和火山弧，背离形成裂谷和洋中脊，切向错动形成转换断层。火山概率还应受热点与内部热流控制。

#### 坐标、归一化与采样

物理高度和渲染权重应分开。若已知高度范围 $[H_{min},H_{max}]$，归一化值为

$$h_n=\operatorname{clamp}\left(\frac{H-H_{min}}{H_{max}-H_{min}},0,1\right).$$

$H$ 参与碰撞、海平面和水文，$h_n$ 只用于混合材质。球面采样使用单位方向而不是经纬度 UV；跨面立方体贴图或球面网格还应保证相邻采样点的世界尺度一致。有限差分步长应随星球半径和模拟分辨率确定，不能直接使用固定 UV 偏移。

#### 高度场分层、单位与可重复性

高度合成不能只停留在若干噪声相加。建议把最终高度明确拆成

$$H=H_{base}+H_{tectonic}+H_{impact}+H_{fluvial}+H_{detail},$$

其中前三项以米为单位并参与水文、碰撞和轮廓；$H_{fluvial}$ 保存侵蚀与沉积造成的真实位移；$H_{detail}$ 只在渲染阶段产生厘米至米级纹理。这样可以防止法线噪声误入河流计算，也能单独关闭某一过程检查结果。

噪声频率最好写成“每个星球周长出现多少个周期”，而不是直接依赖模型坐标。例如设无量纲采样点 $\mathbf x=f\mathbf n$，则 $f=4$ 表示大陆级变化，$f=32$ 可表示山系，$f>256$ 才进入局部细节。振幅始终换算为米：

$$H_i=A_iN_i(f_i\mathbf n),\qquad A_i\,[\mathrm m].$$

每个过程使用独立但可追溯的随机种子，例如由星球种子与过程编号哈希得到。相同输入必须生成相同地形；改变撞击种子不应重新排列板块。生成后至少记录 $H$ 的最小值、最大值、均值和海平面以下面积比例。若极值远超设定的地壳起伏上限，应在物理场阶段修正，而不是在 Shader 中压扁。

#### 参数与数值边界

fBm 为 $\sum_{i=0}^{n-1}a_0p^iN(f_0l^i\mathbf x)$，其中 $l$、$p$ 和层数分别控制频率增长、振幅衰减与细节上限。大陆、山地和丘陵应使用不同尺度；山脊噪声 $R=(1-|N|)^q$ 生成尖锐脊线，域扭曲 $\mathbf x'=\mathbf x+w\mathbf q(\mathbf x)$ 打破规则纹理。

板块边界上，$\mathbf v_{rel}\cdot\mathbf b$ 区分聚合与离散，切向分量识别转换断层。隆升还应乘以速度、板块类型和年龄衰减；火山概率由俯冲、热点和地幔热流共同决定。

#### 板块边界的可计算判定

每块板块至少保存球面种子 $\mathbf s_i$、角速度向量 $\boldsymbol\omega_i$、类型和年龄。在表面点 $\mathbf n$ 处，板块的切向速度为

$$\mathbf v_i=R_p(\boldsymbol\omega_i\times\mathbf n).$$

对相邻板块 $i,j$，先求相对速度 $\mathbf v_{rel}=\mathbf v_j-\mathbf v_i$。设边界在切平面内的单位法向为 $\mathbf b$，沿边界方向为 $\mathbf t=\mathbf n\times\mathbf b$，则

$$c=-\mathbf v_{rel}\cdot\mathbf b,\qquad d=\mathbf v_{rel}\cdot\mathbf b,\qquad s=|\mathbf v_{rel}\cdot\mathbf t|.$$

$c>0$ 表示汇聚，$d>0$ 表示离散，$s$ 表示走滑强度。程序中不应只取最大者，还要保留三个连续量，使三联点附近能够混合。距边界的测地距离记为 $\delta$，隆升权重可取

$$w_b(\delta)=\exp[-(\delta/\sigma_b)^2],\qquad
\Delta H_{orogen}=k_oc\,w_b\,\Delta t.$$

大陆—大陆汇聚主要增加山脉；洋壳—大陆汇聚同时产生海沟和偏向大陆侧的火山弧；离散边界生成中央脊与两侧下沉；走滑边界主要改变断层纹理，不能凭空增加大量体积。每次更新应检查全球隆升与俯冲造成的体积变化是否处于预算内，并确认边界离开后权重平滑衰减，避免出现固定宽度的发光条带。

### 撞击、水文与侵蚀

撞击坑尺寸服从 $p(D)\propto D^{-q}$，因此小坑多、大坑少。坡度 $S=\|\nabla H\|$ 和曲率 $\kappa=\nabla^2H$ 用于识别崖壁、脊线、沟谷与盆地。

降水 $R_i$ 沿最陡下降方向传递，流量累积为

$$A_i=R_i+\sum_{j\to i}A_j.$$

流量和坡度超过阈值时形成河道，侵蚀可用

$$E=KA^mS^n,$$

整体演化则写成

$$\frac{\partial H}{\partial t}=U-E+D,$$

其中 $U$ 为隆升，$E$ 为侵蚀，$D$ 为沉积。封闭洼地可蓄水或通过填洼、开槽寻找出水口。低坡度海岸倾向形成海滩，高坡度海岸倾向形成海崖；海底应单独塑造大陆架和深海盆地。

#### 撞击坑剖面与稳定性

令 $x=d/R_c$，可将坑形拆成中心凹陷、坑缘隆起和外部衰减：

$$H_c(x)=-A_c(1-x^2)^2+A_r\exp[-k_r(x-1)^2].$$

大型撞击可增加中央峰，老旧撞击则按侵蚀年龄衰减。多坑叠加时要限制单次高度改变量，避免密集小坑产生数值尖峰。

侵蚀更新应满足守恒检查：从地形移除的物质量应进入悬沙或沉积场。显式时间步需限制 $\Delta t$；若一次更新超过局部高度差，应减小时间步或采用半隐式方法。

#### 撞击事件的采样、叠加与年龄

若坑径分布为 $p(D)=CD^{-q}$，不能用线性随机数直接取 $D$。在 $q\ne1$ 时，令 $u\sim U(0,1)$，逆变换采样为

$$D=\left[D_{min}^{1-q}+u\left(D_{max}^{1-q}-D_{min}^{1-q}\right)\right]^{1/(1-q)}.$$

撞击中心应在球面上均匀采样：取 $z\sim U(-1,1)$、$\varphi\sim U(0,2\pi)$，再令 $\mathbf n_c=(\sqrt{1-z^2}\cos\varphi,z,\sqrt{1-z^2}\sin\varphi)$。直接均匀采样纬度会让两极撞击过密。

一个事件至少保存中心、坑径、深度、坑缘高度、喷出物范围、发生时间和侵蚀年龄。按时间顺序叠加，较新的坑覆盖较老的坑；随后再由侵蚀削弱坑缘和中央峰。简单坑可令深度近似与直径成比例，复杂大坑则降低深径比并增加中央峰或多环结构。喷出物厚度可在坑缘外按 $(R_c/d)^3$ 衰减，但要设有限支持范围，避免每个撞击修改整颗星球。

验收时分别统计坑径直方图和单位面积坑数；它们应符合目标幂律，并随表面年龄增加。还应确认坑底最低点、坑缘最高点和喷出物带的径向顺序正确，且跨立方体贴图面时剖面连续。

#### 水文与沉积细节

平坦区和局部最低点必须通过填洼、开槽或保留至溢流高度处理。河宽、河深可取 $W\propto A^{b_w}$、$D_r\propto A^{b_d}$。热侵蚀搬运超过休止角的物质；水力侵蚀维护泥沙容量 $C_s=k_cqvS$，低于容量时侵蚀，高于容量时沉积。三角洲需要流速骤降和充足泥沙，海岸材质还应联合坡度、浪蚀与沉积量。

迎风抬升可用 $\max(0,\mathbf w\cdot\nabla H)$ 估计。Biome 先计算各类型适宜度，再用 $w_i=\max(0,S_i)^p/\sum_j\max(0,S_j)^p$ 归一化，避免边界跳变。

#### 河网求解的明确次序

水文求解应从一个没有闭环的排水图开始。先在高度场上识别洼地，再选择“保留为湖泊”“填至溢流口”或“开槽排水”；处理完后，每个非湖泊单元只指向一个更低的下游单元。随后按高度从高到低，或对流向图做拓扑排序，累加

$$A_i=R_i\Delta A_i+\sum_{j\to i}A_j.$$

这里 $A_i$ 的量纲是体积流率而非单纯像素计数，$\Delta A_i$ 是该球面单元代表的真实面积。立方体贴图各面边缘以及经纬网格高纬区域尤其要使用面积权重。

得到流量后，再计算输沙容量 $C_i=k_cA_i^mv_i^pS_i^n$。实际泥沙量 $Q_{s,i}<C_i$ 时侵蚀，反之沉积；搬运的泥沙进入下游而不是消失。单步更新可写成

$$\Delta H_i=\frac{Q_{dep,i}-Q_{ero,i}}{\rho_s\Delta A_i}\Delta t.$$

执行顺序应固定为降水输入、流向、汇流、侵蚀或沉积、泥沙输送、重新计算高度。若一次侵蚀超过局部高差的一定比例，应缩短 $\Delta t$。每步记录地形固体体积、悬沙量和流出边界的泥沙量，三者之和的变化必须与外部源汇一致。

### 气候、Biome 与表面细节

温度可近似为

$$T=T_{eq}-\Delta T_{lat}f(\phi)-\Gamma H+\Delta T_{season}.$$

湿度由海洋距离、蒸发、输送和地形雨共同决定。Biome 可视为 $B=f(T,P,H,S_{soil})$：低温对应冰盖或苔原，高温少雨对应沙漠，中等降水对应草原，温暖湿润对应森林。边界应使用连续权重混合。

雪覆盖取决于温度、高度和坡度；裸岩取决于坡度、土层与侵蚀；河湖附近提高湿润权重。高度场法线由球面切向有限差分估计，物理高度负责轮廓与流域，法线和粗糙度噪声只负责小尺度视觉细节。

```tikz
\begin{tikzpicture}[scale=1.18, line cap=round, line join=round]
  \color{white}
  \node[draw=cyan!85, thick, rounded corners=3pt, minimum width=2.2cm, minimum height=0.72cm, align=center, fill=black!55, text=white] (node1) at (-7,0) {球面噪声};
  \node[draw=cyan!85, thick, rounded corners=3pt, minimum width=2.2cm, minimum height=0.72cm, align=center, fill=black!55, text=white] (node2) at (-3.5,0) {板块与边界};
  \node[draw=cyan!85, thick, rounded corners=3pt, minimum width=3.12cm, minimum height=0.72cm, align=center, fill=black!55, text=white] (node3) at (0,0) {山脉、裂谷与火山};
  \node[draw=cyan!85, thick, rounded corners=3pt, minimum width=2.2cm, minimum height=0.72cm, align=center, fill=black!55, text=white] (node4) at (3.5,0) {侵蚀与撞击};
  \node[draw=cyan!85, thick, rounded corners=3pt, minimum width=2.2cm, minimum height=0.72cm, align=center, fill=black!55, text=white] (node5) at (7,0) {基础地形};
  \draw[draw=cyan!85, thick, ->] (node1.east) -- (node2.west);
  \draw[draw=cyan!85, thick, ->] (node2.east) -- (node3.west);
  \draw[draw=cyan!85, thick, ->] (node3.east) -- (node4.west);
  \draw[draw=cyan!85, thick, ->] (node4.east) -- (node5.west);
\end{tikzpicture}
```

#### 从气候变量得到连续 Biome

Biome 不宜由一串互斥的 if 条件决定。先把温度、年降水、土壤含水量和高度转换为 $0$ 到 $1$ 的适宜度。以某类 Biome 的温度中心 $T_i$ 和宽度 $\sigma_{T,i}$ 为例，

$$S_{T,i}=\exp\left[-\frac{(T-T_i)^2}{2\sigma_{T,i}^2}\right],$$

降水和土壤项可用同类钟形函数或平滑上下限函数。综合适宜度为

$$S_i=S_{T,i}^{a_i}S_{P,i}^{b_i}S_{soil,i}^{c_i}S_{height,i}^{d_i},\qquad
w_i=\frac{S_i^p}{\sum_jS_j^p+\varepsilon}.$$

$p$ 控制边界锐度；它越大，主导 Biome 越明确，但不能让次要权重完全消失。湖泊、裸岩、永久冰和城市等覆盖类型可作为独立遮罩，最后与生态权重组合，而不是硬塞进同一分类表。

气候低频更新时，不要让 Biome 在阈值附近来回闪烁。可以对权重做时间滤波 $w^{new}\leftarrow(1-\lambda)w^{old}+\lambda w^*$，或为进入与退出设置不同阈值。验收除了看颜色，还应检查所有 $w_i\ge0$、$\sum_iw_i=1$，相邻单元变化连续，并确认海拔升高会通过温度和积雪间接改变 Biome，而不是重复叠加两个相互矛盾的规则。

#### 水汽输送、覆盖层与法线

湿度可以沿风向半拉格朗日输送，并扣除凝结降水。迎风坡增雨后必须降低下游水汽，才能自然形成雨影。雪、裸岩、土壤和湿润带应作为连续覆盖权重，并在归一化后参与材质混合。

在局部球面切向基 $\mathbf t_u,\mathbf t_v$ 上取样：

$$H_u\approx\frac{H(\mathbf n+\epsilon\mathbf t_u)-H(\mathbf n-\epsilon\mathbf t_u)}{2\epsilon},$$

$H_v$ 同理，再由两条扰动切线叉乘得到法线。物理法线用于坡度和水流，着色法线可以叠加更高频细节。

### 系统集成与渲染

每个时间步按“内部热与板块 → 撞击和侵蚀 → 气候输入 → 水流与沉积 → Biome → 材质细节”更新。年龄控制长期演化：年轻星球通常构造活跃，古老星球山脉更圆钝，沉积和撞击痕迹更明显。

系统至少输出高度、法线、坡度、板块、流量、温度、湿度、Biome 和积雪权重。

```tikz
\begin{tikzpicture}[scale=1.18, line cap=round, line join=round]
  \color{white}
  \node[draw=cyan!85, thick, rounded corners=3pt, minimum width=2.2cm, minimum height=0.72cm, align=center, fill=black!55, text=white] (node1) at (-7,0) {恒星光};
  \node[draw=cyan!85, thick, rounded corners=3pt, minimum width=2.2cm, minimum height=0.72cm, align=center, fill=black!55, text=white] (node2) at (-3.5,0) {大气与云};
  \node[draw=cyan!85, thick, rounded corners=3pt, minimum width=3.22cm, minimum height=0.72cm, align=center, fill=black!55, text=white] (node3) at (0,0) {地表 / 海洋 BRDF};
  \node[draw=cyan!85, thick, rounded corners=3pt, minimum width=2.2cm, minimum height=0.72cm, align=center, fill=black!55, text=white] (node4) at (3.5,0) {夜侧发光};
  \node[draw=cyan!85, thick, rounded corners=3pt, minimum width=2.2cm, minimum height=0.72cm, align=center, fill=black!55, text=white] (node5) at (7,0) {最终画面};
  \draw[draw=cyan!85, thick, ->] (node1.east) -- (node2.west);
  \draw[draw=cyan!85, thick, ->] (node2.east) -- (node3.west);
  \draw[draw=cyan!85, thick, ->] (node3.east) -- (node4.west);
  \draw[draw=cyan!85, thick, ->] (node4.east) -- (node5.west);
\end{tikzpicture}
```

地表、海洋、大气和夜侧效果应共享同一组物理参数，避免各层独立造数。

#### 字段分辨率、生产者与依赖

不同字段不应被迫使用同一分辨率。建议先明确数据契约：

| 字段 | 典型空间尺度 | 更新频率 | 主要生产者 | 主要消费者 |
| --- | --- | --- | --- | --- |
| 板块编号、边界强度 | 大陆级 | 极低频 | 构造模型 | 隆升、火山、基础材质 |
| 物理高度、海陆遮罩 | 地形级 | 低频 | 构造、撞击、侵蚀 | 水文、碰撞、渲染 |
| 流向、汇流量、泥沙 | 流域级 | 低至中频 | 水文模型 | 河流、湿度、地貌 |
| 温度、降水、积雪 | 气候级 | 季节或事件 | 气候模型 | Biome、冰雪、侵蚀 |
| 法线、粗糙度、细纹理 | 像素级 | 按视图 | GPU 材质 | 最终着色 |

每个字段记录生成参数哈希、上游版本、分辨率和单位。高度变化后，坡度、流向、法线需要失效；只改变表面粗糙度时，水文和板块缓存不应失效。跨分辨率采样时，守恒量如水量与泥沙用面积加权聚合，分类权重需重新归一化，方向向量插值后重新单位化。

系统验收应包含三层：字段级检查有限值、范围和单位；过程级检查质量或能量守恒；画面级检查接缝、时间闪烁和尺度合理性。这样能够判断问题属于生成、传输还是渲染，而不是只凭最终颜色反推。

#### 时间尺度、缓存与最小实现

板块和内部热是慢变量，气候与水文是中等时间尺度，材质细节是即时变量。板块场可长期缓存，气候按季节更新，侵蚀低频步进；每个派生场记录输入版本，仅在依赖变化时失效。

```hlsl
struct TerrainParams {
    float continentAmp, mountainAmp, hillAmp;
    float continentFreq, mountainFreq, hillFreq;
};
float PlanetHeight(float3 dir, TerrainParams p) {
    dir = normalize(dir);
    float c = FBM(dir * p.continentFreq);
    float mask = saturate(c * 2.0 - 0.15);
    float ridge = pow(1.0 - abs(Noise(dir * p.mountainFreq)), 2.0);
    return p.continentAmp * c
         + p.mountainAmp * mask * ridge
         + p.hillAmp * FBM(dir * p.hillFreq);
}
```

板块隆升、撞击和侵蚀作为独立场叠加，便于调试、缓存和单独调整分辨率。

## 岩质星球内部模型

### 基础尺度与径向结构

输入包括质量 $M_p$、半径 $R_p$、组成、表面温度、自转和年龄。基础尺度为

$$\bar\rho=\frac{3M_p}{4\pi R_p^3},\qquad g_s=\frac{GM_p}{R_p^2},\qquad v_e=\sqrt{\frac{2GM_p}{R_p}}.$$

给定径向密度 $\rho(r)$，内部质量和重力为

$$M(r)=4\pi\int_0^r\rho(r')r'^2dr',\qquad g(r)=\frac{GM(r)}{r^2}.$$

质量—半径经验式只能在明确的组成和质量范围内使用；大质量行星的材料压缩更强，不能始终采用常密度比例。

#### 组成约束与分层质量

整体组成满足 $f_{Fe}+f_{rock}+f_{volatile}=1$。给定核心半径后，必须同时满足

$$M_p=M_c+4\pi\int_{R_c}^{R_p}\rho_m(r)r^2dr.$$

富铁星球通常半径更小、核心更大；富挥发物星球相反。经验质量—半径公式只提供迭代初值，不能取代质量守恒与状态方程。中心积分从小半径 $\epsilon$ 开始，使用 $M(\epsilon)\approx4\pi\rho(0)\epsilon^3/3$ 避免原点奇点。

#### 从中心到表面的离散积分

内部模型的未知量不是彼此独立的。最小状态向量可取 $\mathbf y(r)=[M(r),P(r),T(r)]$，密度由状态方程 $\rho=\rho(P,T,X)$ 返回。给定中心试值 $P_c,T_c$ 后，从 $r=\epsilon$ 向外积分

$$\frac{dM}{dr}=4\pi r^2\rho,\qquad
\frac{dP}{dr}=-\frac{GM\rho}{r^2},\qquad
\frac{dT}{dr}=\nabla_T\frac{T}{P}\frac{dP}{dr}.$$

$\nabla_T$ 在对流区取绝热梯度，在导热区由热流决定。一个径向步 $\Delta r$ 不能跨越地壳、核幔边界或相变面；检测到材料或相态变化时应缩短步长并定位交点。

边值问题可以用射击法求解：猜测 $P_c,T_c$ 和层边界，积分到 $P=P_s$ 的位置得到预测半径 $R^*$ 与质量 $M^*$，再根据残差

$$e_R=\frac{R^*-R_p}{R_p},\qquad e_M=\frac{M^*-M_p}{M_p}$$

调整中心条件与组成参数。若只知道 $M_p$ 和组成而半径未知，则把表面压力条件和总质量作为约束，让 $R^*$ 成为输出。径向网格应保存单元边界与单元中心值，后续求层质量时用壳体积 $4\pi(r_{i+1}^3-r_i^3)/3$，不能用平面网格近似。

### 压力、温度与相态

压力满足

$$\frac{dP}{dr}=-\rho(r)g(r),\qquad P(R_p)=P_s.$$

简单压缩模型为 $\rho\approx\rho_0(1+P/K)$；高压岩石应改用合适的状态方程。内部热量来自形成时的引力能、放射性衰变、核心凝固潜热和潮汐加热。导热区满足 $dT/dr=-q/k$，对流区接近绝热梯度

$$\frac{dT}{dr}=\frac{\alpha_TgT}{c_p}.$$

比较温度与固相线、液相线可得熔融比例

$$F=\operatorname{clamp}\left(\frac{T-T_s}{T_l-T_s},0,1\right).$$

#### 状态方程与求解检查

分层模型可令核心、地幔和地壳具有不同密度。积分从小半径 $\epsilon$ 开始，用 $M(\epsilon)\approx4\pi\rho(0)\epsilon^3/3$ 避免原点奇点，并校验 $M(R_p)=M_p$。

均匀球中心压力 $P_c=3GM_p^2/(8\pi R_p^4)$ 只用于数量级检查。高压岩石可用 Birch–Murnaghan 方程：

$$P=\frac{3K_0}{2}(\eta^{7/3}-\eta^{5/3})\left[1+\frac34(K_0'-4)(\eta^{2/3}-1)\right],\quad\eta=\rho/\rho_0.$$

固定熔点会高估深部熔融，应使用压力相关固相线和液相线；部分熔融比例还会影响黏度、岩浆生成和相变潜热。

#### 状态方程反解与相界定位

Birch–Murnaghan 方程通常给出 $P(\rho)$，积分时却已知 $P,T$，因此必须反解密度。可先用上一径向单元的密度作初值，用牛顿法解

$$F(\rho)=P_{EOS}(\rho,T,X)-P=0.$$

若导数过小、牛顿步越界或材料跨相态，回退到有上下界的二分法。密度必须保持正值并随压力总体增加；任何 NaN 或密度突跳都应中止该模型，而不是用 clamp 掩盖。

相边界由当前 $P,T,X$ 与材料相图共同决定。温度从固相线以下进入固液区后，熔融比例由 $0$ 连续增加至 $1$；密度、热容、导热率和黏度应随相态混合。穿越一阶相变时还需把潜热并入有效热容，或显式维护焓：

$$h(T,P)=\int c_p\,dT+LF.$$

核幔边界主要由组成分层决定，内外核边界则由核心温度曲线与铁合金熔化曲线的交点决定。二者不能仅凭固定半径比例绘制。定位交点后在相邻径向单元间插值，并重新积分各层质量以确认总质量没有因边界移动而漂移。

### 分异与分层

熔融阶段，铁镍等高密度金属下沉，硅酸盐上浮，形成金属核与岩质地幔。若核心质量分数为 $f_c$，两层常密度近似给出

$$M_c=f_cM_p,\qquad R_c=\left(\frac{3M_c}{4\pi\rho_c}\right)^{1/3}.$$

该结果只是迭代初值；最终核心半径需与地幔质量、压力压缩和总半径联立求解。地壳来自地幔部分熔融、岩浆上升与冷却，其厚度不应脱离内部热状态单独指定。

```tikz
\begin{tikzpicture}[scale=1.18, line cap=round, line join=round]
  \color{white}
  \fill[fill={rgb,255:red,134;green,122;blue,105}] (-1.92,-0.99) circle (2.67);
  \fill[fill={rgb,255:red,83;green,65;blue,39}] (-1.92,-0.99) circle (2.29);
  \fill[fill={rgb,255:red,205;green,218;blue,114}] (-1.92,-0.99) circle (1.23);
  \fill[fill={rgb,255:red,238;green,255;blue,0}] (-1.92,-0.99) circle (0.5);
  \draw[draw=cyan, thick] (-1.92,-0.99) circle (2.67);
  \draw[draw=cyan, thick, densely dashed] (-1.92,-0.99) circle (2.29);
  \draw[draw=cyan, thick, densely dashed] (-1.92,-0.99) circle (1.23);
  \draw[draw={rgb,255:red,70;green,175;blue,49}, thick, densely dashed] (-1.92,-0.99) circle (0.5);
  \draw[draw=cyan!85, thick, ->] (0.24,0.26) -- (1.48,0.83);
  \draw[draw=cyan!85, thick, ->] (-0.21,-0.43) -- (1.61,-0.1);
  \draw[draw=cyan!85, thick, ->] (-1.09,-0.97) -- (1.5,-0.9);
  \draw[draw=cyan!85, thick, ->] (-1.71,-1.13) -- (1.5,-2.3);
  \node[anchor=west, inner sep=0pt, outer sep=0pt, text=cyan] at (1.66,0.81) {地壳};
  \node[anchor=west, inner sep=0pt, outer sep=0pt, text=cyan] at (1.7,-0.11) {地幔};
  \node[anchor=west, inner sep=0pt, outer sep=0pt, text=cyan] at (1.6,-0.9) {液态外核};
  \node[anchor=west, inner sep=0pt, outer sep=0pt, text=cyan] at (1.6,-2.3) {固态内核};
\end{tikzpicture}
```

图中的地壳、地幔、液态外核和固态内核，是连续密度、压力、温度与相态场的离散表达；渲染边界应由物理场推导。

#### 分异过程与层边界来源

分异效率取决于是否发生大范围熔融、金属液滴能否连通下沉以及冷却时间。可用 $\chi_{diff}\in[0,1]$ 表示可分离金属比例，初始核心质量近似为

$$M_c=\chi_{diff}f_{metal}M_p,$$

剩余金属保留在地幔中并改变其密度和氧化状态。$\chi_{diff}=1$ 是完全分异的上限，不应作为所有岩质星球的默认事实。巨型撞击可重新熔融并改变分异程度，潮汐加热也可能延长可分异时间窗。

核心半径不是由 $M_c$ 除以常数密度一次算出，而应在压力迭代中调整：给定候选 $R_c$，分别积分核心和地幔的压缩密度，计算 $M_c^*$ 与 $M_m^*$；再移动 $R_c$，直到 $M_c^*/M_p$ 与目标核心质量分数一致且 $M_c^*+M_m^*=M_p$。若还有水层或高压冰层，则每增加一层就增加一个边界未知量和相应的组成质量约束。

地壳厚度来自熔融物的产生、上升和凝固预算。若一段时间内地幔产生岩浆质量 $\Delta M_{melt}$，只有乘以上升效率和保留效率的部分形成新地壳；同时俯冲和撞击侵蚀会移除旧地壳。最终地壳质量应由这些源汇累计，而不是直接由年龄线性插值得到。

#### 尺度趋势与实现接口

核心质量分数由铁含量、氧化程度和分异效率估计。高铁星球通常核心更大、平均密度更高；富挥发物星球相反。地壳由地幔部分熔融、岩浆上升与冷却形成，不能脱离热状态单独指定厚度。

球外引力势为 $\Phi=-GM_p/r$，均匀球结合能近似 $U=-3GM_p^2/(5R_p)$。小天体因 $A/V=3/R_p$ 较大而冷却更快，但放射性元素、潮汐和初始温度会改变趋势。

```hlsl
struct PlanetFields {
    float density, pressure, temperature, melt;
    float4 layers; // crust, mantle, outer core, inner core
};
```

渲染层权重由连续物理场推导并平滑混合。板块和内部热长期缓存，气候按季节更新，侵蚀低频步进，法线与材质在 GPU 重建。

#### 迭代求解与验证

一次稳定求解包括：猜测中心密度和组成分层；向外积分 $M(r)$ 与 $g(r)$；由表面边界向内积分 $P(r)$；用状态方程更新密度；重复直到 $M(R_p)$ 和 $R_p$ 同时收敛；最后计算温度、熔融比例和层边界。

至少检查以下不变量：$M(r)$ 单调增加，$P(r)$ 向外单调降低，中心处 $g(0)=0$，表面质量误差低于容差，各层质量之和等于总质量，覆盖权重与内部层权重分别归一化为 $1$。这些检查比单纯观察 Shader 颜色更能发现模型错误。

热演化还应核对输入热源、表面散热、潜热和内部能变化是否闭合。磁场判断必须同时检查液态导电层、对流功率和自转，不能只根据核心是否存在。

#### 收敛容差与可验证基准

收敛条件至少同时约束质量、半径、表面压力和能量。可使用

$$\epsilon=\max\left(|e_M|,|e_R|,\frac{|P(R)-P_s|}{P_{scale}},\frac{|\Delta E|}{E_{scale}}\right),$$

并在 $\epsilon<\epsilon_{tol}$ 且连续若干次迭代不反弹时停止。层边界变化也应小于一个给定物理长度，而不只是小于一个网格单元。若达到最大迭代数，结果必须标记为未收敛，不能继续当成有效星球输入渲染。

实现后先用可解析模型做基准测试。常密度球应满足 $M(r)=4\pi\rho r^3/3$、$g(r)=4\pi G\rho r/3$，且中心压力等于 $3GM_p^2/(8\pi R_p^4)$。再测试两层常密度球，确认核幔边界处 $M$ 和 $P$ 连续而密度允许跳变。最后才引入压缩状态方程、相变和温度耦合。

分辨率收敛测试应把径向步长减半，比较总质量、中心压力、核心半径和表面热流。如果误差没有按预期下降，说明步进方法、边界定位或 EOS 反解存在问题。还要做极端输入测试：极小核心、接近全铁、极冷、强潮汐加热以及低质量小天体，确保求解器给出物理结果或明确失败原因。

### 热演化、磁场与实现

内部温度演化由能量守恒控制：

$$\rho c_p\frac{\partial T}{\partial t}=\nabla\cdot(k\nabla T)+Q_{rad}+Q_{tidal}-Q_{loss}.$$

持续冷却会增厚岩石圈、减弱板块活动并使内核逐渐凝固。磁场通常同时需要导电液态层、足够强的热或成分对流以及适当自转；核心固化或对流不足时，快速自转也不能单独维持强磁场。

#### 热历史步进与地表耦合

若暂不求完整三维对流，可先对各层使用集总能量方程：

$$C_{layer}\frac{d\bar T}{dt}=Q_{rad}+Q_{tidal}+Q_{latent}-Q_{out}+Q_{in}.$$

地幔向表面的热流可由边界层参数化得到。瑞利数

$$Ra=\frac{\rho g\alpha_T\Delta T d^3}{\kappa\eta}$$

超过临界值时发生对流，再用 $Nu=aRa^\beta$ 把对流换热折算为有效热通量。黏度对温度高度敏感，因此冷却会提高黏度、减弱对流，并反过来降低散热；热历史必须时间步进，不能只按年龄乘一个线性衰减系数。

内核生长释放潜热和轻元素，能够为外核对流供能。判断发电机是否可能工作时，可进一步检查磁雷诺数 $Rm=UL/\eta_m$ 是否超过维持磁场所需的量级；这里 $U$ 来自对流速度估计，$L$ 是液态导电层厚度，$\eta_m$ 是磁扩散率。该判据比“有液态外核且转得快”更接近物理闭环。

内部模型向地表输出的不应只有一个热量标量，而应包括表面热流分布、岩石圈厚度、构造活动强度、热点概率和长期火山通量。地表侵蚀与气候不会在短期内反向改变深部结构，但厚冰盖、巨型撞击或强潮汐可作为低频边界条件反馈。这样，内部与地表通过少量有单位、有时间尺度的字段连接，而不是两个互不相关的生成器。

程序化实现依次执行：估算初始半径和分层；由中心向外积分质量与重力；由表面向内积分压力；迭代状态方程直至质量和半径收敛；比较温度与熔点得到相态；再派生热流、火山、板块和地表参数。这比逐项手填 Shader 参数更稳定，也更便于复用。