public void OnPreFrameBufferChanged(Dropdown dropdown) { PreFrameBufferSetting setting = settings[dropdown.value]; DySkyPreFrameBuffers.BindCamera(Camera.main, setting.evt, setting.color, setting.depth); if (waterController) { waterController.Refresh(); } }
public static bool IsDepthEnable(Camera camera) { if (!IsEnable(camera)) { return(false); } DySkyPreFrameBuffers pfb = camera.GetComponent <DySkyPreFrameBuffers>(); return(pfb.mBlitDepth != DepthPrecision.Off); }
public static void ReleaseCamera(Camera camera) { if (!camera) { return; } if (IsEnable(camera)) { DySkyPreFrameBuffers pfb = camera.GetComponent <DySkyPreFrameBuffers>(); pfb.enabled = false; } }
private static void SetupWaterKeys(Material material, Quality quality) { if (!material || !material.shader) { return; } switch (quality) { case Quality.High: Shader.EnableKeyword("DY_SKY_GRAB_PASS_ENABLE"); Shader.EnableKeyword("DY_SKY_SOFT_EDGE_ENABLE"); Shader.EnableKeyword("DY_SKY_WATER_HIGH"); Shader.DisableKeyword("DY_SKY_WATER_MID"); material.shader.maximumLOD = 300; if (DySkyPreFrameBuffers.IsDepthEnable(Camera.main)) { if (Camera.main) { Camera.main.depthTextureMode &= ~DepthTextureMode.Depth; } } else { if (Camera.main) { Camera.main.depthTextureMode |= DepthTextureMode.Depth; } } if (DySkyPreFrameBuffers.IsColorEnable(Camera.main)) { material.SetShaderPassEnabled("Always", false); } else { material.SetShaderPassEnabled("Always", true); } break; case Quality.Mid: Shader.EnableKeyword("DY_SKY_GRAB_PASS_ENABLE"); Shader.DisableKeyword("DY_SKY_WATER_HIGH"); Shader.EnableKeyword("DY_SKY_WATER_MID"); if (DySkyPreFrameBuffers.IsDepthEnable(Camera.main)) { Shader.EnableKeyword("DY_SKY_SOFT_EDGE_ENABLE"); material.shader.maximumLOD = 250; } else { Shader.DisableKeyword("DY_SKY_SOFT_EDGE_ENABLE"); material.shader.maximumLOD = 200; } if (Camera.main) { Camera.main.depthTextureMode &= ~DepthTextureMode.Depth; } if (DySkyPreFrameBuffers.IsColorEnable(Camera.main)) { material.SetShaderPassEnabled("Always", false); } else { material.SetShaderPassEnabled("Always", true); } break; default: Shader.DisableKeyword("DY_SKY_GRAB_PASS_ENABLE"); Shader.DisableKeyword("DY_SKY_SOFT_EDGE_ENABLE"); Shader.DisableKeyword("DY_SKY_WATER_HIGH"); Shader.DisableKeyword("DY_SKY_WATER_MID"); material.shader.maximumLOD = 100; if (Camera.main) { Camera.main.depthTextureMode &= ~DepthTextureMode.Depth; } break; } }
private void UpdateDySkyUniforms(float progress01, float timeline24) { Shader.SetGlobalFloat(Uniforms._DySky_kRayleigh, profile.kRayleigh); Shader.SetGlobalFloat(Uniforms._DySky_kMie, profile.kMie); Shader.SetGlobalFloat(Uniforms._DySky_tScattering, profile.curveScattering.Evaluate(timeline24)); Shader.SetGlobalFloat(Uniforms._DySky_tRayleigh, profile.curveRayleigh.Evaluate(timeline24)); Shader.SetGlobalFloat(Uniforms._DySky_tMie, profile.curveMie.Evaluate(timeline24)); Shader.SetGlobalColor(Uniforms._DySky_cRayleigh, profile.gradRayleigh.Evaluate(progress01)); Shader.SetGlobalColor(Uniforms._DySky_cMie, profile.gradMie.Evaluate(progress01)); Shader.SetGlobalFloat(Uniforms._DySky_tNightIntensity, profile.curveNightIntensity.Evaluate(timeline24)); Shader.SetGlobalFloat(Uniforms._DySky_tMoonEmissionIntensity, profile.curveMoonEmissionIntensity.Evaluate(timeline24)); Shader.SetGlobalFloat(Uniforms._DySky_tMoonBrightRange, profile.curveMoonBrightRange.Evaluate(timeline24)); Shader.SetGlobalColor(Uniforms._DySky_cMoonEmission, profile.gradMoonEmission.Evaluate(progress01)); Shader.SetGlobalColor(Uniforms._DySky_cMoonBright, profile.gradMoonBright.Evaluate(progress01)); Shader.SetGlobalVector(Uniforms._DySky_unionMoonPhaseSize, new Vector4(moonPhaseX, moonPhaseY, Mathf.Lerp(21f, 1f, profile.curveMoonSize.Evaluate(timeline24) * moonScale), moonPhaseW)); Quaternion sunSpace = GetCurrentSunRotation(); Shader.SetGlobalMatrix(Uniforms._DySky_mSunSpace, Matrix4x4.TRS(Vector3.zero, sunSpace, Vector3.one)); Shader.SetGlobalFloat(Uniforms._DySky_tSunSize, Mathf.Lerp(11f, 1f, profile.curveSunSize.Evaluate(timeline24) * sunScale)); Shader.SetGlobalColor(Uniforms._DySky_cSunEmission, profile.gradSunEmission.Evaluate(progress01) * profile.curveSunEmissionIntensity.Evaluate(timeline24)); float cloudDir = profile.curveCloudDir.Evaluate(timeline24); Shader.SetGlobalVector(Uniforms._DySky_unionCloudHeightDirSpeed, new Vector4(profile.kCloudHeight, Mathf.Sin(cloudDir), Mathf.Cos(cloudDir), profile.curveCloudSpeed.Evaluate(timeline24))); Shader.SetGlobalFloat(Uniforms._DySky_tCloudDensity, Mathf.Lerp(25.0f, 0.0f, profile.curveCloudDensity.Evaluate(timeline24))); Color cCloudMainTint = profile.gradCloudMainTint.Evaluate(progress01); Color cCloudSecondaryTint = profile.gradCloudSecondaryTint.Evaluate(progress01); Shader.SetGlobalColor(Uniforms._DySky_cCloudMainTint, QualitySettings.activeColorSpace == ColorSpace.Gamma ? cCloudMainTint : cCloudMainTint.linear); Shader.SetGlobalColor(Uniforms._DySky_cCloudSecondaryTint, QualitySettings.activeColorSpace == ColorSpace.Gamma ? cCloudSecondaryTint : cCloudSecondaryTint.linear); Shader.SetGlobalMatrix(Uniforms._DySky_mStarfieldSpace, Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(galaxyX, galaxyY, galaxyZ) * sunSpace, Vector3.one)); Shader.SetGlobalFloat(Uniforms._DySky_tStarfieldIntensity, profile.curveStarfieldIntensity.Evaluate(timeline24)); Shader.SetGlobalFloat(Uniforms._DySky_tGalaxyIntensity, profile.curveGalaxyIntensity.Evaluate(timeline24)); Shader.SetGlobalFloat(Uniforms._DySky_tExposure, profile.curveExposure.Evaluate(timeline24)); if (Camera.main) { Camera.main.clearFlags = CameraClearFlags.SolidColor; Matrix4x4 M = transSkydome.localToWorldMatrix; Matrix4x4 V = Camera.main.worldToCameraMatrix; Matrix4x4 P = Matrix4x4.Perspective(fov, Camera.main.aspect, 0.3f, 1000f); #if UNITY_STANDALONE_WIN // fixed matrix issue for DX engine P = GL.GetGPUProjectionMatrix(P, true); #else // fixed matrix issue for render into RT mode(affected by Image Effect[OnRenderImage]) P = GL.GetGPUProjectionMatrix(P, renderIntoRT || QualitySettings.antiAliasing > 0 || DySkyPreFrameBuffers.IsEnable(Camera.main)); #endif Shader.SetGlobalMatrix(Uniforms._DySky_mMVP, P * V * M); } }