diff --git a/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/1705_Decals-stress-test.png b/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/1705_Decals-stress-test.png index ecc2506c123..c9bb792d19c 100644 --- a/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/1705_Decals-stress-test.png +++ b/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/1705_Decals-stress-test.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c2007e58e8b93590d38031207b067094640829ec887b86b230681be55f613efb -size 227829 +oid sha256:26967c2d8e6b6ed0ef7c8ee11b3e59062bea0fc86966bc47b0435b1ddd4cb3d0 +size 227439 diff --git a/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/1705_Decals-stress-test.png b/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/1705_Decals-stress-test.png index ecc2506c123..c9bb792d19c 100644 --- a/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/1705_Decals-stress-test.png +++ b/TestProjects/HDRP_Tests/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/1705_Decals-stress-test.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c2007e58e8b93590d38031207b067094640829ec887b86b230681be55f613efb -size 227829 +oid sha256:26967c2d8e6b6ed0ef7c8ee11b3e59062bea0fc86966bc47b0435b1ddd4cb3d0 +size 227439 diff --git a/com.unity.render-pipelines.core/Runtime/Textures/RTHandle.cs b/com.unity.render-pipelines.core/Runtime/Textures/RTHandle.cs index e66b7b515cb..9b71eca5596 100644 --- a/com.unity.render-pipelines.core/Runtime/Textures/RTHandle.cs +++ b/com.unity.render-pipelines.core/Runtime/Textures/RTHandle.cs @@ -141,6 +141,9 @@ public void Release() /// Input size scaled by the RTHandle scale factor. public Vector2Int GetScaledSize(Vector2Int refSize) { + if (!useScaling) + return refSize; + if (scaleFunc != null) { return scaleFunc(refSize); diff --git a/com.unity.render-pipelines.core/ShaderLibrary/AreaLighting.hlsl b/com.unity.render-pipelines.core/ShaderLibrary/AreaLighting.hlsl index 8b7032786ba..b7adc83dd8a 100644 --- a/com.unity.render-pipelines.core/ShaderLibrary/AreaLighting.hlsl +++ b/com.unity.render-pipelines.core/ShaderLibrary/AreaLighting.hlsl @@ -21,7 +21,8 @@ real3 ComputeEdgeFactor(real3 V1, real3 V2) if (V1oV2 < 0) { // Undo range reduction. - y = PI * rsqrt(saturate(1 - V1oV2 * V1oV2)) - y; + const float epsilon = 1e-5f; + y = PI * rsqrt(max(epsilon, saturate(1 - V1oV2 * V1oV2))) - y; } return V1xV2 * y; diff --git a/com.unity.render-pipelines.high-definition/CHANGELOG.md b/com.unity.render-pipelines.high-definition/CHANGELOG.md index 2c64d08ac52..dda86c31901 100644 --- a/com.unity.render-pipelines.high-definition/CHANGELOG.md +++ b/com.unity.render-pipelines.high-definition/CHANGELOG.md @@ -37,6 +37,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Fixed issue with the color space of AOVs (case 1324759) - Fixed issue with history buffers when using multiple AOVs (case 1323684). - Fixed camera preview with multi selection (case 1324126). +- Fixed GBuffer clear option in FrameSettings not working +- Fixed usage of Panini Projection with floating point HDRP and Post Processing color buffers. +- Fixed a NaN generating in Area light code. +- Fixed CustomPassUtils scaling issues when used with RTHandles allocated from a RenderTexture. ### Changed - Reduced the maximal number of bounces for both RTGI and RTR (case 1318876). @@ -49,6 +53,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Increased path tracing max samples from 4K to 16K (case 1327729). - Changed ray tracing acceleration structure build, so that only meshes with HDRP materials are included (case 1322365). - Default black texture XR is now opaque (alpha = 1). +- Changed default sidedness to double, when a mesh with a mix of single and double-sided materials is added to the ray tracing acceleration structure (case 1323451). ## [10.4.0] - 2021-03-11 diff --git a/com.unity.render-pipelines.high-definition/Documentation~/Ray-Tracing-Getting-Started.md b/com.unity.render-pipelines.high-definition/Documentation~/Ray-Tracing-Getting-Started.md index b3dbab3509b..8da48315928 100644 --- a/com.unity.render-pipelines.high-definition/Documentation~/Ray-Tracing-Getting-Started.md +++ b/com.unity.render-pipelines.high-definition/Documentation~/Ray-Tracing-Getting-Started.md @@ -1,8 +1,6 @@ # Getting started with ray tracing -The High Definition Render Pipeline (HDRP) includes preview ray tracing support from Unity 2019.3. Ray tracing is a feature that allows you to access data that is not on screen. For example, you can use it to request position data, normal data, or lighting data, and then use this data to compute quantities that are hard to approximate using classic rasterization techniques. - -While film production uses ray tracing extensively, its resource intensity has limited its use to offline rendering for a long time. Now, with recent advances in GPU hardware, you can make use of ray tracing effect in real time. +The High Definition Render Pipeline (HDRP) includes preview ray tracing support from Unity 2019.3. Ray tracing allows you to access data that is not on screen. For example, you can use it to request position data, normal data, or lighting data, and then use this data to compute quantities that are hard to approximate using classic rasterization techniques. This document covers: @@ -161,7 +159,7 @@ Now that your HDRP Project supports ray tracing, there are a few steps you must #### Frame Settings -To make HDRP calculates ray tracing effects for [Cameras](HDRP-Camera.md) in your Scene, make sure your Cameras use [Frame Settings](Frame-Settings.md) that have ray tracing enabled. You can enable ray tracing for all Cameras by default, or you can enable ray tracing for specific Cameras in your Scene. +To make HDRP calculate ray tracing effects for [Cameras](HDRP-Camera.md) in your Scene, make sure your Cameras use [Frame Settings](Frame-Settings.md) that have ray tracing enabled. You can enable ray tracing for all Cameras by default, or you can enable ray tracing for specific Cameras in your Scene. To enable ray tracing by default: @@ -188,6 +186,20 @@ To check whether it is possible to use ray tracing in a Scene, HDRP includes a m 1. Click **Edit > Rendering > Check Scene Content for HDRP Ray Tracing**. 2. In the Console window (menu: **Window > General > Console**), check if there are any warnings. + + +# Ray tracing and Meshes + +HDRP changes how it handles Meshes in your scene when you integrate a ray traced effect into your project. + +When you enable ray tracing, HDRP automatically creates a ray tracing acceleration structure. This structure allows Unity to calculate ray tracing for Meshes in your scene efficiently in real time. + +As a result, ray tracing can change how some Meshes appear in your scene in the following ways: + +- If your Mesh has a Material assigned that does not have the HDRenderPipeline tag, HDRP does not add it to the acceleration structure and does not apply any ray traced effects to the mesh as a result. +- If your Mesh has a Decal Material assigned, HDRP does not add it to the acceleration structure and the Mesh does not appear in your scene. +- If a Mesh has a combination of Materials that are single and double-sided, HDRP flags all Materials you have assigned to this mesh as double-sided. + ## Ray tracing effects overview @@ -209,7 +221,7 @@ HDRP includes two ray tracing modes that define how it evaluates certain ray-tra * **Performance**: This mode targets real-time applications. If you select this mode, ray-traced effects include presets that you can change to balance performance with quality. * **Quality**: This mode targets technical demos and applications that want the best quality results. -Depending on which ray tracing mode you select, HDRP may expose difference properties for some ray-traced effects. +Depending on which ray tracing mode you select, HDRP may expose different properties for some ray-traced effects. You can change which ray tracing mode HDRP uses on either a Project level or effect level. To change it for your entire Project: @@ -224,7 +236,7 @@ If you select **Both**, you can change the ray tracing mode for each ray-traced ## Ray tracing project -You can find a small ray tracing project that contains all the effects mention above here: +You can find a small ray tracing project that contains all the effects mentioned above here: https://github.com/Unity-Technologies/SmallOfficeRayTracing This Project is already set up with ray tracing support. @@ -238,7 +250,7 @@ There is no support for ray tracing on platforms other than DX12 for now. HDRP ray tracing in Unity 2020.2 has the following limitations: - Does not support vertex animation. -- Does not supports decals. +- Does not support decals. - Does not support tessellation. - Does not support per pixel displacement (parallax occlusion mapping, height map, depth offset). - Does not support VFX and Terrain. @@ -247,6 +259,7 @@ HDRP ray tracing in Unity 2020.2 has the following limitations: - For renderers that have [LODs](https://docs.unity3d.com/2019.3/Documentation/Manual/LevelOfDetail.html), the ray tracing acceleration structure only includes the highest level LOD and ignores the lower LODs. - Does not support [Graphics.DrawMesh](https://docs.unity3d.com/ScriptReference/Graphics.DrawMesh.html). - Ray tracing is not supported when rendering [Reflection Probes](Reflection-Probe.md). +- HDRP does not support [orthographic projection](HDRP-Camera.md). If you enable orthographic projection mode, you might experience rendering problems for Transparent Materials, volumetrics and planar reflections. ### Unsupported shader graph nodes for ray tracing diff --git a/com.unity.render-pipelines.high-definition/Documentation~/Ray-Tracing-Path-Tracing.md b/com.unity.render-pipelines.high-definition/Documentation~/Ray-Tracing-Path-Tracing.md index 4d46e34ebb4..7244cec8e87 100644 --- a/com.unity.render-pipelines.high-definition/Documentation~/Ray-Tracing-Path-Tracing.md +++ b/com.unity.render-pipelines.high-definition/Documentation~/Ray-Tracing-Path-Tracing.md @@ -1,6 +1,6 @@ # Path tracing -Path tracing is a ray tracing algorithm that sends rays from the Camera and, when a ray hits a reflective or refractive surface, recurses the process until it reaches a light source. The series of rays from the Camera to the Light forms a "path". +Path tracing is a ray tracing algorithm that sends rays from the Camera and, when a ray hits a reflective or refractive surface, recurses the process until it reaches a light source. The series of rays from the Camera to the Light form a "path". It enables HDRP to compute many different effects (such as hard or soft shadows, mirror or glossy reflections and refractions, and indirect illumination) in one single unified process. @@ -14,7 +14,7 @@ Noisy image with **Maximum Samples** set to 1 Clean image with **Maximum Samples** set to 256 -The current implementation for path tracing in the High Definition Render Pipeline (HDRP) accumulates paths for every pixel up to a maximum count, unless the Camera moves. If the Camera moves, HDRP restarts the path accumulation. Path tracing supports Lit, LayeredLit and Unlit materials, and area, point, directional and environment lights. +The current implementation for path tracing in the High Definition Render Pipeline (HDRP) accumulates paths for every pixel up to a maximum count unless the Camera moves. If the Camera moves, HDRP restarts the path accumulation. Path tracing supports Lit, LayeredLit, and Unlit materials, and area, point, directional, and environment lights. ## Set up path tracing @@ -62,11 +62,12 @@ There is no support for path tracing on platforms other than DX12 for now. HDRP path tracing in Unity 2020.2 has the following limitations: +- If a Mesh in your scene has a Material assigned that does not have the `HDRenderPipeline` tag, the mesh will not appear in your scene. For more information, see [Ray tracing and Meshes](Ray-Tracing-Getting-Started.md#RayTracingMeshes). - Does not support 3D Text and TextMeshPro. -- Does not support Shader Graph nodes that use derivatives (ex : normal from textures). +- Does not support Shader Graph nodes that use derivatives (for example, a normal map that derives from a texture). - Does not support decals. - Does not support tessellation. -- Does not support Tube and Disc shaped Area Light. +- Does not support Tube and Disc-shaped Area Lights. - Does not support Translucent Opaque Materials. - Does not support several of HDRP's Materials. This includes Fabric, Eye, StackLit, Hair, Decal. - Does not support per-pixel displacement (parallax occlusion mapping, height map, depth offset). diff --git a/com.unity.render-pipelines.high-definition/Documentation~/Ray-Tracing-Settings.md b/com.unity.render-pipelines.high-definition/Documentation~/Ray-Tracing-Settings.md index 32bab15a3c8..59423a514a7 100644 --- a/com.unity.render-pipelines.high-definition/Documentation~/Ray-Tracing-Settings.md +++ b/com.unity.render-pipelines.high-definition/Documentation~/Ray-Tracing-Settings.md @@ -14,4 +14,5 @@ In the High Definition Render Pipeline (HDRP), various ray-traced effects share | **Ray Bias** | Specifies the bias value HDRP applies when casting rays for all effects. This value should remain unchained unless your scene scale is significantly smaller or larger than average. | | **Extend Shadow Culling** | Extends the sets of GameObjects that HDRP includes in shadow maps for more accurate shadows in ray traced effects. | | **Extend Camera Culling** | Extends the sets of GameObjects that HDRP includes in the rendering. This is a way to force skinned mesh animations for GameObjects that are not in the frustum. | -| **Directional Shadow Ray Length** | Controls the maximal ray length for ray traced directional shadows. | \ No newline at end of file +| **Directional Shadow Ray Length** | Controls the maximal ray length for ray traced directional shadows. | +| **Directional Shadow Fallback Intensity** | The shadow intensity value HDRP applies to a point when there is a [Directional Light](Light-Component.md) in the Scene and the point is outside the Light's shadow cascade coverage. This property helps to remove light leaking in certain environments, such as an interior room with a Directional Light outside. | diff --git a/com.unity.render-pipelines.high-definition/Documentation~/TableOfContents.md b/com.unity.render-pipelines.high-definition/Documentation~/TableOfContents.md index b1ea008bcf2..6912b2eb075 100644 --- a/com.unity.render-pipelines.high-definition/Documentation~/TableOfContents.md +++ b/com.unity.render-pipelines.high-definition/Documentation~/TableOfContents.md @@ -164,7 +164,8 @@ * [Ray-Traced Global Illumination](Ray-Traced-Global-Illumination.md) * [Ray-Traced Reflections](Ray-Traced-Reflections.md) * [Ray-Traced Shadows](Ray-Traced-Shadows.md) - * [Ray-Traced-Subsurface-Scattering](Ray-Traced-Subsurface-Scattering.md) + * [Ray-Traced Subsurface Scattering](Ray-Traced-Subsurface-Scattering.md) + * [Ray Tracing Settings](Ray-Tracing-Settings.md) * [Light Cluster](Ray-Tracing-Light-Cluster.md) * [Path Tracing](Ray-Tracing-Path-Tracing.md) * [Recursive Rendering](Ray-Tracing-Recursive-Rendering.md) diff --git a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Camera/HDCameraUI.Skin.cs b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Camera/HDCameraUI.Skin.cs index aa17ab98da3..52fe96d7a00 100644 --- a/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Camera/HDCameraUI.Skin.cs +++ b/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Camera/HDCameraUI.Skin.cs @@ -15,10 +15,10 @@ static partial class HDCameraUI static readonly GUIContent clearModeContent = EditorGUIUtility.TrTextContent("Background Type", "Specifies the type of background the Camera applies when it clears the screen before rendering a frame. Be aware that when setting this to None, the background is never cleared and since HDRP shares render texture between cameras, you may end up with garbage from previous rendering."); static readonly GUIContent backgroundColorContent = EditorGUIUtility.TrTextContent("Background Color", "The Background Color used to clear the screen when selecting Background Color before rendering."); - static readonly GUIContent cullingMaskContent = EditorGUIUtility.TrTextContent("Culling Mask"); + static readonly GUIContent cullingMaskContent = EditorGUIUtility.TrTextContent("Culling Mask", "Specifies the list of layers the camera should render."); static readonly GUIContent volumeLayerMaskContent = EditorGUIUtility.TrTextContent("Volume Layer Mask"); static readonly GUIContent volumeAnchorOverrideContent = EditorGUIUtility.TrTextContent("Volume Anchor Override"); - static readonly GUIContent occlusionCullingContent = EditorGUIUtility.TrTextContent("Occlusion Culling"); + static readonly GUIContent occlusionCullingContent = EditorGUIUtility.TrTextContent("Occlusion Culling", "When enabled, the camera does not render objects that are being obscured by other geometry."); static readonly GUIContent exposureTargetContent = EditorGUIUtility.TrTextContent("Exposure Target", "The object used as a target for centering the Exposure's Procedural Mask metering mode when target object option is set (See Exposure Volume Component)."); diff --git a/com.unity.render-pipelines.high-definition/Runtime/Material/Decal/Decal.shader b/com.unity.render-pipelines.high-definition/Runtime/Material/Decal/Decal.shader index 00a587bd967..92a13774962 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/Material/Decal/Decal.shader +++ b/com.unity.render-pipelines.high-definition/Runtime/Material/Decal/Decal.shader @@ -212,6 +212,7 @@ Shader "HDRP/Decal" HLSLPROGRAM #pragma multi_compile DECALS_3RT DECALS_4RT + #pragma multi_compile _ DOTS_INSTANCING_ON // enable dithering LOD crossfade #pragma multi_compile _ LOD_FADE_CROSSFADE @@ -246,6 +247,7 @@ Shader "HDRP/Decal" Blend 0 SrcAlpha One HLSLPROGRAM + #pragma multi_compile _ DOTS_INSTANCING_ON // enable dithering LOD crossfade #pragma multi_compile _ LOD_FADE_CROSSFADE diff --git a/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/PostProcessSystem.cs b/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/PostProcessSystem.cs index d53828919de..84f4e2d0e8f 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/PostProcessSystem.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/PostProcessSystem.cs @@ -3053,6 +3053,9 @@ PaniniProjectionParameters PreparePaniniProjectionParameters(HDCamera camera) parameters.paniniProjectionCS.EnableKeyword("UNITDISTANCE"); } + if (m_EnableAlpha) + parameters.paniniProjectionCS.EnableKeyword("ENABLE_ALPHA"); + parameters.paniniParams = new Vector4(viewExtents.x, viewExtents.y, paniniD, paniniS); parameters.paniniProjectionKernel = parameters.paniniProjectionCS.FindKernel("KMain"); diff --git a/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/Shaders/FinalPass.shader b/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/Shaders/FinalPass.shader index 86a5659470d..3886dd95f7e 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/Shaders/FinalPass.shader +++ b/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/Shaders/FinalPass.shader @@ -71,7 +71,7 @@ Shader "Hidden/HDRP/FinalPass" #elif CATMULL_ROM_4 return CatmullRomFourSamples(_InputTexture, UV); #elif LANCZOS - return Lanczos(_InputTexture, UV, _ViewPortSize); + return Lanczos(_InputTexture, UV, _ViewPortSize.xy); #else return Nearest(_InputTexture, UV); #endif diff --git a/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/Shaders/PaniniProjection.compute b/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/Shaders/PaniniProjection.compute index 3e00c7076fb..1fb6cb71c2c 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/Shaders/PaniniProjection.compute +++ b/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/Shaders/PaniniProjection.compute @@ -1,15 +1,17 @@ #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" #include "Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariables.hlsl" +#include "Packages/com.unity.render-pipelines.high-definition/Runtime/PostProcessing/Shaders/PostProcessDefines.hlsl" #pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch #pragma kernel KMain #pragma multi_compile GENERIC UNITDISTANCE +#pragma multi_compile _ ENABLE_ALPHA TEXTURE2D_X(_InputTexture); -RW_TEXTURE2D_X(float3, _OutputTexture); +RW_TEXTURE2D_X(CTYPE, _OutputTexture); SAMPLER(sampler_LinearClamp); @@ -125,7 +127,7 @@ void KMain(uint3 dispatchThreadId : SV_DispatchThreadID) } else { - float3 smp = SAMPLE_TEXTURE2D_X_LOD(_InputTexture, sampler_LinearClamp, ClampAndScaleUVForBilinear(coords), 0.0).xyz; + CTYPE smp = SAMPLE_TEXTURE2D_X_LOD(_InputTexture, sampler_LinearClamp, ClampAndScaleUVForBilinear(coords), 0.0).CTYPE_SWIZZLE; _OutputTexture[COORD_TEXTURE2D_X(posInputs.positionSS)] = smp; } } diff --git a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.Prepass.cs b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.Prepass.cs index 6fc1bd89dbd..2d12cda9d6c 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.Prepass.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.Prepass.cs @@ -45,10 +45,9 @@ void CleanupPrepass() CoreUtils.Destroy(m_DepthResolveMaterial); } - bool NeedClearGBuffer() + bool NeedClearGBuffer(HDCamera hdCamera) { - // TODO: Add an option to force clear - return m_CurrentDebugDisplaySettings.IsDebugDisplayEnabled(); + return m_CurrentDebugDisplaySettings.IsDebugDisplayEnabled() || hdCamera.frameSettings.IsEnabled(FrameSettingsField.ClearGBuffers); } HDUtils.PackedMipChainInfo GetDepthBufferMipChainInfo() @@ -108,7 +107,7 @@ TextureHandle CreateDepthBuffer(RenderGraph renderGraph, bool clear, bool msaa) return renderGraph.CreateTexture(depthDesc); } - TextureHandle CreateNormalBuffer(RenderGraph renderGraph, bool msaa) + TextureHandle CreateNormalBuffer(RenderGraph renderGraph, HDCamera hdCamera, bool msaa) { #if UNITY_2020_2_OR_NEWER FastMemoryDesc fastMemDesc; @@ -118,7 +117,7 @@ TextureHandle CreateNormalBuffer(RenderGraph renderGraph, bool msaa) #endif TextureDesc normalDesc = new TextureDesc(Vector2.one, true, true) - { colorFormat = GraphicsFormat.R8G8B8A8_UNorm, clearBuffer = NeedClearGBuffer(), clearColor = Color.black, bindTextureMS = msaa, enableMSAA = msaa, enableRandomWrite = !msaa, name = msaa ? "NormalBufferMSAA" : "NormalBuffer" + { colorFormat = GraphicsFormat.R8G8B8A8_UNorm, clearBuffer = NeedClearGBuffer(hdCamera), clearColor = Color.black, bindTextureMS = msaa, enableMSAA = msaa, enableRandomWrite = !msaa, name = msaa ? "NormalBufferMSAA" : "NormalBuffer" #if UNITY_2020_2_OR_NEWER , fastMemoryDesc = fastMemDesc #endif @@ -327,7 +326,7 @@ bool RenderDepthPrepass(RenderGraph renderGraph, CullingResults cull, HDCamera h decalBuffer = renderGraph.defaultResources.blackTextureXR; output.depthAsColor = renderGraph.CreateTexture(new TextureDesc(Vector2.one, true, true) { colorFormat = GraphicsFormat.R32_SFloat, clearBuffer = true, clearColor = Color.black, bindTextureMS = true, enableMSAA = true, name = "DepthAsColorMSAA" }); - output.normalBuffer = CreateNormalBuffer(renderGraph, msaa); + output.normalBuffer = CreateNormalBuffer(renderGraph, hdCamera, msaa); return false; } @@ -339,7 +338,7 @@ bool RenderDepthPrepass(RenderGraph renderGraph, CullingResults cull, HDCamera h passData.hasDepthDeferredPass = depthPrepassParameters.hasDepthDeferredPass; passData.depthBuffer = builder.UseDepthBuffer(output.depthBuffer, DepthAccess.ReadWrite); - passData.normalBuffer = builder.WriteTexture(CreateNormalBuffer(renderGraph, msaa)); + passData.normalBuffer = builder.WriteTexture(CreateNormalBuffer(renderGraph, hdCamera, msaa)); if (decalLayersEnabled) passData.decalBuffer = builder.WriteTexture(CreateDecalPrepassBuffer(renderGraph, msaa)); // This texture must be used because reading directly from an MSAA Depth buffer is way to expensive. @@ -464,7 +463,7 @@ struct GBufferOutput void SetupGBufferTargets(RenderGraph renderGraph, HDCamera hdCamera, GBufferPassData passData, TextureHandle sssBuffer, TextureHandle vtFeedbackBuffer, ref PrepassOutput prepassOutput, FrameSettings frameSettings, RenderGraphBuilder builder) { - bool clearGBuffer = NeedClearGBuffer(); + bool clearGBuffer = NeedClearGBuffer(hdCamera); bool lightLayers = frameSettings.IsEnabled(FrameSettingsField.LightLayers); bool shadowMasks = frameSettings.IsEnabled(FrameSettingsField.Shadowmask); @@ -630,7 +629,7 @@ void ResolvePrepassBuffers(RenderGraph renderGraph, HDCamera hdCamera, ref Prepa passData.depthBuffer = builder.UseDepthBuffer(CreateDepthBuffer(renderGraph, true, false), DepthAccess.Write); passData.depthValuesBuffer = builder.UseColorBuffer(depthValuesBuffer, 0); - passData.normalBuffer = builder.UseColorBuffer(CreateNormalBuffer(renderGraph, false), 1); + passData.normalBuffer = builder.UseColorBuffer(CreateNormalBuffer(renderGraph, hdCamera, false), 1); if (passData.needMotionVectors) passData.motionVectorsBuffer = builder.UseColorBuffer(CreateMotionVectorBuffer(renderGraph, false, false), 2); else diff --git a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs index d9cb3e5c5e5..3ec08b67ffa 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs @@ -58,7 +58,7 @@ void ExecuteWithRenderGraph(RenderRequest renderRequest, LightingBuffers lightingBuffers = new LightingBuffers(); lightingBuffers.diffuseLightingBuffer = CreateDiffuseLightingBuffer(m_RenderGraph, msaa); - lightingBuffers.sssBuffer = CreateSSSBuffer(m_RenderGraph, msaa); + lightingBuffers.sssBuffer = CreateSSSBuffer(m_RenderGraph, hdCamera, msaa); var prepassOutput = RenderPrepass(m_RenderGraph, colorBuffer, lightingBuffers.sssBuffer, vtFeedbackBuffer, cullingResults, customPassCullingResults, hdCamera, aovRequest, aovBuffers); diff --git a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.SubsurfaceScattering.cs b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.SubsurfaceScattering.cs index ff4cc22963a..02a9b76830f 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.SubsurfaceScattering.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.SubsurfaceScattering.cs @@ -5,7 +5,7 @@ namespace UnityEngine.Rendering.HighDefinition { public partial class HDRenderPipeline { - TextureHandle CreateSSSBuffer(RenderGraph renderGraph, bool msaa) + TextureHandle CreateSSSBuffer(RenderGraph renderGraph, HDCamera hdCamera, bool msaa) { #if UNITY_2020_2_OR_NEWER FastMemoryDesc fastMemDesc; @@ -20,7 +20,7 @@ TextureHandle CreateSSSBuffer(RenderGraph renderGraph, bool msaa) enableRandomWrite = !msaa, bindTextureMS = msaa, enableMSAA = msaa, - clearBuffer = NeedClearGBuffer(), + clearBuffer = NeedClearGBuffer(hdCamera), clearColor = Color.clear, name = msaa ? "SSSBufferMSAA" : "SSSBuffer" #if UNITY_2020_2_OR_NEWER diff --git a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingManager.cs b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingManager.cs index 8e893dfaa67..fec0c8402f0 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingManager.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingManager.cs @@ -230,7 +230,7 @@ AccelerationStructureStatus AddInstanceToRAS(Renderer currentRenderer, // We need to build the instance flag for this renderer uint instanceFlag = 0x00; - bool singleSided = false; + bool doubleSided = false; bool materialIsOnlyTransparent = true; bool hasTransparentSubMaterial = false; @@ -270,9 +270,9 @@ AccelerationStructureStatus AddInstanceToRAS(Renderer currentRenderer, || (HDRenderQueue.k_RenderQueue_OpaqueAlphaTest.lowerBound <= currentMaterial.renderQueue && HDRenderQueue.k_RenderQueue_OpaqueAlphaTest.upperBound >= currentMaterial.renderQueue); - // Force it to be non single sided if it has the keyword if there is a reason - bool doubleSided = currentMaterial.doubleSidedGI || currentMaterial.IsKeywordEnabled("_DOUBLESIDED_ON"); - singleSided |= !doubleSided; + // Check if we want to enable double-sidedness for the mesh + // (note that a mix of single and double-sided materials will result in a double-sided mesh in the AS) + doubleSided |= currentMaterial.doubleSidedGI || currentMaterial.IsKeywordEnabled("_DOUBLESIDED_ON"); // Check if the material has changed since last time we were here if (!m_MaterialsDirty) @@ -292,12 +292,11 @@ AccelerationStructureStatus AddInstanceToRAS(Renderer currentRenderer, } } - // If the mesh was not valid, exclude it + // If the mesh was not valid, exclude it (without affecting sidedness) if (!validMesh) { subMeshFlagArray[meshIdx] = false; subMeshCutoffArray[meshIdx] = false; - singleSided = true; } } @@ -368,7 +367,7 @@ AccelerationStructureStatus AddInstanceToRAS(Renderer currentRenderer, if (instanceFlag == 0) return AccelerationStructureStatus.Added; // Add it to the acceleration structure - m_CurrentRAS.AddInstance(currentRenderer, subMeshMask: subMeshFlagArray, subMeshTransparencyFlags: subMeshCutoffArray, enableTriangleCulling: singleSided, mask: instanceFlag); + m_CurrentRAS.AddInstance(currentRenderer, subMeshMask: subMeshFlagArray, subMeshTransparencyFlags: subMeshCutoffArray, enableTriangleCulling: !doubleSided, mask: instanceFlag); // Indicates that a transform has changed in our scene (mesh or light) m_TransformDirty |= currentRenderer.transform.hasChanged; diff --git a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPassUtils.cs b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPassUtils.cs index 5892a2c0c8f..5257a8ae254 100644 --- a/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPassUtils.cs +++ b/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPassUtils.cs @@ -568,7 +568,11 @@ internal static void SetRenderTargetWithScaleBias(in CustomPassContext ctx, Mate { // viewport with RT handle scale and scale factor: Rect viewport = new Rect(); - Vector2 destSize = viewport.size = destination.GetScaledSize(destination.rtHandleProperties.currentViewportSize); + if (destination.useScaling) + viewport.size = destination.GetScaledSize(destination.rtHandleProperties.currentViewportSize); + else + viewport.size = new Vector2Int(destination.rt.width, destination.rt.height); + Vector2 destSize = viewport.size; viewport.position = new Vector2(viewport.size.x * destScaleBias.z, viewport.size.y * destScaleBias.w); viewport.size *= new Vector2(destScaleBias.x, destScaleBias.y);