| 1.2.0 | |
| ------ | |
| - Improved collision against moving shapes, solver now correctly interpolates shape transforms for substeps | |
| - Improved Linux support, removed GLUT/GLEW dependencies | |
| - New API for adding soft-joints (dynamic shape-matching constraints) via. the extensions API, see NvFlexExtCreateSoftJoint() | |
| - New API to retrieve particle neighbor information, see NvFlexGetNeighbors() | |
| - New API to support shape collision filtering, collision channels can be assigned to particles and shapes to specify which pairs collide, see NvFlexPhase | |
| - New API to support per-shape plastic deformation, it is now possible to specify plastic creep and threshold coefficient on a per-shape basis (previous global settings), see NvFlexSetRigids() | |
| - New API to selectively disable solver features, this can lead to improved performance, see NvFlexFeatureMode, replaces global FlexParams::fluid option | |
| - New API to allow sub-range particle buffer updates, see NvFlexCopyDesc | |
| - New API for asynchronous compute, see NvFlexInitDesc | |
| - New API change, NvFlexUpdateTriangleMesh() now takes vertices with 16-byte stride to remove CPU synchronization step in D3D implementations | |
| - Fix for NvFlexParams::anisotropyScale, this change improves the fitting of ellipsoids to fluid particle distributions, it should now typically be left at 1.0 | |
| - Fix for NvFlexGetTimers() reporting incorrect values on D3D12 | |
| - Fix for vsync in D3D12 | |
| - Fix for crash when using Flex with NVIDIA driver 384.76 | |
| - Fix for unnecessary synchronization when calling NvFlexMap() on a device buffer | |
| - Fix numerical precision for shape-matching constraints with large coordinates | |
| - Fix for uninitialized contact indices returned from NvFlexGetContacts() if NvFlexUpdateSolver() has not been called | |
| - Fix for SDF collision in D3D12 | |
| - Fix for free after delete in CUDA when using SDFs | |
| - Fix for D3D warning when using NvFlexSetRigids() | |
| - Add D3D12 rendering support to the demo | |
| - Add support for device NvFlexBuffers on D3D | |
| - Enable NvToolkit profiling zones so to provide annotations in NSight profiles by default, this requires nvToolsExt64_1.dll be present | |
| 1.1.0 | |
| ----- | |
| - New API style, for consistency with other products the API has now an NvFlex prefix and follows a naming convention similar to PhysX | |
| - Add support for DirectX, in addition to CUDA there is now a cross platform DirectX 11 and 12 version of the Flex libraries that Windows applications can link against | |
| - Add support for max acceleration clamping, see NvFlexParams::maxAcceleration, can be useful to reduce popping with fast moving kinematic shapes and large interpenetration | |
| - Add support to querying compute device, see NvFlexGetDeviceName() | |
| - Add support for flushing compute queue, see NvFlexFlush() | |
| - Add support for multiple library instances, NvFlexInit() now returns a library which is bound to a single compute device | |
| - Add support for local space particle simulation, see NvFlexExtMovingFrameInit() and two new local space fluid and cloth demos | |
| - Add support for CUDA 8.0.44 | |
| - Remove NvFlexError enum, errors will be reported through the NvFlexErrorCallback passed to NvFlexInit() | |
| - Remove NvFlexMemory enum, users should use the new NvFlexBufferType | |
| - Fix bug in inflatable constraint solver that could cause some shapes to generate NaNs | |
| - Fix for SDF contact generation when the particle lies completely outside volume, fixes a problem with ghost contacts | |
| - Fix for friction being incorrectly applied on trigger shapes | |
| - Fix for multi-phase fluid cohesion not working correctly, re-enable Rayleigh-Taylor instability test | |
| - Fix bug with public projects that referenced internal CUDA paths | |
| - Fix for calling NvFlexSetInflatables() with a count of zero | |
| - Fix for buoyancy parameter | |
| - Fix for bug in BVH builder that could cause missed collisions | |
| - New optional NvFlexDevice library for handling GPU selection and initialization in CUDA | |
| - New buffer based API, all data must now be passed to Flex through FlexBuffers created through NvFlexAllocBuffer() | |
| - New stable shape matching code for more robust and efficient soft bodies, removes need for NvFlexParams::inertiaBias | |
| - New collision shape API supports instancing of convex meshes and a much simplified API, see NvFlexSetShapes() | |
| - Improvements to collision detection for moving shapes, Flex will now perform a CCD check also taking into account the shape trajectory using the prev/current transforms of each shape | |
| 1.0.0 | |
| ----- | |
| - Added support for reporting collision shape ids, and trigger volume shapes, see flexGetContacts() | |
| - Optimizations to host code performance | |
| - Fix for potential memory leak in SDF object destruction | |
| - Fix for potentially missed collisions during convex shape CCD | |
| - Fix for incorrect bounds computation during flexSetShapes() (if not specified by user) | |
| - Fix for initial shape translations being incorrect when using a transform with flexExtCreateInstance() | |
| - Move flexExt.h header to the /include folder | |
| 0.9.5 | |
| ----- | |
| - Fix for NaNs being generated during shape matching with plastic deformation enabled | |
| - Fix for bug that could lead to translational drifting of shape matched rigid bodies | |
| - Fix for incorrect interaction of restitution and friction when using the collision margin parameters | |
| - New geometry instancing API for specifying collision shapes, adds support for transformed triangle meshes and signed distance fields, see flexSetShapes() | |
| - New BVH based collision detection improves performance for scenes with large triangle meshes | |
| - New mesh tearing API, see flexExtTearClothMesh() | |
| - New CCD collision detection for particle versus convex shape, helps reduce tunneling with thin convexes | |
| - Performance improvements for soft body cooking times in flexExtCreateSoftFromMesh() | |
| - Exposed intertial bias for shape matching constraints, see FlexParams::mInertiaBias | |
| - Exposed parameter to control the lifetime of diffuse particles, see FlexParams::mDiffuseLifetime | |
| 0.9.0 | |
| ----- | |
| - Added support for soft bodies, particles can now belong to multiple shape-matching clusters used to drive linear blend skinning | |
| - Added support for particle rest positions that can be used to filter collisions between particles that touch in their rest pose, see flexSetRestPositions() | |
| - Added support for spheres and capsules as collision shapes, renamed flexSetConvexes() to flexSetShapes() | |
| - Added support for user callbacks, these can be used to implement custom constraints, force fields, etc. See flexRegisterSolverCallback() | |
| - Added support for the NVIDIA control panel, Flex will now use the selected PhysX device if desired, see flexInit() for details | |
| - Added support for Android platforms | |
| - Added flexGetParams() method to retrieve default values and set defaults to sensible values | |
| - Improved shape-matching algorithm with better inversion handling | |
| - Optimizations for flexSetTriangles(), users can now pass the triangle bounds to avoid having them re-calculated explicitly | |
| - Rigid constraints now use quaternions as their orientation representation, see flexSetRigids() and flexGetRigidTransforms() | |
| - Exposed anisotropy min/max clamping for better control of particle fluid rendering, see FlexParams::mAnisotropyMin and FlexParams::mAnisotropyMax | |
| - Fix for smooth particles not being generated if anisotropy was not enabled | |
| - Fix for demo mouse picking | |
| - Fix for flexGetContacts() returning incorrect values, added contact visualization to the demo app | |
| - Fix for bug in flexGetBounds() which meant it could return bounds with one frame delay, users should now synchronize the flexGetBounds() call like other query methods | |
| - Fix whitespace on flex.h to play nice with Github's code view | |
| - Fix for triangle mesh collision when particle moves in the plane of the triangle incorrectly reporting contact | |
| - Fix leak when destroying solver | |
| - Fix for incomplete initialization of FlexExtAssets in the extension creation methods | |
| - Rename FlexParams::mMaxVelocity -> FlexParams::mMaxSpeed | |
| 0.8.0 | |
| ----- | |
| - Upgrade to CUDA 7.0 | |
| - Linux binaries are now compiled with -fPIC | |
| - Fix for extensions library not writing velocities correctly | |
| - Fix for memory leak when using moving convex shapes | |
| - Optimizations for inflatable constraints to reduce number of kernel launches | |
| - Added option to control the max number of neighbors stored per-particle, this can reduce memory usage, see flexCreateSolver() | |
| 0.2.5 | |
| ----- | |
| - Fix for vertex normal calculation when using sparse active particle set | |
| - Fix for division by zero in rest density calculation when fluid rest distance was 0.0 | |
| - Fix for infinite mass particles being moved by kinematic objects | |
| - Added CUDA force fields to extensions library, see flexExtSetForceFields() | |
| - Added particle contact reporting API, see flexGetContacts() | |
| - Added early out to avoid Laplacian smoothing and anisotropy calculation if not using them | |
| - Added global damping parameter to model viscous drag on particles (not just cloth), see FlexParams::mDamping | |
| - Added user manual in pdf and chm formats | |
| - Made enum names consistent, eFlexHost -> eFlexMemoryHost | |
| - Upgraded to CUB 1.3.2 | |
| - Extended particle phase parameters to allow fine grained control over self-collision and fluid properties, see flexMakePhase() | |
| 0.2.3 | |
| ----- | |
| - Switched to bindless textures, 50% reduction in CPU usage, because of this change Flex now requires an SM3.0 or above GPU | |
| - Optimized convex grid rasterization by assigning 4 warps/shape, reduces time from 1ms->0.25ms for large shapes | |
| - Added error mesasge callback, see flexInit() | |
| - Added flexSetFence()/flexWaitFence() for more fine grained synchronization with Flex GPU work, flexSynchronize() has been removed | |
| - Added static/dynamic flags for convex shapes to allow prioritising static contacts over dynamic, can be useful to prevent tunnelling through thin shapes | |
| - Added local/global relaxation to improve convergence for some scenes (see FlexParams::eRelaxationMode) | |
| - Removed flexGetVorticities(), allows optimizations for vorticity confinement calculation | |
| - Fix for flexSetSprings(), flexSetTriangles(), and flexSetConvexes() reallocing more often than necessary | |
| - Fix for flexGetDensities(), and flexGetAnisotropy() not returning the full particle array if using sparse active set | |
| - Fix for memory leak when instance creation fails in flexExtCreateInstance() | |
| - Fix for memory leak when setting rigid bodies multiple times | |
| - Fix for potential GPU crash when using plastic deformation on rigid bodies | |
| - Smooth vertex normals are now computed for particles belonging to dynamic triangles (cloth), they can be retrieved via flexGetNormals() | |
| - Optimized CompactObjects in flexExtPushToDevice() | |
| - Made headers compile with /W4 on MSVC | |
| - Added debug capture functionality | |
| 0.2.2 | |
| ----- | |
| - Fix for infinite mass particles gaining velocity during collisions | |
| - Fix bug with planar triangle mesh rasterization | |
| - Fix for zero-length distance constraints | |
| - Fix cloth drag and lift causing instability at high velocities | |
| - Fix for convex grid perf. when there is a single large convex body | |
| - Improved behaviour when particles are overconstrained (constraint averaging), can reduce jitter for pinned cloth | |
| - Improved adhesion behaviour for fluids against solids | |
| - Improved restitution behavior | |
| - Improved fluid rendering performance by using a smaller bilateral filter kernel | |
| - Change particle friction to be an absolute parameter instead of a multiplier on dynamic friction | |
| - Change sort to use async device-device memcpys to avoid stalling host | |
| - Exposed new parameter to control collision margin against shapes see FlexParams::mShapeCollisionMargin | |
| - Warning fixes for Linux and Windows | |
| - Fix z-precision rendering issues in demo | |
| - Added "Ext" prefix to extensions types | |
| - Clamp particle velocity to maximum user velocity before prediction step, improves behaviour when interacting with force fields | |
| 0.2.1 | |
| ----- | |
| - Add support for lower dimensional particle rigid bodies (rods, planes) | |
| - Allow specifying rigid rotations through the solver API | |
| - Allow separate control of fluid and solid rest distances | |
| - Add GUI to demo | |
| 0.2.0 | |
| ----- | |
| - Fix for rest density calculation when number of neighbors > than max | |
| - Add support for async memory copies back to pinned host memory | |
| - Add functions to allocate pinned host memory, see flexAlloc() | |
| - Add rigid body support to FlexExtensions | |
| - Add rigid body SDF collision support | |
| - Add position level friction | |
| - Static triangle grid now created on the GPU, see flexSetTriangles | |
| - Unify triangle collision with rest of the pipline | |
| - Exposed a new parameter to run a second collision pass against triangle meshes, see FlexParam::mEnableCCD | |
| - Optimized rigid body solve using CUB parallel reductions | |
| - Fix for solve springs when some particles have infinite mass | |
| - Reduce allocations in flexSetConvexes | |
| - Fix plastic deformation for rigids | |
| - Switch to /MT for FlexExtensions library | |
| 0.1.0 | |
| ----- | |
| Initial release | |