UnityでポストエフェクトをGLSLで書く方法
ポストエフェクトとは
ゲーム空間内のオブジェクトを、Vertex ShaderやFragment Shaderを通してスクリーンに描画する画像を作るという処理の後、スクリーンに描画される画像に対してさらに様々な効果を加えることをいう(あってるんかな)。
例えば、画面をぼかしたり、モザイクにしたり、エッジの検出をしたり、ということである。
Unityでは、この処理を実装するために一連の流れを作る必要がある。
ポストエフェクトをCgで書く方法
以下のサイトがわかりやすくてよい
fspace.hatenablog.com
ポストエフェクトをGLSLで書く方法
Shaderにはいくつかの言語があり、Unityで主に使われているのはCgという言語だ。上で紹介した記事のShaderScriptもCgを用いている。
しかし、あえてGLSLで書きたい!!という場合、どのようにして書けばよいのだろうか?探してみたがGLSLでポストエフェクトを書いているサイトは見当たらなかったので、上記の記事をGLSLに簡単に翻訳した。
それが以下である(本当に基本的な事柄のみ書いてある)。
Shader "Custom/PostEffectTestShader" { Properties { _MainTex("Source", 2D) = "" {} } SubShader { ZTest Always Cull Off ZWrite Off Fog{ Mode Off } Pass { GLSLPROGRAM uniform sampler2D _MainTex; #ifdef VERTEX out vec4 coord; void main() { coord = gl_MultiTexCoord0; gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; } #endif #ifdef FRAGMENT in vec4 coord; void main() { gl_FragColor = texture2D(_MainTex, vec2(coord)); } #endif ENDGLSL } } }
UnityでGLSLを使う方法そのものについては
GLSL Programming/Unity - Wikibooks, open books for an open world
を参照されたい。