Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }