Dlaczego konwertować PSSL na GLSL?
Zespoły przenoszące renderer z PS4 na OpenGL lub Vulkan potrzebują swoich shaderów PSSL w formacie .GLSL. PSSL czyta się bardzo podobnie do HLSL, a GLSL wyraża te same koncepcje za pomocą innych słów kluczowych, więc staranny port linia po linii wraz z małym nagłówkiem makr załatwia sprawę. Częstym skrótem jest najpierw port z PSSL do HLSL, a następnie użycie automatycznego kompilatora krzyżowego HLSL-to-GLSL.
Jak przekonwertować PSSL na GLSL
Ręczny port w edytorze tekstu FREE
Otwórz plik .pssl i przepisz go jako GLSL: przekonwertuj pary Texture2D/SamplerState na sampler2D, zastąp semantykę wejścia/wyjścia przez layout(location=...) i zmapuj mul() na operator * w GLSL przy użyciu transponowanych macierzy.
Port do HLSL, a następnie ShaderConductor OPEN-SOURCE
Najpierw przekonwertuj PSSL na HLSL, a następnie uruchom ShaderConductor od Microsoft (lub SPIRV-Cross), aby automatycznie wygenerować czytelny GLSL z tego HLSL.
Nagłówek z makrami (shim) FREE
Dodaj współdzielony nagłówek #define, który przypisuje słowa kluczowe PSSL do ich odpowiedników w GLSL, dzięki czemu duża część kodu kompiluje się bez zmian, podobnie jak w wieloplatformowym podejściu HPSL firmy Frictional Games.
O tych formatach
Plik .pssl zawiera kod shadera napisany w PlayStation Shader Language, języku programowania GPU używanym do tworzenia gier na konsole PlayStation 4 i PlayStation 5. Tekstowe pliki .pssl to…
Otwórz szczegóły .PSSL →Plik .GLSL jest powiązany z OpenGL Shading Language source code, który jest plikiem typu misc.
Otwórz szczegóły .GLSL →Jakość i na co uważać
- Żaden parser nie czyta PSSL bezpośrednio, więc pierwszym krokiem jest zawsze ręczna edycja.
- HLSL/PSSL używają macierzy wierszowych (row-major) i współrzędnej z w przestrzeni przycinania w zakresie [0,1]; GLSL jest kolumnowy (column-major) z z w zakresie [-1,1], więc matematyka macierzy i głębia wymagają dostosowania.
- Funkcje wewnętrzne (intrinsics) specyficzne dla PS4 oraz powiązania rejestrów nie mają odpowiedników w GLSL i muszą zostać zastąpione ręcznie.