Files
2024-11-20 15:21:28 +01:00

376 lines
23 KiB
C#

using System.Collections;
using System.Collections.Generic;
#if UNITY_EDITOR
using UnityEditor;
#endif
using UnityEngine;
#if UNITY_POST_PROCESSING_STACK_V2
using UnityEngine.Rendering.PostProcessing;
#endif
namespace Gaia
{
public class GaiaSceneLighting : MonoBehaviour
{
public void SaveToGaiaDefault(GaiaLightingProfileValues profileValues)
{
if (profileValues == null)
{
return;
}
GaiaLightingProfileValues newProfileValues = new GaiaLightingProfileValues();
GaiaUtils.CopyFields(profileValues, newProfileValues);
newProfileValues.m_userCustomProfile = false;
#if UNITY_POST_PROCESSING_STACK_V2
newProfileValues.PostProcessProfileBuiltIn = profileValues.PostProcessProfileBuiltIn;
newProfileValues.m_postProcessingProfileGUIDBuiltIn = profileValues.m_postProcessingProfileGUIDBuiltIn;
#endif
#if UPPipeline
newProfileValues.PostProcessProfileURP = profileValues.PostProcessProfileURP;
newProfileValues.m_postProcessingProfileGUIDURP = profileValues.m_postProcessingProfileGUIDURP;
#endif
#if HDPipeline
newProfileValues.PostProcessProfileHDRP = profileValues.PostProcessProfileHDRP;
newProfileValues.m_postProcessingProfileGUIDHDRP = profileValues.m_postProcessingProfileGUIDHDRP;
#endif
GaiaSettings gaiaSettings = GaiaUtils.GetGaiaSettings();
if (gaiaSettings != null)
{
GaiaLightingProfile lightingProfile = gaiaSettings.m_gaiaLightingProfile;
if (lightingProfile != null)
{
bool addProfile = true;
int indexForReplacement = 0;
for (int i = 0; i < lightingProfile.m_lightingProfiles.Count; i++)
{
if (lightingProfile.m_lightingProfiles[i].m_typeOfLighting == newProfileValues.m_typeOfLighting)
{
addProfile = false;
indexForReplacement = i;
}
}
if (addProfile)
{
SaveColorAndCubemapFields(newProfileValues, profileValues);
lightingProfile.m_lightingProfiles.Add(newProfileValues);
#if UNITY_EDITOR
EditorUtility.SetDirty(lightingProfile);
#endif
}
else
{
#if UNITY_EDITOR
if (EditorUtility.DisplayDialog("Profile Already Exists", "This profile " + newProfileValues.m_typeOfLighting + " already exists the the default Gaia lighting profile. Do you want to replace this profile?", "Yes", "No"))
{
GaiaUtils.CopyFields(newProfileValues, lightingProfile.m_lightingProfiles[indexForReplacement]);
SaveColorAndCubemapFields( lightingProfile.m_lightingProfiles[indexForReplacement], profileValues);
#if UNITY_POST_PROCESSING_STACK_V2
lightingProfile.m_lightingProfiles[indexForReplacement].PostProcessProfileBuiltIn = profileValues.PostProcessProfileBuiltIn;
lightingProfile.m_lightingProfiles[indexForReplacement].m_postProcessingProfileGUIDBuiltIn = profileValues.m_postProcessingProfileGUIDBuiltIn;
#endif
#if UPPipeline
lightingProfile.m_lightingProfiles[indexForReplacement].PostProcessProfileURP = profileValues.PostProcessProfileURP;
lightingProfile.m_lightingProfiles[indexForReplacement].m_postProcessingProfileGUIDURP = profileValues.m_postProcessingProfileGUIDURP;
#endif
#if HDPipeline
lightingProfile.m_lightingProfiles[indexForReplacement].PostProcessProfileHDRP = profileValues.PostProcessProfileHDRP;
lightingProfile.m_lightingProfiles[indexForReplacement].m_postProcessingProfileGUIDHDRP = profileValues.m_postProcessingProfileGUIDHDRP;
#endif
}
#endif
}
#if UNITY_EDITOR
EditorUtility.SetDirty(lightingProfile);
#endif
Debug.Log("Profile successfully added to the Gaia Lighting Profile. Remember to save your project to save the changes");
}
}
}
#if GAIA_PRO_PRESENT
public void SaveToGaiaDefault(GaiaLightingProfileValues profileValues, ProceduralWorldsGlobalWeather globalWeather)
{
if (profileValues == null)
{
return;
}
GaiaLightingProfileValues newProfileValues = new GaiaLightingProfileValues();
GaiaUtils.CopyFields(profileValues, newProfileValues);
newProfileValues.m_userCustomProfile = false;
#if UNITY_POST_PROCESSING_STACK_V2
newProfileValues.PostProcessProfileBuiltIn = profileValues.PostProcessProfileBuiltIn;
newProfileValues.m_postProcessingProfileGUIDBuiltIn = profileValues.m_postProcessingProfileGUIDBuiltIn;
#endif
#if UPPipeline
newProfileValues.PostProcessProfileURP = profileValues.PostProcessProfileURP;
newProfileValues.m_postProcessingProfileGUIDURP = profileValues.m_postProcessingProfileGUIDURP;
#endif
#if HDPipeline
newProfileValues.PostProcessProfileHDRP = profileValues.PostProcessProfileHDRP;
newProfileValues.m_postProcessingProfileGUIDHDRP = profileValues.m_postProcessingProfileGUIDHDRP;
newProfileValues.EnvironmentProfileHDRP = profileValues.EnvironmentProfileHDRP;
newProfileValues.m_environmentProfileGUIDHDRP = profileValues.m_environmentProfileGUIDHDRP;
#endif
GaiaSettings gaiaSettings = GaiaUtils.GetGaiaSettings();
if (gaiaSettings != null)
{
GaiaLightingProfile lightingProfile = gaiaSettings.m_gaiaLightingProfile;
if (lightingProfile != null)
{
bool addProfile = true;
int indexForReplacement = 0;
for (int i = 0; i < lightingProfile.m_lightingProfiles.Count; i++)
{
if (lightingProfile.m_lightingProfiles[i].m_typeOfLighting == newProfileValues.m_typeOfLighting)
{
addProfile = false;
indexForReplacement = i;
}
}
if (addProfile)
{
SavePWSkyAtmosphere(newProfileValues, globalWeather);
SavePWSeason(newProfileValues, globalWeather);
SavePWSkyCloud(newProfileValues, globalWeather);
SavePWSkyWeather(newProfileValues, globalWeather);
SavePWSkyWind(newProfileValues, globalWeather);
SaveColorAndCubemapFields(newProfileValues, profileValues);
lightingProfile.m_lightingProfiles.Add(newProfileValues);
}
else
{
#if UNITY_EDITOR
if (EditorUtility.DisplayDialog("Profile Already Exists", "This profile " + newProfileValues.m_typeOfLighting + " already exists the the default Gaia lighting profile. Do you want to replace this profile?", "Yes", "No"))
{
GaiaUtils.CopyFields(newProfileValues, lightingProfile.m_lightingProfiles[indexForReplacement]);
SavePWSkyAtmosphere(lightingProfile.m_lightingProfiles[indexForReplacement], globalWeather);
SavePWSeason(lightingProfile.m_lightingProfiles[indexForReplacement], globalWeather);
SavePWSkyCloud(lightingProfile.m_lightingProfiles[indexForReplacement], globalWeather);
SavePWSkyWeather(lightingProfile.m_lightingProfiles[indexForReplacement], globalWeather);
SavePWSkyWind(lightingProfile.m_lightingProfiles[indexForReplacement], globalWeather);
SaveColorAndCubemapFields( lightingProfile.m_lightingProfiles[indexForReplacement], profileValues);
#if UNITY_POST_PROCESSING_STACK_V2
lightingProfile.m_lightingProfiles[indexForReplacement].PostProcessProfileBuiltIn = profileValues.PostProcessProfileBuiltIn;
lightingProfile.m_lightingProfiles[indexForReplacement].m_postProcessingProfileGUIDBuiltIn = profileValues.m_postProcessingProfileGUIDBuiltIn;
#endif
#if UPPipeline
lightingProfile.m_lightingProfiles[indexForReplacement].PostProcessProfileURP = profileValues.PostProcessProfileURP;
lightingProfile.m_lightingProfiles[indexForReplacement].m_postProcessingProfileGUIDURP = profileValues.m_postProcessingProfileGUIDURP;
#endif
#if HDPipeline
lightingProfile.m_lightingProfiles[indexForReplacement].PostProcessProfileHDRP = profileValues.PostProcessProfileHDRP;
lightingProfile.m_lightingProfiles[indexForReplacement].m_postProcessingProfileGUIDHDRP = profileValues.m_postProcessingProfileGUIDHDRP;
#endif
}
#endif
}
#if UNITY_EDITOR
EditorUtility.SetDirty(lightingProfile);
#endif
Debug.Log("Profile successfully added to the Gaia Lighting Profile. Remember to save your project to save the changes");
}
}
}
private void SavePWSkyAtmosphere(GaiaLightingProfileValues profileValues, ProceduralWorldsGlobalWeather globalWeather)
{
if (profileValues == null || globalWeather == null)
{
return;
}
profileValues.m_pwSkyAtmosphereData.TODSkyboxTint = globalWeather.TODSkyboxTint;
profileValues.m_pwSkyAtmosphereData.TODSkyboxExposure = globalWeather.TODSkyboxExposure;
profileValues.m_pwSkyAtmosphereData.TODSunColor = globalWeather.TODSunColor;
profileValues.m_pwSkyAtmosphereData.TODFogColor = globalWeather.TODFogColor;
profileValues.m_pwSkyAtmosphereData.TODAmbientSkyColor = globalWeather.TODAmbientSkyColor;
profileValues.m_pwSkyAtmosphereData.TODAmbientEquatorColor = globalWeather.TODAmbientEquatorColor;
profileValues.m_pwSkyAtmosphereData.TODAmbientGroundColor = globalWeather.TODAmbientGroundColor;
profileValues.m_pwSkyAtmosphereData.TODSunIntensity = globalWeather.TODSunIntensity;
profileValues.m_pwSkyAtmosphereData.TODSunShadowStrength = globalWeather.TODSunShadowStrength;
profileValues.m_pwSkyAtmosphereData.TODCloudHeightLevelDensity = globalWeather.TODCloudHeightLevelDensity;
profileValues.m_pwSkyAtmosphereData.TODCloudHeightLevelThickness = globalWeather.TODCloudHeightLevelThickness;
profileValues.m_pwSkyAtmosphereData.TODCloudHeightLevelSpeed = globalWeather.TODCloudHeightLevelSpeed;
profileValues.m_pwSkyAtmosphereData.TODCloudOpacity = globalWeather.TODCloudOpacity;
profileValues.m_pwSkyAtmosphereData.CloudDomeBrightness = globalWeather.CloudDomeBrightness;
profileValues.m_pwSkyAtmosphereData.TODAmbientIntensity = globalWeather.TODAmbientIntensity;
profileValues.m_pwSkyAtmosphereData.TODAtmosphereThickness = globalWeather.TODAtmosphereThickness;
profileValues.m_pwSkyAtmosphereData.TODFogDensity = globalWeather.TODFogDensity;
profileValues.m_pwSkyAtmosphereData.TODFogStartDistance = globalWeather.TODFogStartDistance;
profileValues.m_pwSkyAtmosphereData.TODFogEndDistance = globalWeather.TODFogEndDistance;
profileValues.m_pwSkyAtmosphereData.TODHDRPFogBaseHeight = globalWeather.TODHDRPFogBaseHeight;
profileValues.m_pwSkyAtmosphereData.TODHDRPFogAnisotropy = globalWeather.TODHDRPFogAnisotropy;
profileValues.m_pwSkyAtmosphereData.TODHDRPFogLightProbeDimmer = globalWeather.TODHDRPFogLightProbeDimmer;
profileValues.m_pwSkyAtmosphereData.TODHDRPFogDepthExtent = globalWeather.TODHDRPFogDepthExtent;
profileValues.m_pwSkyAtmosphereData.TODHDRPGroundTint = globalWeather.TODHDRPGroundTint;
profileValues.m_pwSkyAtmosphereData.TODHDRPFogAlbedo = globalWeather.TODHDRPFogAlbedo;
profileValues.m_pwSkyAtmosphereData.TODSunSize = globalWeather.TODSunSize;
profileValues.m_pwSkyAtmosphereData.TODSunSizeConvergence = globalWeather.TODSunSizeConvergence;
}
private void SavePWSkyCloud(GaiaLightingProfileValues profileValues, ProceduralWorldsGlobalWeather globalWeather)
{
if (profileValues == null || globalWeather == null)
{
return;
}
profileValues.m_pwSkyCloudData.EnableClouds = globalWeather.EnableClouds;
profileValues.m_pwSkyCloudData.CloudHeight = globalWeather.CloudHeight;
profileValues.m_pwSkyCloudData.CloudAmbientColor = globalWeather.CloudAmbientColor;
profileValues.m_pwSkyCloudData.CloudScale = globalWeather.CloudScale;
profileValues.m_pwSkyCloudData.CloudOffset = globalWeather.CloudOffset;
profileValues.m_pwSkyCloudData.CloudBrightness = globalWeather.CloudBrightness;
profileValues.m_pwSkyCloudData.CloudFade = globalWeather.CloudFade;
profileValues.m_pwSkyCloudData.CloudTilingAndWind = globalWeather.CloudTilingAndWind;
profileValues.m_pwSkyCloudData.CloudOpacity = globalWeather.CloudOpacity;
profileValues.m_pwSkyCloudData.CloudRotationSpeedLow = globalWeather.CloudRotationSpeedLow;
profileValues.m_pwSkyCloudData.CloudRotationSpeedMiddle = globalWeather.CloudRotationSpeedMiddle;
profileValues.m_pwSkyCloudData.CloudRotationSpeedFar = globalWeather.CloudRotationSpeedFar;
}
private void SavePWSeason(GaiaLightingProfileValues profileValues, ProceduralWorldsGlobalWeather globalWeather)
{
if (profileValues == null || globalWeather == null)
{
return;
}
profileValues.m_pwSkySeasonData.EnableSeasons = globalWeather.EnableSeasons;
profileValues.m_pwSkySeasonData.SeasonMode = globalWeather.SeasonMode;
profileValues.m_pwSkySeasonData.Season = globalWeather.Season;
profileValues.m_pwSkySeasonData.SeasonWinterTint = globalWeather.SeasonWinterTint;
profileValues.m_pwSkySeasonData.SeasonSpringTint = globalWeather.SeasonSpringTint;
profileValues.m_pwSkySeasonData.SeasonSummerTint = globalWeather.SeasonSummerTint;
profileValues.m_pwSkySeasonData.SeasonAutumnTint = globalWeather.SeasonAutumnTint;
profileValues.m_pwSkySeasonData.m_seasonTransitionDuration = globalWeather.m_seasonTransitionDuration;
}
private void SavePWSkyWind(GaiaLightingProfileValues profileValues, ProceduralWorldsGlobalWeather globalWeather)
{
if (profileValues == null || globalWeather == null)
{
return;
}
profileValues.m_pwSkyWindData.WindSpeed = globalWeather.WindSpeed;
profileValues.m_pwSkyWindData.WindTurbulence = globalWeather.WindTurbulence;
profileValues.m_pwSkyWindData.WindFrequency = globalWeather.WindFrequency;
profileValues.m_pwSkyWindData.WindDirection = globalWeather.WindDirection;
profileValues.m_pwSkyWindData.WindMultiplier = globalWeather.WindMultiplier;
}
private void SavePWSkyWeather(GaiaLightingProfileValues profileValues, ProceduralWorldsGlobalWeather globalWeather)
{
if (profileValues == null || globalWeather == null)
{
return;
}
profileValues.m_pwSkyWeatherData.m_weatherFadeDuration = globalWeather.m_weatherFadeDuration;
profileValues.m_pwSkyWeatherData.m_modifyFog = globalWeather.m_modifyFog;
profileValues.m_pwSkyWeatherData.m_modifyWind = globalWeather.m_modifyWind;
profileValues.m_pwSkyWeatherData.m_modifySkybox = globalWeather.m_modifySkybox;
profileValues.m_pwSkyWeatherData.m_modifyPostProcessing = globalWeather.m_modifyPostProcessing;
profileValues.m_pwSkyWeatherData.m_modifySun = globalWeather.m_modifySun;
profileValues.m_pwSkyWeatherData.m_modifyAmbient = globalWeather.m_modifyAmbient;
profileValues.m_pwSkyWeatherData.m_modifyClouds = globalWeather.m_modifyClouds;
profileValues.m_pwSkyWeatherData.m_rainSettings.EnableRain = globalWeather.EnableRain;
profileValues.m_pwSkyWeatherData.m_rainSettings.RainIntensity = globalWeather.RainIntensity;
profileValues.m_pwSkyWeatherData.m_rainSettings.m_rainMode = globalWeather.m_rainMode;
profileValues.m_pwSkyWeatherData.m_rainSettings.m_rainHeight = globalWeather.m_rainHeight;
profileValues.m_pwSkyWeatherData.m_rainSettings.m_rainStepSize = globalWeather.m_rainStepSize;
GaiaUtils.CopyFields(globalWeather.m_rainWeatherSettings, profileValues.m_pwSkyWeatherData.m_rainSettings.m_rainWeatherSettings);
profileValues.m_pwSkyWeatherData.m_snowSettings.EnableSnow = globalWeather.EnableSnow;
profileValues.m_pwSkyWeatherData.m_snowSettings.SnowCoverAlwaysEnabled = globalWeather.SnowCoverAlwaysEnabled;
profileValues.m_pwSkyWeatherData.m_snowSettings.SnowIntensity = globalWeather.SnowIntensity;
profileValues.m_pwSkyWeatherData.m_snowSettings.SnowHeight = globalWeather.SnowHeight;
profileValues.m_pwSkyWeatherData.m_snowSettings.PermanentSnowHeight = globalWeather.PermanentSnowHeight;
profileValues.m_pwSkyWeatherData.m_snowSettings.SnowingHeight = globalWeather.SnowingHeight;
profileValues.m_pwSkyWeatherData.m_snowSettings.SnowFadeHeight = globalWeather.SnowFadeHeight;
profileValues.m_pwSkyWeatherData.m_snowSettings.m_snowStormChance = globalWeather.m_snowStormChance;
profileValues.m_pwSkyWeatherData.m_snowSettings.m_snowStepSize = globalWeather.m_snowStepSize;
profileValues.m_pwSkyWeatherData.m_snowSettings.m_snowMode = globalWeather.m_snowMode;
GaiaUtils.CopyFields(globalWeather.m_snowWeatherSettings, profileValues.m_pwSkyWeatherData.m_snowSettings.m_snowWeatherSettings);
profileValues.m_pwSkyWeatherData.m_thunderSettings.m_enableThunder = globalWeather.m_enableThunder;
profileValues.m_pwSkyWeatherData.m_thunderSettings.ThunderWaitDuration = globalWeather.ThunderWaitDuration;
profileValues.m_pwSkyWeatherData.m_thunderSettings.m_thunderChance = globalWeather.m_thunderChance;
profileValues.m_pwSkyWeatherData.m_thunderSettings.ThunderLightColor = globalWeather.ThunderLightColor;
profileValues.m_pwSkyWeatherData.m_thunderSettings.ThunderLightIntensity = globalWeather.ThunderLightIntensity;
profileValues.m_pwSkyWeatherData.m_thunderSettings.ThunderAudioSources = globalWeather.ThunderAudioSources;
profileValues.m_pwSkyWeatherData.m_thunderSettings.ThunderLightRadius = globalWeather.ThunderLightRadius;
}
#endif
private void SaveColorAndCubemapFields(GaiaLightingProfileValues newProfileValues, GaiaLightingProfileValues profileValues)
{
newProfileValues.m_sunColor = profileValues.m_sunColor;
newProfileValues.m_lWSunColor = profileValues.m_lWSunColor;
newProfileValues.m_hDSunColor = profileValues.m_hDSunColor;
newProfileValues.m_skyboxTint = profileValues.m_skyboxTint;
newProfileValues.m_hDGradientTopColor = profileValues.m_hDGradientTopColor;
newProfileValues.m_hDGradientMiddleColor = profileValues.m_hDGradientMiddleColor;
newProfileValues.m_hDGradientBottomColor = profileValues.m_hDGradientBottomColor;
newProfileValues.m_hDHDRISkybox = profileValues.m_hDHDRISkybox;
newProfileValues.m_hDProceduralSkyTint = profileValues.m_hDProceduralSkyTint;
newProfileValues.m_hDProceduralGroundColor = profileValues.m_hDProceduralGroundColor;
newProfileValues.m_hDPBSGroundAlbedoTexture = profileValues.m_hDPBSGroundAlbedoTexture;
newProfileValues.m_hDPBSGroundEmissionTexture = profileValues.m_hDPBSGroundEmissionTexture;
newProfileValues.m_hDPBSSpaceEmissionTexture = profileValues.m_hDPBSSpaceEmissionTexture;
newProfileValues.m_hDPBSAirOpacity = profileValues.m_hDPBSAirOpacity;
newProfileValues.m_hDPBSAirAlbedo = profileValues.m_hDPBSAirAlbedo;
newProfileValues.m_hDPBSAirTint = profileValues.m_hDPBSAirTint;
newProfileValues.m_hDPBSAerosolAlbedo = profileValues.m_hDPBSAerosolAlbedo;
newProfileValues.m_hDPBSHorizonTint = profileValues.m_hDPBSHorizonTint;
newProfileValues.m_hDPBSZenithTint = profileValues.m_hDPBSZenithTint;
newProfileValues.m_skyAmbient = profileValues.m_skyAmbient;
newProfileValues.m_equatorAmbient = profileValues.m_equatorAmbient;
newProfileValues.m_groundAmbient = profileValues.m_groundAmbient;
newProfileValues.m_fogColor = profileValues.m_fogColor;
newProfileValues.m_hDVolumetricFogScatterColor = profileValues.m_hDVolumetricFogScatterColor;
newProfileValues.m_profileType = profileValues.m_profileType;
}
/// <summary>
/// Adds post processing fog layer to the camera
/// </summary>
/// <param name="camera"></param>
/// <param name="enabled"></param>
public static void AddReflectionFog(Camera camera, bool enabled)
{
#if UNITY_POST_PROCESSING_STACK_V2
if (camera == null)
{
return;
}
if (enabled)
{
PostProcessLayer layer = camera.GetComponent<PostProcessLayer>();
if (layer == null)
{
layer = camera.gameObject.AddComponent<PostProcessLayer>();
layer.fog.enabled = true;
layer.fog.excludeSkybox = true;
layer.antialiasingMode = PostProcessLayer.Antialiasing.None;
layer.volumeLayer = 2;
layer.volumeTrigger = camera.transform;
}
}
else
{
PostProcessLayer layer = camera.GetComponent<PostProcessLayer>();
if (layer != null)
{
DestroyImmediate(layer);
}
}
#endif
}
}
}