Skip to content

Commit 46e42e8

Browse files
committed
Upgrade to Unity 2019
1 parent c22071f commit 46e42e8

File tree

15 files changed

+114
-136
lines changed

15 files changed

+114
-136
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# Changelog
22

3+
## [0.1.0]
4+
5+
### Breaking changes
6+
7+
- Upgraded to Unity 2019. Dropped support for Unity 2018.
8+
- Removed `dynamicBatching` from Render Pipeline Asset. Configure dynamic batching in `Project Settings/Player/Others Settings` instead.
9+
310
## [0.0.1]
411

512
### Added

Runtime/SRP/VXGIRenderPipeline.cs

Lines changed: 34 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,11 @@
11
using System.Collections.ObjectModel;
22
using UnityEngine;
3-
using UnityEngine.Experimental.Rendering;
43
using UnityEngine.Rendering;
54

65
public class VXGIRenderPipeline : RenderPipeline {
7-
public static bool isD3D11Supported {
8-
get { return _D3D11DeviceType.Contains(SystemInfo.graphicsDeviceType); }
9-
}
6+
public static bool isD3D11Supported => _D3D11DeviceType.Contains(SystemInfo.graphicsDeviceType);
107

11-
public DrawRendererFlags drawRendererFlags {
12-
get { return _drawRendererFlags; }
13-
}
14-
public RendererConfiguration rendererConfiguration {
15-
get { return _rendererConfiguration; }
16-
}
8+
public PerObjectData PerObjectData { get; }
179

1810
static readonly ReadOnlyCollection<GraphicsDeviceType> _D3D11DeviceType = new ReadOnlyCollection<GraphicsDeviceType>(new[] {
1911
GraphicsDeviceType.Direct3D11,
@@ -23,10 +15,8 @@ public RendererConfiguration rendererConfiguration {
2315
});
2416

2517
CommandBuffer _command;
26-
CullResults _cullResults;
27-
DrawRendererFlags _drawRendererFlags;
28-
FilterRenderersSettings _filterSettings;
29-
RendererConfiguration _rendererConfiguration;
18+
FilteringSettings _filteringSettings;
19+
ScriptableCullingParameters _cullingParameters;
3020
VXGIRenderer _renderer;
3121

3222
public static void TriggerCameraCallback(Camera camera, string message, Camera.CameraCallback callback) {
@@ -37,63 +27,53 @@ public static void TriggerCameraCallback(Camera camera, string message, Camera.C
3727
public VXGIRenderPipeline(VXGIRenderPipelineAsset asset) {
3828
_renderer = new VXGIRenderer(this);
3929
_command = new CommandBuffer() { name = "VXGI.RenderPipeline" };
40-
_filterSettings = new FilterRenderersSettings(true) { renderQueueRange = RenderQueueRange.opaque };
41-
42-
_drawRendererFlags = DrawRendererFlags.None;
43-
if (asset.dynamicBatching) _drawRendererFlags |= DrawRendererFlags.EnableDynamicBatching;
44-
45-
_rendererConfiguration = RendererConfiguration.None;
46-
47-
if (asset.environmentLighting) _rendererConfiguration |= RendererConfiguration.PerObjectLightProbe;
48-
if (asset.environmentReflections) _rendererConfiguration |= RendererConfiguration.PerObjectReflectionProbes;
30+
_filteringSettings = FilteringSettings.defaultValue;
4931

32+
PerObjectData = asset.perObjectData;
5033
Shader.globalRenderPipeline = "VXGI";
51-
5234
GraphicsSettings.lightsUseLinearIntensity = true;
5335
GraphicsSettings.useScriptableRenderPipelineBatching = asset.SRPBatching;
5436
}
5537

56-
public override void Dispose() {
57-
base.Dispose();
38+
protected override void Dispose(bool disposing) {
39+
base.Dispose(disposing);
5840

5941
_command.Dispose();
6042

6143
Shader.globalRenderPipeline = string.Empty;
6244
}
6345

64-
public override void Render(ScriptableRenderContext renderContext, Camera[] cameras) {
65-
base.Render(renderContext, cameras);
66-
BeginFrameRendering(cameras);
46+
protected override void Render(ScriptableRenderContext renderContext, Camera[] cameras) {
47+
var mainCamera = Camera.main;
6748

68-
foreach (var camera in cameras) {
69-
BeginCameraRendering(camera);
49+
BeginFrameRendering(renderContext, cameras);
7050

71-
var vxgi = camera.GetComponent<VXGI>();
51+
foreach (var camera in cameras) {
52+
BeginCameraRendering(renderContext, camera);
7253

73-
if (vxgi != null && vxgi.isActiveAndEnabled) {
54+
if (camera.TryGetComponent<VXGI>(out var vxgi) && vxgi.isActiveAndEnabled) {
7455
vxgi.Render(renderContext, _renderer);
7556
} else {
76-
bool rendered = false;
77-
7857
#if UNITY_EDITOR
7958
if (camera.cameraType == CameraType.SceneView) {
8059
ScriptableRenderContext.EmitWorldGeometryForSceneView(camera);
8160
}
8261

83-
if (Camera.main != null) {
84-
vxgi = Camera.main.GetComponent<VXGI>();
85-
86-
if (vxgi != null && vxgi.isActiveAndEnabled) {
87-
vxgi.Render(renderContext, camera, _renderer);
88-
rendered = true;
89-
}
62+
if (mainCamera != null && mainCamera.TryGetComponent<VXGI>(out vxgi) && vxgi.isActiveAndEnabled) {
63+
vxgi.Render(renderContext, camera, _renderer);
64+
} else {
65+
RenderFallback(renderContext, camera);
9066
}
67+
#else
68+
RenderFallback(renderContext, camera);
9169
#endif
92-
93-
if (!rendered) RenderFallback(renderContext, camera);
9470
}
71+
72+
EndCameraRendering(renderContext, camera);
9573
}
9674

75+
EndFrameRendering(renderContext, cameras);
76+
9777
renderContext.Submit();
9878
}
9979

@@ -106,20 +86,19 @@ void RenderFallback(ScriptableRenderContext renderContext, Camera camera) {
10686

10787
TriggerCameraCallback(camera, "OnPreCull", Camera.onPreCull);
10888

109-
ScriptableCullingParameters cullingParams;
110-
if (!CullResults.GetCullingParameters(camera, out cullingParams)) return;
111-
CullResults.Cull(ref cullingParams, renderContext, ref _cullResults);
89+
if (!camera.TryGetCullingParameters(out _cullingParameters)) return;
11290

113-
var drawSettings = new DrawRendererSettings(camera, new ShaderPassName("ForwardBase"));
114-
drawSettings.SetShaderPassName(1, new ShaderPassName("PrepassBase"));
115-
drawSettings.SetShaderPassName(2, new ShaderPassName("Always"));
116-
drawSettings.SetShaderPassName(3, new ShaderPassName("Vertex"));
117-
drawSettings.SetShaderPassName(4, new ShaderPassName("VertexLMRGBM"));
118-
drawSettings.SetShaderPassName(5, new ShaderPassName("VertexLM"));
119-
drawSettings.flags = _drawRendererFlags;
91+
var cullingResults = renderContext.Cull(ref _cullingParameters);
92+
var drawingSettings = new DrawingSettings { perObjectData = PerObjectData };
93+
drawingSettings.SetShaderPassName(0, ShaderTagIDs.Deferred);
94+
drawingSettings.SetShaderPassName(1, ShaderTagIDs.PrepassBase);
95+
drawingSettings.SetShaderPassName(2, ShaderTagIDs.Always);
96+
drawingSettings.SetShaderPassName(3, ShaderTagIDs.Vertex);
97+
drawingSettings.SetShaderPassName(4, ShaderTagIDs.VertexLMRGBM);
98+
drawingSettings.SetShaderPassName(5, ShaderTagIDs.VertexLM);
12099

121100
renderContext.SetupCameraProperties(camera);
122-
renderContext.DrawRenderers(_cullResults.visibleRenderers, ref drawSettings, _filterSettings);
101+
renderContext.DrawRenderers(cullingResults, ref drawingSettings, ref _filteringSettings);
123102
renderContext.DrawSkybox(camera);
124103

125104
TriggerCameraCallback(camera, "OnPostRender", Camera.onPostRender);
Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,14 @@
11
using UnityEngine;
2-
using UnityEngine.Experimental.Rendering;
2+
using UnityEngine.Rendering;
33

44
[CreateAssetMenu(fileName = "VXGIRenderPipeline.asset", menuName = "Rendering/VXGI Render Pipeline Asset", order = 320)]
55
public class VXGIRenderPipelineAsset : RenderPipelineAsset {
6-
public bool dynamicBatching;
76
public bool SRPBatching;
7+
public PerObjectData perObjectData;
88

9-
[Header("Lighting Settings")]
10-
public bool environmentLighting = true;
11-
public bool environmentReflections = true;
9+
public override Material defaultMaterial => (Material)Resources.Load("VXGI/Material/Default");
10+
public override Material defaultParticleMaterial => (Material)Resources.Load("VXGI/Material/Default-Particle");
11+
public override Shader defaultShader => Shader.Find("VXGI/Standard");
1212

13-
public override Material GetDefaultMaterial() {
14-
return (Material)Resources.Load("VXGI/Material/Default");
15-
}
16-
17-
public override Material GetDefaultParticleMaterial() {
18-
return (Material)Resources.Load("VXGI/Material/Default-Particle");
19-
}
20-
21-
public override Shader GetDefaultShader() {
22-
return Shader.Find("VXGI/Standard");
23-
}
24-
25-
protected override IRenderPipeline InternalCreatePipeline() {
26-
return new VXGIRenderPipeline(this);
27-
}
13+
protected override RenderPipeline CreatePipeline() => new VXGIRenderPipeline(this);
2814
}

Runtime/SRP/VXGIRenderer.cs

Lines changed: 20 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,31 @@
11
using UnityEngine;
2-
using UnityEngine.Experimental.Rendering;
32
using UnityEngine.Rendering;
43
using UnityEngine.Rendering.PostProcessing;
54

65
public class VXGIRenderer : System.IDisposable {
7-
public DrawRendererFlags drawRendererFlags {
8-
get { return _renderPipeline.drawRendererFlags; }
9-
}
10-
public RendererConfiguration rendererConfiguration {
11-
get { return _renderPipeline.rendererConfiguration; }
12-
}
13-
146
const string _sampleCameraEvent = "CameraEvent.";
157
const string _samplePostProcessRender = "PostProcess.Render";
168
const string _samplePostProcessRenderOpaqueOnly = "PostProcess.Render.OpaqueOnly";
179
const string _sampleRenderLighting = "Render.Lighting";
1810

11+
public VXGIRenderPipeline RenderPipeline { get; }
12+
1913
float[] _renderScale;
2014
CommandBuffer _command;
2115
CommandBuffer _eventCommand;
22-
CullResults _cullResults;
23-
FilterRenderersSettings _filterSettings;
16+
CullingResults _cullingResults;
17+
FilteringSettings _filteringSettings;
2418
LightingShader[] _lightingPasses;
2519
PostProcessRenderContext _postProcessRenderContext;
2620
RenderTargetBinding _gBufferBinding;
27-
VXGIRenderPipeline _renderPipeline;
21+
ScriptableCullingParameters _cullingParameters;
2822

2923
public VXGIRenderer(VXGIRenderPipeline renderPipeline) {
24+
RenderPipeline = renderPipeline;
25+
3026
_command = new CommandBuffer { name = "VXGI.Renderer" };
3127
_eventCommand = new CommandBuffer();
32-
_filterSettings = new FilterRenderersSettings(true);
33-
_renderPipeline = renderPipeline;
28+
_filteringSettings = FilteringSettings.defaultValue;
3429

3530
_gBufferBinding = new RenderTargetBinding(
3631
new RenderTargetIdentifier[] { ShaderIDs._CameraGBufferTexture0, ShaderIDs._CameraGBufferTexture1, ShaderIDs._CameraGBufferTexture2, ShaderIDs._CameraGBufferTexture3 },
@@ -57,9 +52,9 @@ public void Dispose() {
5752
}
5853

5954
public void RenderDeferred(ScriptableRenderContext renderContext, Camera camera, VXGI vxgi) {
60-
ScriptableCullingParameters cullingParams;
61-
if (!CullResults.GetCullingParameters(camera, out cullingParams)) return;
62-
CullResults.Cull(ref cullingParams, renderContext, ref _cullResults);
55+
if (!camera.TryGetCullingParameters(out _cullingParameters)) return;
56+
57+
_cullingResults = renderContext.Cull(ref _cullingParameters);
6358

6459
renderContext.SetupCameraProperties(camera);
6560

@@ -161,14 +156,11 @@ void RenderCameraDepthNormalsTexture(ScriptableRenderContext renderContext, Came
161156
}
162157

163158
void RenderGBuffers(ScriptableRenderContext renderContext, Camera camera) {
164-
var drawSettings = new DrawRendererSettings(camera, new ShaderPassName("Deferred"));
165-
drawSettings.flags = _renderPipeline.drawRendererFlags;
166-
drawSettings.rendererConfiguration = _renderPipeline.rendererConfiguration;
167-
drawSettings.sorting.flags = SortFlags.CommonOpaque;
168-
169-
_filterSettings.renderQueueRange = RenderQueueRange.opaque;
159+
var sortingSettings = new SortingSettings(camera) { criteria = SortingCriteria.CommonOpaque };
160+
var drawingSettings = new DrawingSettings(ShaderTagIDs.Deferred, sortingSettings) { perObjectData = RenderPipeline.PerObjectData };
170161

171-
renderContext.DrawRenderers(_cullResults.visibleRenderers, ref drawSettings, _filterSettings);
162+
_filteringSettings.renderQueueRange = RenderQueueRange.opaque;
163+
renderContext.DrawRenderers(_cullingResults, ref drawingSettings, ref _filteringSettings);
172164
}
173165

174166
void RenderLighting(ScriptableRenderContext renderContext, Camera camera, VXGI vxgi) {
@@ -245,18 +237,15 @@ void RenderSkyBox(ScriptableRenderContext renderContext, Camera camera) {
245237
}
246238

247239
void RenderTransparent(ScriptableRenderContext renderContext, Camera camera) {
248-
var drawSettings = new DrawRendererSettings(camera, new ShaderPassName("ForwardBase"));
249-
drawSettings.flags = _renderPipeline.drawRendererFlags;
250-
drawSettings.rendererConfiguration = _renderPipeline.rendererConfiguration;
251-
drawSettings.sorting.flags = SortFlags.CommonTransparent;
252-
253-
_filterSettings.renderQueueRange = RenderQueueRange.transparent;
254-
255240
_command.SetRenderTarget(ShaderIDs.FrameBuffer, (RenderTargetIdentifier)ShaderIDs._CameraDepthTexture);
256241
renderContext.ExecuteCommandBuffer(_command);
257242
_command.Clear();
258243

259-
renderContext.DrawRenderers(_cullResults.visibleRenderers, ref drawSettings, _filterSettings);
244+
var sortingSettings = new SortingSettings(camera) { criteria = SortingCriteria.CommonTransparent };
245+
var drawingSettings = new DrawingSettings(ShaderTagIDs.ForwardBase, sortingSettings) { perObjectData = RenderPipeline.PerObjectData };
246+
247+
_filteringSettings.renderQueueRange = RenderQueueRange.transparent;
248+
renderContext.DrawRenderers(_cullingResults, ref drawingSettings, ref _filteringSettings);
260249
}
261250

262251
void TriggerCameraEvent(ScriptableRenderContext renderContext, Camera camera, CameraEvent cameraEvent, VXGI vxgi) {

Runtime/ShaderStructs/LightSource.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using UnityEngine;
2+
using UnityEngine.Rendering;
23

34
public struct LightSource {
45
public const int size = (3 + 3 + 3 + 3 + 1 + 1 + 1 + 1) * 4;
@@ -12,10 +13,10 @@ public struct LightSource {
1213
public float spotFactor; // 1 * 4 bytes
1314
public uint type; // 1 * 4 bytes
1415

15-
public LightSource(UnityEngine.Experimental.Rendering.VisibleLight light, Matrix4x4 worldToVoxel) {
16+
public LightSource(VisibleLight light, Matrix4x4 worldToVoxel) {
1617
color = (Vector4)light.finalColor;
17-
direction = light.localToWorld.GetColumn(2);
18-
worldPosition = light.localToWorld.GetColumn(3);
18+
direction = light.localToWorldMatrix.GetColumn(2);
19+
worldPosition = light.localToWorldMatrix.GetColumn(3);
1920
voxelPosition = worldToVoxel * new Vector4(worldPosition.x, worldPosition.y, worldPosition.z, 1f);
2021
range = light.range;
2122
spotCos = 0f;

Runtime/Stages/Mipmapper.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
using System.Collections.ObjectModel;
21
using UnityEngine;
32
using UnityEngine.Rendering;
4-
using UnityEngine.Experimental.Rendering;
53

64
public class Mipmapper {
75
public enum Mode { Box = 0, Gaussian3x3x3 = 1, Gaussian4x4x4 = 2 }

Runtime/Stages/VoxelShader.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using UnityEngine;
22
using UnityEngine.Rendering;
3-
using UnityEngine.Experimental.Rendering;
43

54
public class VoxelShader : System.IDisposable {
65
public ComputeShader compute {

0 commit comments

Comments
 (0)