среда, 26 августа 2015 г.

Постэффект Хроматической аберрации

Файлы композитора, материала и шейдера в файле. Распаковать в Project\Bin\Data\Base\FullScreenEffects

ChromaticAberration.rar

Код класса ChromaticAberrationCompositorInstance.cs в ProjectCommon\Post Processing




using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Drawing.Design;
using System.ComponentModel;
using Engine;
using Engine.Renderer;
using Engine.MathEx;

namespace ProjectCommon
{
    [CompositorName("ChromaticAberration")]
    public class ChromaticAberrationCompositorParameters : CompositorParameters
    {
        float verticalOffset = 0.3f;
        float horizontalOffset = 0.3f;

        [DefaultValue(0.3f)]
        [Editor(typeof(SingleValueEditor), typeof(UITypeEditor))]
        [EditorLimitsRange(0, 4)]
        public float VerticalOffset
        {
            get { return verticalOffset; }
            set { verticalOffset = value; }
        }

        [DefaultValue(0.3f)]
        [Editor(typeof(SingleValueEditor), typeof(UITypeEditor))]
        [EditorLimitsRange(0, 4)]
        public float HorizontalOffset
        {
            get { return horizontalOffset; }
            set { horizontalOffset = value; }
        }
    }

    /// <summary>
    /// Represents work with the ChromaticAberration post effect.
    /// </summary>
    [CompositorName("ChromaticAberration")]
    public class ChromaticAberrationCompositorInstance : CompositorInstance
    {
        float verticalOffset = 0.3f;
        float horizontalOffset = 0.3f;

        //

        [EditorLimitsRange(0, 4)]
        public float VerticalOffset
        {
            get { return verticalOffset; }
            set { verticalOffset = value; }
        }

        [EditorLimitsRange(0, 4)]
        public float HorizontalOffset
        {
            get { return horizontalOffset; }
            set { horizontalOffset = value; }
        }

        protected override void OnMaterialRender(uint passId, Material material, ref bool skipPass)
        {
            base.OnMaterialRender(passId, material, ref skipPass);

            if (passId == 555)
            {
                Vec4 multiplier = new Vec4(VerticalOffset, HorizontalOffset, 1, 1);

                GpuProgramParameters parameters = material.Techniques[0].Passes[0].FragmentProgramParameters;
                parameters.SetNamedConstant("multiplier", multiplier);
            }
        }

        protected override void OnUpdateParameters(CompositorParameters parameters)
        {
            base.OnUpdateParameters(parameters);

            ChromaticAberrationCompositorParameters p = (ChromaticAberrationCompositorParameters)parameters;
            VerticalOffset = p.VerticalOffset;
            HorizontalOffset = p.HorizontalOffset;
        }
    }
}






Комментариев нет:

Отправить комментарий