From 302522d54801b2d3ad945e1e3a2eb41490dc91a5 Mon Sep 17 00:00:00 2001 From: Pavlos Mavridis Date: Tue, 2 Jun 2020 17:30:34 +0200 Subject: [PATCH 1/4] Fixes for the compositor test --- .../WindowsEditor/Direct3D11/None/9800_Compositor.png | 4 ++-- .../WindowsEditor/Direct3D11/None/9800_Compositor.png.meta | 7 +++++-- .../Editor/Compositor/CompositorWindow.cs | 6 ------ .../Runtime/Compositor/CompositionLayer.cs | 2 +- 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/9800_Compositor.png b/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/9800_Compositor.png index 410e4ecbfe5..bd586db6a90 100644 --- a/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/9800_Compositor.png +++ b/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/9800_Compositor.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f20b48b0beb6c8886182e197f3d2d2434fb73f09af5766457742cc23e9502154 -size 105162 +oid sha256:99799b9655b931583b1a3ab865972e65385a8b0c2ac6d2693a4d8ae5b8240a30 +size 85848 diff --git a/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/9800_Compositor.png.meta b/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/9800_Compositor.png.meta index e6356dd6949..99533670b29 100644 --- a/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/9800_Compositor.png.meta +++ b/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/9800_Compositor.png.meta @@ -1,9 +1,9 @@ fileFormatVersion: 2 -guid: 988215e1d00c5c3429b295066e22522e +guid: 6905c2e7ecdd3d04db27838e5d149ea1 TextureImporter: internalIDToNameTable: [] externalObjects: {} - serializedVersion: 10 + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -55,10 +55,13 @@ TextureImporter: textureType: 0 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 ignorePngGamma: 0 + applyGammaDecoding: 0 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform diff --git a/com.unity.render-pipelines.high-definition/Editor/Compositor/CompositorWindow.cs b/com.unity.render-pipelines.high-definition/Editor/Compositor/CompositorWindow.cs index d9e8e9555c7..315e712f5a7 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Compositor/CompositorWindow.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Compositor/CompositorWindow.cs @@ -32,12 +32,6 @@ static void Init() s_Window.Show(); } - void Update() - { - // This ensures that layer thumbnails are updated every frame (for video layers) - Repaint(); - } - void OnGUI() { CompositionManager compositor = CompositionManager.GetInstance(); diff --git a/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionLayer.cs b/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionLayer.cs index 19211c933a3..725686e5337 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionLayer.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionLayer.cs @@ -523,7 +523,7 @@ public bool ValidateRTSize(int referenceWidth, int referenceHeight) } float scale = EnumToScale(m_ResolutionScale); - return ((m_RenderTarget.width == referenceWidth * scale) && (m_RenderTarget.height == referenceHeight * scale)); + return ((m_RenderTarget.width == Mathf.FloorToInt(referenceWidth * scale)) && (m_RenderTarget.height == Mathf.FloorToInt(referenceHeight * scale))); } public void SetupClearColor() From f199bbbef8cee9000ee557859ef1049a14fa19f2 Mon Sep 17 00:00:00 2001 From: Pavlos Mavridis Date: Tue, 2 Jun 2020 19:14:26 +0200 Subject: [PATCH 2/4] Enable the compoositor test in build settings --- .../HDRP_Tests/ProjectSettings/EditorBuildSettings.asset | 3 +++ 1 file changed, 3 insertions(+) diff --git a/TestProjects/HDRP_Tests/ProjectSettings/EditorBuildSettings.asset b/TestProjects/HDRP_Tests/ProjectSettings/EditorBuildSettings.asset index 08207d764eb..d26b03208dc 100644 --- a/TestProjects/HDRP_Tests/ProjectSettings/EditorBuildSettings.asset +++ b/TestProjects/HDRP_Tests/ProjectSettings/EditorBuildSettings.asset @@ -572,6 +572,9 @@ EditorBuildSettings: - enabled: 1 path: Assets/GraphicTests/Scenes/9x_Other/9702_CustomPass_API.unity guid: 3d584f34970fc5c44871961e3178f4ce + - enabled: 1 + path: Assets/GraphicTests/Scenes/9x_Other/9800_Compositor.unity + guid: 708bd21bc204d2342bc1702a5a6de1d3 - enabled: 1 path: Assets/GraphicTests/Scenes/9x_Other/9801_ShurikenLightModule.unity guid: d50ee167e49a2d74988347d7888c3613 From 769f6f8d0627d06d275c59c4017bef89d966506c Mon Sep 17 00:00:00 2001 From: Pavlos Mavridis Date: Wed, 3 Jun 2020 11:03:39 +0200 Subject: [PATCH 3/4] Avoid gc alloc, hide internal components from vomume menu --- .../Runtime/Compositor/AlphaInjection.cs | 8 +++++--- .../Runtime/Compositor/ChromaKeying.cs | 6 ++++-- .../Runtime/Compositor/CompositionManager.cs | 3 +-- .../Runtime/Compositor/CustomClear.cs | 3 ++- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/com.unity.render-pipelines.high-definition/Runtime/Compositor/AlphaInjection.cs b/com.unity.render-pipelines.high-definition/Runtime/Compositor/AlphaInjection.cs index 0b1e98db01e..ecb707f932f 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/Compositor/AlphaInjection.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/Compositor/AlphaInjection.cs @@ -5,7 +5,9 @@ namespace UnityEngine.Rendering.HighDefinition.Compositor { - [Serializable] + // Injects an external alpha texture into the alpha channel. Used for controlling which pixels will be affected by post processing. + // Use VolumeComponentDeprecated to hide the component from the volume menu (it's for internal compositor use only) + [Serializable, VolumeComponentDeprecated] internal sealed class AlphaInjection : CustomPostProcessVolumeComponent, IPostProcessComponent { internal class ShaderIDs @@ -31,8 +33,8 @@ public override void Render(CommandBuffer cmd, HDCamera camera, RTHandle source, { Debug.Assert(m_Material != null); - //TODO: can we detect this before we get here? - AdditionalCompositorData layerData = camera.camera.gameObject.GetComponent(); + AdditionalCompositorData layerData = null; + camera.camera.gameObject.TryGetComponent(out layerData); if (layerData == null || layerData.layerFilters == null) { HDUtils.BlitCameraTexture(cmd, source, destination); diff --git a/com.unity.render-pipelines.high-definition/Runtime/Compositor/ChromaKeying.cs b/com.unity.render-pipelines.high-definition/Runtime/Compositor/ChromaKeying.cs index 667c21728c0..42241172924 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/Compositor/ChromaKeying.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/Compositor/ChromaKeying.cs @@ -7,7 +7,8 @@ namespace UnityEngine.Rendering.HighDefinition.Compositor { // Custom post-processing pass that performs chroma keying // Shader adapted from: https://github.com/keijiro/ProcAmp - [Serializable] + // Use VolumeComponentDeprecated to hide the component from the volume menu (it's for internal use only) + [Serializable, VolumeComponentDeprecated] internal sealed class ChromaKeying : CustomPostProcessVolumeComponent, IPostProcessComponent { internal class ShaderIDs @@ -35,7 +36,8 @@ public override void Render(CommandBuffer cmd, HDCamera camera, RTHandle source, { Debug.Assert(m_Material != null); - AdditionalCompositorData layerData = camera.camera.gameObject.GetComponent(); + AdditionalCompositorData layerData = null; + camera.camera.gameObject.TryGetComponent(out layerData); if (activate.value == false || layerData == null || layerData.layerFilters == null) { diff --git a/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionManager.cs b/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionManager.cs index aa18eec73a9..37dce449b09 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionManager.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionManager.cs @@ -693,8 +693,7 @@ void CustomRender(ScriptableRenderContext context, HDCamera camera) { m_ShaderVariablesGlobalCB._ViewProjMatrix = m_ViewProjMatrixFlipped; ConstantBuffer.PushGlobal(cmd, m_ShaderVariablesGlobalCB, HDShaderIDs._ShaderVariablesGlobal); - cmd.Blit(null, BuiltinRenderTextureType.CurrentActive, m_Material, m_Material.FindPass("ForwardOnly")); - cmd.Blit(BuiltinRenderTextureType.CurrentActive, camera.camera.targetTexture); + cmd.Blit(null, camera.camera.targetTexture, m_Material, m_Material.FindPass("ForwardOnly")); } else { diff --git a/com.unity.render-pipelines.high-definition/Runtime/Compositor/CustomClear.cs b/com.unity.render-pipelines.high-definition/Runtime/Compositor/CustomClear.cs index 3705f7a65fa..9e821d2abc1 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/Compositor/CustomClear.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/Compositor/CustomClear.cs @@ -43,7 +43,8 @@ protected override void Setup(ScriptableRenderContext renderContext, CommandBuff protected override void Execute(CustomPassContext ctx) { // Executed every frame for all the camera inside the pass volume - AdditionalCompositorData layerData = ctx.hdCamera.camera.gameObject.GetComponent(); + AdditionalCompositorData layerData = null; + ctx.hdCamera.camera.gameObject.TryGetComponent(out layerData); if (layerData == null || layerData.clearColorTexture == null) { return; From 228efd233f60320618290a2c375e81b17b4b206d Mon Sep 17 00:00:00 2001 From: Pavlos Mavridis Date: Thu, 4 Jun 2020 12:00:37 +0200 Subject: [PATCH 4/4] Vulkan and DX12 screens, adjust compositor UI refresh --- .../Direct3D12/None/9800_Compositor.png | 3 + .../Direct3D12/None/9800_Compositor.png.meta | 96 +++++++++++++++++++ .../Vulkan/None/9800_Compositor.png | 3 + .../Vulkan/None/9800_Compositor.png.meta | 96 +++++++++++++++++++ .../Editor/Compositor/CompositorWindow.cs | 11 +++ 5 files changed, 209 insertions(+) create mode 100644 TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/9800_Compositor.png create mode 100644 TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/9800_Compositor.png.meta create mode 100644 TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/9800_Compositor.png create mode 100644 TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/9800_Compositor.png.meta diff --git a/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/9800_Compositor.png b/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/9800_Compositor.png new file mode 100644 index 00000000000..bd586db6a90 --- /dev/null +++ b/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/9800_Compositor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99799b9655b931583b1a3ab865972e65385a8b0c2ac6d2693a4d8ae5b8240a30 +size 85848 diff --git a/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/9800_Compositor.png.meta b/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/9800_Compositor.png.meta new file mode 100644 index 00000000000..3e18b8c433f --- /dev/null +++ b/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/9800_Compositor.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: b4807836a47ebb845a5147a94b0f4686 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/9800_Compositor.png b/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/9800_Compositor.png new file mode 100644 index 00000000000..588f4f37317 --- /dev/null +++ b/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/9800_Compositor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8380e9c68284ad522249e4fbaf45d13b831ce80e11b0fa29e3f5d85953901b58 +size 98144 diff --git a/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/9800_Compositor.png.meta b/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/9800_Compositor.png.meta new file mode 100644 index 00000000000..41aa5ac4dfd --- /dev/null +++ b/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/9800_Compositor.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: 14861f9188a3fa2418f16b73fd3e3044 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.render-pipelines.high-definition/Editor/Compositor/CompositorWindow.cs b/com.unity.render-pipelines.high-definition/Editor/Compositor/CompositorWindow.cs index 315e712f5a7..13b227d8358 100644 --- a/com.unity.render-pipelines.high-definition/Editor/Compositor/CompositorWindow.cs +++ b/com.unity.render-pipelines.high-definition/Editor/Compositor/CompositorWindow.cs @@ -22,6 +22,7 @@ static partial class Styles CompositionManagerEditor m_Editor; Vector2 m_ScrollPosition = Vector2.zero; bool m_RequiresRedraw = false; + float m_TimeSinceLastRepaint = 0; [MenuItem("Window/Render Pipeline/HD Render Pipeline Compositor", false, 10400)] static void Init() @@ -32,8 +33,18 @@ static void Init() s_Window.Show(); } + void Update() + { + m_TimeSinceLastRepaint += Time.deltaTime; + + // This ensures that layer thumbnails are updated at least 4 times per second (redrawing the UI on every frame is too CPU intensive) + if (m_TimeSinceLastRepaint > 0.25f) + Repaint(); + } + void OnGUI() { + m_TimeSinceLastRepaint = 0; CompositionManager compositor = CompositionManager.GetInstance(); bool enableCompositor = false; if (compositor)