Skip to content

Edyn 1.3.0

Latest
Compare
Choose a tag to compare
@xissburg xissburg released this 08 Dec 16:39

Welcome to Edyn 1.3.0! This release includes many improvements to the networking aspect of the engine along with the implementation of some missing features and performance improvements.
As part of this release, the vehicle simulation extensions used in Exhibition of Speed have been made open source. You can find the code in the exh branch. This includes constraints for double wish bone suspensions, differentials, CV joints, antiroll bars and tie rods, tire carcass and contact patch simulation.

What's new:

  • Upgrade to EnTT 3.14.0
  • Network assets enable preparation of content to be displayed when a remote entity enters the client's AABB of interest.
  • Child entities are replicated together with their parent in the simulation worker and via the network.
  • Functions to remove and clear collision exclusions (edyn::remove_collision_exclusion and edyn::clear_collision_exclusion).
  • Rotation matrix functions.
  • Init/deinit callbacks that are invoked in the simulation worker when it starts/finishes. Useful to prepare the registry before the simulation starts, such as assigning context variables to the registry which will be needed in the pre-step callback.
  • Perform entity mappings in associative containers (std::map, std::unordered_map) via entt::meta thus allowing components containing such containers to be correctly shared with the simulation worker.
  • Discontinuity decay is now exponential over time, thus not dependent on fixed_dt anymore.
  • External task system. Optionally replace edyn::job_dispatcher with a task system such as EnkiTS or TaskFlow, or your own engine's task system.
  • Provide a custom thread to run the simulation worker, thus edyn will not start any internal threads.
  • Functions to load OBJ from string.
  • edyn::vector3::each function.
  • Assign a custom time function.
  • Hinge constraint target speed and torque.
  • AABB::size function.
  • Allow shapes to be changed while the simulation runs using edyn::rigidbody_set_shape.
  • Change rigid body kind (dynamic, kinematic, static) during run time using edyn::rigidbody_set_kind.
  • edyn::clear_rigidbody destroys a rigid body without destroying the entity.
  • Listen to trimesh page load events.

Improvements:

  • Persistence of entities and components in the extrapolation worker. It used to create everything from scratch before each extrapolation and destroy everything at the end.
  • Extrapolation result is sent directly to simulation worker. It used to be sent to the main thread which would then redirect it to the worker.
  • Ensure full coverage of disabled_tag support.
  • Use a bounded queue for extrapolation requests to avoid ignoring extrapolations and at the same time prevent overwhelming the extrapolator.
  • Share action history among clients. This improves extrapolation in a situation where clients A and B have low latency and client C has high latency thus making the playout delay high for all three, but A and B will have each other's extended action history which will be used during extrapolation.
  • Separate callbacks for the extrapolator (init, deinit, begin, end, pre-step, post-step). Allows different (generally simpler) logic to be applied during extrapolation.
  • Improve edge-edge SAT performance using the Gauss Map.
  • Exclude static entities from AABB updates and rotated mesh updates.
  • Use adjacency information to optimize calculation of polyhedron support point calculation.
  • Triangle mesh thickness parameter helps mitigate ghost collisions in sections where the mesh has opposing faces near each other such as walls.

Fixes:

  • Visual jitter in the presentation transforms.
  • Wrong sign inedyn::to_quaternion.
  • Fix raycasting for cylinders with a coordinate axis other than x.