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

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

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

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

GLSL

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

HLSL

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

Q&A

解決済

1回答

7022閲覧

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

Y0241-N

総合スコア1066

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

GLSL

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

HLSL

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

0グッド

0クリップ

投稿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ではできないない。(どちらかというと逆かもしれませんが)
という事はあるのでしょうか?

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

現在、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

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y0241-N

2020/03/04 23:47

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.38%

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

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

質問する

関連した質問