166 lines
4.6 KiB
C#
166 lines
4.6 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
|
|
#if UNITY_EDITOR
|
|
using UnityEditor;
|
|
#endif
|
|
|
|
#if URP_OUTLINE && UNITY_2019_1_OR_NEWER
|
|
#if UNITY_2019_3_OR_NEWER
|
|
using UnityEngine.Rendering.Universal;
|
|
#else
|
|
using UnityEngine.Rendering.LWRP;
|
|
#endif
|
|
#endif
|
|
|
|
#if HDRP_OUTLINE
|
|
using UnityEngine.Rendering.HighDefinition;
|
|
#endif
|
|
|
|
namespace EPOOutline
|
|
{
|
|
public static class PipelineFetcher
|
|
{
|
|
#if UNITY_2019_1_OR_NEWER
|
|
public static RenderPipelineAsset CurrentAsset
|
|
{
|
|
get
|
|
{
|
|
#if UNITY_2019_3_OR_NEWER
|
|
var pipeline = QualitySettings.renderPipeline;
|
|
if (pipeline == null)
|
|
pipeline = GraphicsSettings.defaultRenderPipeline;
|
|
#else
|
|
var pipeline = GraphicsSettings.renderPipelineAsset;
|
|
#endif
|
|
|
|
return pipeline;
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
|
|
#if (URP_OUTLINE || HDRP_OUTLINE) && UNITY_EDITOR && UNITY_2019_1_OR_NEWER
|
|
public static class PipelineAssetUtility
|
|
{
|
|
public static RenderPipelineAsset CurrentAsset
|
|
{
|
|
get
|
|
{
|
|
return PipelineFetcher.CurrentAsset;
|
|
}
|
|
}
|
|
|
|
public static HashSet<RenderPipelineAsset> ActiveAssets
|
|
{
|
|
get
|
|
{
|
|
var set = new HashSet<RenderPipelineAsset>();
|
|
|
|
if (GraphicsSettings.defaultRenderPipeline != null)
|
|
set.Add(GraphicsSettings.defaultRenderPipeline);
|
|
|
|
#if UNITY_2019_3_OR_NEWER
|
|
var qualitySettingNames = QualitySettings.names;
|
|
for (var index = 0; index < qualitySettingNames.Length; index++)
|
|
{
|
|
var assset = QualitySettings.GetRenderPipelineAssetAt(index);
|
|
if (assset == null)
|
|
continue;
|
|
|
|
set.Add(assset);
|
|
}
|
|
#endif
|
|
|
|
return set;
|
|
}
|
|
}
|
|
|
|
#if URP_OUTLINE
|
|
public static RenderPipelineAsset CreateAsset(UniversalRendererData data)
|
|
{
|
|
#if UNITY_2019_3_OR_NEWER
|
|
return UniversalRenderPipelineAsset.Create(data);
|
|
#else
|
|
var asset = LightweightRenderPipelineAsset.Create();
|
|
|
|
using (var so = new SerializedObject(asset))
|
|
{
|
|
so.Update();
|
|
|
|
var rendererProperty = so.FindProperty("m_RendererData");
|
|
var rendererTypeProperty = so.FindProperty("m_RendererType");
|
|
rendererTypeProperty.enumValueIndex = (int)RendererType.Custom;
|
|
|
|
rendererProperty.objectReferenceValue = data;
|
|
|
|
so.ApplyModifiedProperties();
|
|
}
|
|
|
|
return asset;
|
|
#endif
|
|
}
|
|
|
|
public static UniversalRendererData CreateRenderData()
|
|
{
|
|
return ScriptableObject.CreateInstance<UniversalRendererData>();
|
|
}
|
|
#endif
|
|
|
|
#if HDRP_OUTLINE
|
|
public static RenderPipelineAsset CreateHDRPAsset()
|
|
{
|
|
return ScriptableObject.CreateInstance<HDRenderPipelineAsset>();
|
|
}
|
|
#endif
|
|
|
|
|
|
public static bool IsURPOrLWRP(RenderPipelineAsset asset)
|
|
{
|
|
return asset != null &&
|
|
(asset.GetType().Name.Equals("LightweightRenderPipelineAsset") ||
|
|
asset.GetType().Name.Equals("UniversalRenderPipelineAsset"));
|
|
}
|
|
|
|
public static bool IsHDRP(RenderPipelineAsset asset)
|
|
{
|
|
return asset != null &&
|
|
asset.GetType().Name.Equals("HDRenderPipelineAsset");
|
|
}
|
|
|
|
#if URP_OUTLINE
|
|
public static ScriptableRendererData GetRenderer(RenderPipelineAsset asset)
|
|
{
|
|
using (var so = new SerializedObject(asset))
|
|
{
|
|
so.Update();
|
|
|
|
#if URP_OUTLINE
|
|
#if UNITY_2019_3_OR_NEWER
|
|
var rendererDataList = so.FindProperty("m_RendererDataList");
|
|
var assetIndex = so.FindProperty("m_DefaultRendererIndex");
|
|
var item = rendererDataList.GetArrayElementAtIndex(assetIndex.intValue);
|
|
|
|
return item.objectReferenceValue as ScriptableRendererData;
|
|
#else
|
|
var rendererData = so.FindProperty("m_RendererData");
|
|
return rendererData.objectReferenceValue as ScriptableRendererData;
|
|
#endif
|
|
#else
|
|
return null;
|
|
#endif
|
|
}
|
|
}
|
|
|
|
public static bool IsAssetContainsSRPOutlineFeature(RenderPipelineAsset asset)
|
|
{
|
|
var data = GetRenderer(asset);
|
|
|
|
return data.rendererFeatures.Find(x => x is URPOutlineFeature) != null;
|
|
}
|
|
#endif
|
|
}
|
|
#endif
|
|
} |