Mugichoko's blog

Mugichoko’s blog

プログラミングを中心としたメモ書き.

UnityでGLSLを使う

モチベーションと目標

これまでOpenGL (GLSL) を使って色々とやってきたわけですが,諸事情により,いよいよUnityを使おうということになりました.現状,初めてUnityを触るという状態なので,私と同じような状況の方の参考になるかと思います.

  • Unityに関しては全くの初心者
    • Unityを立ち上げたときに現れる4つのTutorialsを実行してみた程度の知識しかない
  • OpenGL (GLSL) に関しては多少の知識と実装経験あり
    • なので,UnityでGLSLを使いたい

ということで,今回の目標は『UnityのGameObjectに自作のGLSL Shaderを適用する』です.

GLSLを使えるようにプロジェクトの設定を変更

  1. Unityを起動して,プロジェクトを作成
    • ここでは「GLSLonUnity」という名前に
    • 初期状態ではCameraとDirectional Lightがあるだけ
  2. プロジェクトの設定を変更してGraphics APIOpenGLに切り替え
    • Windowsであれば,OpenGLではなくDirect3Dがデフォルトで設定されているはずなので切り替える
    • Edit > Project SettingsProject Settingsウィンドウを開き,左側のメニューからPlayerを選択すると右側の項目の中のOther Settings内にGraphics APIs for Windowsが見つかります(下図
    • このチェックボックスを外し,+ボタンを押し,OpenGLCoreを選択の上,=マークをドラッグ&ドロップして一番上へ置く
    • 参照:Unity - Manual: OpenGL Core

f:id:Mugichoko:20190211173358p:plain
DX3DではなくGLSLを使用するように設定

GLSLのShaderを作成してGameObjectに適用

  1. Projectタブ内で右クリックをしCreate > Shader > UnlitShaderを選択してシェーダを作成
    • Assets下にShadersフォルダを作成してそこに入れておく
    • Unityの独自のシェーダが作成されるため,これをGLSLのシェーダに置き換える
  2. 以下の参照先にある"GLSL basic shader"をコピペ
  3. 同様にProject > Assets > Materials以下にマテリアルを作成
    • GLSL basic shaderという名前に
  4. 作ったシェーダを作ったマテリアルにドラッグ&ドロップ
    • これでシェーダとマテリアルが紐づけられる様子
  5. GameObjectを作成
    • Hierarchyタブ内で右クリックし3D Objectから好きなプリミティブを選択
  6. マテリアルをオブジェクトにドラッグ&ドロップして適用
  7. 最後に,再生ボタンで実行

f:id:Mugichoko:20190211173232p:plain
GLSL Shader適用前

f:id:Mugichoko:20190211173309p:plain
GLSL Shader適用後

上のスクリーンショットの様に,赤く表示されたので目標達成です.