Будущее Sodium
Felix14_v2В разработке Sodium грядут большие перемены!
Про мощь оптимизации Sodium в наши дни писали уже везде, и вполне заслуженно: за сравнительно короткую историю развития мода разработчикам удалось создать стабильный, быстрый и эффективный графический движок, который максимально точно воссоздаёт обычный внешний вид игры, разницу между стандартным для Minecraft движком Blaze3D и графическим движком Sodium крайне сложно заметить. Однако мод не просто так даже спустя три года с момента выхода первой версии всё ещё находится на стадии альфы – от полноценного релиза его отделяют несколько важных функций, пока не реализованных. В этом ролике поговорим о будущем Sodium и том, что же отделяет его от настоящего. Упомянем некоторые драмы из истории мода в прошлом, а также расскажем, как разработчики Sodium написали научную статью, пытаясь исправить баг.
Глава 1. Ошибка №38
С самых первых дней и поныне в репозитории Sodium (где он и разрабатывается) висит нерешённым отчёт об ошибке под номером 38, связанный с отображением полупрозрачных блоков. Вы и сами могли заметить, что цветное стекло, лёд, вода или блоки мёда в Sodium выглядят как-то странно. И действительно, правильная отрисовка прозрачных элементов – это одна из фундаментальных проблем в компьютерной графике. И эта проблема до сих пор не решена в Sodium, что делает его хоть и хорошей, но всё ещё не полноценной заменой Blaze3D.
Решить эту проблему пытались очень давно. В её основе лежит то, что для правильного смешивания цветов полупрозрачных блоков на плоском экране их грани нужно сначала отсортировать – настроить очерёдность их обработки так, чтобы в процессе отрисовки видеокартой они накладывались друг на друга в том же порядке, что и в реальном мире. Да ещё и делать это непрерывно, а это сильно бьёт по производительности. Зато благодаря такой сортировке мы можем любоваться красивым эффектом дымки под несколькими слоями цветного стекла:

Довольно скоро появилась первая попытка исправить ошибку 38. Тогда было решено попробовать отказаться от сортировки вовсе, и просто смешивать все прозрачные цвета подряд:


А вот так должно быть:

Как видите, результат получился довольно ужасным, это на Minecraft-то даже не похоже.
Blaze3D, как и Optifine, выполняют сортировку на процессоре. Это достаточно легко, но медленно, поэтому спустя пол года в Sodium появилась вторая попытка перенести задачи сортировки на видеокарту... но был нюанс. Проблема заключалась в том, что это работало только на современных видеокартах с OpenGL 4.3 и выше. То есть, основная аудитория Sodium со старым железом и яблочными устройствами осталась бы с носом. Также разработчик, занимавшийся этим, вскоре забросил дело, так и не успев довести алгоритм сортировки до рабочего состояния.
В начале этого года его наработки попытались внедрить в новой версии Sodium, но старая проблема совместимости со старыми видеокартами никуда не делась. Поэтому один из разработчиков, Douira, взялся за реализацию сортировки прозрачных граней на центральном процессоре, однако с одной новой и очень важной оптимизацией. Вместо того, чтобы каждый кадр заново рассчитывать позицию всех прозрачных блоков, ему удалось изобрести новый алгоритм, который бы запускал сортировку только тогда, когда это действительно нужно. Он даже написал целую научную статью с детальным описанием его алгоритма! Такое решение позволило снизить нагрузку от расчётов в десятки раз, при этом не ломая совместимость со старыми компьютерами за счёт вычислений на процессоре. Скорее всего, уже в ближайшем будущем мы увидим исправление такой исторической ошибки под номером 38, на которое было потрачено столько сил... Хотя другой разработчик Sodium параллельно с этим всё-таки довёл до ума предыдущий алгоритм, использующий видеокарту, и добавил его в свой порт Sodium для Forge – Embeddium [на фоне можно показать экран настроек Embeddium].
Глава 2. Возрождение Forge
– Но погодите-ка, то есть получается, что разработчики Sodium занимаются портированием мода на Forge, хотя ранее сами же категорически утверждали, что этого никогда не будет?
– Всё верно, но и тут не всё так просто. Не так давно в сообществе моддинга случились две очень важные вещи.
Во-первых, в комьюнити Forge произошёл раскол: сообщество его разработчиков устроило настоящий переворот в дискорд-сервере, отстранив от руководства владельца Forge и главного разработчика под ником LexManos, известного своей токсичностью и нежеланием развивать свой проект. В своё время, кстати, именно из-за токсичности, клеветы и неадекватного отношения с его стороны Ангелина, создатель Sodium, и ушла с Forge.
Во-вторых, к команде Sodium присоединился автор того самого Embeddium – опытный разработчик (в том числе и модов для Forge), о котором я уже упоминал ранее. И теперь, впервые за всю историю мода, его команда действительно начала изучать возможность официальной поддержки Forge. Прямо сейчас разработчики экспериментируют с библиотекой Architectury, которая позволяет модам работать одновременно и на Fabric, и на Forge – она возьмёт на себя задачи совместимости с загрузчиками и их API.
Кстати об API. Кто не в курсе, это такая штука, которая позволяет одним модам объединяться с функционалом других. И это то, что до недавних пор было проблемной частью Sodium – вместе с ним приходилось ставить Indium, чтобы «подружить» его с другими модами. Дело в том, что разработчики самого Fabric вмешались в ситуацию и помогли реализовать в Sodium поддержку API рендеринга Fabric, и уже в Sodium 0.6.0 вам, скорее всего, больше не придётся заботиться об установке Indium. А на ближайшие дни запланирован выход Sodium 0.5.4 с новой порцией оптимизаций и исправлений ошибок.
Глава 3. Что же дальше?
Сейчас Sodium как никогда близок к тому, чтобы стать полноценным графическим движком. От намеченного списка функций, которые нужно реализовать, осталось всего два пункта – это сортировка прозрачности и поддержка Fabric Rendering API. Самое время подумать о будущем проекта. Конечно, можно просто остановиться на достигнутом, но похоже, что у Ангелины на этот счёт другие планы:

На прямой вопрос о том, на чём она хочет сфокусироваться в будущем, Ангелина ответила: «на вещах, ломающих паритет с ванилью и эстетичность». Но не стоит пугаться, ведь обычно после таких заявлений она идёт исправлять очередное кривое место ванильного графического движка. Например, в прошлый раз под нож попал древнейший баг, из-за которого в режиме «быстро» листья деревьев чернели, а также забагованный код, отвечающий за отрисовку облаков (который, по всей видимости, писал ещё Нотч) [ПРИМЕЧАНИЕ: тут нужны иллюстрации в формате до/после, но у меня уже нет сил запускать майн :3]. На этот раз под нож она хочет пустить баги мягкого освещения за счёт кардинального изменения подхода к его отрисовке, а также поэкспериментировать с гамма-коррекцией, чтобы игрок научился «привыкать» к условиям темноты:


А может быть Ангелина вовсе отойдёт от разработки Sodium, ведь её основная работа – графический движок Hytale, и с выходом этой игры работы у неё только прибавится (если мы доживём до этого момента, конечно :D). Ну а на этом у меня всё.
[ну и придумать там ещё что-то в завершение. Я бы пожелал команде успехов и сохранять ментальное здоровье, т.к. Ангелина за год уже второй раз выгорает и временно бросает Sodium на произвол других участников команды]