您的位置:首页 > 移动开发 > Unity3D

噩梦5Tilt Shift (Lens Blur) 倾斜移位(镜头模糊)

2015-07-25 16:37 591 查看
using System;

using UnityEngine;

namespace UnitySampleAssets.ImageEffects

{

    [RequireComponent (typeof(Camera))]

    [AddComponentMenu ("Image Effects/Camera/Tilt Shift (Lens Blur)")]

    class TiltShift : PostEffectsBase {

        public enum TiltShiftMode

        {

            TiltShiftMode,

            IrisMode,

        }

        public enum TiltShiftQuality

        {

            Preview,

            Normal,

            High,

        }

        public TiltShiftMode mode = TiltShiftMode.TiltShiftMode;

        public TiltShiftQuality quality = TiltShiftQuality.Normal;

        [Range(0.0f, 15.0f)]

        public float blurArea = 1.0f;

        [Range(0.0f, 25.0f)]

        public float maxBlurSize = 5.0f;

        [Range(0, 1)]

        public int downsample = 0;

        public Shader tiltShiftShader = null;

        private Material tiltShiftMaterial = null;

        public override bool CheckResources () {

            CheckSupport (true);

            tiltShiftMaterial = CheckShaderAndCreateMaterial (tiltShiftShader, tiltShiftMaterial);

            if (!isSupported)

                ReportAutoDisable ();

            return isSupported;

        }

        void OnRenderImage (RenderTexture source, RenderTexture destination) {

            if (CheckResources() == false) {

                Graphics.Blit (source, destination);

                return;

            }

            tiltShiftMaterial.SetFloat("_BlurSize", maxBlurSize < 0.0f ? 0.0f : maxBlurSize);

            tiltShiftMaterial.SetFloat("_BlurArea", blurArea);

            source.filterMode = FilterMode.Bilinear;

            RenderTexture rt = destination;

            if (downsample > 0f) {

                rt = RenderTexture.GetTemporary (source.width>>downsample, source.height>>downsample, 0, source.format);

                rt.filterMode = FilterMode.Bilinear;

            }

            int basePassNr = (int) quality; basePassNr *= 2;

            Graphics.Blit (source, rt, tiltShiftMaterial, mode == TiltShiftMode.TiltShiftMode ? basePassNr : basePassNr + 1);

            if (downsample > 0) {

                tiltShiftMaterial.SetTexture ("_Blurred", rt);

                Graphics.Blit (source, destination, tiltShiftMaterial, 6);

            }

            if (rt != destination)

                RenderTexture.ReleaseTemporary (rt);

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity3d