説明なし
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

DecalForwardEmissivePass.cs 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine.Experimental.Rendering;
  4. using UnityEngine.Rendering.RenderGraphModule;
  5. namespace UnityEngine.Rendering.Universal
  6. {
  7. internal class DecalDrawFowardEmissiveSystem : DecalDrawSystem
  8. {
  9. public DecalDrawFowardEmissiveSystem(DecalEntityManager entityManager) : base("DecalDrawFowardEmissiveSystem.Execute", entityManager) { }
  10. protected override int GetPassIndex(DecalCachedChunk decalCachedChunk) => decalCachedChunk.passIndexEmissive;
  11. }
  12. internal class DecalForwardEmissivePass : ScriptableRenderPass
  13. {
  14. private FilteringSettings m_FilteringSettings;
  15. private List<ShaderTagId> m_ShaderTagIdList;
  16. private DecalDrawFowardEmissiveSystem m_DrawSystem;
  17. private PassData m_PassData;
  18. public DecalForwardEmissivePass(DecalDrawFowardEmissiveSystem drawSystem)
  19. {
  20. renderPassEvent = RenderPassEvent.AfterRenderingOpaques;
  21. ConfigureInput(ScriptableRenderPassInput.Depth); // Require depth
  22. m_DrawSystem = drawSystem;
  23. profilingSampler = new ProfilingSampler("Draw Decal Forward Emissive");
  24. m_FilteringSettings = new FilteringSettings(RenderQueueRange.opaque, -1);
  25. m_ShaderTagIdList = new List<ShaderTagId>();
  26. m_ShaderTagIdList.Add(new ShaderTagId(DecalShaderPassNames.DecalMeshForwardEmissive));
  27. m_ShaderTagIdList.Add(new ShaderTagId(DecalShaderPassNames.DecalProjectorForwardEmissive));
  28. m_PassData = new PassData();
  29. }
  30. [Obsolete(DeprecationMessage.CompatibilityScriptingAPIObsolete, false)]
  31. public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
  32. {
  33. InitPassData(ref m_PassData);
  34. UniversalRenderingData universalRenderingData = renderingData.frameData.Get<UniversalRenderingData>();
  35. UniversalCameraData cameraData = renderingData.frameData.Get<UniversalCameraData>();
  36. UniversalLightData lightData = renderingData.frameData.Get<UniversalLightData>();
  37. var param = InitRendererListParams(universalRenderingData, cameraData, lightData);
  38. var rendererList = context.CreateRendererList(ref param);
  39. using (new ProfilingScope(universalRenderingData.commandBuffer, profilingSampler))
  40. {
  41. ExecutePass(CommandBufferHelpers.GetRasterCommandBuffer(universalRenderingData.commandBuffer), m_PassData, rendererList);
  42. }
  43. }
  44. private class PassData
  45. {
  46. internal DecalDrawFowardEmissiveSystem drawSystem;
  47. internal RendererListHandle rendererList;
  48. }
  49. private void InitPassData(ref PassData passData)
  50. {
  51. passData.drawSystem = m_DrawSystem;
  52. }
  53. private RendererListParams InitRendererListParams(UniversalRenderingData renderingData, UniversalCameraData cameraData, UniversalLightData lightData)
  54. {
  55. SortingCriteria sortingCriteria = cameraData.defaultOpaqueSortFlags;
  56. DrawingSettings drawingSettings = RenderingUtils.CreateDrawingSettings(m_ShaderTagIdList, renderingData, cameraData, lightData, sortingCriteria);
  57. return new RendererListParams(renderingData.cullResults, drawingSettings, m_FilteringSettings);
  58. }
  59. private static void ExecutePass(RasterCommandBuffer cmd, PassData passData, RendererList rendererList)
  60. {
  61. passData.drawSystem.Execute(cmd);
  62. cmd.DrawRendererList(rendererList);
  63. }
  64. public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameData)
  65. {
  66. using (var builder = renderGraph.AddRasterRenderPass<PassData>(profilingSampler.name, out var passData, profilingSampler))
  67. {
  68. UniversalResourceData resourceData = frameData.Get<UniversalResourceData>();
  69. UniversalRenderingData renderingData = frameData.Get<UniversalRenderingData>();
  70. UniversalCameraData cameraData = frameData.Get<UniversalCameraData>();
  71. UniversalLightData lightData = frameData.Get<UniversalLightData>();
  72. InitPassData(ref passData);
  73. var param = InitRendererListParams(renderingData, cameraData, lightData);
  74. passData.rendererList = renderGraph.CreateRendererList(param);
  75. builder.UseRendererList(passData.rendererList);
  76. UniversalRenderer renderer = (UniversalRenderer)cameraData.renderer;
  77. builder.SetRenderAttachment(resourceData.activeColorTexture, 0, AccessFlags.Write);
  78. builder.SetRenderAttachmentDepth(resourceData.activeDepthTexture, AccessFlags.Read);
  79. builder.SetRenderFunc((PassData data, RasterGraphContext rgContext) =>
  80. {
  81. ExecutePass(rgContext.cmd, data, data.rendererList);
  82. });
  83. }
  84. }
  85. }
  86. }