Зачем конвертировать PSSL в GLSL?
Командам, переносящим рендерер PS4 на OpenGL или Vulkan, нужны шейдеры PSSL в формате .GLSL. PSSL читается почти как HLSL, а GLSL выражает те же концепции другими ключевыми словами, поэтому тщательный построчный перенос плюс небольшой заголовочный файл с макросами справятся с задачей. Распространенный обходной путь - сначала перенести PSSL в HLSL, а затем запустить автоматический кросс-компилятор HLSL в GLSL.
Способы конвертации PSSL в GLSL
Ручной перенос в текстовом редакторе FREE
Откройте файл .pssl и перепишите его как GLSL: преобразуйте пары Texture2D/SamplerState в sampler2D, замените входную/выходную семантику на layout(location=...) и замените mul() на оператор * в GLSL с транспонированными матрицами.
Перенос в HLSL, затем в ShaderConductor OPEN-SOURCE
Сначала конвертируйте PSSL в HLSL, затем запустите Microsoft ShaderConductor (или SPIRV-Cross), чтобы автоматически сгенерировать читаемый GLSL из этого HLSL.
Заголовочный файл с макросами FREE
Добавьте общий заголовок #define, который связывает ключевые слова PSSL с эквивалентами GLSL, чтобы большая часть кода компилировалась без изменений, аналогично кроссплатформенному подходу HPSL в Frictional Games.
Об этих форматах
Файл .pssl содержит код шейдеров, написанный на PlayStation Shader Language - языке программирования GPU, используемом для разработки игр на PlayStation 4 и PlayStation 5. Текстовые файлы…
Открыть детали .PSSL →Файл .GLSL связан с OpenGL Shading Language source code, это файл категории misc.
Открыть детали .GLSL →Качество и на что обратить внимание
- Ни один парсер не читает PSSL напрямую, поэтому первым шагом всегда является ручное редактирование.
- HLSL/PSSL используют матрицы со строчным хранением и z в пространстве отсечения [0,1]; GLSL использует столбцовое хранение и z в диапазоне [-1,1], поэтому матричную математику и глубину нужно корректировать.
- Специфичные для PS4 интринсики и привязки к регистрам не имеют эквивалентов в GLSL и должны быть заменены вручную.