131 lines
5.1 KiB
C#
Raw Normal View History

2025-09-11 20:42:09 +08:00
//using System;
//using System.Runtime.InteropServices;
//using Unity.Collections.LowLevel.Unsafe;
//using UnityEngine;
//using UnityEngine.Rendering;
//using UnityEngine.Rendering.Universal;
//namespace X.Rendering.Feature
//{
// [StructLayout(LayoutKind.Sequential)]
// public struct Capsule
// {
// public Vector3 a, b;
// public float radius;
// }
// [StructLayout(LayoutKind.Sequential)]
// public struct Character
// {
// public Vector3 position;
// public float radius;
// public Vector4 lightDir; //xyz:lightDir, w:根据lightColor 算个系数
// public int startID, endID;
// }
// public class CapsuleAO : ScriptableRendererFeature
// {
// [Serializable]
// public class CapsuleAOSettings
// {
// public RenderPassEvent RenderPassEvent = RenderPassEvent.BeforeRenderingTransparents;
// public float AmbientIntensity = 0.2f;
// public float ShadowIntensity = 0.4f;
// public float ShadowSharpness = 20;
// [Range(1, 90)]
// public float ConeAngle = 1;
// public Material CapsuleAOMat;
// }
// [SerializeField]
// CapsuleAOSettings settings;
// CapsuleAOPass capsuleAOPass;
// public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
// {
// {
// renderer.EnqueuePass(capsuleAOPass);
// }
// }
// public override void Create()
// {
// capsuleAOPass = new(settings);
// }
// class CapsuleAOPass : ScriptableRenderPass, IDisposable
// {
// private CapsuleAOSettings settings;
// private GraphicsBuffer capsuleDataBuffer;
// private GraphicsBuffer characterDataBuffer;
// private ProfilingSampler profiler;
// public CapsuleAOPass(CapsuleAOSettings settings)
// {
// this.settings = settings;
// profiler = new(nameof(CapsuleAOPass));
// renderPassEvent = settings.RenderPassEvent;
// }
// public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
// {
// base.Configure(cmd, cameraTextureDescriptor);
// ConfigureInput(ScriptableRenderPassInput.Depth | ScriptableRenderPassInput.Normal);
// }
// public void Dispose()
// {
// capsuleDataBuffer?.Dispose();
// capsuleDataBuffer = null;
// characterDataBuffer?.Dispose();
// characterDataBuffer = null;
// }
// public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
// {
// if (!XRenderFeatureManager.Instance)
// {
// return;
// }
// ref var characterArray = ref XRenderFeatureManager.Instance.CharacterArray;
// ref var capsuleArray = ref XRenderFeatureManager.Instance.CapsuleArray;
// if (!capsuleArray.IsCreated)
// {
// return;
// }
// if (capsuleDataBuffer == null || capsuleDataBuffer.count != capsuleArray.Length)
// {
// capsuleDataBuffer?.Release();
// capsuleDataBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, capsuleArray.Length, UnsafeUtility.SizeOf<Capsule>());
// }
// if (characterDataBuffer == null || characterDataBuffer.count != characterArray.Length)
// {
// characterDataBuffer?.Release();
// characterDataBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, characterArray.Length, UnsafeUtility.SizeOf<Character>());
// }
// capsuleDataBuffer.SetData(capsuleArray);
// characterDataBuffer.SetData(characterArray);
// var cmd = renderingData.commandBuffer;
// using var scp = new ProfilingScope(cmd, profiler);
// cmd.SetGlobalBuffer("_CapsuleData", capsuleDataBuffer);
// cmd.SetGlobalBuffer("_CharacterData", characterDataBuffer);
// cmd.SetGlobalInt("_CapsulesCount", capsuleArray.Length);
// cmd.SetGlobalInt("_CharactersCount", characterArray.Length);
// cmd.SetGlobalFloat("_AmbientIntensity", settings.AmbientIntensity);
// cmd.SetGlobalFloat("_ShadowIntensity", settings.ShadowIntensity);
// cmd.SetGlobalFloat("_ShadowSharpness", settings.ShadowSharpness);
// cmd.SetGlobalFloat("_ConeAngle", settings.ConeAngle);
// var renderer = renderingData.cameraData.renderer;
// cmd.SetRenderTarget(renderer.cameraColorTargetHandle, loadAction: RenderBufferLoadAction.Load, storeAction: RenderBufferStoreAction.Store);
// cmd.DrawProcedural(Matrix4x4.identity, settings.CapsuleAOMat, 0, MeshTopology.Triangles, 3);
// }
// }
// }
//}