示例#1
0
    void Start()
    {
        m_DepthCamera = new VolumetricLightDepthCamera();

        m_Subdivision = Mathf.Clamp(m_Subdivision, 0.1f, m_Range * 0.9f);
        if (m_VertexBased)
        {
            m_Mesh = new VLVertexRenderMesh();
        }
        else
        {
            m_Mesh = new VLPixelRenderMesh();
        }

        if (!CheckSupport())
        {
            return;
        }

        m_InternalWorldLightVPID   = Shader.PropertyToID("internalWorldLightVP");
        m_InternalWorldLightMVID   = Shader.PropertyToID("internalWorldLightMV");
        m_InternalProjectionParams = Shader.PropertyToID("internalProjectionParams");
        m_InternalBiasID           = Shader.PropertyToID("internalBias");
        m_InternalCookieID         = Shader.PropertyToID("internalCookie");
        m_InternalLightPosID       = Shader.PropertyToID("internalWorldLightPos");
        m_InternalLightColorID     = Shader.PropertyToID("internalWorldLightColor");

        m_DepthCamera.InitCamera(this);
        m_Mesh.InitMesh(this);

        m_Projection = m_DepthCamera.depthRenderCamera.projectionMatrix;
        Shader.SetGlobalMatrix(m_InternalWorldLightVPID, m_Projection);
        Shader.SetGlobalMatrix("internalProjectionInv", m_Projection.inverse);
        m_WorldToCam = m_DepthCamera.depthRenderCamera.worldToCameraMatrix;
        Shader.SetGlobalMatrix(m_InternalWorldLightMVID, m_WorldToCam);
        SetLightProjectionParams();
        Shader.SetGlobalFloat(m_InternalBiasID, m_ShadowBias);
        Shader.SetGlobalColor(m_InternalLightColorID, new Color(m_Color.r * m_Intensity, m_Color.g * m_Intensity, m_Color.b * m_Intensity, m_Color.a));
        if (m_Cookie && !m_VertexBased)
        {
            Shader.EnableKeyword("USE_COOKIE");
            Shader.SetGlobalTexture(m_InternalCookieID, m_Cookie);
        }
        else
        {
            Shader.DisableKeyword("USE_COOKIE");
        }

        ResetQuality(m_Quality == Quality.Low, m_Quality == Quality.Middle, m_Quality == Quality.High);

        m_Mesh.RefreshMesh(m_Color, m_Intensity, m_Range, m_Subdivision, transform.worldToLocalMatrix * m_DepthCamera.depthRenderCamera.cameraToWorldMatrix * m_DepthCamera.depthRenderCamera.projectionMatrix.inverse);

        m_IsInitialized = true;
    }
示例#2
0
 void OnDestroy()
 {
     if (m_DepthCamera != null)
     {
         m_DepthCamera.Destroy();
     }
     m_DepthCamera = null;
     if (m_Mesh != null)
     {
         m_Mesh.Destroy();
     }
     m_Mesh = null;
 }