Как заменить текстуру attenuation?

Рейтинг: 1Ответов: 2Опубликовано: 08.04.2015

Возникла необходимость изменить закон затухания света от Point. В качестве отправной точки взял тему Easiest way to change Point Light attenuation ? (with Deferred path) Сделал все по инструкции, правда версия Unity у меня 4.6 а не 4.5 как у автора. Все получилось, кроме одного: делаю через lookup texture подмену тектсуры. Обновил шейдер Internal-PrePassLighting.shader как было написано в инструкции. Если вношу в нем изменения в расчет attenuation то вижу что картинка меняется. Добавил текстуру _LightTextureB02 и использую в шейдере ее вместо _LightTextureB0. Создавать и обновлять ее пытаюсь в скрипте на камере

using UnityEngine;
using System.Collections;

public class LightAttenuationManager : MonoBehaviour
{
    public Texture2D m_AttenTex = null;

    private float k0;
    private float k1;
    private float k2;

    public float K0
    {
        get { return k0; }
        set { k0 = value; RefreshAttenuation();}
    }

    public float K1
    {
        get { return k1; }
        set { k1 = value; RefreshAttenuation(); }
    }

    public float K2
    {
        get { return k2; }
        set { k2 = value; RefreshAttenuation(); }
    }

    // Use this for initialization
    void Start ()
    {
        k0 = 1;
        k1 = 0;
        K2 = 0;
        RefreshAttenuation();
    }

    // Update is called once per frame
    void Update () {

    }

    public void RefreshAttenuation()
    {
        //=== Point Light Attenutation
        m_AttenTex = new Texture2D(256, 1, TextureFormat.ARGB32, false, true);
        m_AttenTex.filterMode = FilterMode.Bilinear;
        m_AttenTex.wrapMode = TextureWrapMode.Clamp;
        Color[] AttenColor = new Color[256];

        for (int i = 0; i < 256; ++i)
        {
            float v;

            if (i < 255)
            {
                v = i / 255.0f;
                v = 1.0f / (k0 + k1 * v + k2 * v * v);
            }
            else
                v = 0.0f;

            AttenColor[i] = new Color(v, v, v, v);
        }

        m_AttenTex.SetPixels(AttenColor);
        m_AttenTex.Apply();
        Shader.SetGlobalTexture("_LightTextureB02", m_AttenTex);
    }
}

Текстура создается, я вижу ее через редактор, но вот на самом источнике света это никак не сказывается.

Ответы

Ответов пока нет.