質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

GLSL

GLSL (OpenGL Shading Language) はC言語をベースとしたシェーディング言語です。

HLSL

HLSLは、米マイクロソフト社によって開発された Direct3D APIで使われるプロプライエタリなシェーディング言語です。

Q&A

解決済

【Unity】【Shader】Shader言語について HLSL/GLSL/CG

Y0241-N
Y0241-N

総合スコア1007

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

GLSL

GLSL (OpenGL Shading Language) はC言語をベースとしたシェーディング言語です。

HLSL

HLSLは、米マイクロソフト社によって開発された Direct3D APIで使われるプロプライエタリなシェーディング言語です。

1回答

0グッド

0クリップ

3093閲覧

投稿2020/03/03 08:44

編集2020/03/03 08:45

はじめに

現在、Unityでシェーダーに関して勉強中なのですが、Unityでシェーダーを記述する際に用いるシェーダー言語は
HLSL/CG/GLSLの三つがあり、主に使用されているのがHLSL/CGで、GLSLは扱えるものの向いていない(?)という認識です。

知りたい事

勉強を進めていく中で、CGは既に開発が終了しているという事を知りました。
また、UnityのUniversalRPの記事ではCGではなくHLSLで記述してあるという内容がありました。

本題ですが上記のことから、今後シェーダーを学び、作成していくならCGではなく、
HLSLを使って記述するべきなのかな?と思っているのですが、多くのお手本と出来そうなシェーダーはCGで記述されている為、勉強して実践する際に上手く置換できるか不安です。


1、HLSLとCGはどの程度互換性があるのか?

どちらの開発にもNVIDIAが携わっていると書いてあったので、互換性は高いのかなと思っているのですが、
GLSLとHLSLの違いについての記事は見つけたのですが、CGとHLSLの違いについてまとめてある記事は見つかりませんでした。


2、CGでできて、HLSLでできないことはあるのか?(逆もしかり)

私が見てきた記事では大抵CGとHLSLはひとくくりで紹介されていたのですが、両者の違いは何かしらあると思います。
私が調べた中ではCGはグラフィックスのためのC言語、HLSLはDirectX用、という程度の違いしか分かりませんでした。
そのため、機能的にCGではこんなことが出来るが、HLSLではできないない。(どちらかというと逆かもしれませんが)
という事はあるのでしょうか?

私の調べ不足があるかもしれませんが、この二点に関して教えていただけますでしょうか。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

1

ベストアンサー

現在、Unityでシェーダーに関して勉強中なのですが、Unityでシェーダーを記述する際に用いるシェーダー言語は
HLSL/CG/GLSLの三つがあり、主に使用されているのがHLSL/CGで、GLSLは扱えるものの向いていない(?)という認識です。

Unity の標準のシェーダー言語が「Cg/HLSL」というだけで、「GLSL」が向いていないというわけではないと思います。

1、HLSLとCGはどの程度互換性があるのか?

Unity の「Cg/HLSL」は、一般の「HLSL」とは少し異なります。
公式マニュアルには、以下のように書かれています。

Unity では、シェーダープログラム は HLSL 言語で書かれています。(Cg とも呼ばれますが、ほとんどの実際的な使用においては、2 つは同じです)。

現在、異なるプラットフォームで可搬性を最大にするために、DX9 スタイル HLSL で書かれています (例えば、DX10 スタイルの Texture2D、SamplerState、tex.Sample の代わりに、DX9 スタイルの sampler2D と tex2D をテクスチャサンプリングに使用)。

Unityで使用するシェーダー言語 - Unity マニュアル
https://docs.unity3d.com/ja/current/Manual/SL-ShadingLanguage.html

つまり、厳密には違うかもしれませんが、Unity の「Cg/HLSL」においては、「Cg」と完全互換であると考えて良いと思います。

2、CGでできて、HLSLでできないことはあるのか?(逆もしかり)

「質問 1」の回答の通り、「Cg」と「HLSL」の両方でできる基本部分が、Unity の「Cg/HLSL」ということですね。

一般の「HLSL」と「Cg」を比較している資料は見たことないので、違いを知りたければ、両方の公式ドキュメントを見比べるしかないかと思います。

参考:

Cg 3.1 Reference Manual - NVIDIA(PDF)
http://developer.download.nvidia.com/cg/Cg_3.1/Cg-3.1_April2012_ReferenceManual.pdf

Cg 3.0 User's Manual - NVIDIA(PDF)
http://developer.download.nvidia.com/cg/Cg_3.0/CgUsersManual.pdf

Reference for HLSL - Win32 apps | Microsoft Docs
https://docs.microsoft.com/ja-jp/windows/win32/direct3dhlsl/dx-graphics-hlsl-reference?redirectedfrom=MSDN

投稿2020/03/04 09:42

nskydiving

総合スコア6494

Y0241-N👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

Y0241-N

2020/03/04 23:47

ご丁寧な回答ありがとうございます。 なるほど、UnityにおいてCGとHLSLはどちらで書いてもほぼ変わらないのですね。 参考資料まで提示していただき、ありがとうございます。(内容はかなり難しそうですね...) ひとまずCGPROGRAM~CGENDをHLSLPROGRAM~HLSLENDに書き換えてみたりして、 両者の違いが無いかを調べながら、HLSLを使ってみようと思います。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

GLSL

GLSL (OpenGL Shading Language) はC言語をベースとしたシェーディング言語です。

HLSL

HLSLは、米マイクロソフト社によって開発された Direct3D APIで使われるプロプライエタリなシェーディング言語です。