Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Disable incompatible XR tests #89

Merged
merged 2 commits into from Apr 27, 2020
Merged

Conversation

fabien-unity
Copy link
Contributor

@fabien-unity fabien-unity commented Apr 9, 2020

Purpose of this PR

  • Expose setting to disable incompatible XR autotests
  • disable unsupported tests

Testing status

Manual Tests

  • Opened test project + Run graphic tests locally

Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Welcome to the Unity SRP repo!
Please make sure to fill out the PR template as best you can to give reviewers as much information as possible.
If you have any questions (and you are a Unity employee) go to "#devs-renderpipe"

@phi-lira
Copy link
Contributor

Where do we actually use the XRCompatible flag? I can't see any usage in this PR.

@@ -271,6 +276,7 @@ MonoBehaviour:
AverageCorrectnessThreshold: 0.001
UseHDR: 0
WaitFrames: 0
XRCompatible: 0
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@phi-lira here for example

@fabien-unity
Copy link
Contributor Author

Oh and sorry, it's going to be used for #22
We just wanted to reduce the size of the PR by making smaller batch of changes before.

@fabien-unity fabien-unity requested a review from a team as a code owner April 23, 2020 15:10
@phi-lira phi-lira merged commit 2a8a5fb into master Apr 27, 2020
@phi-lira phi-lira deleted the urp/xr/pure-xrsdk-disable-tests branch April 27, 2020 13:07
mohammad22 pushed a commit that referenced this pull request May 24, 2022
mohammad22 pushed a commit that referenced this pull request May 24, 2022
mohammad22 pushed a commit that referenced this pull request May 27, 2022
mohammad22 pushed a commit that referenced this pull request May 31, 2022
mohammad22 pushed a commit that referenced this pull request Oct 19, 2022
DGI per volume mixed lights (#79)

* Added a per-volume property defining if mixed lights were baked for this volume. Add all lights to the light list and skip mixed lights in shaders when required.
* Revert to the previous way of uncapping shadow distance when baking dynamic GI mixed lights.

Fix two misc DynamicGI shader warnings. (#89)
mohammad22 pushed a commit that referenced this pull request Oct 21, 2022
Probe Volume:

Uncomment Probe Volume related menu items

Baked Lighting Workflow: Maintain lists of all Probe Volume instances and publicly expose to allow game-specific bake code to turn on and off relevant lighting data for context-specific bakes.

Probe Volume:

Probe Volume Improvements

Probe Volumes: Force the lightmapper to free old additionalbakedata jobs in a few cases, such as when probe volumes are disabled, or when probe volumes are hidden. Previously, it looks like the lightmapper could hang onto this data until you quit. (#19)

Probe Volumes: Lots of bugfixes and improvements to bilateral filtering modes. Octahedral Depth data now working (requires changes on the C++ side). Added support for comparing filtering the texel coordinates and then taking a single sample, vs taking 8x samples and then filtering the results. Ported over from unity graphics repo 3c3b091

Probe Volumes: Lots of bugfixes around baking. Reflection Probes and Density Volumes: now respect scene visibility toggles in regards to their contribution to the scene. TODO: Remove debug logging that was added! Backing up WIP work.

SceneObjectIDMap: Fix bug where index from gameobject dictionary would get out of sync from entries after an insertion occurred to fill a hole. This resulted in a nasty bug where reflection probes would occasionally generate the same filename as eachother, would overwrite eachothers textures, and would point to the same texture after the bake completed.

Probe Volume: Comment out log spam. Planning to clean it out completely in a follow up commit

Probe Volume: Remove log spam from ProbeVolumeManager

Added HDRP_STRIP_LEGACY_AMBIENT_PROBE_BAKING define for enabling legacy ambient probe bake feature stripping - requires custom build with backport of https://ono.unity3d.com/unity/unity/pull-request/123092/_/lighting/SRP-opt-out-skymanager

Make HDBakedReflectionSystem public for baking API

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

Probe Volume: Wrap editor-only variable dataNeedsDilation in UNITY_EDITOR define blocks to avoid warnings.

Probe Volumes: Track whether or not bake inputs has been set, and only attempt to get bake data if the inputs was set. Otherwise the lightmapper will error out.

Probe Volume: Add View Bias support - exposed on the ProbeVolume component next to Normal Bias (#25)

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

 Probe Volume:

 Probe Volume binary serialization and minor fixes

* Prefer binary serialization of Probe Volume assets.

* Added "Reserialize All" action to context menus of ProbeVolumeAsset to be able to convert all assets in a project to binary format.

Probe Volume: Add support for sampling probe volumes from volumetrics. Probe Volume inner loop cleanup happened in the process. Added support for disabling bilateral filtering via a define, which is used in volumetrics and vfx sampling of probe volumes now.

Fix bug where density volume voxelization would erroneously sample and voxelize density volumes that no longer existed due to assumption that density volumes were last in the light list (they are not anymore: probe volumes come after).

Probe Volumes: Reflection Probe Normalization by Probe Volumes added. In order to enable, NormalizeReflectionProbeWithProbeVolume needs to be enabled in the Frame Settings for the Camera, and scenes need to be rebaked. Options exist on the ProbeVolumeController volume override. (#27)

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

Probe Volumes: Reflection Probe Normalization: Add #if UNITY_EDITOR guards around Subscribe/UnsubscribeSHBaking

Probe Volume: Fix vector truncation warnings in sample SH Luminance functions

Probe Volume: Fix one more vector trunction warning

Enable Probe Volumes with L2 Encoding mode

Probe Volumes: Lots of bugfixes and improvements to bilateral filtering modes. Octahedral Depth data now working (requires changes on the C++ side). Added support for comparing filtering the texel coordinates and then taking a single sample, vs taking 8x samples and then filtering the results. Ported over from unity graphics repo 3c3b091

Probe Volume Normalization Baking Bugfix: Sanitize out sentinel values from reflection probe request positions array - large values caused the lightmapper to barf killing all direct lighting contribution. Also added tracking for whether or not the data was set, as the lightmapper is not robust to multiple set calls

Probe Volume: Make ProbeVolumeinternals visible to Unity.Entities.Hybrid.HybridComponents so that they can be converted for hybrid rendering

Probe volumes rotation + reflection probe normalization fixes and improvements. Also lots of cleanup to avoid debug-only + lightmapper work when in playmode. Cleaned out old deadcode + comments. Cleaned some GC cases (#1)

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

ReflectionProbeLuminanceSHPreview: Fix path to shader after merge conflict resolution mistake

Probe Volume: Fix bug where bakingEnabled flag was not correctly being set to false when ForceOff was triggered in the editor (not in playmode). Also add additional logging around case where lightmapper does not have data for a specific ID (so we can track down the source faster in the future)

Probe Volume: Set methods for Probe Volumes exposed that allows us to use them to do deep copies of Scenes

Probe Volume Reflection Probe Normalization: Use dominant specular direction for normalization instead of R. For low roughness materials, this has little to no effect (because it uses the R vector still). For high roughness materials, this bends towards normalizing against the surface normal instead of R. So this feature improves quality of high roughness specular

Fix warning log that had some formatting error

DOTS Probe Volume (#2)

Changed the runtime registration and access of Probe Volumes to be able to feed additional data for rendering from a DOTS system.

Avoid boxing when using ProbeVolumeAtlasKey in a dictionary. (#4)

Probe Volume Reflection Probe Normalization: Fix error: Output Particle Lit Quad': undeclared identifier 'ComputeReflectionProbeNormalizationDirection'

Fix double dark ao and ao in lightloop (#12)

Fix double dark AO + material AO availability in light loop for probe volumes. Probe Volumes: Pack AO and isUninitializedGI flag into .x channel of light layers GBuffer RT to fix double dark AO and to allow emissive surfaces to receive probe volume lighting. Also perform small restructuring to a probe volume bilateral filter function to remove a shader warning

Dynamic GI:

Probe Volume Dynamic GI V1 (#7)

Large feature addition to Probe Volumes to support Dynamic GI at runtime & in editor via compute jobs. Huge coordination across game team, Spotlight & HDRP team to refine the algorithm and feature set.

Key Features
- New toggle on a light "Affects Dynamic GI"
- New toggle on a probe Volume "Support Dynamic GI"
- New debug draw mode on a probe volume "Draw Neighbors" to visualize the neighbor the dynamic GI light will bounce around in
- All light types are supported

Missing features
- During albedo baking step, mask volumes are not being sampled correctly
- Off screen lights are missing their shadows when being sampled by the Hit pass of the Dynamic GI compute shader
- Directional light GI seems off, maybe its the offscreen shadow issues
- Sky lighting is not supported at the moment in the dynamic GI
- Currently does not encode emissive in the neighborhood bake data, only albedo, surface distance & normal
- Currently does require a re-bake when geometry changes, the only thing it relies on getting from the lightmapper is the probe validity value

Commit notes:
* Added dynamic GI options onto HDLight and ProbeVolume inspectors
* work in progress dynamic gi
* lots more refactoring on the data model and packing for hits vs misses
* Cleanup dynamic GI code into separate file
* Working axis baking code with visualization
* small fixes
* validity scale fix
* neighbor draw quad scale control
* small fix
* scale fix
* First pass at albedo extraction code for DynamicGI
* bake bug fix
* Albedo baking via Shader Graph works now, and more tweaks to neighbor debug draw
* bug fix
* Dynamic GI neighbor cleanup to use real probe volume data for positioning
* bug fix for non uniform density volumes
* cleanup
* Cleanup and setup of Propagation Buffers
* more work in progress dynamic GI, have a test read modify write of SH data working
* cleanup dynamic GI values when its disabled
* more cleanup
* bug fix
* New improved Albedo sampling code from Francesco
* cache debug shader not material, works better for some reason
* Lots of shader code and setup for real-time GI propagation. Still a work in progress but most code written on GPU side
* All the compute data hooked up first pass
* Kinda of working
* Slightly better, still not there
* Fixes plus re-write of SH data in dynamic GI
* First kinda working version of new RTGI, needs lots of tuning and improvements
* Move VolumeComponent to seperate file so it is preserved when assets are saved
* More improvements, anti alias punctual lights and add a secondary bounce to hits
* Tweaks, added FCC's SH logic for testing / comps
* Cleanup and addition of 3D texture for Irradiance sampling to smooth out history
* Cleanup & and added back bounce boost control for hit pass
* Tuning defaults
* more filddleing with defaults
* temp code for testing
* Intended L1
* Adding Affect Dynamic GI to light explorer UI
Fixing hit lighting logic to work with multiple lights
* Adding de-ringing to SH
Exposing class outside of HDRP for play mode testing
* Move probe volume update code around so worked better with needing state set before dispatches
* Integration of SG logic for Irradiance Cache, way cleaner and better results. Removed old Irradiance cache logic using L1 SH
* More cleanup and refinements of SG algorithm
* Bias punctual lights near surfaces to fix strobing
* Cleanup
* name cleanup
* Support volume rotation in neighbor debug view mode
* Fixed contribution normalization. Changed the direction for infinite bounces evaluation from reflection to surface normal.
* changing default sharpness to 3.5 to reduce dark banding a tad
* Hacked prototype of an alternative propagation algorithm.
* Smoothed radiance gathering from hits.
* Cleanup and temp NaN propagation workaround.
* Changed History Contribution min limit to 0 to be able to test propagation without it.
* Removed old algorithm, cleaned up data format and volume parameters to make new directional version the default one
* Fixed Probe Volume dynamic GI data access after merging with the DOTS Probe Volume feature.

Signed-off-by: Andrew Saraev <andrew.saraev@unity3d.com>

* Fixed up popping issues with Dynamic GI and other probe volumes in view, plus made it so the light list is global, not camera view culled so all lights stay active in the list for GI to propagate more accurately and shadows to update even for lights behind the camera.

Merged with latest

* Build compile fixes
* Player build fixes, real-time GI now works in player builds
* HDRP settings and toggles for probe volume dynamic GI
* missed files for previous checkin
* small optimizations
* turn on optimizations in key dynamic gi shaders for perf
* Custom dynamic GI light list that also includes off screen lights
* Explicitly set dataUpdated when data is uploaded to the atlas instead of setting it in GetPayload() of the volume. To simplify communication with the DOTS version.

* use shadows for dynamic GI lights. This still has a bug where off screen lights get their shadow indexes reset to -1
* Better disposing of propagation buffers
Cleaned up global compute buffers for SH L012 and validity buffers, and reusing those per probe volume for propagation to reduce memory usage

* possible mem leak fix & piping light bounce intensity through to dynamic GI
* Some PR feedback and distance checks to probe hit & propagation phases

* Added basic distance checks to entire probe volume to dispatch dynamic GI jobs or not
* directional lights are weird, maybe the shadows, we should avoid them
* PR feedback
* Refactored ProbeVolumeBuffers cleanup to keep GameObject and DOTS logic similar.
* Attempt to reduce white space conflicts
* Profiler marker for Dynamic GI
Slight optimization in light loop
* Optimized C# by not doing SetData calls on Buffers unnecessarily

Co-authored-by: Andrew Saraev <andrew.saraev@unity3d.com>

Bug fixes from Dynamic GI.
Cleanup buffers after bakes, and only dispatch dynamic GI for scene or game cameras

Dynamic GI Spherical Harmonic from Spherical Gaussian Modes (#9)

* Implemented SH from SG Modes which can be toggled between in the Probe Dynamic GI volume settings. SamplePeakAndProject is the same mode we are used to: Spherical gaussians will simply be evaluated at their peak and projected to convert to spherical harmonics. SHFromSGFit: A spherical gaussian to spherical harmonic function fit is used, which is physically plausible. SHFromSGFitWithCosineWindow: A spherical gaussian with an additional cosine window to spherical harmonic function fit is used, which is physically plausible. Less directional blur than SHFromSGFit.

* Cleanup pass on SG to SH supporting math. Created Zonal Harmonic data type with supporting functions to add type saftey to the transforms as we have done with the other spherical harmonic functions. Created specialized zonal harmonic rotation functions which significantly reduces the work required for rotation. It's possible the compiler was handling this already by stripping out work on zero coefficients, and by automatically using floats instead of float3s when all channels are the same - but better to not put too much pressure on the compiler. This should also make it easier in the future to create specialized rotation functions for cardinal rotations (which will introduce additional zeros).

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

Dynamic GI: Fix a bunch of shader warnings in DynamicGI shaders.

Bug fix so that lights can act as dynamic GI only lights

Probe Volumes:

Created a proper Probe Volume probe rendering shader. All probes in a selected probe volume are rendered in a single DrawProcedural call, 2 triangle per probe (screen space quads). Allows me to get rid of a lot of nasty mesh setup logic that was previously happening. The new Draw Probes debug shader currently has two additional options: Draw Validity, and Highlight Ringing (#14)

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

Probe Volumes: Use GlobalObjectId.targetObjectId (#16)

* Probe Volumes: Use GlobalObjectId.targetObjectId to uniquely identify Probe Volumes, and Probe Volume Asset ownership, rather than GetInstanceID() - which was not guarenteed to be persistent. This PR cleans up the related logic, allowing us to guarentee non-colliding bake ids, avoids hanging on to asset references during duplication of probe volumes, and, in the case where you have intentionally referenced a probe volume asset on a probe volume that does not own it, avoids baking that asset, which would previously stomp source data.

* Probe Volumes: GlobalUniqueID: Use a custom stack-only + packed representation of the full GlobalObjectId, rather than only using GlobalObjectID.targetObjectId to avoid collisions when different scene probe volumes happen to have the same targetObjectId. This also allows full backwards asset lookup in the future if necessary, which should help debugging + build tools.

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

Probe Volumes: Make all bake requests go through the AdditionalGIBakeRequestsManager. Track the generationIndex in the least significant 8 bits of the lightmapperBakeID, and talk to the lightmapper with this composite ID. This ensures that anytime we call SetAdditionalBakeProbes we generate a completely unique bake request from the perspective of the lightmapper, ensuring that we will always bake this data (because the lightmapper will hash these IDs to determine if it has any work to do). Previously, if we set an ID with new data, or if we cleared an ID then set it with new data, the lightmapper wouldnt track these data changes, and so it would skip baking these actually new bake requests. (#17)

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

Probe Volumes: Fix Debug Colors display mode - shader line got erroneously commented out in a PR a few months back (#18)

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

Probe Volumes: Fix exposure in Probe Volume debug modes (ensure no exposure is applied (#19)

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

Probe Volumes: Maintain user specified absolute world space positive and negative fade while resizing bounds handle. This makes Probe Volumes resize behavior match behavior of Density Volumes and Reflection Probes. (#20)

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

Probe Volumes: Fix PROBE_VOLUMES_SAMPLING_MODE defines in GetReflectionPRobeNormalizationFactor (#23)

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

Probe Volume: Add RenderGraph support for Probe Volumes.

Originally this was implemented in this PR: Partner/crazyhunter 10.6.0 custom.1 rendergraph 1a835fd
However, the PR contained some fairly large code divergences from mainline - so it was split out into multiple new commits during this upgrade, and divergence was minimized.

Mask Volumes:

Mask Volumes. An ability to place volumes with 3D textures into the world, paint custom color into them and sample this data in any Shader Graph. To be used as a global volumetric splat map. (#16)

(cherry picked from commit f68dc61b5c92ccea7f249e7f58aab1583799ddcb)

Mask Volumes tools update (#22)

* Fixed the issue when the scene view camera moves on selecting the painting tool.

* Use normalized values for color and opacity settings. Fixed the effect of opacity and hardness.

* Added the brush color inversion while Ctrl is pressed, for quick erasing.

* Replaced the Recreate Asset button with Resample Asset. The data is not lost after resizing or changing voxel density now.

* Fixed a Mask Volume resampling error when old resolution has 1 on any axis.

* Mask Volume: Use resolution from MaskVolumeAsset instead of MaskVolumeArtistParameters for rendering. Resolution in parameters is just for creating new assets or resampling to a new resolution.

* Mask Volume: Use normal bias in painting.

* Mask Volume: Use input pressure as opacity.

* Mask Volume: Added inner radius and normal bias brush gizmos.

Mask Volume: Hotfix: Avoid attempting to upload degenerate data to the atlas by extending IsDataAssigned() check to include a Length > 0 test

Fixed the case when a Mask Volume asset is saved to a file empty. The "Resample Asset" button can process an empty asset and fill it with valid data now. (#23)

Mask Volumes binary serialization and minor fixes

* Fixed the case when the painted Mask Volume asset is not saved.
Updated the default brush settings based on the user feedback.

* Prefer binary serialization of Mask Volume assets.

* Added "Reserialize All" action to context menus of MaskVolumeAsset to be able to convert all assets in a project to binary format.

Mask Volume: Fixed minor bug where emptyUAV would silently fail to bind to _MaskVolumeAtlas - using emptyVolumeUAV instead

Mask Volume:

Mask Volume: Make Mask Volume internals visible to Unity.Entities.Hybrid.HybridComponents

Mask Volumes: Set methods for Mask Volume exposed that allows us to use them to do deep copies of Scenes

DOTS Mask Volume (#6)

Refactored the access to Mask Volume instanced to be able to feed a DOTS version to the system.

Probe Volumes:

Probe Volumes: Delete meta file for empty folder accidentially created a while back. Cleans up a warning when the project is first imported (#34)

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

 Probe Volumes: Cleanup the state when HDRP has Probe Volumes disabled in the HDRenderPipelineAsset or FrameSettings. Previously we would hit some null reference errors because the disabled paths were not well tested. These fixes should improve the process of setting up Probe Volumes / Mask Volumes in a new project

Probe Volumes: Upadte ProbeVolumeAtlasKey to additionally unique on volume position if the volume is simulating dynamic GI. If dynamic GI is enabled, two probe volumes that point to the same asset, streamed in at different locations need unique space in the atlas (because their dynamic GI component is different). If dynamic GI is disabled, two probe volumes that point to the same asset, streamed in at different locations should share space in the atlas, since their baked data is identical.

Probe Volume:

VolumeGlobalUniqueID and atlas allocation stats

Probe Volumes:

Probe Volumes: Remove Ambient Sky fallback which was used when accumulated probe volume weight was < 1. In our project we never want to fall back to the ambient sky, we want to fallback to black. (#40)

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

Probe Volumes: Fix bug where tiles would receive no probe volume lighting if they contained no direct light sources, and if compute based deferred was enabled. (#41)

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

Probe Volume: Fix Probe Volume Visibility API

Probe Volume: Fixed compilation error when Probe Volumes are not encoded with SHL2.

Mask Volume:

Mask Volume Feature Parity: Mask Volumes use Global Unique ID system … (#32)

* Mask Volume Feature Parity: Mask Volumes use Global Unique ID system just like Probe Volumes, follow the same eviction scheme as probe volumes, have the same debug rendering options as probe volumes (where relevant) and have dead code paths cleaned out. Global Distance Fade Start / End exposed on the Volume System Probe Volume Controller and new Mask Volume Controller to limit atlas subscription when zoomed way out in large scenes. Volumes are now evicted from the atlas when they are culled in the prepare probe volume / mask volume lists stage.

* Add atlas allocation stats for Mask Volumes

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

Mask Volumes: Cleanup the state when HDRP has Mask Volumes disabled in the HDRenderPipelineAsset or FrameSettings. Previously we would hit some null reference errors because the disabled paths were not well tested. These fixes should improve the process of setting up Probe Volumes / Mask Volumes in a new project

Dynamic GI:

Probe Volumes: Dynamic GI: Fix null reference when Draw Neighbors is true, but no probeVolumeAsset has been baked yet. (#30)

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

Fix for dynamic GI to disable gracefully at runtime

Ported MaskVolumes and Dynamic GI to RenderGraph (#27)

* Ported MaskVolumes to RenderGraph

* Made MaskVolume light lists work with RenderGraph

* Made ProbeVolumes DynamicGI work with RenderGraph

* Remove accidentially introduced extra space (to avoid merge conflicts in the future)

Dynamic GI:

Partner/crazyhunter 10.7.0 custom.1.pvdgi cross volumes (#38)

* Scaffolding for testing how sampling neighbor probe volumes around edges of dynamic GI volumes can help with propagating GI from neighbors. Needs to be filled in

* typo

* work in progress

* Probe Volumes: Fix up case where ProbeVolume.hlsl is included and LIGHTLOOP_DISABLE_TILE_AND_CLUSTER is defined. Add support for dynamic GI border axes sampling all other probe volumes in order to propagate dynamic GI across volume boundaries.

* Fix fade calculation

* Fix warning about sign / unsign mismatch.

* cache and respect the HDRP asset Dynamic GI toggle at runtime for perf testing

* Probe Volumes: Dynamic GI: Add Neighboring Volume Propagation Mode to Probe Dynamic GI Volume Override for selecting which algorithm is used to inject dynamic GI from neighboring probe volumes at boundaries. Options include Disabled, Sample Neighbors Direction Only (reccomended), and Sample Neighbors Position and Direction

* Probe Volumes: Dynamic GI: If Dynamic GI is on, and Neighboring Volume Propagation is on, force probe volumes to upload to structured buffers and the atlas if they are within the rangeInFrontOfCamera or rangeBehindCamera distance.

* Probe Volume GI: neighboringVolumePropagationMode - change default to SampleNeighborsPositionAndDirection

Co-authored-by: Szymon Swistun <szymon@bonfirestudios.com>
Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

Define GetDiffuseOrDefaultColor() for the Unlit BSDF to fix compilati… (#39)

* Define GetDiffuseOrDefaultColor() for the Unlit BSDF to fix compilation errors in Unlit shaders in the DynamicGIDataSample pass.

* Define DynamicGIDataSample pass for AxF and Unlit shaders. Remove now unnecessary #if UNLIT define in ShaderPassDynamicGIDataSample.

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

Blow out fix for new cross volume GI propagation, plus big fix in directional only version to much closer match to pos + directino one

Dynamic GI:

Optimizations to Dynamic GI, with minimal, but some, quality loss
Rename volume setting parameter, and set default to directional only, it looks fine, and a better default
Pre-computed & sorted relevant neighbor axis per axis and precomputed sgWeights.
Found the best tradeoff for highest weighted axis / relevancy wise based on sgWeight and used 9 to help with perf.

prior merge fix

10 axis loops to catch all relevant axis

Shader variant for when inf bounce scale is set to 0 to remove the work entirely

Bump Shadergraph ScriptedImporter version to attempt to cleanly regenerate all shadergraphs after fixing bugs in dynamic GI extraction pass hlsl includes. (#42)

Co-authored-by: pastasfuture <nickb@bonfirestudios.com>

Mask Volume albedo baking (#37)

* Fixed dynamic GI albedo sampling inputs. Set up all Mask Volume data globally (camera-independent) before albedo baking.

Signed-off-by: Andrew Saraev <andrew.saraev@unity3d.com>

* Fixed Mask Volume rendering after merging.

* Fixed rendering after the merge.

* Fix Mask Volume preparation for baking with Render Graph enabled.

* Dynamic GI baking optimization. Mask Volume rendering clean-up.

Mask Volume:

Mask Volume visibility fixes (#84)

* Don't render Mask Volume hidden in scene.

* Fixed Mask Volume flickering when two volume instances are trying to render the same asset.

Mask Volumes: Remove an unnecessary editor only GC.Alloc

Dynamic GI:

Max Sim Per Frame Control per Probe Volumes Dynamic GI (#44)

* Control over max # of probe volume dynamic GI simulation's per frame

* fixed issues with static value construction

* More direct control of perf controls to dynamic GI

Less GC allocations and better cleanup

Cleanup and removed the need entirely clearing radiance cache on first frame of probe volume dynamic GI sim. compute shaders just handle that first frame case via variant instead. Removes hitches this way

Sometimes we got NaN's, so added an extra safe clear on radiance data but via compute dispatch when needed

slight bug fix to previous commit

Quality variants for propagation axis amounts

Dynamic GI:

Added basic probe volume dynamic GI stats

more dynamic GI stats

Optimize GI data layout (#45)

* Optimized the layout of the dynamic GI data.
* Added migration of existing baked data to new layout. Context menu item "Reserialize (All)" on Probe Volume Asset now also runs the migration. Had to move the migration code from Probe Volume to Probe Volume Asset for this.
Limitation: Context menu migration is skipped for assets of version < 3, since updating to v.3 requires rotation from an object in a scene.
* Apply inverse-square law to propagation axis weights to get a more correct distribution for diagonal axes.

Dynamic GI:

Dynamic GI baked emission (#51)

* Bake emission into dynamic GI neighbors and use it in the propagation.

* Use 2x2 pixel blocks per baking request to control texture lods with uv and position gradients within these blocks.

* Added the logic to control the material sampling lod for neighbor baking.

* Added support of any Probe Volume rotation while baking dynamic GI neighbors and combining dynamic and baked SH.

* Respect the Baked Emission material toggle when baking the dynamic GI neighbors.

* Added a volume component setting to scale baked emission for dynamic GI.

* Provide ddx and ddy for position and UV of a hit when baking neighbor materials.

* Set the camera position shader property to zero before baking neighbors to support position-based effects in materials.

* Clean-up.

Work in progress for dgi optimization - setup new compute buffer

Work in progress.

Populate new neighbor axis lookups buffer and switch to reading from it.

Remove old neighbour axis lookup array.

Order members in NeighborAxisLookup by type size.

adding safety cleanup to help trigger the sorted axis set after cleanup call

Dynamic GI: Bind white texture for HVSSS in dynamic GI light loop

New reflection normalization (#62)

* Use roughest cubemap sample instead of baked SH to calculate Probe Volume reflection normalization.

* Removed luminance SH baking for Reflection Probes.

Dynamic GI:

Dynamic GI sky lighting (#53)

* Sample sky lighting on the edges of Probe Volumes for dynamic GI propagation.

* Added Sky Contribution setting to Probe Dynamic GI volume component.

* Renamed "Sky Contribution" to "Sky Multiplier" to fit better with "Baked Emission Multiplier".

* Removed the Direct Contribution setting and normalization that led to all bounces being effectively multiplied by 0.5 with default settings.

* Rotate axes in ProbePropagationCombine in the way consistent with other stages.

* Added Max Albedo setting for dynamic GI to prevent infinite bounces from blowing up the lighting.

* Apply validity to emission. Cleanup.

* Changed default Max Albedo to 0.9.

* Divide dynamic GI direct lighting by Pi to fix the look.

* Experimental changes to skylight and direct hit injection before looking deeper into our SG-to-SH conversion.

* Replaced weight normalization in hit and miss passes with prenormalized amplitudes. Experimental.

* Added the inv-pi normalization to infinite bounces.

* Finish fixing up normalization of hits, misses, and sky. Additionally, add amplitude adjustment for edge and diagonal SGs

* Fixed StackLit shader graphs compilation by adding missing ComputeReflectionProbeNormalizationDirection function, expected by the LightLoop.

* WIP Dynamic GI bases: Windowed Spherical Gaussian and Ambient Dice

* Turn back on sky contribution

* More iteration

* Latest

* Cleanup dynamic gi propagation bases defines into their own header that exposes an api so that callers do not have to know the specifics of the basis. Expose all bases as options on the Probe Dynamic GI volume override

* Miss integral

* Fix hit and miss lobe creation to the more subtle, but correct implementation that got lost during the cleanup.

* Formalize the logic for injecting light from neighboring probe volumes / sky into a basis axis. Convolve the incoming irradiance with the zonal harmonic representation of the neighbor basis lobe in order to analytically evaluate the incoming irradiance over the entire lobe, rather than just the point sample. I compared this against a brute force monte carlo sampling of the SH over the neighbor axis lobe and the results are almost completely indestringuishable. The accuracy is based on how accurate the ZH fit of the neighbor axis lobe is.

* remove some dead code

* delete more dead code

* Add back a line of code I accidentally deleted in the cleanup

* Split up the basis options into a basis dropdown and a basis propagation override dropdown. Removed the not useful no diagonal basis options. Added ambient dice wrapped options to the propagation override modes

* Remove old option for SH from SG Mode: We now always use the correct SH From SG via zonal harmonic fit conversion. Changed the default propagation override to Basis Ambient Dice Wrapped Super Soft. Fixed a subtle bug with skylight propagation - use the current axis lobe direction for sampling the sky, not the neighbor direction. This makes it consistent with how hits are propagated (and cleans up a little code in the process)

Co-authored-by: pastasfuture <pastasfuture@gmail.com>

Dynamic GI:

Dynamic GI: Fixed Dynamic GI and the neighborhood debug draw when there are 0 hits in a volume (no geometry was hit).

Renormalize axes of Dynamic GI bases to support different quality (#61)

* Added frame settings for Dynamic GI quality to be able to preview it in edit mode.
* Precalculate and normalize axis weights on CPU.

New DGI validity baking and ProbeVolume interface (#66)

* Added a button to Probe Volume to bake dynamic GI without the lightmapper. Then, validity is computed with the same rays that used for hits, so it only "sees" backfaces that are one voxel away or closer.
* Simplified IProbeVolumeList by grouping all runtime data the pipeline may need to write to into ProbeVolumePipelineData and ProbeVolumePropagationPipelineData structs.
* Replaced single dataUpdated on ProbeVolume with dataVersion on ProbeVolumeAsset to detect changes of baked data for already loaded volumes and keep baked lighting buffers, dynamic lighting buffers, atlas slot and content — all up to date regardless of the order they are used.

Fix crash in il2cpp build (#67)

Co-authored-by: Paulm-Unity <paulm@unity3d.com>

Fix another crash in il2cpp build

DGI Fix Leak Mitigation (#68)

* Fixed DGI axis bit packing.
* Store neighbor validity in axis and limit propagation from an invalid probe instead of limiting propagation towards an invalid probe.
* Set default Baked Emission Multiplier, Sky Multiplier and Leak Multiplier to 1.0.

rename leak multiplier to leak mitigation for consistency

DGI Mixed Lights (#76)

* Mark mixed lights when Probe Volume is baked to filter them out of the dynamic GI light list.

* Added mixed lights data to DGI neighborhood and rendering. Using manual baking steps for now.

* Update and save mixed lights baked status when lights are processed by the pipeline in the baking mode.

* Added frame settings to pick a combination of realtime and mixed lights to use for dynamic GI.

* Force shadow rendering regardless of distances when preparing for mixed lights baking.

* Restored dynamic GI basic support for all mixed light modes after the light list merge. Now need to restore forced shadowmap rendering while mixed baking is prepared.

* Restored after merge: force shadowmap rendering while mixed baking is prepared by dynamic GI.

* Make dynamic GI mixed lighting preview show correct expected result for the current indirect scale setting.

Probe Volume, Mask Volume, Dynamic GI

Dynamic GI:

DGI per volume mixed lights (#79)

* Added a per-volume property defining if mixed lights were baked for this volume. Add all lights to the light list and skip mixed lights in shaders when required.
* Revert to the previous way of uncapping shadow distance when baking dynamic GI mixed lights.

Fix two misc DynamicGI shader warnings. (#89)

Expose key hooks and controls for automated dynamic GI baking

Exposing seperate prepareForBaking option for probe volumes for more control over baking

one more fix for better dynamic GI bakes

Probe Volume: Fix ProbeVolume buffers not being reset after disable (#95)

Fixed ProbeVolume BuffersDataVersion not being reset on disable.

Dynamic GI:

Dynamic GI: clear EngineDataIndex and simulationFrameTick. Unified clearing methods.

DGI fallback radiance baking for low end settings (#92)

* Added the way to copy prepared radiance into baked data of a Probe Volume and use it at runtime as a fallback for when DGI is disabled.
* Changed the way of updating and tracking data version for Probe Volume assets to not reupload it on every asset reimport and validation (needed to maintain propagated radiance while baking reflections and saving assets).

Toggle for Dynamic GI for low quality baked mode testing in editor

DGI smaller encoding (#96)

* Experiment with storing DGI hit emission and probe radiance with half-float precision.

* Trying RGBM32 encoding for DGI propogation.

* Moved DGI radiance encoding functions to separate from emission to quickly iterate with it without touching the baked emission data.

* Use LogLUV encoding for DGI hit and probe radiance.

* Added YCoCg encoding for DGI radiance for testing.

* Faster and more precise LogLuv radiance encoding with lower range.

* Added a radiance encoding setting to Probe Dynamic GI volume component to switch between RGB Float and LogLuv.

* Fixed hit radiance decoding for different encodings when baking mixed lighting.

* Moved the radiance encoding setting from the volume component to frame settings.

* Dynamic GI: Added HalfLUV, and R11G11B10 encoding modes

Co-authored-by: pastasfuture <pastasfuture@gmail.com>

Support DGI mixed lights baking for HalfLuv and R11G11B10 radiance encodings. (#98)

DGI initial state from baked (#99)

* A prototype of DGI radiance initialization from baked SH.

* Disable ZHWindow in ProbePropagationInitialize for now as it gives too smooth and dark radiance to axes.

* Minor fixes in propagation and a cleanup.

* Partner/crazyhunter 10.7.0 custom.1 dgi initial state from baked sh to from basis improvement (#107)

Improve ambient dice basis coefficients, improve basis normalization, and improve methods for projection from and to SH, choosing the right method for the context.

Dynamic GI: Ambient Dice to ZH: Switched over to using a raw ZH fit instead of deringed zh fit. It results in significantly lower error when compared to a ground truth monte carlo projection, which means slightly punchier + higher contrast + less washed out GI. And the ringing concern seems to not be an issue due to the way light is propagated. Across a number of test scenes no ringing is present.

Co-authored-by: Nicholas Brancaccio <pastasfuture@gmail.com>

Probe Volume:

Probe Volumes: Fix case when ShaderConfig enables them, but they have not yet been enabled in the frame settings. Previously this case would spill errors about unassigned compute parameters like _ProbeVolumeAtlasSH - this comes up when creating standalone HDRP template projects for repro demos

Probe Volume sampling quality (#102)

* Added a frame setting for Probe Volume lighting sampling quality between SHL0, SHL1 and SHL2.

* Probe Volume sampling quality cleanup.

* WIP switch Probe Volume spherical harmonics level with global keywords. L0 and L1 are not supported by Dynamic GI yet.

* Implemented missing SH L0 and L1 modes for Dynamic GI.

* Removed Probe Volume SHL0 option to save shader variants. Fixed Volumetric Lighting.

* Fixed VFX shaders after introducing different Probe Volume encodings.

* Support baking SHL2 fallback radiance from within the SHL1 mode. Cleanup.

Check if probeVolumeAtlas is null before trying to release a slot from it. The atlas could be not created yet as we are doing it later in a rendering now to match the selected SH encoding for a given frame. (#108)

Probe Volumes: Remove an unnecessary editor only GC.Alloc

Reflection Probe Normalization: Fix bad rebase merge of reflection probe normalization code

Fix recursive mutation bug in ZH Fit version of ProbePropagationInitialize projection.

Dynamic GI Propagation: Sample Neighbors: Use ZH-Fit to convert from SH to our 26-axis basis - it produces results that are a bit closer to our monte carlo naive projection ground truth

Dynamic GI: Fix Infinite Bounce calculation after we changed our basis coefficients. We were missing scaling each lobe contribution by that lobes normalized integral. Also delete some dead code that was hanging around in the dynamic GI area for too long, and fix some code erroneously included inside of an ifdef (#109)

Dynamic GI probe dirty flag (#111)

* Store a dirty flag for each light probe in a volume, update only the ones that had reasons to change since the last update.
* Added a setting to Frame Setting to be able to disable dirty flags.
* Added debug visualisation of dirty probes of all active volumes.

DGI propagation fixes (#112)

* Fixed fallback radiance baking when dirty flags are enabled.
* Fixed noticeable intensity loss for lower propagation quality due to axis weights renormalization error.
* Separate radiance comparison for LogLUV encoding that avoids many false positives in dirty flags.
* Fixed propagation data not being cleared when Frame Settings are changed via the settings window causing the pipeline to be destroyed.

critical exception fix that was firing on domain reloads & enter play mode transitions

Dynamic GI: Copy over some warning fixes to dynamic GI that were lost in the rebase shuffle
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
3 participants