スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

水出し文字

Unityを使い始めて1週間です。

エンジン部分を作らなくてよくなった分、すぐにゲーム自体の実装に取り掛かれるのがUnityの数ある利点の一つでしょうが、なまじ実行結果がすぐ見えるだけに、アニメーションやエフェクトをすぐに作りたくなってしまいます。
そういうわけで、慣れない開発環境に悪戦苦闘しながらも、昔Dirext3D&HLSLで書いて遊んでいた「水出し文字」を実装してみました。

水出し文字というのが正しい呼び方かはわかりませんが、内容としてはアルファテクスチャを用いた単たるマルチパスレンダリングです。

アルファテクスチャはグレースケールの雲画像で、それに加えてスクリプト(C#)から動的にα値をいじってやることで、不規則なフェードインを実現しています。ちなみに、シェーダに関してはビルトインシェーダを少し加工しただけです。

C#
using UnityEngine;
using System.Collections;

public class Sample : MonoBehaviour {

    // α値の変更に用いる変数
    private float alpha;

	// Use this for initialization
	void Start () {
        this.alpha = -1.0f;
	}
	
	// Update is called once per frame
	void Update () {
        if (this.alpha < 0.5){
        	this.alpha += 0.01f;
        }else{
        	this.alpha = -1.0f;
        }
        // シェーダへの流し込み
        renderer.material.SetFloat("_VariableAlpha", alpha);
	}
}
Shader
Shader "Custom/sampleShader" {
	Properties {
		_Color ("Main Color", Color) = (1,1,1,1)
		_MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
		//α用テクスチャ
		_AlphaTex ("Alpha Texture", 2D) = "white" {}
	}

	SubShader {
		Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
		LOD 200

		CGPROGRAM
		#pragma surface surf Lambert alpha

		sampler2D _MainTex;
		sampler2D _AlphaTex;
		fixed4 _Color;
		// スクリプトからα値を受け取る変数
		float _VariableAlpha;

		struct Input {
			float2 uv_MainTex;
			float2 uv_AlphaTex;
		};

		void surf (Input IN, inout SurfaceOutput o) {
			fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
			fixed ca = tex2D(_AlphaTex, IN.uv_AlphaTex);
			o.Albedo = c.rgb;
			o.Alpha = c.a * (ca.r + _VariableAlpha);
		}
		ENDCG
	}

	Fallback "Transparent/VertexLit"
}
実行結果

20140608_1.gif

コメントの投稿

非公開コメント

sidetitlePROFILEsidetitle
AUTHOR: かいのしずく


詳しい自己紹介ページ
本棚(ブクログ)
平成20年以降にチェックしたのすべての本
本棚(読書メーター)
各月の読了ページ数管理用
チームカチューシャ
同人ゲームサークル MATRICES

sidetitleINFORMATIONsidetitle
VISITORS
CALENDAR
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
SEARCH
RECENT ENTRIES
CATEGORIES
ARCHIVES
sidetitleLINKsidetitle
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。