示例#1
0
    void Update()
    {
        if (LightCamera == null)
        {
            LightCamera = CreateDirLightCamera();
        }

        //check change shadow resolution
        if (cachedShadowResolution != shadowResolution)
        {
            var preTex = LightCamera.targetTexture;
            if (!preTex)
            {
                preTex.Release();
            }
            LightCamera.targetTexture = Create2DTexture(LightCamera, (int)shadowResolution);
            cachedShadowResolution    = shadowResolution;
        }

        LightCamera.transform.position   = dirLight.gameObject.transform.position;
        LightCamera.transform.rotation   = dirLight.gameObject.transform.rotation;
        LightCamera.transform.localScale = dirLight.gameObject.transform.localScale;

        Shader.SetGlobalFloat("_gShadowBias", ShadowBias);

        Matrix4x4 PMatrix = GL.GetGPUProjectionMatrix(LightCamera.projectionMatrix, false);   //处理不同平台投影矩阵的差异性

        Shader.SetGlobalMatrix("_gWorldToShadow", PMatrix * LightCamera.worldToCameraMatrix); //当前片段从世界坐标转换到光源空间坐标
        Shader.SetGlobalFloat("_gShadowStrength", ShadowStrength);
        LightCamera.RenderWithShader(ligthCameraShader, "");                                  //设置深度相机绘制shader为自定义shader
    }
示例#2
0
 void Start()
 {
     cachedShadowResolution = shadowResolution;
     LightCamera            = CreateDirLightCamera();
     if (!LightCamera.targetTexture)
     {
         LightCamera.targetTexture = Create2DTexture(LightCamera, (int)shadowResolution);
     }
 }