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 }
void Start() { cachedShadowResolution = shadowResolution; LightCamera = CreateDirLightCamera(); if (!LightCamera.targetTexture) { LightCamera.targetTexture = Create2DTexture(LightCamera, (int)shadowResolution); } }