Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
09ebac4
[Port] [6000.4] [URP][UUM-124869] Fix Decal Hierarchy Scene and Game …
svc-reach-platform-support Feb 14, 2026
a6c3a24
[Port] [6000.4] docg-8422: Remove deprecated link
svc-reach-platform-support Feb 16, 2026
91f4a06
[Port] [6000.4] [HDRP] Fix flickering regression in volumetric clouds…
svc-reach-platform-support Feb 16, 2026
85ee739
[Port] [6000.4] [PS5, PS4] Fix built-in RP warnings when using shader…
svc-reach-platform-support Feb 16, 2026
8785a51
[Port] [6000.4] [Bugfix] Reflection probe rotation setting included i…
svc-reach-platform-support Feb 17, 2026
824da50
[Port] [6000.4] [ShaderGraph] Fix Enum Labels and a few other issues
svc-reach-platform-support Feb 18, 2026
5c355df
[Port] [6000.4] [NVUnityPlugin] DLSS 4.5: upgrade SDK to v310.5.0
svc-reach-platform-support Feb 19, 2026
cf066cf
[Port] [6000.4] Web accessibility fixes in Shader Graph documentation
svc-reach-platform-support Feb 19, 2026
a04ede8
Added a dummy field to UnityTexture3D to work around https://jira.uni…
rolandk-unity Feb 20, 2026
f97bf78
[Port] [6000.4] Use builtin firstbitlow with DXC
svc-reach-platform-support Feb 20, 2026
b1c16be
UUM-115301: Fixed ability to use SampleTextureElement multiple times
alexandret-unity Feb 20, 2026
5214ffe
[Port] [6000.4] Fix a number of ShaderGraph UI/UX bugs
svc-reach-platform-support Feb 20, 2026
cf181bd
[Port] [6000.4] Fix null resource in URP post process after PR 73772
svc-reach-platform-support Feb 20, 2026
bb518a9
[Port] [6000.4] Fix material debug not working
svc-reach-platform-support Feb 24, 2026
699b8d4
Shorten Surface Cache file paths to avoid too long paths on Windows
urasmus Feb 24, 2026
7f779bc
[Port] [6000.4] Fix ShaderGraph BuiltIn Target test projects
svc-reach-platform-support Feb 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ public AccelStructAdapter GetAccelerationStructure()

public void RemoveInstance(InstanceHandle instance)
{
_rayTracingAccelerationStructure.RemoveInstance(instance.ToInt());
_rayTracingAccelerationStructure.RemoveInstance(instance.Value);
_instanceHandleSet.Remove(instance);
}

Expand Down Expand Up @@ -193,18 +193,18 @@ public InstanceHandle AddInstance(
}

InstanceHandle instance = _instanceHandleSet.Add();
_rayTracingAccelerationStructure.AddInstance(instance.ToInt(), mesh, localToWorldMatrix, masks, materialIndices, isOpaque, 0);
_rayTracingAccelerationStructure.AddInstance(instance.Value, mesh, localToWorldMatrix, masks, materialIndices, isOpaque, 0);
return instance;
}

public void UpdateInstanceTransform(InstanceHandle instance, Matrix4x4 localToWorldMatrix)
{
_rayTracingAccelerationStructure.UpdateInstanceTransform(instance.ToInt(), localToWorldMatrix);
_rayTracingAccelerationStructure.UpdateInstanceTransform(instance.Value, localToWorldMatrix);
}

public void UpdateInstanceMask(InstanceHandle instance, Span<uint> perSubMeshMask)
{
_rayTracingAccelerationStructure.UpdateInstanceMask(instance.ToInt(), perSubMeshMask);
_rayTracingAccelerationStructure.UpdateInstanceMask(instance.Value, perSubMeshMask);
}

public void UpdateInstanceMaterials(InstanceHandle instance, Span<MaterialHandle> materials)
Expand All @@ -215,7 +215,7 @@ public void UpdateInstanceMaterials(InstanceHandle instance, Span<MaterialHandle
_materialPool.GetMaterialInfo(materials[i].Value, out materialIndices[i], out bool isTransmissive);
}

_rayTracingAccelerationStructure.UpdateInstanceMaterialIDs(instance.ToInt(), materialIndices);
_rayTracingAccelerationStructure.UpdateInstanceMaterialIDs(instance.Value, materialIndices);
}

public LightHandle[] AddLights(Span<LightDescriptor> lightDescs)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,12 @@ struct UnityTexture3D
TEXTURE3D(tex);
SAMPLER(samplerstate);

// This dummy field is unused in Unity 6.4 and earlier. Here, the field is added strictly as a dummy to work around UUM-133088
// Without this additional field, UnityTexture3D and sampler3D_f have the exact same structure, which will cause DXC to consider
// them as the same type. This causes to compilation errors due to the corresponding overloads of tex3D being considered ambiguous
// by DXC. Adding the field resolves this. Starting from Unity 6.5, the field is actually used in code.
float4 hdrDecode;

// these functions allows users to convert code using Texture3D to UnityTexture3D by simply changing the type of the variable
// the existing texture macros will call these functions, which will forward the call to the texture appropriately
float4 Sample(UnitySamplerState s, float3 uvw) { return SAMPLE_TEXTURE3D(tex, s.samplerstate, uvw); }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Deep learning super sampling (DLSS)

[NVIDIA Deep Learning Super Sampling (DLSS)](https://www.nvidia.com/en-us/geforce/technologies/dlss/) is a rendering technology that uses artificial intelligence to increase graphics performance. The High Definition Render Pipeline (HDRP) natively supports DLSS 4 Super Resolution.
[NVIDIA Deep Learning Super Sampling (DLSS)](https://www.nvidia.com/en-us/geforce/technologies/dlss/) is a rendering technology that uses artificial intelligence to increase graphics performance. The High Definition Render Pipeline (HDRP) natively supports DLSS 4.5 Super Resolution.

## Requirements and compatibility

Expand Down Expand Up @@ -82,18 +82,20 @@ Available presets are marked as '1' in the table below.

| Render Preset | Maximum Quality | Balanced | Maximum Performance | Ultra Performance | DLAA | Explanation | AI Model |
|- |- |- |- |- |- |- |- |
| Preset F | | | | 1 | 1 | Provides the highest image stability. Default value for UltraPerformance. | CNN |
| Preset J | 1 | 1 | 1| | 1 | Slightly lowers ghosting but increases flickering.<br/>NVIDIA recommends using **Preset K** instead of **Preset J**. | Transformer |
| Preset K | 1 | 1 | 1| | 1 | Provides the highest image quality. | Transformer |
| Preset F | | | | 1 | 1 | Marked for deprecation in upcoming DLSS releases. Don't use for new projects. | CNN |
| Preset J | 1 | 1 | 1| 1 | 1 | Slightly lowers ghosting but increases flickering.<br/>NVIDIA recommends using **Preset K** instead of **Preset J**. | Transformer |
| Preset K | 1 | 1 | 1| 1 | 1 | Default preset for DLAA/Balanced/Quality modes. Requires fewer resources than Preset L. | Transformer |
| Preset L | | | | 1 | | Delivers a sharper, more stable image with less ghosting than Preset J, K, but lowers performance. Recommended for RTX 40 Series GPUs and above. | Transformer Gen 2 |
Provides about the same image quality as **Preset L**. This preset is slower than presets **J** and **K**, but faster than preset **L**. Recommended for RTX 40 Series GPUs and above.

The defaults for each quality mode are:

| **Quality mode** | **Default render preset** |
|- |- |
| **Maximum Quality** | Preset K
| **Balanced** | Preset K
| **Maximum Performance** | Preset K
| **Ultra Performance** | Preset F
| **Maximum Quality** | Preset K |
| **Balanced** | Preset K |
| **Maximum Performance** | Preset M |
| **Ultra Performance** | Preset L |
| **DLAA** | Preset K |

DLSS render presets are project-specific. Presets are available only from the HDRP Asset settings. You can't override presets on a per-camera basis.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,3 @@ Set up a project to use the High Definition Render Pipeline (HDRP), and use Volu
## Additional resources

- [HDRP overview](HDRP-Features.md)
- [Achieving High Fidelity Graphics for Games with HDRP](https://resources.unity.com/unitenow/onlinesessions/achieving-high-fidelity-graphics-for-games-with-hdrp)
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,7 @@ int CountBits(uint bitMask) // System.Numerics.BitOperations not available
{
if (preset == UnityEngine.NVIDIA.DLSSPreset.Preset_Default)
{
labels[(int)quality][iWrite++] = "Default Preset";
labels[(int)quality][iWrite++] = "Default Preset" + " - " + UnityEngine.NVIDIA.GraphicsDevice.GetDLSSPresetExplanation(preset);
continue;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,22 +96,41 @@ void REPROJECT_CLOUDS(uint3 dispatchThreadId : SV_DispatchThreadID,
float validityFactor = 1.0;

#ifdef WITH_REJECTION

bool currentIsSky = currentSceneDepth == UNITY_RAW_FAR_CLIP_VALUE;

float4 lightingMin = float4(FLT_MAX, FLT_MAX, FLT_MAX, 1.0);
float4 lightingMax = float4(0, 0, 0, 0.0);
for (int y = -1; y <= 1; ++y)

int skySampleCount = 0;
if(currentIsSky)
{
for (int x = -1; x <= 1; ++x)
for (int y = -1; y <= 1; ++y)
{
CloudReprojectionData data = GetCloudReprojectionDataSample(threadCoord, int2(x, y));
if ((data.pixelDepth == UNITY_RAW_FAR_CLIP_VALUE) == (currentSceneDepth == UNITY_RAW_FAR_CLIP_VALUE))
for (int x = -1; x <= 1; ++x)
{
lightingMin = min(lightingMin, data.cloudLighting);
lightingMax = max(lightingMax, data.cloudLighting);
CloudReprojectionData data = GetCloudReprojectionDataSample(threadCoord, int2(x, y));
bool sampleIsSky = data.pixelDepth == UNITY_RAW_FAR_CLIP_VALUE;

if (sampleIsSky)
{
lightingMin = min(lightingMin, data.cloudLighting);
lightingMax = max(lightingMax, data.cloudLighting);
skySampleCount++;
}
}
}

// Only apply clamping if we have enough sky samples (at least 5 out of 9)
if (skySampleCount >= 5)
{
// Modulate validity factor based on sky sample ratio, the more samples are sky, the more ghosting reduction
float skyRatio = skySampleCount / 9.0;
previousColor = ClipCloudsToRegion(previousColor, lightingMin, lightingMax, skyRatio);
validityFactor *= skyRatio;
}
}

previousColor = ClipCloudsToRegion(previousColor, lightingMin, lightingMax, validityFactor);
#endif

if (validTracing)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ private bool ShouldUseAutomaticSettings()

static NVIDIA.DLSSPreset Uint2Preset(uint preset)
{
if (preset >= (uint)NVIDIA.DLSSPreset.Preset_Default && preset <= (uint)NVIDIA.DLSSPreset.Preset_K)
if (preset >= (uint)NVIDIA.DLSSPreset.Preset_Default && preset <= (uint)NVIDIA.DLSSPreset.Preset_M)
return (NVIDIA.DLSSPreset)preset;
Debug.LogWarningFormat("Unknown DLSS Preset value {0}, using default value.", preset);
return NVIDIA.DLSSPreset.Preset_Default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ static bool IsSurfaceCacheEnabled(List<UniversalRenderPipelineAsset> urpAssets)

foreach (var rendererFeature in rendererData.rendererFeatures)
{
if (rendererFeature is SurfaceCacheGlobalIlluminationRendererFeature { isActive: true })
if (rendererFeature is SurfaceCacheGIRendererFeature { isActive: true })
return true;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@

namespace UnityEditor.Rendering.Universal
{
[CustomEditor(typeof(SurfaceCacheGlobalIlluminationRendererFeature))]
internal class SurfaceCacheGlobalIlluminationEditor : Editor
[CustomEditor(typeof(SurfaceCacheGIRendererFeature))]
internal class SurfaceCacheGIEditor : Editor
{
private bool m_IsInitialized;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -867,7 +867,7 @@ internal static ShaderFeatures GetSupportedShaderFeaturesFromRendererFeatures(re

#if SURFACE_CACHE
// Surface Cache GI...
SurfaceCacheGlobalIlluminationRendererFeature surfaceCacheFeature = rendererFeature as SurfaceCacheGlobalIlluminationRendererFeature;
SurfaceCacheGIRendererFeature surfaceCacheFeature = rendererFeature as SurfaceCacheGIRendererFeature;
if(surfaceCacheFeature != null)
{
shaderFeatures |= ShaderFeatures.SurfaceCache;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ public sealed class TextureResources : IRenderPipelineResources
/// <summary>
/// Pre-baked Blue noise textures.
/// </summary>
// [ResourceFormattedPaths("Textures/BlueNoise16/L/LDR_LLL1_{0}.png", 0, 32)]
[ResourceFormattedPaths("Textures/BlueNoise16/L/LDR_LLL1_{0}.png", 0, 32)]
public Texture2D[] blueNoise16LTex;

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,23 @@ public float fadeFactor
}
}

#if UNITY_EDITOR
[SerializeField]
private bool m_VisibleInScene = true;
public bool visibleInScene
{
get
{
return m_VisibleInScene;
}
set
{
m_VisibleInScene = value;
OnValidate();
}
}
#endif

private Material m_OldMaterial = null;
private float m_OldDrawDistance = 1000.0f;
private float m_OldFadeScale = 0.9f;
Expand Down Expand Up @@ -295,18 +312,12 @@ void OnEnable()
#if UNITY_EDITOR
void UpdateDecalVisibility()
{
// Fade out the decal when it is hidden by the scene visibility
if (UnityEditor.SceneVisibilityManager.instance.IsHidden(gameObject))
{
onDecalRemove?.Invoke(this);
}
else
{
onDecalAdd?.Invoke(this);
onDecalPropertyChange?.Invoke(this); // Scene culling mask may have changed.
}
}
// Change serialized property when decal is hidden in scene
visibleInScene = !UnityEditor.SceneVisibilityManager.instance.IsHidden(gameObject);

// Force proeprty update that will look at visibleInScene to adjust scene culling mask
onDecalPropertyChange?.Invoke(this);
}
#endif

void OnDisable()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,13 @@ public void UpdateDecalEntityData(DecalEntity decalEntity, DecalProjector decalP
float endAngleFade = decalProjector.endAngleFade;
Vector4 uvScaleBias = decalProjector.uvScaleBias;
int layerMask = decalProjector.gameObject.layer;
#if UNITY_EDITOR
// instead of removing decal altogether, set scene culling mask to game view only if !visibleInScene
ulong sceneLayerMask = decalProjector.visibleInScene ? decalProjector.gameObject.sceneCullingMask :
UnityEditor.SceneManagement.SceneCullingMasks.GameViewObjects;
#else
ulong sceneLayerMask = decalProjector.gameObject.sceneCullingMask;
#endif
float fadeFactor = decalProjector.fadeFactor;

cachedChunk.drawDistances[arrayIndex] = new Vector2(drawDistance, fadeScale);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,22 @@ sealed class SurfaceCacheRenderPipelineResourceSet : IRenderPipelineResources

int IRenderPipelineGraphicsSettings.version => m_Version;

[ResourcePath("Runtime/RendererFeatures/SurfaceCacheGlobalIlluminationRendererFeature/FallbackMaterial.mat")]
[ResourcePath("Runtime/RendererFeatures/SurfaceCacheGIRendererFeature/FallbackMaterial.mat")]
public Material m_FallbackMaterial;

[ResourcePath("Runtime/RendererFeatures/SurfaceCacheGlobalIlluminationRendererFeature/PatchAllocation.compute")]
[ResourcePath("Runtime/RendererFeatures/SurfaceCacheGIRendererFeature/PatchAllocation.compute")]
public ComputeShader m_AllocationShader;

[ResourcePath("Runtime/RendererFeatures/SurfaceCacheGlobalIlluminationRendererFeature/ScreenResolveLookup.compute")]
[ResourcePath("Runtime/RendererFeatures/SurfaceCacheGIRendererFeature/ScreenResolveLookup.compute")]
public ComputeShader m_ScreenResolveLookupShader;

[ResourcePath("Runtime/RendererFeatures/SurfaceCacheGlobalIlluminationRendererFeature/ScreenResolveUpsampling.compute")]
[ResourcePath("Runtime/RendererFeatures/SurfaceCacheGIRendererFeature/ScreenResolveUpsampling.compute")]
public ComputeShader m_ScreenResolveUpsamplingShader;

[ResourcePath("Runtime/RendererFeatures/SurfaceCacheGlobalIlluminationRendererFeature/Debug.compute")]
[ResourcePath("Runtime/RendererFeatures/SurfaceCacheGIRendererFeature/Debug.compute")]
public ComputeShader m_DebugShader;

[ResourcePath("Runtime/RendererFeatures/SurfaceCacheGlobalIlluminationRendererFeature/FlatNormalResolution.compute")]
[ResourcePath("Runtime/RendererFeatures/SurfaceCacheGIRendererFeature/FlatNormalResolution.compute")]
public ComputeShader m_FlatNormalResolutionShader;

public Material fallbackMaterial
Expand Down Expand Up @@ -80,7 +80,7 @@ public ComputeShader flatNormalResolutionShader
}

[DisallowMultipleRendererFeature("Surface Cache Global Illumination")]
public class SurfaceCacheGlobalIlluminationRendererFeature : ScriptableRendererFeature
public class SurfaceCacheGIRendererFeature : ScriptableRendererFeature
{
public enum DebugViewMode_
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public class URPReflectionProbeSettings : IRenderPipelineGraphicsSettings
[SerializeField, HideInInspector] private int version = 1;

int IRenderPipelineGraphicsSettings.version => version;
bool IRenderPipelineGraphicsSettings.isAvailableInPlayerBuild => true;

[SerializeField, Tooltip("Use ReflectionProbe rotation. Enabling this will improve the appearance of reflections when the ReflectionProbe isn't axis aligned, but may worsen performance on lower end platforms.")]
private bool useReflectionProbeRotation = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -591,7 +591,8 @@ uint Select4(uint4 v, uint i)
(((v.y & mask0) | (v.x & ~mask0)) & ~mask1);
}

#if SHADER_TARGET < 45
#if SHADER_TARGET < 45 && !defined UNITY_COMPILER_DXC
// Workaround is only technically required for GL Core <4.0 and GLES <3.1
uint URP_FirstBitLow(uint m)
{
// http://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightFloatCast
Expand Down
7 changes: 1 addition & 6 deletions Packages/com.unity.shadergraph/Documentation~/Blackboard.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
## Description
You can use the Blackboard to define, order, and categorize the [Properties](Property-Types.md) and [Keywords](Keywords.md) in a graph. From the Blackboard, you can also edit the path for the selected Shader Graph Asset or Sub Graph.

![image](images/blackboardcategories1.png)
![The blackboard layout with properties, keywords, and categories.](images/blackboardcategories1.png)

## Accessing the Blackboard
The Blackboard is visible by default, and you cannot drag it off the graph and lose it. However, you are able to position it anywhere in the [Shader Graph Window](Shader-Graph-Window.md). It always maintains the same distance from the nearest corner, even if you resize the window.
Expand Down Expand Up @@ -42,8 +42,6 @@ To make the properties in your shader more discoverable, organize them into cate
### Adding, removing, and reordering properties and keywords
* To add a property or keyword to a category, expand the category with the foldout (⌄) symbol, then drag and drop the property or keyword onto the expanded category.

![image](images/blackboardcategories2.png)

* To remove a property or keyword, select it and press **Delete**, or right-click and select **Delete**.
* To re-order properties or keywords, drag and drop them within a category or move them into other categories.

Expand All @@ -66,9 +64,6 @@ To copy a specific set of properties:
### Using categories in the Material Inspector
To modify a material you have created with a Shader Graph, you can adjust specific property or keyword values in the Material Inspector, or edit the graph itself.

![image](images/blackboardcategories3.png)


#### Working with Streaming Virtual Textures
[Streaming Virtual Texture Properties](https://docs.unity3d.com/Documentation/Manual/svt-use-in-shader-graph.html) sample texture layers. To access these layers in the Material Inspector, expand the relevant **Virtual Texture** section with the ⌄ symbol next to its name. You can add and remove layers via the Inspector.

Expand Down
2 changes: 0 additions & 2 deletions Packages/com.unity.shadergraph/Documentation~/Block-Node.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,4 @@ If you disable **Automatically Add or Remove Blocks**, Shader Graph doesn't auto

Active Block nodes are Blocks that contribute to the final shader. Inactive Block nodes are Blocks that are present in the Shader Graph, but don't contribute to the final shader.

![image](images/Active-Inactive-Blocks.png)

When you change the graph settings, certain Blocks might become active or inactive. Inactive Block nodes and any node streams that are connected only to Inactive Block nodes appear grayed out.
12 changes: 6 additions & 6 deletions Packages/com.unity.shadergraph/Documentation~/Boolean-Node.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ Defines a constant **Boolean** value in the [Shader Graph](index.md), although i

## Ports

| Name | Direction | Type | Binding | Description |
|:------------ |:-------------|:-----|:---|:---|
| Out | Output | Boolean | None | Output value |
| Name | Direction | Type | Binding | Description |
|:--- |:---|:---|:---|:---|
| Out | Output | Boolean | None | Output value |

## Controls

| Name | Type | Options | Description |
|:------------ |:-------------|:-----|:---|
| | Toggle | | Defines the output value. |
| Control | Description |
|:---|:---|
| (Checkbox) | Defines the output value. |

## Generated Code Example

Expand Down
Loading