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
andedyn::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
) viaentt::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 in
edyn::to_quaternion
. - Fix raycasting for cylinders with a coordinate axis other than x.