internal override void OnWaterRender(WaterCamera waterCamera) { Camera cameraComponent = waterCamera.CameraComponent; if (waterCamera.Type != WaterCamera.CameraType.Normal || !Application.isPlaying) { return; } if (!WaterProjectSettings.Instance.RenderInSceneView && WaterUtilities.IsSceneViewCamera(cameraComponent)) { return; } Shader.SetGlobalVector("_TileSizesInv", this._Water.WindWaves.TileSizesInv); DynamicWaterCameraData cameraOverlaysData = this.GetCameraOverlaysData(cameraComponent, true); cameraOverlaysData.SwapFoamMaps(); cameraOverlaysData.ClearOverlays(); DynamicWater.DrawDisplacementMaskRenderers(cameraOverlaysData); DynamicWater.DrawDisplacementRenderers(cameraOverlaysData); for (int i = 0; i < this._OverlayRenderers.Length; i++) { this._OverlayRenderers[i].RenderOverlays(cameraOverlaysData); } if (this._Water.Foam != null) { this._Water.Foam.RenderOverlays(cameraOverlaysData); } for (int j = 0; j < this._OverlayRenderers.Length; j++) { this._OverlayRenderers[j].RenderFoam(cameraOverlaysData); } int localDiffuseMap = ShaderVariables.LocalDiffuseMap; MaterialPropertyBlock propertyBlock = this._Water.Renderer.PropertyBlock; propertyBlock.SetTexture(ShaderVariables.LocalDisplacementMap, cameraOverlaysData.DynamicDisplacementMap); propertyBlock.SetTexture(ShaderVariables.LocalNormalMap, cameraOverlaysData.NormalMap); propertyBlock.SetTexture(ShaderVariables.TotalDisplacementMap, cameraOverlaysData.TotalDisplacementMap); propertyBlock.SetTexture(ShaderVariables.DisplacementsMask, cameraOverlaysData.DisplacementsMask); propertyBlock.SetTexture(localDiffuseMap, cameraOverlaysData.DiffuseMap); Shader.SetGlobalTexture("DIFFUSE", cameraOverlaysData.DiffuseMap); RenderTexture debugMap = cameraOverlaysData.GetDebugMap(false); if (debugMap != null) { propertyBlock.SetTexture("_LocalDebugMap", debugMap); } if (waterCamera.MainWater == this._Water) { Shader.SetGlobalTexture(ShaderVariables.TotalDisplacementMap, cameraOverlaysData.TotalDisplacementMap); } DynamicWater.DrawFoamRenderers(cameraOverlaysData); DynamicWater.DrawDiffuseRenderers(cameraOverlaysData); }
public DynamicWaterCameraData GetCameraOverlaysData(Camera camera, bool createIfNotExists = true) { DynamicWaterCameraData dynamicWaterCameraData; if (!this._Buffers.TryGetValue(camera, out dynamicWaterCameraData) && createIfNotExists) { dynamicWaterCameraData = (this._Buffers[camera] = new DynamicWaterCameraData(this, WaterCamera.GetWaterCamera(camera, false), this._Data.Antialiasing)); DynamicWater.DrawDisplacementMaskRenderers(dynamicWaterCameraData); dynamicWaterCameraData.SwapFoamMaps(); for (int i = 0; i < this._OverlayRenderers.Length; i++) { this._OverlayRenderers[i].RenderOverlays(dynamicWaterCameraData); } } if (dynamicWaterCameraData != null) { dynamicWaterCameraData._LastFrameUsed = Time.frameCount; } return(dynamicWaterCameraData); }