「HLSL (High Level Shader Language)」の版間の差分
imported>Administrator |
imported>Administrator |
||
| 1行目: | 1行目: | ||
'''High Level Shading Language'''(読み:はいれべるしぇーでぃんぐらんげーじ、通称: [[HLSL]])とは、[[マイクロソフト]]によって[[Direct3D]] ([[DirectX]])向けに[[開発]]された[[プログラマブルシェーダー]]のための[[シェーディング言語]]である。 | '''High Level Shading Language'''(読み:はいれべるしぇーでぃんぐらんげーじ、通称: [[HLSL]])とは、[[マイクロソフト]]によって[[Direct3D]] ([[DirectX]])向けに[[開発]]された[[プログラマブルシェーダー]]のための[[シェーディング言語]]である。 | ||
== 概要 == | ==概要== | ||
HLSLは[[シェーダー]]特化型の汎用的な[[プログラミング言語]]である。 | |||
HLSLは[[NVIDIA Cg]](以下[[Cg言語]])の方言であり、Cg言語から安定した仕様のみを採用したサブセットである。[[NVIDIA]]製の[[Cg言語]]を「マイクロソフト製のHLSL」とすることで[[AMD]]や[[Intel]]などの他社も利用できるようにしたもの、つまり[[宗教上の理由]]を回避するために開発されたものである。 | |||
== シェーダーとエフェクト == | HLSLは環境依存の非常に低い言語であるため、そのサブセットが多数存在する。たとえば[[MonoGame]]や[[PlayStation]]([[サブセット]]の[[PSSL]])などが採用ある。[[Unity]]に至っては[[OpenGL]]向けの実装であっても[[GLSL]]ではなくHLSLの利用が推奨されている。また、OpenGL後続となる[[Vulkan]]でもGLSLに加えHLSLのサポートが追加された。 | ||
==シェーダーとエフェクト== | |||
HLSLで書かれた[[プログラム]]の[[ソースコード]]は「エフェクトファイル(拡張子:[[.fxファイル]])」と呼ばれる。[[MonoGame]]なんかだとfxファイルを[[コンパイル]]して出来上がったものはEffectクラスで保持される。 | HLSLで書かれた[[プログラム]]の[[ソースコード]]は「エフェクトファイル(拡張子:[[.fxファイル]])」と呼ばれる。[[MonoGame]]なんかだとfxファイルを[[コンパイル]]して出来上がったものはEffectクラスで保持される。 | ||
| 13行目: | 15行目: | ||
つまり、これが原因で「シェーダー」を指して「エフェクト」と呼ばれることが多々あるのである。非常に紛らわしいがどっちもほぼ同じ意味である。[[ゲーム]]界隈で「エフェクト」と言われたらシェーダーの事かもしれないので注意しよう。 | つまり、これが原因で「シェーダー」を指して「エフェクト」と呼ばれることが多々あるのである。非常に紛らわしいがどっちもほぼ同じ意味である。[[ゲーム]]界隈で「エフェクト」と言われたらシェーダーの事かもしれないので注意しよう。 | ||
== 扱えるパイプラインステージ == | ==扱えるパイプラインステージ== | ||
HLSLで扱える機能(パイプラインステージ)は環境により異なる。どの機能が使えるかという制限は大雑把に「[[シェーダーモデル]](英語:Shader Model、通称:SM)」という言葉で表される。2018年時点では「[[PC]]から[[スマホ]]までカバーするSM3.0」と、[[ハイエンドPC]]を想定した「それ以上」の2種類に大分類されると考えておけばよい。 | HLSLで扱える機能(パイプラインステージ)は環境により異なる。どの機能が使えるかという制限は大雑把に「[[シェーダーモデル]](英語:Shader Model、通称:SM)」という言葉で表される。2018年時点では「[[PC]]から[[スマホ]]までカバーするSM3.0」と、[[ハイエンドPC]]を想定した「それ以上」の2種類に大分類されると考えておけばよい。 | ||
なお、実行環境によりさらに細かな制限がある場合もある。 | なお、実行環境によりさらに細かな制限がある場合もある。 | ||
=== SM 1.x〜3.0 (Direct3D 9) === | ===SM 1.x〜3.0 (Direct3D 9)=== | ||
* [[バーテックスシェーダー]] | |||
* [[ピクセルシェーダー]] | *[[バーテックスシェーダー]] | ||
*[[ピクセルシェーダー]] | |||
[[MonoGame]]などのサブセットではほぼこれである。 | [[MonoGame]]などのサブセットではほぼこれである。 | ||
[[iOS]]や[[Android]]で幅広い機種をサポートするためには致し方ない感じである。また、[[OpenGL ES]]系では[[バーテックスシェーダー]]の書き戻しができないなどの制限もあり、それらは実行時にはじめてエラーになる。気をつけよう。 | [[iOS]]や[[Android]]で幅広い機種をサポートするためには致し方ない感じである。また、[[OpenGL ES]]系では[[バーテックスシェーダー]]の書き戻しができないなどの制限もあり、それらは実行時にはじめてエラーになる。気をつけよう。 | ||
=== SM 4.x (Direct3D 10) === | ===SM 4.x (Direct3D 10)=== | ||
* [[ジオメトリシェーダー]] | |||
*[[ジオメトリシェーダー]] | |||
===SM 5.x (Direct3D 11/12)=== | |||
*[[ハルシェーダー]] | |||
* [[ハルシェーダー]] | *[[ドメインシェーダー]] | ||
* [[ドメインシェーダー]] | *[[コンピュートシェーダー]] | ||
* [[コンピュートシェーダー]] | |||
== 関連項目 == | ==関連項目== | ||
== 参考文献 == | ==参考文献== | ||
{{reflist}} | {{reflist}} | ||
{{stub}} | {{stub}} | ||
2019年9月9日 (月) 04:59時点における版
High Level Shading Language(読み:はいれべるしぇーでぃんぐらんげーじ、通称: HLSL)とは、マイクロソフトによってDirect3D (DirectX)向けに開発されたプログラマブルシェーダーのためのシェーディング言語である。
概要
HLSLはシェーダー特化型の汎用的なプログラミング言語である。
HLSLはNVIDIA Cg(以下Cg言語)の方言であり、Cg言語から安定した仕様のみを採用したサブセットである。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系ではバーテックスシェーダーの書き戻しができないなどの制限もあり、それらは実行時にはじめてエラーになる。気をつけよう。