「HLSL (High Level Shader Language)」の版間の差分
imported>Administrator 細 (Administrator がページ「HLSL」を「HLSL (High Level Shader Language)」に移動しました) |
Administrator (トーク | 投稿記録) |
||
41行目: | 41行目: | ||
==関連項目== | ==関連項目== | ||
− | |||
− | |||
− | |||
− | |||
− | |||
[[category: コンピューターグラフィックス]] | [[category: コンピューターグラフィックス]] | ||
+ | [[category: 3DCG]] | ||
+ | [[category: シェーディング言語]] |
2020年5月19日 (火) 02:07時点における版
High Level Shading Language(読み:はいれべるしぇーでぃんぐらんげーじ、通称: HLSL)とは、マイクロソフトによってDirect3D (DirectX)向けに開発されたプログラマブルシェーダーのためのシェーディング言語である。
目次
概要
HLSLはシェーダー特化型の汎用的なプログラミング言語である。
HLSLはNVIDIA Cg(以下Cg言語)の方言であり、Cg言語から安定した仕様のみを採用したサブセットである。
かつてシェーディング言語は古い技術で固めた「汎用性のGLSL」と最新鋭の技術を次々取り込む「突撃仕様のCg言語」の二択であった。ネットに溢れかえる情報は「最新技術動向」が中心なので後者が圧倒的な勢力となっていった。しかしならがCg言語はNVIDIA製でありNVIDIA製品でしか使えない。そこで「NVIDIA製のCg言語」を「マイクロソフト製のHLSL」とすることでAMDやIntelなどの他社も宗教上の理由を回避して利用できるようにしたのであった。
HLSLは環境依存の非常に低い言語であるため、そのサブセットが多数存在する。たとえばMonoGameやPlayStation(サブセットのPSSL)などが採用ある。Unityに至ってはOpenGL向けの実装であってもGLSLではなくHLSLの利用が推奨されている。また、OpenGL後続となるVulkanでもGLSLに加えHLSLのサポートが追加された。
シェーダーとエフェクト
HLSLで書かれたプログラムのソースコードは「エフェクトファイル(拡張子:.fxファイル)」と呼ばれる。MonoGameなんかだとfxファイルをコンパイルして出来上がったものはEffectクラスで保持される。
厳密には「各パイプラインステージでの処理を1つのソースコードに書いたもの」が「エフェクトファイル」なのだが、9割ピクセルシェーダーで処理してるだけだったりするので実質的にイコールであることが多い。
つまり、これが原因で「シェーダー」を指して「エフェクト」と呼ばれることが多々あるのである。非常に紛らわしいがどっちもほぼ同じ意味である。ゲーム界隈で「エフェクト」と言われたらシェーダーの事かもしれないので注意しよう。
扱えるパイプラインステージ
HLSLで扱える機能(パイプラインステージ)は環境により異なる。どの機能が使えるかという制限は大雑把に「シェーダーモデル(英語:Shader Model、通称:SM)」という言葉で表される。2018年時点では「PCからスマホまでカバーするSM3.0」と、ハイエンドPCを想定した「それ以上」の2種類に大分類されると考えておけばよい。
なお、実行環境によりさらに細かな制限がある場合もある。
SM 1.x〜3.0 (Direct3D 9)
MonoGameなどのサブセットではほぼこれである。 iOSやAndroidで幅広い機種をサポートするためには致し方ない感じである。また、OpenGL ES系ではバーテックスシェーダーの書き戻しができないなどの制限もあり、それらは実行時にはじめてエラーになる。気をつけよう。