Releases: bryanedds/Nu
Engine bug fixes and fluid physics improvements.
Thanks specifically to @Happypig375 for very many of the contributions this release!
- Partial implementation of #1350.
- Set minimum restitution threshold to 1 virtual-pixel/s
- Fix when starting songs past their duration.
- Fixed predecode specification.
- Using Copilot to make the fluid implementation follow upstream more consistently.
- Fixed #1355.
- Merge branch 'fluid-update'.
- Updated some dependencies.
- Fix #1361.
- Rewrote controls for FluidSim and use Feeler
- ImSim naming fixes.
- Fixed #1360.
- Added missing opengl buffer deletion.
- Added BodyId to BodyTransformData since it appears to have no trade-offs.
- Reduced cutoff on Gaia menu bar at 1080p.
- Added what appear to be missing checks for entity dispatcher RegisterPhysics.
- Attempting to clean-up confused and potentially out-of-order code in registerEntityPhysics.
- Added missing default value for OverflowAbsolute.
- Added more error detail to missing non-entity property access.
- Fixed GPU hang in SSRL shader function on Intel Arc.
- Minor Nu code dependency re-org.
- Decreased ChromaticAberrationChannelOffsetsDefault values to something more sensible.
Full Changelog: v19.17.0...v19.18.0
Stability Release + Intel Arc 3D Rendering Fixes
This is just a stability release with fixes for current behavior as well as for upcoming support for Mac and Android platforms -
- Fixed duplicated ImGui labels in EntityHierarchy search.
- Fixed incorrect read order of width and height in .KTX(1) file.
- Changed means of ensuring Nu.Pipe is built before building Nu projects.
- Applied KTX hot-fix from vulkan here as well.
- Fixed incorrect bit offset of geometry hash code
- Giving full paths to SDL file loads since it doesn't necessarily understand relative paths on all platforms.
- Fixed significant OpenGL issue where not all attachment fragments weren't being written.
- Fixed a strange Intel Arc rendering bug.
- Added Mac ARM assimp dependency.
- Flipped ASTC pixel format.
- Giving raw scroll travel to ImGui as an attempt to fix seeming inverted scroll on Mac.
- Added Mac ARM build of libbulletc.
- Writing uncompressed ktx files out as BGRA.
- Added logging to texture server thread failure.
- Normalized size of default border asset.
- Fixed issue where only the primary display mode was being detected in resolution calculation at start-up.
Full Changelog: v19.16.0...v19.17.0
Nu upgraded to SDL3!
This release is primarily about @Happypig375's update of SDL2 to SDL3!
Additionally, we've added opt-in support for ASTC compression via KTX images for our upcoming support of Mac, iOS, and Android via the vulkan branch.
The other perhaps interesting thing is that we've now got Devin tweaked just enough to make its auto-generated wiki potentially useful in practice, which you can find here -
Changed in Detail -
- BREAKING CHANGE: Removed SDL2-CS from projects. You will need to remove this from your user fsproj as well!
- Merge pull request #1323 [from Happypig375/patch-58]
- No longer serializing EditWhileAdvancing in Gaia to reduce confusion.
- Fixed ImGui name conflict.
- Merged sdl3.
- Removed no longer necessary SDL install scripting.
- Removed no longer useful solution build scripts.
- Added support for ASTC compression format via KTX.
- Fixed explicit property appending for other simulants.
- Updated Prime with fix for #1335.
- BREAKING CHANGE: Renamed lens (<--) operator to (<~).
- Added Devin wiki generation Nu-specific instructions.
Full Changelog: v19.15.0...v19.16.0
2D KinematicCharacter support via Box2dNetPhysics!
Similar to Box2D, we have implemented our own version of its character mover controller -
*image from https://box2d.org/documentation/md_character.html*
Beyond that, there's some important breaking changes to look into as well as minor fixes and general engine improvements.
Changes in detail -
- Implement 'pogo-style' character physics for Box2dNetPhysicsEngine (thanks to @Happypig375).
- Use sfml-box2d-fluid as new fluid emitter implementation for Box2dNet (thanks to @Happypig375).
- BREAKING CHANGE - Put Sovereign prefix as suffix for consistency.
- Introduced EventTracer type for conceptual clarity.
- Embedded protection state into Flags as masks for efficiency.
- Updated FCS for new VS.
- Set ShadowDisplayScalarMax to 3 to preserve performance above 1080p (this allows Nu games to run at 4k / 60fps more reliably).
- Make Sand Box 2d avatar's right direction depend on gravity (thx @Happypig375).
- BREAKING CHANGE: Renamed primitive physics dispatchers to use "BallBodyXxx, BlockBodyXxx, etc.
- Merge pull request #1305 [from Happypig375/patch-59.
- Ripped out the old, poorly-working fluid stuff from Aether physics.
- BREAKING CHANGE: just realized that CharacterProperties becoming a union changes the data format...
- Implemented OverflowAbsolute entity property.
- Tuned SSAO defaults.
- Fixed regression where double-clicking entity in hierarchy doesn't orient eye to view of entity.
- Implemented sentinel simulant behavior.
- Gaia eval fix when accessing SelectedEntityOpt when none is selected.
- Changed Lens.Set to warnOnce instead of fail with readonly in line with new sentinel behavior.
- BREAKING CHANGE: renamed Flip cases and JustifyH/V unions for consistency.
- Ensuring that dispatcher-specific properties are always listed first in Gaia.
- Fixed issue where dispatcher without their own properties do not get AppendProperties applied.
- Removed light box concept that didn't really make sense.
- Add GetFluidGrounded (thx @Happypig375).
Full Changelog: v19.14.0...v19.15.0
Fixes and minor enhancements.
Not much happening this release other than our new dual-licensing format - https://github.com/bryanedds/Nu/wiki/Nu-Game-Engine-Dual-Licensing
We did begin work on the new Block Editor feature that will allow you to paint 3D architecture in a manner as simply as drawing tiles in a tile map. While some of those types have landed in master, it's still in experimental development and not ready for use yet.
There is one data-breaking change you'll notice when pulling - the DirectionalLight type is now a complex union, so you will need to manually replace DirectionalLight to [DirectionalLight 0] in your .nugroup files where applicable. Otherwise, you'll get a parse exception.
Changed in detail -
- Fix lack of eye change during ImGui edit callbacks.
- Renamed Protected flag to Protection and made a DU to allow for more nuanced semantics / user control.
- SDL sound playback fix (was setting chunk volume rather than channel volume).
- Fixed bug in ImSim.Game template where game is always advancing outside Gameplay screen.
- Nu.fsproj fix on Linux.
- Fixed DirectionalLight entries in default scene groups.
- Created Sand Box 3d for testing block editor and other 3d stuff later.
- Local and global mouse capture on ViewManipulate hover.
- Made integer boxes specify containment explicitly since it can be ambiguous.
- Fixed #1243.
- Reduced initial size of timeline window in Gaia.
- Using depth test less than for rendering speed.
- Update licensing terms and notices in code.
- Add dual-licensing model section to ReadMe.md.
- Added manipulation frame selection and toggleable in Gaia with 'm' key.
- More sensible default for LightShadowDensity.
- Fixed directional light offseting.
- BREAKING CHANGE - added field to DirectionalLight signifying the offset of the shadow volume from eye.
- Polling in perma-frozen entity hierarchies so windows doesn't eco-hang loading applications.
- Polling while writing entities as well.
- Also polling when loading metadata packages.
- Direct exposure of EditContextOpt via World API.
- Changed SsvfAsymmetryDefault to a more realistic and usable default.
- Fix #1286.
- Made directional light origins stay at eye center and do shadow texel snapping automatically.
Full Changelog: v19.13.0...v19.14.0
Rendering optimization allowing for high-detail rendering targeting older hardware + Fixes!
Mostly just some rendering optimization here to allow AAA-style games like Project 5 to run smoothly on RTX 2060 at 1080p with VRR, matching the performance in the same scene as Unreal. Otherwise, just some typical fixes for minor bugs and regressions.
Important changes -
- Made Color type support comparison.
- Added DynamicShadows flag to lights to optimize lights that only need static shadows.
- Fixed regression where model assets couldn't be reloaded.
- Fixed lighting performance bug.
- Reworked some Math operator naming.
- Inlines Lens module methods and applied doc comments.
- Fixed another minor rendering performance bug.
- Also decreasing channels of shadow filter buffers.
- Fixed likely rendering perf bug.
- Removed unnecessary depth and stencil from cascade filter buffers.
- Moved volumetric fog accumulation out to its own shader to solve #1273
- Reverted name of Plane3 in order to fix hot code reload issue.
- Updated F#.Core and FCS.
- Implemented #1276
- Reduced number of gaussian taps for performance and to sharpen shadows edges.
- Fixed #1272
- Fixed too high mip textures coming in as minimal.
- Fix #1281
Full Changelog: v19.12.0...v19.13.0
Asset memory footprint optimizations + more!
Not a ton of exciting stuff this time really, but a small amount of very important improvements -
Project 5's total occupied .MET memory footprint (Heap Size) was reduced by 90% just by deduplicating assets shared among subsystems and removing unused Assimp animation data.
Important changes -
- Refactor FocalType as struct union.
- Increased FarPlaneDistanceExterior to match what works well in Project 5 (640.0f).
- Allowed GameTime.equals to work with mixed GameTimes.
- Added more general mouse events.
- Added Wedge operators.
- Made simulants protected only when they are created by declarative APIs.
- Now embedding player dispatchers in their scenes so that existence checks for them are unnecessary.
- Deduplicated assimp scenes in memory across subsystems.
- Clear unused animation attachment data.
- Magick.NET-Q8-AnyCPU 14.10.1 update.
- Update DotRecast.Recast.Toolset to 2026.1.1.
- Rename Plane3 to Plane.
- Changed Particle and Effect calculations to be based on double fp calculations.
- Converted Behaviors to use double calculations.
Full Changelog: v19.11.0...v19.12.0
Better property categorization in Gaia; Improved Depth of Field!
New property categorization feature (see right hand side) thanks to @Happypig375!
Depth of Field improvements!
Overview of Changes -
- Add type constraints to generic Has and Is methods.
- Only setting Fixture.IsSensor when it's true to avoid a cascade of undesired interal behavior when it's false.
- Removed unusable BodyProperties.Awake flag.
- Did facet and entity dispatcher TODOs by using reflection instead of hard-coding ctors.
- Reduced duplication of target framework specification strings.
- Make Box2D.NET types debuggable
- Fixed ImSim group 'renaming' bug in Gaia code.
- Categorize by facet and dispatcher name instead of "Xtension Properties'.
- Fixed #1253.
- Fixed #1228.
- Fixed #1254.
- Added modal guard to fix #1255.
- Fixed distance fog color not showing up in linear fog setting.
- Reduced default ssvf steps and ssao sample count to save a bit of perf.
- Made ssvf work without shadows.
- Fixed #1258.
- Fixed unintended compression of sky box faces.
- Attempting to reduce allocation in entity hierarchy.
- Fixed outdated tiff paths.
- Updated Jolt wrapper.
- Fixed #1261.
- Fixed #1259.
- Improved DOF blur with off-geometry blurring.
Full Changelog: v19.10.0...v19.11.0
Clear Coat, Depth of Field, Chromatic Aberration and Upgrade to .NET 10!
New Clear Coat Rendering!
New Depth of Field Rendering!
New Chromatic Aberration Rendering!
Also, we've gone ahead and upgraded Nu entirely to .NET 10, affording us increased usability and performance! Be sure to update your user projects when updating the engine!
Additional Changes -
- Made SSVF intensity the first SSVF light config value for consistency.
- Added clear coat rendering effect.
- Now also mixing roughness in env filter.
- Placed fxaa between tone mapping and gamma correction.
- Clamping specular values to ensure they remain usable and ensure computability.
- Fixed #1222.
- Only show loadable DLLs in file picker (thanks to @Happypig375).
- Add project selection dropdown (thanks to @Happypig375).
- Added chromatic aberration effect.
- Implement fluid capsule collision for Box2dNetPhysicsEngine
- Implemented depth of field shading.
- Reverted back to old FXAA shader since I come to find out there new one doesn't have the intended effect.
- Fixed potential NaN results.
- Now that FXAA doesn't include gaussian blur, on by default.
- Exposed FXAA uniforms to Gaia.
- Fixed overlooked VehiclePropertiesBox2d naming.
- Respect light equilibrium by not blooming in light maps.
- Ensuring that FXXA is using a linearly filtered texture buffer.
- Providing per-surface subsurface cutoff parameters.
- SubsurfaceCutoffDefault adjustment.
- Saved some shadow map bandwidth and footprint.
- Optimized away SSS in fragments when NoScatter.
- Merge pull request #1227 [from Happypig375/patch-47]
- Promoted tile set width log from info to warn for visibility
- Add unary operators to GameTime and improved API
- Updated to VS2026 and .NET 10.
Full Changelog: v19.9.0...v19.10.0
General Fixes + Improvements
Video of this scene here -
https://github.com/bryanedds/Nu/releases/download/v19.9.0/Cold.Morning.Flythrough.mkv
Important Changes -
- BREAKING: Renamed Gravity.Gravity to Gravity.GravityOverride.
- Renamed 'global fog' concept to 'distance fog' (no breaking changes tho).
- Fixed custom gravity accumulating velocity when grounded in JoltPhysics.
- Fixed #1209.
- Waking joint bodies on joint commands in Box2dNet.
- Now creating 2D physics engine dependencies via NuPlugin factory methods instead of App.config.
- Introduced Box2dNetFixPenetrationMessageFrame flag for fixing penetration timing.
- Fixed #1208.
- Implemented #751.
- Fixed unnecessary exceptions.
- Implemented #1212 [with preliminary icons.
- Implemented #1211 + distance parameterization.
- Implemented #966.
- Removed cone angle caps on spot lights.
- .NET 10 compile fixes (for when we move to .NET 10).
- Added creation controls to assets.
- BREAKING: Added flag to SetMountOptWithAdjustment to make mount non-change behavior explicit.
- Partial implementation of #383.
- Increased shadow map maxes from 9 each to 12 each.
- Constraining FOV value in Gaia to avoid exceptions.
- Change slider grab visuals to stop obscuring slider values in Gaia.
- Implemented #1215.
- Implemented #819 and #1065.
Full Changelog: v19.8.0...v19.9.0