找回密码
 初始化身份识别芯片
搜索
查看: 31|回复: 0

更真实的宇宙(设计讨论稿)

[复制链接]

战列舰长

发表于 半小时前 | 显示全部楼层 |阅读模式
本帖最后由 61231345 于 2026-11-8 19:45 编辑

缘起远行星号的星海里,所有天体都沿着统一的圆形轨道运行——这早已满足不了追求真实感的玩家。我决定搜集广大玩家的建议,做出一个更合理的模组,去逼近那个更真实的宇宙。

为了这个目标,我制作了一份「额定密度表」:为每一种行星与恒星类型,标定其在游戏空间里的额定密度。有了密度,便能通过半径求出体积、算出每一颗天体的质量;而质量配合轨道半长轴,可据开普勒第三定律求出正确的环绕周期,并反推拉格朗日点位置。在此之上,把原版统一的圆轨道改成椭圆——这正是「轨道形状库」的本职:只改轨道的「形状」与「运动快慢」,不动天体被生成在哪儿、也不动星图本身。我先前发布的<轨道形状库 Orbit Shapes - Mod制作发布 - 远行星号中文论坛>正是这一计划的开端,也欢迎各位继续提出建议,一同完善它。

额定密度表为每一种行星与恒星类型标定的游戏空间额定密度表,已打包在附件 vanilla_nominal_density.zip(内含完整 11 列 csv 数据,UTF-8,可用 Excel / 记事本打开)。下面几条说明它的算法口径:
  • 额定密度的定义:ρ_game = m_real / r_typical³(单位 M⊕/px³),其中 r_typical = (minRadius + maxRadius) / 2,取自原版 procgen 表。
  • 由半径求质量:m(r) = ρ_game × r³。像素标度因子与 4π/3 在两个同类型天体做质量比时会自动约掉,因此这张表最适合用在「同类两体质量比」上。
  • 空值即「不适用」:5 个固定质量例外(中子星、黑洞、三个星云中心)密度列留空——它们的绘制尺寸不携带质量信息;9 个非天体(环、小行星带/场、吸积盘、磁场、小星云)已被排除,不填 0、也不填估算占位值。
  • 这不是真实物理密度,是游戏空间标定密度:原版星体画的是视觉半径(如蓝巨星只画成黄星的 1.4 倍,实际约 5 倍),直接套真实平均密度会偏 50%~99%。


进动角
椭圆轨道的近星点方向本不该是固定的。受到其它天体的引力摄动、中心天体非球形(扁率)、乃至广义相对论效应,轨道的拱线(近星点—远星点连线)会随时间缓慢旋转——这个旋转角速率,就是「进动角」。
  • 原版为什么没有:原版所有轨道是标准圆(e=0),圆没有「长轴方向」可言,谈不上进动;即便少数手动设定的椭圆,引擎的 CircularOrbit 也是参数固定的静态椭圆,长轴永不自转。
  • 性能花费:物理上「真实的」进动来自多体摄动,正是最早被我们否掉的「每帧 O(N²) N 体积分」那一档——它会把运行时从每帧 O(N) 直接拖成 O(N²),吃掉帧率。若退而求其次、给每类天体「写死一个固定进动速率」做廉价近似,那个数字没有任何物理依据,等于用假数据冒充真实,意义不大。
  • 漫长的游戏时间,短期忽略不计:真实进动速率极小(现实里每年才角秒级)。游戏里一圈轨道往往只有几天到几周,玩家整局玩下来,椭圆的长轴也转不了几度,肉眼根本看不出和「固定椭圆」的区别。为这点不可见的「真实」去承担复杂度、以及破坏固定相位机关(拉格朗日点、任务、主题摆放)的风险,不划算。
  • 取舍与边界:对绝大多数玩家而言,进动在可感知的游玩周期内可以忽略。若将来社区强烈要求,更合理的做法是做一个「可配置的固定进动速率」开关、默认关闭——既保留硬核玩家的选项,又不拖累默认体验,也不动现有依赖固定相位的机制。
  • 顺带的好处:正因为暂不做进动,现有的 L4/L5 三角平动点仍是稳定的,依赖固定相位的机关、任务与主题设计无需重新评估摆放基准,兼容性得以保持。


性能
以下数字基于「60% 天体改为椭圆轨道」并启用完整方案(质量模型+第三定律+L1–L5+防交叉重排+路径预缓存)的实测。X% 表示「相对原版在同样状态下的消耗涨幅」——因为原版在我们要改的那一段几乎不干活,所以既有「受影响部分涨幅很大」,也有「整个状态涨幅很小」,两列都给出。
  • 开局生成(一次性):原版约 0.8 ms 的轨道参数计算 → 新方案约 33–79 ms(取决于防交叉迭代轮数)。受影响部分看似 +3900%~+9570%,但那全是我们新增功能自身的成本;举个具体例子:一次普通新游戏从点击到能操作约 40 秒,这最多 79 ms 只占约 0.2%,加载进度条不会因此多跳一下。
  • 每帧轨道推进(星图/战役层):受影响部分 +527%(圆 1.0µs → 椭圆 6.5µs / 帧 / 实体群);折算到整帧仅 +0.03%,即便只算星图更新线程也只 +0.14%~0.55%。(这里的「战役层」指你在外面飞的星图,行星在战斗里是冻结背景、不推进,开销不落在战斗上。)
  • 轨道线渲染:若把椭圆路径偏移缓存起来,渲染反而比原版画圆线便宜约 54%(原版每帧对每个实体做 128 次 sin/cos,缓存后只需平移);若不缓存、每帧重采样 128 段(当前 OrbitLines 现状),则 +61%。这是唯一可能感知到的帧率项——引擎自画的圆线无法关闭,是否叠加真椭圆线需自行决定。
  • 存档:体积 +49%(约 +0.5MB / 千实体),写入 +20%,读档 +3.6%,常驻内存 +75%(单实体对象约 +75B)。注意 XStream 序列化意味着一旦使用便无法从旧存档卸载(缺库会 ClassNotFound)。
  • 结论:数学本身近乎免费,真正的开销只落在「是否每帧重采样路径」与「是否画椭圆线」两处。把路径偏移缓存起来,整帧不升反降。

附:额定密度表见附件 vanilla_nominal_density.zip(内含完整 11 列 csv 数据,UTF-8,可用 Excel / 记事本打开)。


依赖与安装
  • 目标版本:Starsector 0.98a-RC8(三个组件均以此版本构建,其它版本未测试)。
  • 本计划由三个互补组件构成,可单独或组合使用:
    • 轨道形状库(Orbit Shapes):零依赖的纯库,提供开普勒椭圆轨道与路径采样接口,本身不生成任何内容;下面两个都建立在它之上。
    • 自定义星系生成器(Custom Systems):零依赖,用规则在原版 procgen 之外补完星系(殖民地经济、L1/L2/L3 拉格朗日点、稳定点上的实体等),并按真实质量关系排布。
    • 轨道线显示(Orbit Lines):软依赖轨道形状库——装了就画真椭圆,没装则全部退回画圆;键位改绑用到 LunaLib(装了可在 LunaLib 设置里改 F9,没装则用默认键)。
  • 三者都是独立 mod,按需取用;想完整体验「真实宇宙」建议三个一起开。


兼容性与存档
  • 新游戏优先:本模组在星系生成期改写轨道与质量关系,最佳体验是开新档。往一个已经跑到一半的存档中途加入,天体位置与已生成实体基准可能不一致,未充分测试,不保证稳定。
  • 与其它 mod:只动轨道参数与生成规则、不替换原版系统结构,理论上与只加内容(飞船、武器、市场)的 mod 兼容;但若某 mod 自己也重写星系生成或硬编码了天体坐标,可能冲突,需具体排查。
  • 卸载要清存档:轨道形状库会把椭圆轨道对象写进存档(XStream 序列化),一旦用过就不能从旧存档直接移除,否则读档因找不到类而失败;轨道线显示还会在每个星系创建两个不可见实体并写入存档,禁用后旧存档可能需手动清理。安装前请保留一份干净存档。
  • 不影响战斗:如前所述,轨道只在星图(战役层)推进,进战斗后星图冻结,战斗机制完全不受影响。


可配置项
  • 椭圆化比例:默认约 60% 的天体改为椭圆轨道,其余保留原版圆轨道(避免整片星图过于杂乱,也便于对照),比例可在配置里调。
  • 是否绘制真椭圆线:由「轨道线显示」负责,可开关;关掉则只改物理、不改视觉。
  • 密度表覆盖:额定密度表是独立数据,允许玩家/其它 mod 替换或补充某类型的密度,再据此重算质量与轨道(具体接口待定)。
  • 进动角:本期不做(理由见上),后续若加会做成默认关闭的可配置开关。


范围、边界与已知限制
  • 明确不改动的内容(动了会出大事):本模组只动「轨道形状与运动」,绝不碰星图大小、星座/系统数量、系统的整体布局与天体数量、原版按半径排布的小行星带/跳跃点/稳定点的位置基准,也不新增或删减天体。原因很直接:这些位置是任务、市场、主题实体乃至其它 mod 的摆放基准,一旦重排就会连锁破坏——比性能开销麻烦得多。所以「轨道形状库」的边界很清晰:形状与速度归它,位置与布局归原版生成逻辑。
  • 半径用的是「视觉半径」:额定密度由游戏内绘制半径反推,不是真实天文半径(蓝巨星只画成黄星的 1.4 倍,实际约 5 倍)。质量与周期只在同一游戏尺度内有意义,不能和现实天体直接比。
  • 引擎自带的圆线关不掉:即便画了真椭圆线,引擎底层仍按半长轴画一圈圆线,视觉上会出现「圆线 + 椭圆线」并存。这是引擎限制,不是 bug。
  • 椭圆会和按半径摆放的东西打架:原版按轨道半径 a 排布小行星带、跳跃点、稳定点。离心率 e=0.35 时,天体到中心的距离会在 0.65a~1.35a 之间摆动,可能穿过这些按 a 生成的结构。当前方案在生成期做了间距校验规避,但极端配置下仍需留意。
  • 只改位置与速度,不改外观:椭圆化只动轨道形状与运动快慢,天体的大小、亮度、市场、可登陆性等都不受影响。


对游戏性的影响(实话实说)
  • 行星不再固定在地图一点:椭圆轨道上,行星沿椭圆缓慢移动,近星点快、远星点慢。你「前往某行星」本质上是拦截一个移动目标,导航与汇合时机和原版不同——这是「真实」带来的最直接变化。
  • 固定相位的机关不受影响:因为本期不做进动,天体相对相位长期稳定,依赖固定位置的机关、任务、主题设计无需重写。
  • 贸易/任务锚点会动:若某任务或贸易路线把行星当固定坐标,它的漂移可能让路线描述与实际位置对不上;这类内容如需精确,得等我们把相位关系也纳入考虑。


后续路线图
  • 进动角:本期暂缓(性能与可见收益不划算),后续做成默认关的可配置开关。
  • 多恒星系统:双星/三星系的共同质心与各自椭圆轨道。
  • 共振与特殊轨道:如 1:2 轨道共振、潮汐锁定(同一面始终朝向中心)、拉格朗日点处的稳定轨道。
  • 多体微扰:用轻量近似替代「每帧 O(N²)」的硬算,在性能可控前提下让长期演化更真。


想听你们的想法
这是「真实宇宙」计划的前瞻稿,不少设计还在路上——比如进动角就是明确的下一步。在动手实现前,我想先听听社区的声音:
  • 进动速率要不要做成按天体类型可配、且默认开启?还是默认关,留给硬核玩家自己开?
  • 真实椭圆轨道线(引擎自带的圆线关不掉)要不要由模组叠加绘制?性能与观感,你们更看重哪头?
  • 密度表的数值、以及「按半径求质量」的链路,有没有玩家更认可的标定方式?
  • 还希望「真实」延伸到哪一层?多体摄动、潮汐锁定、还是别的?


目前是这样计划,要不要做还在考量。

欢迎在下留言,每一条建议我都会看。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?初始化身份识别芯片

×

本版积分规则

Archiver|手机版|小黑屋|远行星号中文论坛

GMT+8, 2026-11-8 20:45

Powered by Discuz! X3.5

© 2001-2077 Tencent Cloud | Durian Software Studio | IP地址位置数据由纯真CZ88提供支持

快速回复 返回顶部 返回列表