なぜ PSSL を GLSL に変換するのですか?
PS4 レンダラーを OpenGL や Vulkan に移行するチームは、PSSL シェーダーを .GLSL に変換する必要があります。PSSL は HLSL と非常によく似ており、GLSL も異なるキーワードで同じ概念を表現するため、慎重な行ごとの移植と小さなマクロヘッダーがあれば対応できます。一般的な近道は、まず PSSL を HLSL に移植し、その後に自動化された HLSL-to-GLSL クロスコンパイラを実行することです。
PSSL から GLSL への変換方法
テキストエディタでの手動移植 FREE
.pssl ファイルを開き、GLSL として書き換えます。Texture2D/SamplerState のペアを sampler2D に変換し、入力/出力セマンティクスを layout(location=...) に置き換え、mul() を転置行列を用いた GLSL の * 演算子にマップします。
HLSL への移植、その後に ShaderConductor OPEN-SOURCE
まず PSSL を HLSL に変換し、次に Microsoft の ShaderConductor(または SPIRV-Cross)を実行して、その HLSL から読み取り可能な GLSL を自動的に生成します。
マクロシムヘッダー FREE
PSSL のキーワードを GLSL の同等品にエイリアスする共有の #define ヘッダーを追加することで、Frictional Games のクロスプラットフォーム HPSL アプローチのように、本体の多くを変更せずにコンパイルできるようにします。
これらの形式について
.pssl ファイルには、Sony の PlayStation Shader Language で記述されたシェーダーコードが格納されています。これは PlayStation 4 および PlayStation 5 のゲーム開発で使用される GPU プログラミング言語です。テキストベースの .pssl ファイルはプレーンなソースコードであり、Visual Studio…
.PSSL の詳細を開く →.GLSL ファイルは、misc ファイルである OpenGL Shading Language source code に関連付けられています。
.GLSL の詳細を開く →品質と注意点
- PSSL を直接読み取るパーサーは存在しないため、最初のステップは常に手動編集になります。
- HLSL/PSSL は行優先行列と [0,1] のクリップ空間 z を使用しますが、GLSL は列優先で z は [-1,1] であるため、行列計算と深度の調整が必要です。
- PS4 専用のイントリンジック(組み込み関数)やレジスタ固有のバインディングには GLSL の同等品がないため、手動で置き換える必要があります。