Releases: bryanedds/Nu
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
Box2D.NET physics integration and enhancements!
Thanks again to @Happypig375, we now have Box2D.NET physics integration! You can select this as an alternative physics engine to Aether via the <add key="PhysicsEngine2d" value="Box2dNet" /> App.config entry.
However, there are some important breaking changes that might affect your serialized Nu scenes, specifically -
- GravityOverride has been renamed to Gravity and its type changed to the new Gravity DU type.
- BreakingPoint has been renamed to BreakingPointOpt.
- Joint API has removed the OneBodyJoint cases and simplified.
- Removed GetFluidParticleCellColor property.
Otherwise, we've mostly solidified the engine with minor fixes and enhancements.
Important Changes -
- Depend ground direction on gravity (when exists) or down direction relative to rotation.
- Preventing duplicate texture loading for non-dds textures in 3D.
- Exposed deferred ImGui calls via
World.defer...API. - Exposed analog controller input (#352).
- Fix normal vector in FluidEmitterMessage.
- Updated various dependencies.
- Using modern randomization methods in Gen.
- Added 2D right-up variants.
- Ability to opt-out of synchronous logging via LogSynchronously config.
- Proper editing for Justification property (#1190).
- Proper editing for FontStyling as well.
- Increased shadow texture limits to 9 for shadow textures and maps.
- Removed Release optimization that could result in NRE's in normal Nu operations.
- Plug in logging for various native dependencies.
- Implemented Gaia layout reset (#1058).
- Using imperative accumulation to enhance tile map tile placement precision.
- Fixed regression in position3dToPosition2d and otherwise.
- Added warn when render asset is unavilable.
- Added Box2dNetPhysicsEngine
- Make Nu.Math up to date with current .NET.
- Fixed job graph regression.
- Reverted character 2d changes (removed special gravity handling).
- Implemented frame stepping in Gaia via Step button.
- Fixed #1201.
- Put shadow textures in a sampler2DArray.
- No longer needlessly adding omnipresent elements to nodes (optimization).
- Fixed BreakingPoint naming (Opt suffix required).
Full Changelog: v19.7.0...v19.8.0
Specular Anti-Aliasing + Fluid Simulation in PhysicsEngine2d + Bug Fixes
- Implemented #1156
- LiquidSim
- Got rid of focused flag on styling.
- WIP edge and chain collision implementation
- Renamed isButtonClicked to isButtonReleased.
- Added Gravity2d/3d change events.
- Add key released detection functions.
- Applied burley diffusion term for more 'even' lighting.
- Normalizing when sampling from 16-bit color normal texture.
- Reorthoganalizing tangent and binormal in shaders.
- Integrate fluid simlator inside physics subsystem.
- More standard karis avg impl.
- Support tags and gravity overrides in particles
- Made Fluid.png a default asset.
- Implemented user-controlled exposure and tone-mapping controls.
- Using higher fidelity FXAA now.
- Workaround for particles exploding for low particle radius.
- Renamed Address.makeParent and makeCurrent to Address.parent and current, respectively.
- Implemented cursor handling as its own subsystem.
- Added CursorDispatcher.
- Added default cursor asset.
- Include all projects in asset propagation scripts so users do not need to edit them for their own projects.
- Fixed incorrect use of glsl out parameters.
- Fixed #1164
- Fixed #1168
- More terrain patches by default.
- Ignoring inferred attributes when all of them are marked as unimportant.
- Utilized AttributesInferred.unimportant on more dispatchers.
- Also checking for importance in autoBoundsEntity.
- Reexposed branchless functions on the basis of understanding their being fast post-JIT.
- Added branchless min and max for singles.
- Fixed 2D child entity Elevation getting stomped over by NewEntityElevation in Gaia.
- Adjust SSRR threshold for eyeDistanceFromPlane.
- Fixed jump box jump speed.
- Replaced over-specialized map and filter fluid particle functions with choose message.
- Removed inarticulate World.mapRenderer3dConfig function.
- Renamed set function to World.configureRenderer3d.
- Implemented specular anti-aliasing.
- Report out of bounds particles in FluidEmitterMessage
- Fixed invalidation issue when viewport changes but not display scalar.
- Fixed bordered viewport bugs.
- Fixed #1176
- Fixed #1173
- Remaining fix for #1056
Additional thanks to @Happypig375 for many of these!
Full Changelog: v19.6.0...v19.7.0
Screen Space Refraction + Bloom Post-Process + Sand Box 2D Demo + Editor Theme + Inset Viewport
Screen space refraction feature! -
Bloom post-processing! -
Sand Box 2D demo project thanks for @Happypig375! -
New editor theme! -
New inset viewport editing with F12! -
Changes in detail -
- Added Sand Box 2d physics demo project by @Happypig375
- Improved CSMs.
- Convenience API for use of quaternions in a 2D context.
- Make capsules respect rotation by @Happypig375
- Expanded directional light cull frustum in attempt to fix vol fog pop…
- Supporting rotation for 2d BoxShape.
- Using a pool of text texture ids.
- Added GcDebug for surfacing LOH churn.
- Recycling displaced render tasks in order to avoid thrashing LOH in o…
- Fixed incorrect use of X to specify angular velocity and torque (Z us…
- Fixed body ground detection in cases like standing on circles.
- Eliminated need for users to consolidate Nu dependency changes.
- Fixed text offset regression from recent text rasterization caching.
- Fixed World.EntitiesIndexed not getting updated with the new type key…
- Updated ReCast library.
- Implementing screen-space refraction.
- Renamed SSR to SSRF to disambiguate from SSRR (refraction).
- SSRF globally enabled by default.
- Applied ssrr intensity to ambient color.
- Updated Jolt Physics.
- Fixed #1141.
- Fixed #1143.
- Don't need to handle panel left mouse up in any case.
- Fixed missing layout refresh bugs.
- Swapped margin definitions of DockTop and DockBottom.
- Added missing presentation buffer destruction.
- Implemented bloom post-process (on by default).
- Disabling FXAA by default since bloom seems to do most of its job a b…
- Removed the Relation type, using relative Addresses instead.
- Swapped Address.resolve parameters. BREAKING CHANGE
- Ability to parse empty addresses to and from "[]" s-expr unit.
- Made "[]" the empty address (s-expr unit).
- Implemented exponential fogs.
- Fixed incorrect blit dimensions causing issues in light maps.
- Prevented density from being 0 for any Aether shape.
- GameTime-based interpolation for TraversalInterpolatedFacet by @Happypig375
- Made tile map and terrain collision detection type configurable.
- Removed dead type parameters is Signal methods.
- Added Assets folder inclusion to project files.
- Added missing WantCaptureKeyboardGlobal checks in WorldInputModule.
- Exposed API for joint target angle.
- Added operator to for non-reinitializing properties (|= for ImSim, != for MMCC).
- Fixed GameTime.ToString () implementation.
- Added do functions for non-entity simulants.
- Fixed mount opt bugs with minor architectural refactoring.
- Added some custom cimgui interop to access dock window size.
- Implemented non-overly mode where game view is insetted into center dock (toggle with F12).
- Applied styling to Gaia via ImThemes.
Full Changelog: v19.5.0...v19.6.0
Added 2D Physics Debug Drawing + Wax Scattering + Fixes!
- Fixed #1094
- Using a configurable constant value for spine skeleton scalar.
- Fixed inappropriate negation in Presence.DepthCutoff.
- Imposter DepthCutoff fix.
- Tuned animated surface ALBEDO_ALPHA_MIN to improve hair rendering.
- Add CI
- Cascaded shadows now showing up!
- Add AI Documentation section to ReadMe
- Found magic string to disable windows DPI.
- Merge pull request #1101
- Theta now <= ground angle max.
- Added missing constant configs.
- Merged csm branch with minor fixes.
- Fixed relative gui rendering.
- Updated Magick.NET.
- Simplified params of Quaternion.CreateLookAt.
- Formalized the meaning of a BodyShape being a primitive via IsPrimitive property.
- Logging opengl driver vendor name.
- Fixed imgui x to y operations.
- Physics Debug Rendering for 2D entities thanks to @Happypig375!
- Merge pull request #1116
- Merge pull request #1117
- Made imGuiCircles2dPlus radius match display.
- Merge pull request #1118
- Implemented terrain patches.
- Merge pull request #1119
- Add edge and contour shape to physics engine
- Manually merged some fixes from #1120
- Fixed 'TraversalInterpoledFacet' name typo.
- Exposed 2d physics converters via joint creation lambda.
- Added World.setGravity function.
- Added gravity accessor.
- Workaround what appears to be OpenGL driver bug on Linux AMD and Intel via Mesa.
- Added ClipOpt for 2D facets.
- Added back Log.warn to Quadtree when elements go out of bounds.
- Refactored physics methods for explicit 2d and 3d separation rather than using an is2d parameter.
- Implemented #1122
- Implemented FXAA filter toggle.
- Fixed TF attack handler bug.
- Fixed definition of DestroySpriteBatchEnv.
- Fixed forward shadow cast not invalidating properly.
- Implemented wax scattering.
- Reloading all shaders now in Gaia.
- Fixed sort priority constant bug.
- Applying proper physics / pixel conversion to joint breakpoints for 2d.
- Added ShapeCast API and majority of 3D implementation.
- Fix 2D raycast to convert between physics engine values and pixel values
- Merge pull request #1124
- Enabled recursive coroutines.
- Fixed #1050
- Made chain monad take world by capture.
- More precise discrimination in spatial queries.
- Merge pull request #1125
- Merge pull request #1127
Full Changelog: v19.4.0...v19.5.0