protected virtual void CollectUnderOceanInfos(OceanCameraTask oceanCamera, OceanVolume ocean) { if (oceanCamera.EnableUnderOceanEffect) { if (ocean.EnableUnderOcean && ocean.UnderOceanData != null) { PreparedContents |= ocean.UnderOceanData.OnPreOceanRender(oceanCamera, ocean); IsHasUnderOceanEffect = true; return; } } UnderOceanModeOptions.DisableUnderOceanEffectAll(); }
public virtual void OnPreOceanRender(OceanCameraTask oceanCamera) { SunLight = GetSunlight(); CollectOceanInfos(oceanCamera); OceanVolume ocean; if (OceanVolume.TryGet(oceanCamera, out ocean)) { Height = ocean.Height; Normal = ocean.Normal; CollectUnderOceanInfos(oceanCamera, ocean); } else { Height = 0; Normal = Vector3.up; UnderOceanModeOptions.DisableUnderOceanEffectAll(); } Shader.SetGlobalFloat(OceanShaderOptions.TimeShaderID, OceanTime); if ((PreparedContents & PreparedContent.SunLight) != 0 && SunLight != null) { Vector4 pos = SunLight.transform.eulerAngles; pos.w = Vector3.Dot(new Vector3(0, -1, 0), SunLight.transform.forward); Shader.SetGlobalVector(OceanShaderOptions.SunLightShaderID, pos); Shader.SetGlobalColor(OceanShaderOptions.SunLightColorShaderID, SunLight.color); } if ((PreparedContents & PreparedContent.Ripple) != 0) { RippleSystem.Current.SetValueToShader(oceanCamera, new CameraTaskRippleData() { OceanHeight = Height }); } FoamShpereSystem.Current.SetValueToShader(oceanCamera, FoamData, PreparedContents); FoamAreaSystem.Current.SetValueToShader(oceanCamera, PreparedContents); }