1. Neos VR
  2. News
  3. 2020.11.18.630 - Full cubemap support, Cubemap Creator, HP Reverb G2 bindings

2020.11.18.630 - Full cubemap support, Cubemap Creator, HP Reverb G2 bindings

Proper cubemap support is finally here! You can now create cubemaps in Neos using the Cubemap Creator and use them for skyboxes or point light cookies, with more to come soon (e.g. Reflection Probes).

I have generalized and extended Neos' texture system, spanning from the cloud asset metadata/variant system to the native GPU texture uploads to support for this. This means that Cubemaps are now loaded highly efficiently as standard 2D textures, using less CPU and memory and being uploaded using time-slicing, so even huge cubemaps won't stall the main thread.

Cubemaps are now also block compressed, heavily reducing their VRAM usage. E.g. for RGB skybox the memory usage goes down by factor of 8 (BC1, BC6H for HDR), in other cases by 4 (BC3, BC7) and are loaded progressively by mipmaps - you'll see lower resolution versions load as soon as they're downloaded/compressed, same as other textures.

There are a bunch of other related and unrelated additions and updates as usual. Notably this build adds initial support for HP Reverb G2 controllers, but it's untested as I don't have the headset yet. The upgraded Unity version might also fix some video-playback related crashes.

[h2]New Features:[/h2]
- Implemented native sliced cubemap GPU upload through DirectX 11 and OpenGL API, significantly improving its performance and memory usage
-- This also reduces freezes when loading a large cubemap, as the GPU upload is sliced over several frames
- Asset variant system now fully supports Cubemap textures, with all the block compression formats and progressive mip map loading
-- Crunch compression isn't currently supported, variants will only us eLZMA
- Added "Cubemap Creator" wizard (can be spawned by Create New -> Editor -> Cubemap Creator) which allows creating cubemaps from 6 face textures
-- It's strongly recommended to use textures of same size (square and power of two) and type to get consistent results, but the creator will try to conform them
- StaticCubemap now exposes same properties as StaticTexture2D, except NormalMap, Crunch compression and Wrap models
-- This includes filtering options (point, billinear, trillinear and anisotropic) as well as variant/format selection
-- The shared properties have been unified under the hood, making the code simpler and easier to maintain, as well as fixing some issues
- Added system for procedural Cubemaps
- Added "CheckerboardCubemap" procedural cubemap, which features simple checkerboard pattern (configurable size) with adjustable colors for each face
- Added BooleanReferenceDriver (requested by @Toxic_Cookie)
- Added CubemapLOD field to Projection360, which allows sampling specific LOD of the cubemap
- Added initial support for HP Reverb G2 (currently untested) (requested and models provided by @Cyro)

[h2]Tweaks:[/h2]
- Memory/VRAM usage for textures in inspector and on Texture2DAssetMetadata now includes mipmaps if they're present
- Texture2DAssetMetadata now also reports if the texture has mipmaps and how many levels it has
- Optimized cloud asset variant computation to reduce frequency of computation queue extensions, reducing the load on the cloud server
- Upgraded to Unity 2019.4.15f1 (from 2019.4.14f1)
-- This might potentially fix some crashes with video playback, as this version fixes crash when video player is destroyed while still initializing
- Renamed "Full Body Calibrator" to "Full Body / Avatar Calibrator" (based on suggestion from @DeliriousJax)

- Merged Polish locale additions (including MTC 2.0 tutorial) by @art0007i
- Merged Japanese, Esperanto and Chinese locale additions by @Melnus
- Merged German locale addition by @Bluigi
- Merged Russian locale updates by @Shadow Panther [RU/EN, UTC+3]
- Merged Setup Guide imperial unit example fix by @ProbablePrime (reported by @Hayden (PolyLogiX Studio))

[h2]Bugfixes:[/h2]
- Fixed cloud server exceptions when trying to extend asset variant computation task that has been removed in the meanwhile by another process
- Fixed bitmap metadata computation taking longer than necessary by not correctly breaking out early
- Fixed texture 90° CW and CCW rotations being swapped (reported by @Shadow Panther [RU/EN, UTC+3] and @H3BO3)
- Fixed asset removal events not always being sent properly, resulting in some assets lingering after their provider is removed
- Fixed reversed cubemap projection for Projection360 shader
- Fixed red grabbable laser showing up for grabbables with active GrabBlock in their parent hierarchy (reported by @Alex from Alaska)
- Fixed incorrect cubemap mipmap level conversion from Unity cubemaps to Neos in the Unity SDK (will be in the next SDK release)
- Fixed Neos not requesting cloud to compute metadata for assets if the metadata does not exist
- Fixed assets that fail to load not incrementing the loaded asset count, causing the loading indicator to stick around indefinitely (reported by @Enverex)
- Fixed desktop ignoring DuplicateBlock component (reported by @ChrisWarner103 (DelVR))
- Fixed GrabBlock not working when placed directly on the object with Grabbable (based on report by @ChrisWarner103 (DelVR))
- Fixed exceptions with certain configurations of PreferredFormat and other settings on StaticTexture2D