「HLSL (High Level Shader Language)」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の3版が非表示)
6行目: 6行目:
 
HLSLは[[NVIDIA Cg]](以下[[Cg言語]])の方言であり、Cg言語から安定した仕様のみを採用したサブセットである。
 
HLSLは[[NVIDIA Cg]](以下[[Cg言語]])の方言であり、Cg言語から安定した仕様のみを採用したサブセットである。
  
かつてシェーディング言語は古い技術で固めた「汎用性の[[GLSL]]」と最新鋭の技術を次々取り込む「突撃仕様の[[Cg言語]]」の二択であった。[[ネット]]に溢れかえる情報は「最新技術動向」が中心なので後者が圧倒的な勢力となっていった。しかしならがCg言語は[[NVIDIA]]製でありNVIDIA製品でしか使えない。そこで「[[NVIDIA]]製の[[Cg言語]]」を「[[マイクロソフト]]製のHLSL」とすることで[[AMD]]や[[Intel]]などの他社も宗教上の理由を回避して利用できるようにしたのであった。
+
かつてシェーディング言語は、古い技術で固めた「汎用性の[[GLSL]]」と、最新鋭の技術を次々取り込む「突撃仕様の[[Cg言語]]」の二択であった。そして[[ネット]]に溢れかえる情報は「最新技術動向」が中心であるためCg言語が圧倒的な勢力となっていった。
  
 +
しかしならがCg言語は[[NVIDIA]]製でありNVIDIA製品でしか使えない。そこで「[[NVIDIA]]製の[[Cg言語]]」を「[[マイクロソフト]]製のHLSL」とすることで[[AMD]]や[[Intel]]などの他社も[[宗教上の理由]]を回避して利用できるようにした。
 +
 +
その後も「最新仕様のCg言語」と「安定仕様のHLSL」というベータ版とリリース版のような体制が続けられたが、2012年にCg言語が更新終了し、以降はHLSLに一本化された。
 +
 +
== サブセット ==
 
HLSLは環境依存の非常に低い言語であるため、そのサブセットが多数存在する。たとえば[[MonoGame]]や[[PlayStation]]([[サブセット]]の[[PSSL]])などが採用ある。[[Unity]]に至っては[[OpenGL]]向けの実装であっても[[GLSL]]ではなくHLSLの利用が推奨されている。また、OpenGL後続となる[[Vulkan]]でもGLSLに加えHLSLのサポートが追加された。
 
HLSLは環境依存の非常に低い言語であるため、そのサブセットが多数存在する。たとえば[[MonoGame]]や[[PlayStation]]([[サブセット]]の[[PSSL]])などが採用ある。[[Unity]]に至っては[[OpenGL]]向けの実装であっても[[GLSL]]ではなくHLSLの利用が推奨されている。また、OpenGL後続となる[[Vulkan]]でもGLSLに加えHLSLのサポートが追加された。
  
41行目: 46行目:
  
 
==関連項目==
 
==関連項目==
 +
* [[HLSLの組み込み関数]]
 +
  
[[category: コンピューターグラフィックス]]
+
[[category: コンピューター・グラフィックス]]
 
[[category: 3DCG]]
 
[[category: 3DCG]]
 
[[category: シェーディング言語]]
 
[[category: シェーディング言語]]
 +
[[category: HLSL]]

2022年10月26日 (水) 06:51時点における最新版

High Level Shading Language(読み:はいれべるしぇーでぃんぐらんげーじ、通称: HLSL)とは、マイクロソフトによってDirect3D (DirectX)向けに開発されたプログラマブルシェーダーのためのシェーディング言語である。

概要[編集 | ソースを編集]

HLSLはシェーダー特化型の汎用的なプログラミング言語である。

HLSLはNVIDIA Cg(以下Cg言語)の方言であり、Cg言語から安定した仕様のみを採用したサブセットである。

かつてシェーディング言語は、古い技術で固めた「汎用性のGLSL」と、最新鋭の技術を次々取り込む「突撃仕様のCg言語」の二択であった。そしてネットに溢れかえる情報は「最新技術動向」が中心であるためCg言語が圧倒的な勢力となっていった。

しかしならがCg言語はNVIDIA製でありNVIDIA製品でしか使えない。そこで「NVIDIA製のCg言語」を「マイクロソフト製のHLSL」とすることでAMDIntelなどの他社も宗教上の理由を回避して利用できるようにした。

その後も「最新仕様のCg言語」と「安定仕様のHLSL」というベータ版とリリース版のような体制が続けられたが、2012年にCg言語が更新終了し、以降はHLSLに一本化された。

サブセット[編集 | ソースを編集]

HLSLは環境依存の非常に低い言語であるため、そのサブセットが多数存在する。たとえばMonoGamePlayStationサブセット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などのサブセットではほぼこれである。 iOSAndroidで幅広い機種をサポートするためには致し方ない感じである。また、OpenGL ES系ではバーテックスシェーダーの書き戻しができないなどの制限もあり、それらは実行時にはじめてエラーになる。気をつけよう。

SM 4.x (Direct3D 10)[編集 | ソースを編集]

SM 5.x (Direct3D 11/12)[編集 | ソースを編集]

関連項目[編集 | ソースを編集]