Skip to content

Commit fb10f5c

Browse files
authored
Remove Unity 2020/2021 codes and improve implimantation of URP (#128)
1 parent 58e958d commit fb10f5c

2 files changed

Lines changed: 59 additions & 115 deletions

File tree

Dev/Plugin/Assets/Effekseer/External/URP/Effekseer.URP.asmdef

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,7 @@
1717
"name": "com.unity.render-pipelines.universal",
1818
"expression": "",
1919
"define": "EFFEKSEER_URP_SUPPORT"
20-
},
21-
{
22-
"name": "com.unity.render-pipelines.universal",
23-
"expression": "10.1",
24-
"define": "EFFEKSEER_URP_DEPTHTARGET_FIX"
25-
},
26-
{
27-
"name": "com.unity.render-pipelines.universal",
28-
"expression": "10.10",
29-
"define": "EFFEKSEER_URP_XRRENDERING"
3020
}
3121
],
3222
"noEngineReferences": false
33-
}
23+
}

Dev/Plugin/Assets/Effekseer/External/URP/EffekseerURPRenderPassFeature.cs

Lines changed: 58 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -50,21 +50,22 @@ public class EffekseerURPRenderPassFeature : ScriptableRendererFeature
5050

5151
class EffekseerRenderPassURP : UnityEngine.Rendering.Universal.ScriptableRenderPass
5252
{
53-
#if !EFFEKSEER_URP_DEPTHTARGET_FIX
54-
RenderTargetIdentifier cameraColorTarget;
55-
RenderTargetIdentifier cameraDepthTarget;
56-
#endif
5753
Effekseer.Internal.RenderTargetProperty prop = new Effekseer.Internal.RenderTargetProperty();
58-
private IEffekseerBlitter blitter = new UrpBlitter();
54+
private readonly IEffekseerBlitter blitter = new UrpBlitter();
5955
UnityEngine.LayerMask layerMask;
6056
private const string RenderPassName = nameof(EffekseerRenderPassURP);
6157

62-
public EffekseerRenderPassURP(ScriptableRenderer renderer, UnityEngine.LayerMask layerMask)
58+
public EffekseerRenderPassURP(UnityEngine.LayerMask layerMask)
6359
{
6460
this.renderPassEvent = UnityEngine.Rendering.Universal.RenderPassEvent.AfterRenderingTransparents;
6561
this.layerMask = layerMask;
6662
}
6763

64+
public void SetLayerMask(UnityEngine.LayerMask layerMask)
65+
{
66+
this.layerMask = layerMask;
67+
}
68+
6869
bool IsValidCameraDepthTarget(RenderTargetIdentifier cameraDepthTarget)
6970
{
7071
// HACK: When using URP, the depth might be either written to a DepthBuffer attached to
@@ -92,45 +93,41 @@ bool IsValidCameraDepthTarget(RenderTargetIdentifier cameraDepthTarget)
9293
return !identifierString.Contains("NameID -1") || !identifierString.Contains("InstanceID 0");
9394
}
9495

95-
#if !EFFEKSEER_URP_DEPTHTARGET_FIX
96-
public void Setup(RenderTargetIdentifier cameraColorTarget, RenderTargetIdentifier cameraDepthTarget)
96+
void PrepareRenderTargetProperty(RenderTargetProperty renderTargetProperty, RenderTextureDescriptor colorTargetDescriptor, bool requiresDepthTexture, bool xrRendering)
9797
{
98-
bool isValidDepth = IsValidCameraDepthTarget(cameraDepthTarget);
99-
100-
this.cameraColorTarget = cameraColorTarget;
101-
prop.colorTargetIdentifier = cameraColorTarget;
102-
this.renderPassEvent = UnityEngine.Rendering.Universal.RenderPassEvent.AfterRenderingTransparents;
98+
renderTargetProperty.colorBufferID = null;
99+
renderTargetProperty.depthTargetIdentifier = null;
100+
renderTargetProperty.colorTargetRenderTexture = null;
101+
renderTargetProperty.depthTargetRenderTexture = null;
102+
renderTargetProperty.ActualScreenSize = null;
103+
renderTargetProperty.Viewport = null;
104+
renderTargetProperty.SourceViewport = null;
105+
renderTargetProperty.isRequiredToChangeViewport = false;
106+
renderTargetProperty.colorTargetDescriptor = colorTargetDescriptor;
103107

104-
if (isValidDepth)
105-
{
106-
this.cameraDepthTarget = cameraDepthTarget;
107-
prop.depthTargetIdentifier = cameraDepthTarget;
108-
}
108+
// Linear and native renderer makes a result white.
109+
renderTargetProperty.colorTargetDescriptor.sRGB = false;
110+
renderTargetProperty.isRequiredToCopyBackground = true;
111+
renderTargetProperty.renderFeature = Effekseer.Internal.RenderFeature.URP;
112+
renderTargetProperty.canGrabDepth = requiresDepthTexture;
113+
renderTargetProperty.xrRendering = xrRendering;
109114
}
110-
#endif
111115

112116
#if UNITY_6000_0_OR_NEWER
113117
[Obsolete]
114118
#endif
115119
public override void Execute(ScriptableRenderContext context, ref UnityEngine.Rendering.Universal.RenderingData renderingData)
116120
{
117121
if (Effekseer.EffekseerSystem.Instance == null) return;
118-
#if EFFEKSEER_URP_DEPTHTARGET_FIX
122+
var xrRendering = renderingData.cameraData.xrRendering;
123+
PrepareRenderTargetProperty(prop, renderingData.cameraData.cameraTargetDescriptor, renderingData.cameraData.requiresDepthTexture, xrRendering);
119124
var renderer = renderingData.cameraData.renderer;
120-
#if UNITY_2022_3_OR_NEWER
121125
prop.colorTargetIdentifier = renderer.cameraColorTargetHandle;
122-
#else
123-
prop.colorTargetIdentifier = renderer.cameraColorTarget;
124-
#endif
125126

126127
// NOTE: We need to know whether the depth in cameraDepthTarget is valid or not since if it is valid,
127128
// we need to pass cameraDepthTarget to SetRenderTarget() later on. If it isn't valid, the depth in
128129
// cameraColorTarget is used instead.
129-
#if UNITY_2022_3_OR_NEWER
130130
var cameraDepthTarget = renderer.cameraDepthTargetHandle;
131-
#else
132-
var cameraDepthTarget = renderer.cameraDepthTarget;
133-
#endif
134131
var isValidDepth = IsValidCameraDepthTarget(cameraDepthTarget);
135132

136133
if (isValidDepth)
@@ -141,20 +138,8 @@ public override void Execute(ScriptableRenderContext context, ref UnityEngine.Re
141138
{
142139
prop.depthTargetIdentifier = null;
143140
}
144-
#endif
145-
prop.colorTargetDescriptor = renderingData.cameraData.cameraTargetDescriptor;
146-
147-
// Linear and native renderer makes a result white.
148-
prop.colorTargetDescriptor.sRGB = false;
149-
150-
prop.isRequiredToCopyBackground = true;
151-
prop.renderFeature = Effekseer.Internal.RenderFeature.URP;
152-
#if EFFEKSEER_URP_XRRENDERING
153-
prop.xrRendering = renderingData.cameraData.xrRendering;
154-
#endif
155141

156142
var cmd = CommandBufferPool.Get(RenderPassName);
157-
prop.canGrabDepth = renderingData.cameraData.requiresDepthTexture;
158143
Effekseer.EffekseerSystem.Instance.renderer.Render(renderingData.cameraData.camera, layerMask.value, prop, cmd, true, blitter);
159144
context.ExecuteCommandBuffer(cmd);
160145
CommandBufferPool.Release(cmd);
@@ -163,82 +148,60 @@ public override void Execute(ScriptableRenderContext context, ref UnityEngine.Re
163148
#if UNITY_6000_0_OR_NEWER
164149
class PassData
165150
{
151+
public Camera camera;
152+
public int layerMask;
166153
public TextureHandle colorTexture;
167154
public TextureHandle depthTexture;
168155

169156
public Effekseer.Internal.RenderTargetProperty prop = new();
170157
public IEffekseerBlitter blitter = new UrpBlitter();
171158
}
172159

173-
class DummyPassData
160+
static void ExecuteRenderGraphPass(PassData passData, UnsafeGraphContext context)
174161
{
162+
var system = Effekseer.EffekseerSystem.Instance;
163+
if (system == null || passData.camera == null)
164+
{
165+
return;
166+
}
167+
168+
var commandBuffer = CommandBufferHelpers.GetNativeCommandBuffer(context.cmd);
169+
passData.prop.colorTargetIdentifier = (RenderTargetIdentifier)passData.colorTexture;
170+
passData.prop.depthTargetIdentifier = passData.depthTexture.IsValid() ? (RenderTargetIdentifier)passData.depthTexture : (RenderTargetIdentifier?)null;
171+
system.renderer.Render(passData.camera, passData.layerMask, passData.prop, commandBuffer, true, passData.blitter);
175172
}
176173

177174
public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameData)
178175
{
179176
if (Effekseer.EffekseerSystem.Instance == null) return;
180177

181-
string profilerTag = "EffekseerPath";
182-
string profilerDummyTag = "EffekseerDummyPath";
183-
184178
UniversalCameraData cameraData = frameData.Get<UniversalCameraData>();
185-
186-
using (var builder = renderGraph.AddUnsafePass<PassData>(profilerTag, out var passData))
179+
UniversalResourceData resourceData = frameData.Get<UniversalResourceData>();
180+
var colorTexture = resourceData.activeColorTexture;
181+
if (!colorTexture.IsValid())
187182
{
188-
UniversalResourceData resourceData = frameData.Get<UniversalResourceData>();
183+
return;
184+
}
189185

190-
passData.blitter = this.blitter;
186+
var xrRendering = cameraData.xrRendering;
191187

192-
//passData.prop.colorTargetIdentifier = resourceData.activeColorTexture;
193-
//passData.prop.depthTargetIdentifier = resourceData.activeDepthTexture;
194-
passData.colorTexture = resourceData.activeColorTexture;
188+
using (var builder = renderGraph.AddUnsafePass<PassData>("EffekseerPass", out var passData, profilingSampler))
189+
{
190+
passData.camera = cameraData.camera;
191+
passData.layerMask = layerMask.value;
192+
passData.blitter = this.blitter;
193+
passData.colorTexture = colorTexture;
195194
builder.UseTexture(passData.colorTexture, AccessFlags.ReadWrite);
196195
passData.depthTexture = resourceData.activeDepthTexture;
197-
builder.UseTexture(passData.depthTexture, AccessFlags.ReadWrite);
198-
passData.prop.colorTargetDescriptor = cameraData.cameraTargetDescriptor;
199-
200-
// Linear and native renderer makes a result white.
201-
passData.prop.colorTargetDescriptor.sRGB = false;
202-
203-
passData.prop.isRequiredToCopyBackground = true;
204-
passData.prop.renderFeature = Effekseer.Internal.RenderFeature.URP;
205-
#if EFFEKSEER_URP_XRRENDERING
206-
passData.prop.xrRendering = cameraData.xrRendering;
207-
#endif
208-
passData.prop.canGrabDepth = cameraData.requiresDepthTexture;
209-
210-
builder.AllowPassCulling(false);
211-
builder.AllowGlobalStateModification(true);
212-
213-
builder.SetRenderFunc((PassData passData, UnsafeGraphContext context) =>
196+
if (passData.depthTexture.IsValid())
214197
{
215-
using (new ProfilingScope(context.cmd, profilingSampler))
216-
{
217-
var commandBuffer = CommandBufferHelpers.GetNativeCommandBuffer(context.cmd);
218-
passData.prop.colorTargetIdentifier = passData.colorTexture;
219-
passData.prop.depthTargetIdentifier = passData.depthTexture;
198+
builder.UseTexture(passData.depthTexture, AccessFlags.Write);
199+
}
200+
PrepareRenderTargetProperty(passData.prop, cameraData.cameraTargetDescriptor, cameraData.requiresDepthTexture, xrRendering);
220201

221-
Effekseer.EffekseerSystem.Instance.renderer.Render(cameraData.camera, layerMask.value, passData.prop, commandBuffer, true, passData.blitter);
222-
}
223-
});
224-
}
225-
226-
// HACK : Dummy pass to ensure that the render graph is executed
227-
using (var builder = renderGraph.AddRasterRenderPass<DummyPassData>(profilerDummyTag, out var passData))
228-
{
229-
UniversalResourceData resourceData = frameData.Get<UniversalResourceData>();
230-
builder.SetRenderAttachment(resourceData.activeColorTexture, 0);
231202
builder.AllowPassCulling(false);
232203
builder.AllowGlobalStateModification(true);
233-
234-
builder.SetRenderFunc((DummyPassData passData, RasterGraphContext context) =>
235-
{
236-
using (new ProfilingScope(context.cmd, profilingSampler))
237-
{
238-
context.cmd.BeginSample(profilerDummyTag);
239-
context.cmd.EndSample(profilerDummyTag);
240-
}
241-
});
204+
builder.SetRenderFunc(static (PassData passData, UnsafeGraphContext context) => ExecuteRenderGraphPass(passData, context));
242205
}
243206
}
244207
#endif
@@ -248,23 +211,14 @@ public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer
248211

249212
public override void Create()
250213
{
214+
m_ScriptablePass = new EffekseerRenderPassURP(LayerMask);
251215
}
252216

253217
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
254218
{
255-
#if !EFFEKSEER_URP_DEPTHTARGET_FIX
256-
if (m_ScriptablePass == null)
257-
{
258-
m_ScriptablePass = new EffekseerRenderPassURP(renderer, LayerMask);
259-
}
260-
261-
m_ScriptablePass.Setup(renderer.cameraColorTarget, renderer.cameraDepth);
262-
219+
m_ScriptablePass = m_ScriptablePass ?? new EffekseerRenderPassURP(LayerMask);
220+
m_ScriptablePass.SetLayerMask(LayerMask);
263221
renderer.EnqueuePass(m_ScriptablePass);
264-
#else
265-
m_ScriptablePass = m_ScriptablePass ?? new EffekseerRenderPassURP(renderer, LayerMask);
266-
renderer.EnqueuePass(m_ScriptablePass);
267-
#endif
268222
}
269223
}
270224

0 commit comments

Comments
 (0)