フォト

Google AdSense


  • AdSense
無料ブログはココログ

« Unity 5.1 BetaでAndroidでCompute Shaderテスト | トップページ | テセレーションテスト »

2015.04.27

Unity 5.1からのGLSL変換の話

UNITE 2015 Tokyoなんかで言われてましたが、Unity 5.1ではOpenGLのコードに大幅に手が入るようですね。

そのことに関しては、Beta 3のRelease Noteに色々と書かれています。

http://unity3d.com/jp/unity/beta/unity5.1.0b3

たとえば、Featuresを読むとOpenGL 4.5とかES 3.1のWindowsサポートなどが書かれていますね。

Graphics: Experimental support for OpenGL 4.5 and ES 3.1 on Windows. Use -force-glcore, -force-gles(20|30|31|31aep) arguments to enable. This enables testing OpenGL ES 3.1 features on desktop. Note: no GL4 support on Mac yet.

コレに伴いシェーダーのトランスコード周りも色々と変わったようですね。

Shaders: OpenGL ES 3.0+ will use a new shader compiler backend. Based on HLSL + github.com/James-Jones/HLSLCrossCompiler + glsl-optimizer. This enables compute shaders on ES3.1 and other modern features. Existing Cg/HLSL compute, geometry and tessellation shaders can be used via automatic translation as well as with direct GLSL snippets. Note: Memory layout rule differences between DX and GL must be taken into account on the buffer data uploads.

Unityでは、従来CgやHLSLをhlsl2glslforkでGLSLにトランスコードして、それでは最適化が十分ではないので、glsl-optimizerにかけて最適化をかけてました。ちなみに、どちらもUnity TechnologiesのAras Pranckevičius氏のリポジトリですね。

hlsl2glslfork
https://github.com/aras-p/hlsl2glslfork

glsl-optimizer
https://github.com/aras-p/glsl-optimizer

ただ、hlsl2glslforkは元のシェーダがシェーダモデル3.0までの構文でないとダメですし、さらに頂点シェーダ、ピクセルシェーダ以外のシェーダステージに対応していませんでした。

そんなわけで、Unity 5.1からはOpenGL ES 3.0以降はHLSLCrossCompilerを使うようにしたみたいですね。その後で、glsl-optimizerをかけるという感じですね。HLSLCrossCompilerは、コンパイルしたHLSLのバイトコードをGLSLにしちゃうわけですが、Direct3D11のHLSL 5.0の文法に対応するので、こちらを使うってことなんでしょうね。

HLSLCrossCompiler
https://github.com/James-Jones/HLSLCrossCompiler

こうした変更というのはそのうちUnity Technologies blogなんかでも書かれるとは思いますが、マルチプラットフォーム開発でGLSLは人間が書きたくないというような場合に色々と参考になりますね。

さらに、これでしばらくは大丈夫...ってことではなくVulkanが出てきたらSPIR-Vを色々といじってHLSLからの変換をもっと賢くやるのかな?など気になってしまいますね。

« Unity 5.1 BetaでAndroidでCompute Shaderテスト | トップページ | テセレーションテスト »

Programming」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« Unity 5.1 BetaでAndroidでCompute Shaderテスト | トップページ | テセレーションテスト »