LoginSignup
4
4

More than 5 years have passed since last update.

sceneの描画を単一のShaderで置き換える

Last updated at Posted at 2014-11-22

オブジェクトが水面に沈んでいくとき、
オブジェクトが水面に接した輪郭に沿って
波紋を広げたいな、と思ったのですが、そうすると
波紋の形状をレンダリングするときはShaderを
切り替える必要がありそうです。
どういったタイミングで切り替えたらいいんだろう、
と調べてみたら、ありました。

camera.SetReplacementShader

まんま願いをかなえてくれそうです。
とりあえず地面の高さでモデルをカットするようなシェーダーを用意して、

Shader "Custom/cutFaceEdge" {
  SubShader {
    Tags {  "RenderType" = "Opaque" "Queue" = "Geometry" }
           :
  } 
}

次に波紋用のオブジェクトを映すカメラ(RenderTexture用)内で
camera.SetReplacementShader()を呼びます。

    void Start () {
        camera.SetReplacementShader(repShader, "RenderType");
    }

第2引数は、もとのオブジェクトのマテリアルで用意したタグを使うようですが、
RenderType等あらかじめ用意されているタグでも良いようです。
その場合、もとのマテリアルが"RenderType" = "Opaque"なら
用意したシェーダーも"RenderType" = "Opaque"にする必要があります。

実行してみたら・・・
01.gif
うまくいきました!

あとはカメラを水面に垂直にして、レンダリングしたイメージを波紋として使えば
いけるんじゃないかな?と思います。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4