Sodium Core Shader Support
Позволяет ресурспакам заменять шейдеры Sodium своими собственными, аналогично тому, как ресурспаки могут заменять базовые шейдеры vanilla.
Документация для пользователей
Sodium Core Shader Support позволяет ресурспакам заменять базовые шейдеры Sodium своими собственными. Это не означает, что данный мод заставит работать любой vanilla ресурспак на Sodium. Ресурспаки будут работать только в том случае, если они явно указывают совместимость с Sodium Core Shader Support.
Если вы используете поддерживаемый ресурспак, его можно активировать как любой другой ресурспак.
Некорректный ресурспак
Sodium может отображать сообщение The following resource packs are incompatible with Sodium
(Следующие ресурспаки несовместимы с Sodium) в правом верхнем углу после перезагрузки ресурсов, перечисляя ваши активные базовые шейдеры. Это сообщение будет появляться всегда, даже если ресурспак поддерживает шейдеры Sodium, и его можно игнорировать.
Список ресурспаков
Небольшой список ресурспаков, работающих с Sodium. Если вы создали собственный ресурспак, создайте issue на GitHub для добавления в список!
Документация для разработчиков шейдеров
Важно понимать, что ваши vanilla шейдеры нельзя просто скопировать в шейдеры Sodium. У Sodium есть собственные шейдеры для блоков и облаков:
- assets/sodium/shaders/
| - clouds.fsh
| - clouds.vsh
| - blocks/
| - block_layer_opaque.fsh
| - block_layer_opaque.vsh
| - include/
| - fog.glsl
| - chunk_material.glsl
| - chunk_matrices.glsl
| - chunk_vertex.glsl
Если вы не планируете изменять облака Sodium, наиболее важными обычно являются block_layer_opaque
. Файлы chunk_material.glsl
, chunk_matrices.glsl
и chunk_vertex.glsl
трогать не следует, если вы не понимаете их назначения.
Получение исходного кода шейдеров Sodium
Для получения исходного кода шейдеров Sodium определённой версии скачайте файл .jar
этой версии и распакуйте его как архив .zip
. Внутри распакованного архива вы найдёте папку assets
с указанной выше структурой каталогов.
block_layer_opaque
block_layer_opaque
используется для всех блоков и block entity. В vanilla Minecraft эквивалентом являются terrain.fsh
и terrain.vsh
(в старых версиях — rendertype_solid
, rendertype_cutout
, rendertype_cutout_mipped
, …).
Дополнительно Sodium Core Shader Support добавляет несколько define в шейдерах Sodium block_layer_opaque.fsh
и block_layer_opaque.vsh
для некоторых типов рельефа:
RENDER_PASS_SOLID
: Сплошные блокиRENDER_PASS_CUTOUT
: Блоки типа листвы, травы, стекла и т.п.RENDER_PASS_TRANSLUCENT
: Блоки с реальной прозрачностью, например вода, мёд, слизь и т.п.
Их можно использовать следующим образом:
#ifdef RENDER_PASS_SOLID
// специальное затенение для сплошных объектов
#endif
Указание поддерживаемых версий Sodium
Разработчики Sodium могут изменять внутренние шейдеры и связанный код без предупреждения. Поэтому важно указывать, с какими версиями Sodium и Minecraft совместим ваш пак. Это делается в специальном файле versions.json
. Он должен находиться в вашем ресурспаке в новой директории assets/sodiumcoreshadersupport
под именем versions.json
. Содержимое файла может выглядеть так:
{
"supported-versions": {
"1.21": [ "0.5.11+mc1.21" ],
"1.21.1": [ "0.5.11+mc1.21" ]
}
}
В приведённом примере ресурспак заявляет совместимость с Sodium 0.5.11
на Minecraft 1.21
и 1.21.1
. Более абстрактное описание:
Файл versions.json
должен содержать объект JSON с ключом supported-versions
. Значение supported-versions
должно быть картой, сопоставляющей версии Minecraft с массивом допустимых версий Sodium. Мод SodiumCoreShaderSupport проверит, установлена ли версия Sodium из массива для текущей версии Minecraft.
- Если версия Minecraft и/или Sodium отсутствует в
supported-versions
, пак можно активировать с предупреждением. - Если у пользователя не установлен Sodium, пак можно активировать.
- Если
versions.json
отсутствует, пак можно активировать с предупреждением. - Если
versions.json
содержит ошибки, пак можно активировать с предупреждением.
Импорты
Шейдеры Sodium должны находиться в директории assets/sodium/shaders
. Но вы можете импортировать файлы из assets/minecraft/shaders
с помощью директивы #import
. Следующий код включит файл assets/minecraft/shaders/include/test.glsl
:
#import <minecraft:include/test.glsl>
Таким образом можно создавать пользовательские файлы .glsl, которые можно импортировать в шейдеры (как в базовых шейдерах, так и в шейдерах Sodium). Эти файлы должны содержать основную «логику» шейдера. Пример шейдерпака, работающего с этим подходом как на vanilla, так и на Sodium, можно найти здесь.