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/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/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 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..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() @@ -34,12 +35,16 @@ static void Init() void Update() { - // This ensures that layer thumbnails are updated every frame (for video layers) - Repaint(); + 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) 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/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() 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;