tim doerries
838de94380
New streaming system for SparseVolumeTextures. It is based on the Nanite FStreamingManager design and supports streaming both from disk and from DDC. This first version uses a single logical tile data texture for all frames of a single UStreamableSparseVolumeTexture and starts streaming out tiles of older mip levels once it runs out of space. The highest mip level (lowest resolution) is always resident in the tile data texture, so there is always something available for rendering. Each frame's page table texture is currently always fully resident. There is now also a buffer storing the lowest resident mip level index for each frame.
...
In a future version, additional logical tile data textures may be allocated to handle cases where more mip levels are being requested than can physically fit into a single texture. In addition, page table textures should also be resized so that streamed out frames take up less GPU memory. It might also be necessary to implement a blocking streaming option for MRQ and similar use cases. This feature probably depends on being able to spill to additional physical page table textures.
Also moved all of the SVT runtime classes into a shared namespace (UE::SVT), which is why this CL ended up touching almost all SVT related files.
#rb Sebastien.Hillaire, Rune.Stubbe, Devon.Penney, Patrick.Kelly
#rnx
#preflight 64772ef20d55081f54759f0b
[CL 25699866 by tim doerries in ue5-main branch]
2023-05-31 08:14:22 -04:00
tim doerries
fedfdecf2f
Implemented an optimized path for creating a SparseVolumeTexture from a dense source volume. Also did a little bit of renaming of some of the involved functions/interfaces. Removed unorm-remapping option when importing a .vdb file. The usefulness of this feature is debatable and it doesn't work properly on .vdb sequences.
...
#rb Sebastien.Hillaire
#rnx
#preflight 64469e6dc632d1e89b3dc367
#fyi Devon.Penney
[CL 25178321 by tim doerries in ue5-main branch]
2023-04-25 07:50:06 -04:00
tim doerries
19bb93a3fc
Implemented multi-phase initialization for SparseVolumeTextures.
...
#rb Devon.Penney
#rnx
#preflight 643848bcdf20983c4172fa18
[CL 25038431 by tim doerries in ue5-main branch]
2023-04-14 07:47:32 -04:00
tim doerries
19fe3af446
Moved SparseVolumeTexture initialization into a function, simplifying (and hiding implementation details of) SVT creation in factories etc.
...
#rb Sebastien.Hillaire
#rnx
#preflight 641db9ffc42c7fd1cbba3436
[CL 24781341 by tim doerries in ue5-main branch]
2023-03-24 12:42:28 -04:00
tim doerries
5bfb8ca971
Fix for imported SVT assets having a name different from the package name, which causes them to not show up in the content browser.
...
#rnx
#preflight trivial
[CL 24752141 by tim doerries in ue5-main branch]
2023-03-22 14:58:34 -04:00
tim doerries
ed6155ff68
All SparseVolumeTexture mips are now stored in the same resource/proxy, making binding and sampling different mip levels much easier. This version is still missing streaming at mip level granularity and has a minimum mip level size of 16x16x16 (no mip tails). Since the added logic started bloating SparseVolumeTexture.h/.cpp, FSparseVolumeRawSource (now renamed to FSparseVolumeTextureData), FSparseVolumeTextureRuntime and FSparseVolumeTextureProxy were moved into their own files. FSparseVolumeTextureData stores a potentially mipped (after cooking) 3D page table indexing into linear arrays of physical tile data. At runtime the physical tiles are rearranged/packed into 3D physical tile textures in FSparseVolumeTextureRuntime and the page table payload adjusted from indices to 3D tile coordinates. The SVTSample node now also takes an optional MipLevel parameter which enables sampling across mips (lerp).
...
#rb Sebastien.Hillaire
#rnx
#preflight 63fdec5aae54ee4ce99490f9
[CL 24471451 by tim doerries in ue5-main branch]
2023-03-01 16:56:41 -05:00
tim doerries
cd143277a9
Fixed OpenVDB import being limited to a maximum source asset file size of 2GB.
...
#rb Sebastien.Hillaire
#rnx
#preflight 63f74973b91d7b0a122429cd
[CL 24386923 by tim doerries in ue5-main branch]
2023-02-23 14:53:04 -05:00
tim doerries
5f1e71bd18
Implemented first version of mip maps for SparseVolumeTextures. Each mip is currently an individual SVT structure/proxy. Mip generation is currently done on import; this will be moved to cooking in a later CL. Much of the OpenVDB->SVT conversion logic has been moved into SparseVolumeTexture.cpp, decoupling it from the vdb library. OpenVDBUtility.cpp now only implements an interface for querying data from the source file. The SVT preview received a few fixes for issues that became apparent when trying to visualize low res mips (Can't early out if the packed page table result is 0 when no null tile exists; ray stepping needs to be done after volume sampling in order to not miss voxels; sampling needs to be guarded by checking against the virtual volume resolution).
...
#rb Sebastien.Hillaire
#rnx
#preflight 63f5d9b2ac06ce789f025459
[CL 24360541 by tim doerries in ue5-main branch]
2023-02-22 09:39:24 -05:00
tim doerries
ed3cc7ae76
Import of .vdb sequences for SparseVolumeTextures now uses multithreading to parallelize per-frame processing. Fixed background/fallback values always being zero, even if the value specified in the source .vdb file is non-zero.
...
#rb Sebastien.Hillaire
#rnx
#preflight 63ed0cf5205b5ccbc71dc82e
[CL 24258199 by tim doerries in ue5-main branch]
2023-02-16 10:42:36 -05:00
tim doerries
7f260f4daa
Implemented first version of streaming for SparseVolumeTextures. Fixed PostEditChange() being called twice on newly imported SVT. Small refactors on UStreamableSVT, UStaticSVT and UAnimatedSVT.
...
#rb Sebastien.Hillaire
#rnx
#preflight 63dd2dcf4d25c400b7b7cfaa
[CL 24047693 by tim doerries in ue5-main branch]
2023-02-07 08:59:18 -05:00
tim doerries
2bd647ec10
Switched SparseVolumeTextures to new DDC API. Also introduced UStreamableSparseVolumeTexture as new base class for static and animated SVT classes. This is in preparation for streaming and also to clean up and deduplicate some code that could be shared. Fixed missing call to ExpandVolumeBounds() when importing an animated SVT.
...
#rb Sebastien.Hillaire
#rnx
#preflight 63d9528a65738ba951d804a8
[CL 23945941 by tim doerries in ue5-main branch]
2023-02-01 06:20:15 -05:00
tim doerries
1ca91d6ea2
SVT uassets now no longer store the original vdb file. Conversion now happens during import, giving the user a progress bar instead of just blocking the editor on PostLoad() when the derived data was generated. Also renamed "PackedData" to "Attributes".
...
#rnx
#preflight 63d7f61031334253e5ff28c4
[CL 23923279 by tim doerries in ue5-main branch]
2023-01-31 01:11:48 -05:00
tim doerries
f997163b17
Animated SparseVolumeTextures can now be sampled in material graphs. This is done by using a UAnimatedSparseVolumeTextureController to control animation playback. Every tick, updating this controller returns a UAnimatedSparseVolumeTextureFrame that contains the current frame to sample. This frame can then be set as a SVT parameter on a MID.
...
#rb Sebastien.Hillaire
#rnx
#preflight 63d179096a14d8406d707c0a
[CL 23922325 by tim doerries in ue5-main branch]
2023-01-31 00:53:46 -05:00
tim doerries
9dc9439611
OpenVDB import dialog now uses a proper table/list view for displaying grid info and sets the "Import as Sequence" checkbox automatically. Improved the algorithm for finding files belonging to a sequence. Also did some slight refactoring, moving out some logic of the SOpenVDBImportWindow class into the factory.
...
#rnx
#preflight 63d3cabdba4fadeef0f87ab4
[CL 23909326 by tim doerries in ue5-main branch]
2023-01-30 11:48:00 -05:00
tim doerries
b57be03128
Implemented support for importing animated OpenVDB sequences using the new import dialog. SVTViewerComponent can now properly play back animated SVT. Fixed warped looking artifact when raymarching non-cubic SVT volumes. Fixed SVT cooking not working. Slightly restructured and cleaned up SparseVolumeTexture.cpp and SparseVolumeTextureOpenVDBUtility.cpp. Also refactored SparseVolumeTextureFactory to share as much code as possible between static and animated SVT, now that they both use the same import UI.
...
#rb Sebastien.Hillaire
#rnx
#preflight 63cad658fa66be4cc340b00e
[CL 23843563 by tim doerries in ue5-main branch]
2023-01-24 21:44:51 -05:00
tim doerries
4dd6dc0c2d
Added second float4/PackedDataB to SparseVolumeTextures.
...
#rb Sebastien.Hillaire
#rnx
#preflight 63bddd32d862fdd3470c2a02
[CL 23658523 by tim doerries in ue5-main branch]
2023-01-11 20:56:20 -05:00
tim doerries
88b2dcae6b
Implemented support for importing additional OpenVDB grid types (multi-component Float and Double). Also refactored some related functions and added a display of all the grids present in the source file to the import dialog.
...
#rb Sebastien.Hillaire
#rnx
#preflight 63b6cc53592c1a9d7cf1fe65
[CL 23632643 by tim doerries in ue5-main branch]
2023-01-10 15:51:23 -05:00
tim doerries
07c6b6526f
Reworked OpenVDB import dialog to allow for combining source grids into different channels of the resulting page atlas. Also now supports three different formats (32bit float, 16bit float, 8bit unorm).
...
#rb Sebastien.Hillaire
#rnx
#preflight 6388fa994c3ce8ae5dc059d0
[CL 23367549 by tim doerries in ue5-main branch]
2022-12-01 19:25:56 -05:00
tim doerries
84d2de5fbc
Implemented first version of OpenVDB import dialog.
...
#rb Sebastien.Hillaire
#rnx
#preflight 638668bdb21cdd3a266f335d
[CL 23338862 by tim doerries in ue5-main branch]
2022-11-30 15:06:09 -05:00
tim doerries
5fd9a992ec
SparseVolumeTexture asset now stores the source file and cooks using that source file instead of data generated during the import.
...
#rb Sebastien.Hillaire
#rnx
#preflight 6380ba724004f73f62bf4ad7
[CL 23265965 by tim doerries in ue5-main branch]
2022-11-25 09:18:31 -05:00
sebastien hillaire
90505548ba
Fixes for static analysis issues in ue5 main.
...
#rb none
[FYI] Marc.Audy
[CL 22577393 by sebastien hillaire in ue5-main branch]
2022-10-17 16:42:17 -04:00
sebastien hillaire
a831062e45
Sparse volumetexture initial commit.
...
Sparse Volume Texture asset from imported OpenVDB (only a single float channel for now). Static or animated sequence.
It will be possible to generate SVT at runtime from GPU later.
Using FEditorBulkData for handling raw source without loading everything when not caching or cooking.
BulkData used at runtime for loading. No streaming yet.
Importer with dependency on OpenVDB is in a SparseVolumeTexture module only loaded when in editor
Sparse volume texture can be sampled from any materials (sample, sample parameter) and overridden on material instance and material instance dynamic.
Added support for uint in compiler (fetch from page table, see SparseVolumeTextureGetVoxelCoord)
Volume texture with u8 VirtualTextureLayerIndex!=255 (INDEX_NONE) are sparse texture. The layer index then represent what texture/attribute to sample.
#preflight https://horde.devtools.epicgames.com/job/6346a466f93be0f6345af86c
#rb Patrick.Kelly, Charles.deRousiers
[CL 22551963 by sebastien hillaire in ue5-main branch]
2022-10-16 02:28:34 -04:00