Пример #1
0
    void ValidateShadowMap()
    {
        if (!shadowMapGO)
        {
            Color shadowColor = new Color(0.0f, 0.0f, 0.0f, 0.0f);


            shadowMapGO           = new GameObject("__ShadowMap");
            shadowMapGO.hideFlags = HideFlags.HideAndDontSave;
            shadowMapGO.AddComponent(typeof(Camera));
            shadowMapGO.GetComponent <Camera>().orthographic     = true;
            shadowMapGO.GetComponent <Camera>().orthographicSize = 1;
            shadowMapGO.GetComponent <Camera>().aspect           = 1;
            shadowMapGO.GetComponent <Camera>().clearFlags       = CameraClearFlags.Nothing;      // CameraClearFlags.SolidColor;
            shadowMapGO.GetComponent <Camera>().backgroundColor  = shadowColor;
            shadowMapGO.GetComponent <Camera>().depth            = 0;
            shadowMapGO.transform.position              = transform.position;
            shadowMapGO.transform.rotation              = transform.rotation;
            shadowMapGO.transform.localScale            = Vector3.one;
            shadowMapGO.GetComponent <Camera>().enabled = false;

            RenderBorder renderBorder = shadowMapGO.AddComponent(typeof(RenderBorder)) as RenderBorder;
            renderBorder.border      = border;
            renderBorder.borderColor = shadowColor;
        }

        shadowMapRT = RenderTexture.GetTemporary(resolution, resolution, 0, RenderTextureFormat.ARGB32);
        if (!shadowMapRT)
        {
            Debug.Log("Couldn't get ShadowMap RT for shadow blobs " + resolution);
        }

        if (shadowMapGO && shadowMapRT)
        {
            shadowMapGO.GetComponent <Camera>().targetTexture = shadowMapRT;
            Rect rect = new Rect();
            rect.x      = border;
            rect.y      = border;
            rect.width  = shadowMapRT.width - border * 2;
            rect.height = shadowMapRT.height - border * 2;
            shadowMapGO.GetComponent <Camera>().pixelRect = rect;
        }
    }
Пример #2
0
 internal void UpdateBorder(ColorIndex border)
 {
     this.border = border;
     RenderBorder?.Invoke(border);
 }