最新版 |
編集中の文章 |
1行目: |
1行目: |
| '''High Level Shading Language'''(読み:はいれべるしぇーでぃんぐらんげーじ、通称: [[HLSL]])とは、[[マイクロソフト]]によって[[Direct3D]] ([[DirectX]])向けに[[開発]]された[[プログラマブルシェーダー]]のための[[シェーディング言語]]である。 | | '''High Level Shading Language'''(読み:はいれべるしぇーでぃんぐらんげーじ、通称: [[HLSL]])とは、[[マイクロソフト]]によって[[Direct3D]] ([[DirectX]])向けに[[開発]]された[[プログラマブルシェーダー]]のための[[シェーディング言語]]である。 |
| | | |
− | ==概要== | + | == 概要 == |
− | HLSLは[[シェーダー]]特化型の汎用的な[[プログラミング言語]]である。
| + | HLSLは大雑把にいえば[[シェーダー]]特化型の汎用的な[[プログラミング言語]]である。 |
| + | [[アセンブラ]]みたいな[[言語]]とGPUメーカー独自の言語しかない状況で颯爽と登場した[[高級言語]]である。 |
| | | |
− | HLSLは[[NVIDIA Cg]](以下[[Cg言語]])の方言であり、Cg言語から安定した仕様のみを採用したサブセットである。
| + | HLSLは環境依存が非常に低い言語であるため[[DirectX]]以外にも[[MonoGame]]や[[PlayStation]]([[サブセット]]の[[PSSL]])などにも採用されている。 |
| + | [[Unity]]に至っては[[OpenGL]]向けの実装であっても[[GLSL]]ではなくHLSLの利用が推奨されている。 |
| | | |
− | かつてシェーディング言語は、古い技術で固めた「汎用性の[[GLSL]]」と、最新鋭の技術を次々取り込む「突撃仕様の[[Cg言語]]」の二択であった。そして[[ネット]]に溢れかえる情報は「最新技術動向」が中心であるためCg言語が圧倒的な勢力となっていった。
| + | == 扱えるパイプラインステージ == |
| + | * SM 1.x〜3.0 (Direct3D 9) |
| + | ** [[バーテックスシェーダー]] |
| + | ** [[ピクセルシェーダー]] |
| + | * SM 4.x (Direct3D 10) |
| + | ** [[ジオメトリシェーダー]] |
| + | * SM 5.x (Direct3D 11/12) |
| + | ** [[ハルシェーダー]] |
| + | ** [[ドメインシェーダー]] |
| + | ** [[コンピュートシェーダー]] |
| | | |
− | しかしならがCg言語は[[NVIDIA]]製でありNVIDIA製品でしか使えない。そこで「[[NVIDIA]]製の[[Cg言語]]」を「[[マイクロソフト]]製のHLSL」とすることで[[AMD]]や[[Intel]]などの他社も[[宗教上の理由]]を回避して利用できるようにした。
| + | == 関連項目 == |
| | | |
− | その後も「最新仕様のCg言語」と「安定仕様のHLSL」というベータ版とリリース版のような体制が続けられたが、2012年にCg言語が更新終了し、以降はHLSLに一本化された。
| + | == 参考文献 == |
| + | {{reflist}} |
| | | |
− | == サブセット ==
| + | {{stub}} |
− | 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]]系では[[バーテックスシェーダー]]の書き戻しができないなどの制限もあり、それらは実行時にはじめてエラーになる。気をつけよう。
| |
− | | |
− | ===SM 4.x (Direct3D 10)===
| |
− | | |
− | *[[ジオメトリシェーダー]]
| |
− | | |
− | ===SM 5.x (Direct3D 11/12)===
| |
− | | |
− | *[[ハルシェーダー]]
| |
− | *[[ドメインシェーダー]]
| |
− | *[[コンピュートシェーダー]]
| |
− | | |
− | ==関連項目==
| |
− | * [[HLSLの組み込み関数]]
| |
− | | |
− | | |
− | [[category: コンピューター・グラフィックス]]
| |
− | [[category: 3DCG]]
| |
− | [[category: シェーディング言語]]
| |
− | [[category: HLSL]]
| |