Пример #1
0
 public void DeRegister(XDynamicPointLightInstance light)
 {
     if (lights.Contains(light))
     {
         //Debug.Log("light deregistered!");
     }
     lights.Remove(light);
 }
Пример #2
0
    public void Sim()
    {
        if (!IsEnabled())
        {
            return;
        }

        Matrix4x4 lighting   = new Matrix4x4();
        Matrix4x4 position   = new Matrix4x4();
        Vector4   multiplier = new Vector4();
        Vector4   intensity  = new Vector4();

        for (int i = 0; i < lights.Count; ++i)
        {
            XDynamicPointLightInstance light = lights[i];

            float t = (light.Lifetime % light.CycleTime) / light.CycleTime;


            Color col = light.Gradient.Evaluate(t);
            lighting.SetColumn(i, col);

            Vector3 pos = light.gameObject.transform.position;
            position.SetRow(i, new Vector4(pos.x, pos.y, pos.z, 0.0f));

            intensity[i] = light.Intensity.Evaluate(t) * light.IntensityMultiplier;

            float fallOff = Mathf.Max(0.01f, light.IntensityFallOffDistance);
            multiplier[i] = 25.0f / (fallOff * fallOff);
        }

        for (int i = lights.Count; i < 4; ++i)
        {
            position.SetRow(i, Vector4.zero);
            lighting.SetColumn(i, Vector4.zero);
            multiplier[i] = 0;
            intensity[i]  = 1;
        }

        Shader.SetGlobalMatrix(_PointLightColorProperty, lighting);
        Shader.SetGlobalMatrix(_PointLightPositionProperty, position);
        Shader.SetGlobalVector(_PointLightMultiplierProperty, multiplier);
        Shader.SetGlobalVector(_PointLightIntensityProperty, intensity);
    }
Пример #3
0
    public void Register(XDynamicPointLightInstance light)
    {
        if (lights.Contains(light))
        {
#if UNITY_EDITOR || UNITY_STANDALONE
            Debug.LogWarning("DynamicPointLight trying to register the same light!");
#endif
            return;
        }
        if (lights.Count < lights.Capacity)
        {
            lights.Add(light);
        }
#if UNITY_EDITOR || UNITY_STANDALONE
        else
        {
            Debug.LogWarning("Too many DynamicPointLights!");
        }
#endif
    }