読者です 読者をやめる 読者になる 読者になる

Smooth Fresnel Shader Packを使ってみる

Unity Asset Store

今日は簡単にFresnel効果を実現できるアセットを紹介したいと思います。
f:id:Taka8:20160820173539p:plain
https://www.assetstore.unity3d.com/jp/#!/content/27848/

Fresnel効果とは?

Unityではなく、Unreal Engineでは、フレネルを標準搭載しています。Unreal Engineの公式操作ガイドでは、

フレネルとは、ライトを見るアングルに応じて、ライト反射の強度がどのように変わるかを表すために使う言葉です。 例えば、真下にプールを見ながらプール上に立っていると、水の中での反射はほとんど見えません。 頭を動かしてプールの中の水が目線と平行になればなるほど、水中での反射が多くなることがわかります。

Unreal Engine | マテリアル - マテリアルでフレネルを使用する方法

と説明されています。ゲームでよく見かける、輪郭が白くぼやぁと光るやつですね。

テストシーン

  • SFSPの場合

f:id:Taka8:20160820155244p:plain

  • Standard ShaderのAlbed ColorとSmoothnessをいじっただけ

f:id:Taka8:20160820160327p:plain
AssetのDungeon Wallのみ変えています。一目瞭然ですね。

Smooth Fresnel Shader Packの内訳

  • SFS
    • Mobile
    • Prototype
    • Standard
    • Terrain

今回はStandardを紹介します。

Standard

PrototypeとStandardの中身はほとんど一緒です。しかし、Asset内のPDFファイルでは、Standardを推奨しているので、こちらを使いましょう。

Diffuse

ためしに使ってみると・・・

  • 通常

f:id:Taka8:20160820164534p:plain

  • 暗転

f:id:Taka8:20160820164559p:plain
こんな感じになります。モデルの境界(?)がうっすらと赤色のラインで縁取られているのが分かります。どこかで見たことがあるのではないでしょうか?

Dissolve

消えゆく戦闘機を表現するときなどに
f:id:Taka8:20160820171819g:plain

  • Vanish.cs
using UnityEngine;

public class Vanish : MonoBehaviour
{

    public float speed = 0.5f;

    Material mat;

    void Start()
    {

        mat = GetComponent<Renderer>().material;

    }

    void Update()
    {

        float value = mat.GetFloat("_Cutoff");

        if (value < 1)
        {

            value += speed * Time.deltaTime;

            mat.SetFloat("_Cutoff", value);

        }

    }

}

上記のスクリプトを、Dissolveのマテリアルを持つオブジェクトにつけると、上みたいな消えゆく物体を実現できます。

最後に

Self-Illuminationというのもあるのですが、全体が光って見えるようになる以外、Dissolveと同じだと思います。