-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path6-C# Script__Unity__ScriptableRenderPass-NewPassName.cs.txt
More file actions
118 lines (90 loc) · 3.31 KB
/
6-C# Script__Unity__ScriptableRenderPass-NewPassName.cs.txt
File metadata and controls
118 lines (90 loc) · 3.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
public class #SCRIPTNAME#Feature : ScriptableRendererFeature
{
[System.Serializable]
public struct PassSettings
{
[Range(0.0f, 1.0f)] public float Intensity;
public RenderPassEvent RenderPassEvent;
}
// settings
public PassSettings PassSettings = new PassSettings();
private Material material;
private #SCRIPTNAME#Pass renderPass;
public override void Create()
{
material = CoreUtils.CreateEngineMaterial("Hidden/#SCRIPTNAME#");
renderPass = new #SCRIPTNAME#Pass(material);
}
// PRECULL -> ADD -> SETUP
public override void OnCameraPreCull(ScriptableRenderer renderer, in CameraData cameraData)
{
}
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
if (renderingData.cameraData.cameraType == CameraType.Game)
{
renderer.EnqueuePass(renderPass);
}
}
public override void SetupRenderPasses(ScriptableRenderer renderer, in RenderingData renderingData)
{
if (renderingData.cameraData.cameraType == CameraType.Game)
{
// enusures that the opaque texture is avaliable to the Render Pass.
renderPass.ConfigureInput(ScriptableRenderPassInput.Color);
renderPass.SetTarget(renderer.cameraColorTargetHandle, PassSettings);
}
}
protected override void Dispose(bool disposing)
{
renderPass.Dispose();
}
class #SCRIPTNAME#Pass : ScriptableRenderPass
{
private Material material;
private RTHandle cameraColorTarget;
private PassSettings passSettings;
private float intensity;
public #SCRIPTNAME#Pass(Material material)
{
material = material;
}
public void SetTarget(RTHandle colorHandle, PassSettings passSettings)
{
cameraColorTarget = colorHandle;
intensity = passSettings.Intensity;
renderPassEvent = passSettings.RenderPassEvent;
}
public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)
{
ConfigureTarget(cameraColorTarget);
}
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
{
var cameraData = renderingData.cameraData;
if(cameraData.camera.cameraType != CameraType.Game) return;
CommandBuffer cmd = CommandBufferPool.Get();
material.SetFloat("_Intensity", intensity);
using (new ProfilingScope(cmd, new ProfilingSampler("#SCRIPTNAME#Pass")))
{
// RenderingUtils.ReAllocateIfNeeded(ref _downSamples[i], Vector2.one * scaleFactor, _sourceDescriptor,
// FilterMode.Bilinear, TextureWrapMode.Clamp);
}
context.ExecuteCommandBuffer(cmd);
cmd.Clear();
CommandBufferPool.Release(cmd);
}
public override void OnCameraCleanup(CommandBuffer cmd)
{
}
public void Dispose()
{
CoreUtils.Destroy(material);
}
}
}