Патч-подобное обновление v0.25.42
Пока версия 0.26 всё ещё готовится и в разработке находится несколько крупных нововведений, о которых я расскажу в следующем дневнике разработки, я решил не ждать ещё несколько месяцев до их завершения. Вместо этого я выделил значительную часть 0.26 в отдельное обновление, похожее на патч, чтобы вы уже могли опробовать её и поделиться своими отзывами.
В обновлении содержится множество исправлений, особенно в расчётах орбит и термодинамике, и даже в примечаниях к выпуску перечислены далеко не все из них. Помимо этого, есть несколько важных изменений, о которых я кратко расскажу.
Рефакторинг симуляции
Симуляция полёта становилась всё более хрупкой. Такие действия, как разделение ступеней, стыковка, раскрытие парашютов или уничтожение деталей, немедленно меняли структуру космического аппарата — иногда прямо во время его симуляции. Некоторые операции откладывались до специального этапа под названием PostSimulate, а другие использовали обратные вызовы или статический мост между кодом модели и контроллера. Это работало, но только пока всё происходило строго в ожидаемом порядке. Как вы понимаете, добавление более сложных систем космического аппарата не облегчало поддержание этого порядка.
Я заменил эту логику буфером полётных команд. Теперь модули не вносят структурные изменения напрямую. Вместо этого они создают команды для появления, расцепления, соединения или уничтожения объектов, а сами команды выполняются после текущего шага симуляции. Временные идентификаторы космических аппаратов и деталей позволяют одной команде ссылаться на результат другой, даже если за это время аппарат был разделён или объединён. Это также позволило удалить небезопасные обратные вызовы, статический мост контроллера и весь этап PostSimulate. Теперь существует одно чётко определённое место, где происходят структурные изменения.
Показывать в этом разделе нечего, поэтому просто вставлю скриншот из случайного полета
Другой проблемой были соединённые космические аппараты. Раньше каждый аппарат независимо решал, должен ли он использовать полноценную физическую симуляцию или упрощённую математическую. Это требовало множества обходных решений, когда два аппарата соединялись шарниром. Теперь космические аппараты и шарниры образуют граф. Добавление шарнира объединяет две группы, его удаление перестраивает связанные компоненты, а вся группа всегда переключается между режимами симуляции целиком. Поэтому больше не может возникнуть ситуация, когда одна половина состыкованной станции рассчитывается физическим движком, а другая считает, что благополучно движется по рельсам.
Что наиболее важно, это создаёт предсказуемую основу для будущих систем симуляции. Новая система может запросить физическую симуляцию или запланировать структурную операцию, не зная, как полётный контроллер обрабатывает каждый особый случай. Более сложные последовательности — например, создание космического аппарата, добавление его шарниров и отделение другой детали в рамках одного обновления — теперь могут выполняться в контролируемом порядке, без рекурсии и недействительных ссылок. Благодаря этому рефакторингу будущие расширения симуляции будет проще реализовывать и отлаживать, а вероятность их поломки значительно снизится. Как прямое следствие, космические аппараты с раскрытыми парашютами или небесными кранами теперь можно сохранять и загружать в правильном состоянии.
Изменения анимаций
Раньше анимации деталей были преимущественно визуальными эффектами, управляемыми Unity Animator. Игра изменяла логическое и физическое состояние мгновенно, в то время как модель могла ещё несколько секунд раскладываться, выдвигаться или раскрываться. Особенно заметно это было с парашютами: сопротивление, точки крепления тросов и другие физические параметры переключались в развёрнутое состояние ещё до того, как купол действительно его достигал. Анимации также могли пропускаться, если визуальная модель создавалась с задержкой — после загрузки сохранения или во время ускорения времени. Я добавил несколько обходных решений для таких случаев, но каждое из них решало лишь одну конкретную проблему и делало всю систему ещё сложнее для понимания.
Теперь переходы анимаций являются частью модели симуляции. Их продолжительность измеряется по реальному пути Animator во время запекания детали, а активное исходное состояние, целевое состояние и время начала сохраняются вместе с космическим аппаратом. Визуальные контроллеры просто отображают позу, рассчитанную по времени симуляции, поэтому повторное создание визуального представления или загрузка посреди анимации восстанавливают нужный момент, а не запускают её заново. Центр масс, границы и сопротивление интерполируются с использованием того же прогресса. Команды, которые могут вызвать необратимое физическое изменение, также проверяют возможность запуска необходимого перехода, прежде чем что-либо делать.
Результат одного из экспериментов, возможно с таким вы тоже столкнетесь
Я также добавил запечённые профили трансформаций для объектов, движущихся во время анимации. Они позволяют точкам крепления тросов и якорям физических шарниров следовать за раскрывающимся куполом парашюта вместо мгновенного перемещения в его конечное положение. Эта же система поддерживает положение, вращение и масштаб, поэтому она не ограничивается парашютами: будущие вращающиеся приборы, выдвижные штанги, двери и другие анимированные механизмы смогут использовать её без отдельной специализированной реализации. Теперь анимация, физика и визуальная составляющая используют единые часы и единый источник истины, что должно значительно упростить реализацию движущихся деталей в будущем.
Сохранение истории полётов
Теперь журнал каждого космического аппарата, кроме обломков, сохраняется на панели истории полётов. Даже если вы выведете аппарат из эксплуатации или удалите его, вы всё равно сможете найти и прочитать его журнал. Журналы действующих космических аппаратов также обновляются в реальном времени, поэтому вам даже не нужно открывать полёт, чтобы узнать, что происходит.
Список событий журнала также был расширен множеством новых записей, включая стыковку и расстыковку, вход в атмосферу и выход из неё, достижение орбитальных этапов, сброс деталей и обтекателей, события парашютов, смену основного небесного тела, исчерпание топлива и приводнение.
Функции удаления истории пока нет, она будет добавлена в будущем
Работа продолжается
Обновление 0.26 представит последние крупные необходимые системы полёта, которые повлияют на дизайн игры и деталей. После этого я планирую выпустить ещё одно обновление контента для песочницы, а затем полностью переключиться на разработку режима выживания и строительства космопорта.
Что касается текущего патча, из-за огромного количества изменений что-то могло сломаться. Поэтому в течение следующих двух недель я буду работать в режиме поддержки и готов принимать и обрабатывать любые отправленные вами сообщения об ошибках. Спасибо, и до встречи в полноценном обновлении.
v0.25.42 Release Notes
Features:
- added a persistent flight history with pagination, end-of-mission records, and entries for removed spacecraft;
- added spacecraft decommissioning and splashed-state tracking;
- added reversible assembly animations and animation previews;
- added physics interpolation between animation states;
- save files can now be moved freely between save slot folders;
- custom saves now load directly into flight;
- added dynamic time zone changes during flight below 20 km and use of UTC above;
- added flight journal entries for docking and undocking, atmosphere entry and exit, orbital milestones, part and fairing jettison, parachute events, primary-body changes, propellant depletion, and splashdowns;
- added launch-from-anywhere support for surface mods;
- TAA is now improved and enabled by default during the flight instead of SMAA (less flickering).
New content:
- added the first iteration of cloth-simulated parachute visuals;
- improved grammar and localization across tutorials and quests;
- added drogue chutes and configured pilot chutes.
Changes:
- improved the accuracy and stability of elliptic-orbit calculations, especially for highly eccentric and near-parabolic orbits;
- prevented precision loss in hyperbolic trajectories near their asymptotes;
- corrected open-orbit timing so hyperbolic and parabolic trajectories are no longer treated as periodic;
- corrected parabolic calculations for large negative mean anomalies;
- corrected hyperbolic targeting tangents and invalid intersection handling;
- corrected targeting subdivision angle wrapping and sphere-of-influence limits for combined orbit sections;
- reworked thermal radiation to use solvers and improved atmospheric conduction;
- reworked the flight simulation command, spacecraft group, joint storage, and part-state systems;
- improved flight journal presentation and pagination;
- improved UI sprite clarity;
- optimized cable simulation and proximity calculations.
Part changes:
- improved mirror symmetry, snapping, and offset behavior;
- improved wheel and landing-gear placement and rotation;
- reworked joint offsets to use baked configurations and IDs;
- improved parachute deployment, loading, decoupling, attachment, and cloth baking;
- improved reversible part animations and staging integration.
Fixes:
- disappearing sphere-of-influence exits when editing maneuvers while reducing speed;
- incorrect atmosphere-exit altitude data and occasionally broken initial orbit updates;
- parabolic true-anomaly and mean-anomaly conversions receiving eccentricity instead of the actual anomaly;
- parabolic orbits being misclassified near escape velocity because of floating-point rounding;
- incorrect orientation when reconstructing inclined near-circular orbits from position and velocity;
- inaccurate elliptic and hyperbolic anomaly calculations near zero mean anomaly, especially close to parabolic eccentricities;
- incorrect midpoint and half-size calculations for orbit sections crossing the zero-angle boundary;
- incorrect wrapped-section sample offsets and elliptic sample-index overflow at 2π;
- flight journal interaction, loading, record-related, and pagination problems;
- missing tutorial part-name localization;
- atmospheric conduction being applied twice alongside convection;
- natural and forced atmospheric convection using radius instead of diameter and the wrong average-distance input;
- internal heat production and contents heat transfer using total part mass without excluding skin mass;
- heat transfer between skins, part interiors, connected parts, and contents not accounting correctly for both sides’ thermal capacities;
- heat-shield ablation rates changing with the simulation time step;
- reentry radiative heating being ten times too high because of an incorrect W/cm²-to-W/m² conversion factor;
- burn-time and maneuver data not updating after staging or throttle changes;
- angular momentum transfer after decoupling and spacecraft undocking;
- spacecraft entering different physics worlds;
- stale connections after part or spacecraft destruction;
- transforms and rotations after decoupling;
- multiple parachute deployment, save-loading, attachment, and recursion errors;
- cable simulation stopping while time was paused;
- the operation of Skycrane 0;
- assembly animation skipping and preview problems;
- repeated undo/redo failures involving staging, offset, and rotation operations;
- broken mirror symmetry and symmetric-part offset behavior;
- wheel twisting, mirrored-part offsets, and wheel-system calculations;
- the recovery button being unavailable in water;
- the journal button appearing in rocket assembly mode;
- a distorted navball when DLSS rendering scale was below 100%;
- blurry UI sprites and several missing UI localizations.
