Files
2021-01-11 22:20:43 -08:00

166 lines
7.4 KiB
C#

using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
namespace Gaia.Pipeline
{
public enum GaiaPackageVersion { Unity2019_1, Unity2019_2, Unity2019_3, Unity2019_4, Unity2020_1, Unity2020_2, Unity2020_3, Unity2020_4, Unity2021_1, Unity2021_2, Unity2021_3, Unity2021_4, Unity2022_1, Unity2022_2, Unity2022_3, Unity2022_4, Unity2023_1 }
/// <summary>
/// Mapping between Unity Version and Renderpipeline Asset Filename
/// </summary>
[System.Serializable]
public class UnityVersionPipelineAsset
{
public GaiaPackageVersion m_unityVersion;
public string m_pipelineAssetName;
public string m_minURPVersion = "5.7.2";
public string m_maxURPVersion = "5.13.0";
public string m_minHDRPVersion = "5.7.2";
public string m_maxHDRPVersion = "5.13.0";
}
[System.Serializable]
public class GaiaPackageSettings
{
[Header("Global Settings")]
public string m_version = "Add Unity Version... Example: 2019.1, 2019.2";
public bool m_isSupported = true;
public GaiaPackageVersion m_unityVersion = GaiaPackageVersion.Unity2019_1;
}
/// <summary>
/// Data structure to configure different Shader configurations for different rendering pipelines. Each entry is based on a shader in the built-in pipeline and
/// its replacement shader in the URP and HDRP pipeline.
/// </summary>
[System.Serializable]
public class ShaderMappingEntry
{
//public string m_name;
//public bool m_supportUnitypackages = false;
public string m_builtInShaderName;
//public string m_builtInMaterialUnitypackage;
public string m_URPReplacementShaderName;
//public string m_URPMaterialUnitypackage;
public string m_HDRPReplacementShaderName;
//public string m_HDRPMaterialUnitypackage;
//[HideInInspector]
//public bool m_floatChecksFoldedOut = false;
//public List<ShaderFloatCheck> m_floatChecks = new List<ShaderFloatCheck>();
//[HideInInspector]
//public bool m_materialsFoldedOut = false;
//public List<Material> m_materials;
}
/// <summary>
/// Data structure to configure keyword updates in a shader based on a float value in the material
/// </summary>
[System.Serializable]
public class ShaderFloatCheck
{
public string m_floatValue;
public string m_shaderKeyWord;
}
public class UnityPipelineProfile : ScriptableObject
{
[Header("Global Settings")]
public GaiaConstants.EnvironmentRenderer m_activePipelineInstalled = GaiaConstants.EnvironmentRenderer.BuiltIn;
public GaiaSettings m_gaiaSettings;
[HideInInspector]
public bool m_editorUpdates = false;
[HideInInspector]
public bool m_pipelineSwitchUpdates = false;
[Header("Material Settings")]
public Material m_underwaterHorizonMaterial;
[Header("Built-In Render Pipeline")]
public string m_builtInHorizonObjectShader = "Standard";
public Material m_builtInTerrainMaterial;
public bool m_BuiltInAutoConfigureWater = true;
[Header("Universal Render Pipeline")]
//public string m_universalPipelineProfile = "Procedural Worlds Universal Pipeline";
public List<UnityVersionPipelineAsset> m_universalPipelineProfiles = new List<UnityVersionPipelineAsset>();
public string m_universalScriptDefine = "UPPipeline";
public string m_universalHorizonObjectShader = "Universal Render Pipeline/Lit";
public Material m_universalTerrainMaterial;
public bool m_setUPPipelineProfile = true;
public bool m_UPAutoConfigureTerrain = true;
public bool m_UPAutoConfigureWater = true;
public bool m_UPAutoConfigureCamera = true;
public bool m_UPAutoConfigureProbes = true;
public bool m_UPAutoConfigureLighting = true;
public bool m_UPAutoConfigureBiomePostFX = true;
//[Header("Lightweight Render Pipeline")]
//public string m_lightweightPipelineProfile = "Procedural Worlds Lightweight Pipeline Profile";
[HideInInspector]
public List<UnityVersionPipelineAsset> m_lightweightPipelineProfiles = new List<UnityVersionPipelineAsset>();
[HideInInspector]
public string m_lightweightScriptDefine = "LWPipeline";
[HideInInspector]
public string m_lightweightHorizonObjectShader = "Lightweight Render Pipeline/Lit";
[HideInInspector]
public Material m_lightweightTerrainMaterial;
[HideInInspector]
public bool m_setLWPipelineProfile = true;
[HideInInspector]
public bool m_LWAutoConfigureTerrain = true;
[HideInInspector]
public bool m_LWAutoConfigureWater = true;
[HideInInspector]
public bool m_LWAutoConfigureCamera = true;
[HideInInspector]
public bool m_LWAutoConfigureProbes = true;
[HideInInspector]
public bool m_LWAutoConfigureLighting = true;
[Header("High Definition Render Pipeline")]
//public string m_highDefinitionPipelineProfile = "Procedural Worlds HDRenderPipelineAsset";
public List<UnityVersionPipelineAsset> m_highDefinitionPipelineProfiles = new List<UnityVersionPipelineAsset>();
public string m_highDefinitionScriptDefine = "HDPipeline";
public string m_highDefinitionHorizonObjectShader = "HDRP/Lit";
public Material m_highDefinitionTerrainMaterial;
public string m_HDVolumeObjectName = "HD Environment Volume";
public string m_HDPostVolumeObjectName = "HD Post Processing Environment Volume";
public string m_HDDefaultPostProcessing = "Default HDRP Post Processing Profile";
public string m_HDDefaultSceneLighting = "Default Volume Profile";
public string m_2019_3HDDefaultSceneLighting = "Default Volume Profile";
public string m_HDSceneLighting = "HD Volume Profile";
public string m_2019_3HDSceneLighting = "HD Volume Profile";
public bool m_setHDPipelineProfile = true;
public bool m_HDAutoConfigureTerrain = true;
public bool m_HDAutoConfigureWater = true;
public bool m_HDAutoConfigureCamera = true;
public bool m_HDAutoConfigureProbes = true;
public bool m_HDAutoConfigureLighting = true;
public bool m_HDDisableTerrainDetails = true;
public bool m_HDAutoConfigureBiomePostFX = true;
[Header("Package Settings")]
//Material Library entries will be drawn from the editor script since they use extra buttons etc.
[HideInInspector]
public ShaderMappingEntry[] m_ShaderMappingLibrary = new ShaderMappingEntry[0];
//public Material[] m_vegetationMaterialLibrary;
//public Material[] m_waterMaterialLibrary;
public GaiaPackageSettings[] m_packageSetupSettings;
/// <summary>
/// Create Gaia Lighting Profile asset
/// </summary>
#if UNITY_EDITOR
[MenuItem("Assets/Create/Procedural Worlds/Gaia/Unity Pipeline Profile")]
public static void CreateSkyProfiles()
{
UnityPipelineProfile asset = ScriptableObject.CreateInstance<UnityPipelineProfile>();
AssetDatabase.CreateAsset(asset, "Assets/Unity Pipeline Profile.asset");
AssetDatabase.SaveAssets();
EditorUtility.FocusProjectWindow();
Selection.activeObject = asset;
}
#endif
}
}