TerraMath

TerraMath

使用数学函数和公式创建自定义地形,以实现独特的程序化世界生成。

Discord Modrinth Curseforge GitHub

Fabric API Minecraft

描述

TerraMath 是一个适用于 Minecraft 1.20 - 1.21.x 的模组,允许你使用数学函数自定义世界生成。通过数学公式定义地形高度,创造独特的地貌!

你也可以加入我的 Discord 寻找更多公式或分享你的公式。

特性

  • 通过数学公式自定义世界生成
  • 可调整的基础生成参数(比例、高度、变化幅度、平滑度)
  • 在基础公式之上配置噪声叠加层
  • 公式支持数学常量

客户端使用方法

image
  • 世界生成设置界面

参数配置

  1. 在世界创建界面进入“世界”选项卡
  2. 打开地形设置界面
  3. 在字段中输入你期望的公式
  4. 调整附加参数(可选):
    • 缩放比例
    • 基础高度(决定平均地表水平)
    • 高度变化幅度(变化的振幅)
    • 平滑度(地形过渡平滑度)
  5. 选择噪声类型和设置(可选):
    • 噪声类型:Perlin、Simplex、Blended、Normal
    • X、Y、Z 坐标倍率
    • 通用噪声高度倍率

服务端使用方法

  1. 安装 TerraMath 模组并启动服务器
  2. 查看 config 文件夹,其中会有 terramath.json 文件
  3. 在文件中手动设置所需参数,或者……
  4. ……在你的客户端上配置模组
  5. 设置参数并保存配置
  6. 将配置文件转移到服务器的 config 文件夹中

重要的服务端注意事项:

  • 为使配置应用于新世界,请确保配置中的 useDefaultFormula 参数设置为 true
  • 更改配置设置后,你需要删除现有世界并重启服务器,新的地形公式才能生效
  • 或者,你可以将整个世界文件夹从客户端转移到服务器——世界将继续按照相同的公式生成而无需更改配置

公式示例

  • 基础波浪状地形:sin(x)image
  • 带有陡峭斜坡的尖峰火山状地形:abs(sin(x/10))*exp(cos(z/15))*8 + tanh(sqrt(x^2 + z^2)/20)*15image
  • 绵延起伏的山脉:sin(x/8)*cos(z/8)*10 + abs(sin(x/20))*15 + sqrt(abs(x/10))*5image
  • 某些疯狂而沉重的东西:round(sin(x/15))*10 + round(cos(z/15))*10 + sqrt(abs(sin((x+z)/20)))*15image
  • 带有平台的阶地状地形:floor(sin(x/20) * cos(z/20) * 5) * 4 + sqrt(x^2 + z^2)/10image
  • 充满陨石坑的地形:10 * (1 - exp(-((x/30)^2 + (z/30)^2) / 2)) + 5 * perlin(x/50, 0, z/50)image

可用函数与运算符

数学函数:

三角函数:
- sin(x) - 正弦
- cos(x) - 余弦
- tan(x) - 正切
- csc(x) - 余割
- sec(x) - 正割
- cot(x) - 余切
- asin(x) - 反正弦
- acos(x) - 反余弦
- atan(x) - 反正切
- atan2(x,y) - 双参数反正切
- acsc(x) - 反余割
- asec(x) - 反正割
- acot(x) - 反余切

双曲函数:
- sinh(x) - 双曲正弦
- cosh(x) - 双曲余弦
- tanh(x) - 双曲正切
- asinh(x) - 反双曲正弦
- acosh(x) - 反双曲余弦
- atanh(x) - 反双曲正切
- csch(x) - 双曲余割
- sech(x) - 双曲正割
- coth(x) - 双曲余切
- acsch(x) - 反双曲余割
- asech(x) - 反双曲正割
- acoth(x) - 反双曲余切

根与幂函数:
- sqrt(x) - 平方根
- cbrt(x) - 立方根
- root(x,n) - x 的 n 次方根
- pow(x,y) - x 的 y 次幂
- exp(x) - 指数函数 (e^x)

对数函数:
- ln(x) - 自然对数
- lg(x) - 以 10 为底的对数

取整与数字函数:
- abs(x) - 绝对值
- floor(x) - 小于 x 的最大整数
- ceil(x) - 大于 x 的最小整数
- round(x) - 四舍五入到最接近的整数
- sign(x) - 返回 x 的符号(-1、0 或 1)
- mod(x,y) - x 除以 y 的余数
- gcd(x,y) - 最大公约数
- lcm(x,y) - 最小公倍数
- modi(x,y) - 模逆元

特殊函数:
- gamma(x) - 伽马函数
- erf(x) - 误差函数
- beta(x,y) - 贝塔函数

随机数生成:
- rand() - 0 到 1 之间的随机数
- randnormal(mean,stdev) - 来自正态分布的随机数
- randrange(min,max) - 最小值和最大值之间的随机数

噪声函数:
- perlin(x,y,z) - 柏林噪声
- simplex(x,y,z) - 单纯形噪声
- normal(x,y,z) - 正态噪声
- blended(x,y,z) - 混合噪声
- octaved(x,z,octaves,persistence) - 八度噪声

实用函数:
- max(x,y) - x 和 y 中的最大值
- min(x,y) - x 和 y 中的最小值
- sigmoid(x) - S 形函数(1/(1+e^-x))
- clamp(x,min,max) - 将 x 限制在最小值和最大值之间

常量:
- pi, π - 3.14159...(圆周率)
- e - 2.71828...(欧拉数)
- phi, φ - 1.61803...(黄金比例)
- zeta3, ζ3 - 1.20205...(阿培里常数)
- catalan, K - 0.91596...(卡塔兰常数)
- alpha, α, feigenbaum - 2.50290...(费根鲍姆常数)
- delta, δ, feigenbaumdelta - 4.66920...(费根鲍姆 δ)
- omega, Ω - 0.6889(宇宙学常数)

变量:
x, y, z - 世界中的方块坐标

运算符:
+, -, *, /, ^, (), !

已知问题

  • 生成超大尺寸地形的极端公式可能会影响性能(可能不是一个完全可解决的问题)
  • 随机数生成函数在大量使用时会显著影响世界生成性能。建议尽量少用这些函数,尤其是在复杂的地形公式中,因为它们可能导致帧率下降或增加区块加载时间

贡献

欢迎通过问题追踪器报告错误或建议新功能!