
声学物理
实时区块感知声学,支持遮挡、衍射、反射、混响及流体声音传播。
为 Minecraft 世界带来实时声学物理效果
 
功能特性 · 工作原理 · 兼容性 · 安装方法 · 构建指南 · 报告问题
它能做什么?
当墙壁挡住去路、走出房间或进入水中时,声音都会发生变化。AcousticSystem 会持续读取当前的世界几何结构,因此放置或破坏方块也会影响正在播放的声音。
功能特性
- 基于墙壁材质和厚度的声音遮蔽效果
- 声音可绕过角落、穿过开口并沿连接结构传播
- 来自墙壁、地板和天花板的反射声
- 由房间大小、开口和表面材质共同塑造的混响效果
- 空气、水和熔岩之间物理真实的声音过渡
- 对移动声源、听者和改变后的方块进行持续更新
- 四个质量预设及详细设置选项
- 基于 JSON 的方块和流体声学属性配置
工作原理
每一个位置性的世界声音都会经过相同的传播管线处理。结果并非从预设的房间列表中选取。
世界几何结构与材质
↓
直达声与透射
↓
衍射与结构路径
↓
早期反射与后期声场追踪
↓
距离、空气与介质损耗
↓
实时软件混音器
传播与遮蔽
直达声路径并非以单条中心射线采样,而是以有限的“第一菲涅尔区”波前进行采样。每个采样点都会与实际碰撞形状求交,并累积在每个材质内部传播的距离。随后,透射损耗会独立应用于八个频段,因此多层墙壁会持续衰减声音,而薄墙或部分遮挡的方块也不会表现得像完整的一米厚墙壁一样。
衍射
当直达波前被阻挡时,求解器会按需构建一个由区块、门户、可见性和衍射边缘节点组成的层级结构。A*(A-Star)算法会在该图中搜索穿过门、绕过角落以及通过多转弯通道的完整路径。路径完成后,将基于菲涅尔参数和菲涅尔-基尔霍夫衰减近似,按频段使用刃边衍射模型进行评估。有效的声到达会按能量和方向进行合并,而非选择任意一个门口。
距离与空气吸收
自由场距离损耗遵循球面扩展规律:声压大约按 1 / 距离 衰减,这对应于强度与距离的平方成反比,且每当距离加倍时,声压级会降低约 6 分贝。
空气吸收在八个频段中的每一个都使用 ISO 9613-1 模型。温度、相对湿度和大气压力决定了氧气和氮气的弛豫损耗。对于长度为 d 的路径,每个频段获得的声压增益为 exp(-αd),因此高频声音在长距离传播时会衰减得更快,而无需引入人为的听觉截止。
反射
早期反射使用来自附近表面的镜像声源候选。每个候选都会根据当前的世界几何结构进行检查,然后应用其延迟、方向、距离损耗以及依赖于材质的吸收、透射和散射效应。这使得石头、木头、羊毛和其他材质组产生不同的反射频谱。
房间分析与混响
后期声场使用多次反弹的蒙特卡洛光线追踪进行测量。光线在每次碰到材质时都会损失能量,并通过真实的开口逃逸。开口损耗通过类似萨宾(Sabine)的房间能量模型计算,同时一个 0.5 毫秒的能量直方图记录到达声场。通过反向薛定谔(Schroeder)能量积分和衰减曲线回归,可从追踪到的响应中估算每个频段的 RT60(混响时间)。
测量到的声场由一个运行在 24 kHz 的八延迟线反馈延迟网络(FDN)渲染。该网络使用相互不可通约的延迟、一个保能量的归一化哈达玛(Hadamard)反馈矩阵,以及四个薛定谔全通扩散器,以构建致密的混响尾部,而不会变成重复的回声。对于往返时间为 τ 的延迟线,其反馈增益计算为 g = 10^(-3τ / RT60),使得能量在测量的衰减时间内下降 60 分贝。单极点滤波器在 250 Hz 和 4 kHz 处分割反馈,因此低频、中频和高频的衰减速率可以根据追踪到的 RT60 频谱独立计算。
流体与介质边界
空气、水和熔岩被视为具有各自声速和阻抗的声学介质。每条路径都会被分割成其真实的介质段。在边界处,反射和透射的能量来自两种介质之间的阻抗关系,而延迟则来自以每种介质声速传播的距离。流体表面附近的声源耦合会在六个体素面的小块上进行积分,这避免了将短暂暴露或部分浸没的声源视为纯空气或纯水的特例。
结构声传播
接触声也可以激发相连的碰撞实体。A*(A-Star)算法沿面连接的实心方块进行追踪,而材质耦合和频率相关的阻尼决定了有多少振动能到达听者。这是用于脚步声在地板中传播等情况的路径;它不绑定于特定的声音 ID。
动态更新与性能
世界数据存储在不可变的区块截面快照中。方块和流体的更改仅替换受影响的截面,而传播计算则在渲染线程之外运行。当声源、听者或几何结构发生变化时,活动声音会重新评估,并且音频回调会持续应用最新的方向和声学系数。质量预设会调整追踪预算,而不是切换为不同的声学模型。
材质吸收、透射损耗、散射、介质阻抗及相关频段数据定义在 src/client/resources/assets/acousticsystem/acoustic_materials/default.json 中。
兼容性
| Minecraft | Java | Fabric | Forge | NeoForge |
|---|---|---|---|---|
| 1.21.11 | 21 | ✓ | ✓ | ✓ |
| 26.1.2 | 25 | ✓ | ✓ | ✓ |
| 26.2 | 25 | ✓ | ✓ | ✓ |
AcousticSystem 是一款客户端模组。Fabric 安装还需要相应版本的 Fabric API。其软件混音器需要一个支持 AL_SOFT_callback_buffer 的 OpenAL Soft 设备。
安装方法
- 选择与你的 Minecraft 版本和模组加载器匹配的 JAR 文件。
- 将其放入你的 Minecraft
mods文件夹中。 - 打开 音乐与声音选项 → 声音物理 以选择质量预设或调整各项设置。
如果你发现错误或声音不自然,请提交一个 issue,并附上你的 Minecraft 版本、模组加载器和复现步骤。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。