Boat Attack使用了Universal RP的许多新图形功能,可以用于探索 Universal RP 的使用方式和技巧。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

138 行
5.7 KiB

using System;
using System.Collections.Generic;
using System.Diagnostics;
using UnityEngine.Scripting.APIUpdating;
namespace UnityEngine.Rendering.Universal
{
/// <summary>
/// Contains properties and helper functions that you can use when rendering.
/// </summary>
[MovedFrom("UnityEngine.Rendering.LWRP")] public static class RenderingUtils
{
static List<ShaderTagId> m_LegacyShaderPassNames = new List<ShaderTagId>()
{
new ShaderTagId("Always"),
new ShaderTagId("ForwardBase"),
new ShaderTagId("PrepassBase"),
new ShaderTagId("Vertex"),
new ShaderTagId("VertexLMRGBM"),
new ShaderTagId("VertexLM"),
};
static Mesh s_FullscreenMesh = null;
/// <summary>
/// Returns a mesh that you can use with <see cref="CommandBuffer.DrawMesh(Mesh, Matrix4x4, Material)"/> to render full-screen effects.
/// </summary>
public static Mesh fullscreenMesh
{
get
{
if (s_FullscreenMesh != null)
return s_FullscreenMesh;
float topV = 1.0f;
float bottomV = 0.0f;
s_FullscreenMesh = new Mesh { name = "Fullscreen Quad" };
s_FullscreenMesh.SetVertices(new List<Vector3>
{
new Vector3(-1.0f, -1.0f, 0.0f),
new Vector3(-1.0f, 1.0f, 0.0f),
new Vector3(1.0f, -1.0f, 0.0f),
new Vector3(1.0f, 1.0f, 0.0f)
});
s_FullscreenMesh.SetUVs(0, new List<Vector2>
{
new Vector2(0.0f, bottomV),
new Vector2(0.0f, topV),
new Vector2(1.0f, bottomV),
new Vector2(1.0f, topV)
});
s_FullscreenMesh.SetIndices(new[] { 0, 1, 2, 2, 1, 3 }, MeshTopology.Triangles, 0, false);
s_FullscreenMesh.UploadMeshData(true);
return s_FullscreenMesh;
}
}
#if POST_PROCESSING_STACK_2_0_0_OR_NEWER
[Obsolete("The use of the Post-processing Stack V2 is deprecated in the Universal Render Pipeline. Use the builtin post-processing effects instead.")]
public static UnityEngine.Rendering.PostProcessing.PostProcessRenderContext postProcessRenderContext => null;
#endif
internal static bool useStructuredBuffer
{
// There are some performance issues with StructuredBuffers in some platforms.
// We fallback to UBO in those cases.
get
{
// TODO: For now disabling SSBO until figure out Vulkan binding issues.
// When enabling this also enable it in shader side in Input.hlsl
return false;
// We don't use SSBO in D3D because we can't figure out without adding shader variants if platforms is D3D10.
//GraphicsDeviceType deviceType = SystemInfo.graphicsDeviceType;
//return !Application.isMobilePlatform &&
// (deviceType == GraphicsDeviceType.Metal || deviceType == GraphicsDeviceType.Vulkan ||
// deviceType == GraphicsDeviceType.PlayStation4 || deviceType == GraphicsDeviceType.XboxOne);
}
}
static Material s_ErrorMaterial;
static Material errorMaterial
{
get
{
if (s_ErrorMaterial == null)
s_ErrorMaterial = new Material(Shader.Find("Hidden/InternalErrorShader"));
return s_ErrorMaterial;
}
}
[Conditional("DEVELOPMENT_BUILD"), Conditional("UNITY_EDITOR")]
internal static void RenderObjectsWithError(ScriptableRenderContext context, ref CullingResults cullResults, Camera camera, FilteringSettings filterSettings, SortingCriteria sortFlags)
{
SortingSettings sortingSettings = new SortingSettings(camera) { criteria = sortFlags };
DrawingSettings errorSettings = new DrawingSettings(m_LegacyShaderPassNames[0], sortingSettings)
{
perObjectData = PerObjectData.None,
overrideMaterial = errorMaterial,
overrideMaterialPassIndex = 0
};
for (int i = 1; i < m_LegacyShaderPassNames.Count; ++i)
errorSettings.SetShaderPassName(i, m_LegacyShaderPassNames[i]);
context.DrawRenderers(cullResults, ref errorSettings, ref filterSettings);
}
// Caches render texture format support. SystemInfo.SupportsRenderTextureFormat allocates memory due to boxing.
static Dictionary<RenderTextureFormat, bool> m_RenderTextureFormatSupport = new Dictionary<RenderTextureFormat, bool>();
internal static void ClearSystemInfoCache()
{
m_RenderTextureFormatSupport.Clear();
}
/// <summary>
/// Checks if a render texture format is supported by the run-time system.
/// Similar to <see cref="SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat)"/>, but doesn't allocate memory.
/// </summary>
/// <param name="format">The format to look up.</param>
/// <returns>Returns true if the graphics card supports the given <c>RenderTextureFormat</c></returns>
public static bool SupportsRenderTextureFormat(RenderTextureFormat format)
{
if (!m_RenderTextureFormatSupport.TryGetValue(format, out var support))
{
support = SystemInfo.SupportsRenderTextureFormat(format);
m_RenderTextureFormatSupport.Add(format, support);
}
return support;
}
}
}