You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
4.3 KiB
C#

3 years ago
using UnityEngine;
using System.Collections.Generic;
#if UPPipeline
using UnityEngine.Rendering.Universal;
#endif
using Gaia.Pipeline;
namespace Gaia.Pipeline.URP
{
public static class GaiaURPRuntimeUtils
{
/// <summary>
/// Configures reflections to LWRP
/// </summary>
public static void ConfigureReflectionProbes()
{
ReflectionProbe[] reflectionProbes = Object.FindObjectsOfType<ReflectionProbe>();
if (reflectionProbes != null)
{
foreach(ReflectionProbe probe in reflectionProbes)
{
if (probe.resolution > 512)
{
Debug.Log(probe.name + " This probes resolution is quite high and could cause performance issues in Lightweight Pipeline. Recommend lowing the resolution if you're targeting mobile platform");
}
}
}
}
/// <summary>
/// Configures and setup the terrain
/// </summary>
/// <param name="profile"></param>
public static void ConfigureTerrain(UnityPipelineProfile profile)
{
TerrainHelper.SetTerrainMaterial(profile.m_universalTerrainMaterial, "Setup Default URP Terrain Shader?", "Do you want to set up the default Unity URP terrain shader on your existing terrains? This is recommended if you do not use any alternative terrain shader.", "Yes", "No");
}
#if UPPipeline
/// <summary>
/// Sets the shadow distance in URP
/// </summary>
/// <param name="pipelineAsset"></param>
/// <param name="profileValues"></param>
public static void SetShadowDistance(UniversalRenderPipelineAsset pipelineAsset, GaiaLightingProfileValues profileValues)
{
if (pipelineAsset == null || profileValues == null)
{
return;
}
pipelineAsset.shadowDistance = profileValues.m_shadowDistance;
#if UNITY_EDITOR
UnityEditor.EditorUtility.SetDirty(pipelineAsset);
#endif
}
/// <summary>
/// Gets or creates UP camera data
/// </summary>
/// <param name="camera"></param>
/// <returns></returns>
public static UniversalAdditionalCameraData GetUPCameraData(Camera camera)
{
if (camera == null)
{
return null;
}
UniversalAdditionalCameraData cameraData = camera.gameObject.GetComponent<UniversalAdditionalCameraData>();
if (cameraData == null)
{
cameraData = camera.gameObject.AddComponent<UniversalAdditionalCameraData>();
}
return cameraData;
}
/// <summary>
/// Clears URP camera data in the scene
/// </summary>
/// <param name="cameraDatas"></param>
public static void ClearUPCameraData(UniversalAdditionalCameraData[] cameraDatas)
{
if (cameraDatas.Length < 1)
{
return;
}
foreach (var data in cameraDatas)
{
GameObject.DestroyImmediate(data);
}
}
/// <summary>
/// Gets or creates UP Light data
/// </summary>
/// <param name="light"></param>
/// <returns></returns>
public static UniversalAdditionalLightData GetUPLightData(Light light)
{
if (light == null)
{
return null;
}
UniversalAdditionalLightData lightData = light.GetComponent<UniversalAdditionalLightData>();
if (lightData == null)
{
lightData = light.gameObject.AddComponent<UniversalAdditionalLightData>();
}
return lightData;
}
/// <summary>
/// Clears URP light data in the scene
/// </summary>
/// <param name="lightDatas"></param>
public static void ClearUPLightData(UniversalAdditionalLightData[] lightDatas)
{
if (lightDatas.Length < 1)
{
return;
}
foreach (var data in lightDatas)
{
GameObject.DestroyImmediate(data);
}
}
#endif
}
}