Nodachisoft Nodachi Sword Icon
  
@あまじ✎ 2015年11月11日に更新

UnityからのシェーダAPIとDirect3D、OpenGLの利用方法を整理

この記事で書いていること

画面に雪のパーティクルを大量に降らせたり、平面上で揺れ動く雲を乱数を使って表現したり。少し変わった表現をするために、シェーダと呼ばれる画像処理プログラムを作る必要が出てきました。

この記事では特にプログラマブル・シェーダという処理について、OpenGL、Direct3Dといったグラフィックエンジンを対象に、グラフィックAPIも含めて簡単にまとめておこうと思います。

相変わらず書籍やネットのあちらこちらをを読みながらお勉強した内容を私なりにまとめたものですので、何かございましたらご指摘大歓迎です。

なお、関連記事としてDirect3D 9をベースにレンダリングする時のパイプラインと、関連用語についてまとめたページがありますので、前知識として読むとより頭に入るかもです。

Direct3D9のシェーダでプログラマブルな箇所

早速ですが Direct3D9 の描画処理の流れで、開発者が独自に処理をいじれる部分(プログラマブルな箇所)をみてみましょう。赤枠で囲んだ部分です。

Direct3D9のパイプラインとプログラマブルシェーダー

Direct3D9で頂点処理とピクセル処理がプログラマブルシェーダ部分

2箇所ありますね。どちらも固定機能パイプライン機能(GPU機能によるプリミティブ3Dデータ、頂点データを描画する対象の3D座標系に変換する機能)か、プログラマが独自に頂点情報を変換するプログラムを記載して頂点座標を変換するプログラマブルシェーダという機能を持っています。

頂点シェーダとピクセルシェーダの2箇所について、プログラマブルシェーダを、Direct3D9では「HLSL言語(High Language Shader Language)」で記述することができるようです。

OpenGLとシェーダ

例えば Unity5 では Direct3D 9 がデフォルトで利用される2D/3D CG用APIとなっています。Direct3D 9 が利用できなければOpenGL 2.1 を利用するようですが、基本的な流れはDirect3D 9 と似ているようです。

OpenGL2.0 以降でも同様にシェーダとして頂点シェーダフラグメントシェーダ(Direct3D9でいうピクセルシェーダのような箇所)の部分がプログラマブルとなっています。

OpenGL2.X では「GLSL言語(The OpenGL Shading Language)」としてシェーダを記載可能とのこと。

Unity5でシェーダを記載するとき

Unityでシェーダを記載するときは、Cg言語(C for Graphics)、もしくはHLSL言語で記載でき、OpenGL専用言語(GLSL言語)上にも互換性をもった変換できるようです。(ただし、プログラマブルシェーダを利用できない古いハードウェアへの互換を意識するときは代替処理としてShaderLabという言語で固定機能パイプライン向きの固定関数シェーダを記載するようです。)

Unityには3種類のシェーダがあるようです。(公式Manualより)

Unity5の3種のシェーダ

  • サーフェイスシェーダ(Surface Shader) … 特別な照明や影の処理を記載
  • 頂点シェーダ(Vertex Shader) … 特別な頂点処理を記載
  • フラグメントシェーダ(Fragment Shader) … 特別なピクセル処理を記載

とりあえず今後Unityでシェーダ記載が必要になったらCg言語で書いていこうと思います。

非常に参考となりましたサイト様

ページの更新履歴

更新日 更新内容
2015.11.11 ページ公開
2018.3.18 スマホからレイアウトが崩れて読みにくいのでデザインを全般的に修正。ついでに文章構造と内容も訂正。アイキャッチを追加。
 
 
送信しました!

コメント、ありがとうございます。

なんかエラーでした

ごめんなさい。エラーでうまく送信できませんでした。ご迷惑をおかけします。しばらくおいてから再度送信を試していただくか、以下から DM などでご連絡頂ければと思います。

Twitter:@NodachiSoft_jp
お名前:
 
連絡先:
 
メッセージ:
 
戻る
内容の確認!

以下の内容でコメントを送信します。よろしければ、「送信」を押してください。修正する場合は「戻る」を押してください

お名前:
 
連絡先:
 
メッセージ:
 
Roboto からの操作ではないという確認のため確認キーを入れてください。
確認キー=95
戻る
 / 
送信確認へ
コメント欄
コメント送信確認へ

関連ありそうな記事(1件)です!

Direct3D9を利用したレンダリングの流れまとめ

#Direct3D#3D基礎✎ 2015-11-05
Unity や Unreal Engine などが3D を表示するときに使用している、Microsoft 社の3Dレンダリングエンジンである Direct3D9 について、基本的な動作の流れを記載
広告領域
追従 広告領域
目次
UnityからのシェーダAPIとDirect3D、OpenGLの利用方法を整理
UnityからのシェーダAPIとDirect3D、OpenGLの利用方法を整理
この記事で書いていること
この記事で書いていること
Direct3D9のシェーダでプログラマブルな箇所
Direct3D9のシェーダでプログラマブルな箇所
OpenGLとシェーダ
OpenGLとシェーダ
Unity5でシェーダを記載するとき
Unity5でシェーダを記載するとき
Unity5の3種のシェーダ
Unity5の3種のシェーダ
非常に参考となりましたサイト様
非常に参考となりましたサイト様
ページの更新履歴
ページの更新履歴
Nodachisoft © 2020