Havok 2014.1 – Release Notes
07 September, 2014
Common
Highlights (1)
-
[COM-2651] Changes to build configurations.
Havok for Windows Desktop now links against the dynamic Visual Studio C Runtime (CRT) by default.
The primary reason for this is that the static CRT is unsuited to applications that use DLLs and support dynamically-loaded plugins (which includes most modern game engines) because it forces a separate heap per DLL/plugin.
Other reasons include:
- Consistency across platforms - for example, Windows Store apps by design cannot use the static CRT. Static CRT use is declining generally with time.
- Applications are smaller and load faster - the C runtime library will generally be loaded in memory already, so the pages containing the library don’t have to be read from disk.
- CRT updates can be deployed without requiring and application rebuild.
As a result of this the following changes have been made to the build configurations for Windows Desktop:
- Release, Dev and Debug (which previously linked against the static CRT) are no longer shipped as standard
- Release Dll, Dev Dll, Debug Dll and Hybrid Dll have been renamed to Release, Dev, Debug and Hybrid respectively
Please note: If you have a technical requirement for libraries which link against the static Visual Studio CRT please contact your support representative.
Configuration changes for other platforms:
For increased consistency across platforms the following build configuration name changes have also been made:
Xbox One (Durango):
- Debug Dll -> Debug
- Dev Dll -> Dev
- Release Dll -> Release
Windows Store (Metro):
- Debug Dll -> Debug
- Dev Dll -> Dev
- Release Dll -> Release
Windows Phone (Apollo):
- Debug Dll -> Debug
- Dev Dll -> Dev
- Release Dll -> Release
iOS:
- Debug v7 -> Debug
- Dev v7 -> Dev
- Distrib v7 -> Distrib
- Release v7 -> Release
-
Improvements (16)
-
[COM-2522] Check bit range on hkBitField methods.
hkBitField now asserts that the index for methods such as get() and set() are between 0 and numBits-1.
-
[COM-2570] Improve Visual Debugger communication performance.
Communication with the Visual Debugger has been optimized resulting in improved performance for most viewers.
-
[COM-2574] Extend hkHardwareInfo to support CPU features detection at run-time.
hkHardwareInfo is now a singleton and exposes CPU features such as the SSE version supported.
Interface Change
-
[COM-2650] Platform/compiler name changes.
Platform names have had variable information removed so that they remain consistent from release to release. This means that linker library paths won't need to be updated each time you upgrade to a new version of the SDK. This change also affects platform-specific package names.
For example:
Old library path:
- Lib\ios_xcode_clang-4-2\release
New library path:
- Lib\ios_xcode\release
Old package name:
- Havok_2013-2-0_20130912_Common_ios_xcode_clang-4-2.zip
New package name:
- Havok_2013-2-0_20130912_Common_ios_xcode.zip
To see what SDK/toolchain was used to build a particular set of libraries please refer to Docs/PackageDetails/<PackageName>.txt -
[COM-2651] Changes to build configurations.
Havok for Windows Desktop now links against the dynamic Visual Studio C Runtime (CRT) by default.
The primary reason for this is that the static CRT is unsuited to applications that use DLLs and support dynamically-loaded plugins (which includes most modern game engines) because it forces a separate heap per DLL/plugin.
Other reasons include:
- Consistency across platforms - for example, Windows Store apps by design cannot use the static CRT. Static CRT use is declining generally with time.
- Applications are smaller and load faster - the C runtime library will generally be loaded in memory already, so the pages containing the library don’t have to be read from disk.
- CRT updates can be deployed without requiring and application rebuild.
As a result of this the following changes have been made to the build configurations for Windows Desktop:
- Release, Dev and Debug (which previously linked against the static CRT) are no longer shipped as standard
- Release Dll, Dev Dll, Debug Dll and Hybrid Dll have been renamed to Release, Dev, Debug and Hybrid respectively
Please note: If you have a technical requirement for libraries which link against the static Visual Studio CRT please contact your support representative.
Configuration changes for other platforms:
For increased consistency across platforms the following build configuration name changes have also been made:
Xbox One (Durango):
- Debug Dll -> Debug
- Dev Dll -> Dev
- Release Dll -> Release
Windows Store (Metro):
- Debug Dll -> Debug
- Dev Dll -> Dev
- Release Dll -> Release
Windows Phone (Apollo):
- Debug Dll -> Debug
- Dev Dll -> Dev
- Release Dll -> Release
iOS:
- Debug v7 -> Debug
- Dev v7 -> Dev
- Distrib v7 -> Distrib
- Release v7 -> Release -
[COM-7] Implement hkDisplayCapsule::getWireframeGeometry() and hkDisplaySphere::getWireframeGeometry().
The visual debugger protocol now supports an optimized description for wireframe capsules and spheres. This improves the performance of viewers which display these primitives.
-
[COM-708] Paired-float implementation of hkVector4Comparison on WiiU.
This has been optimized to use paired float instructions.
-
[COM-1996] Rename hkcdDistanceSegmentSegment to hkcdSegmentSegmentDistanceSquared.
hkcdDistanceSegmentSegment() was renamed to hkcdSegmentSegmentDistanceSquared(), to more accurately describe its output. a hkcdSegmentSegmentDistance() function was added which computes the (non-squared) distance.
Interface Change
-
[COM-2467] Add methods to hkTaskGraph to reserve array memory.
hkTaskGraph::reserve() was added. This calls hkArray::reserve() on the task and dependency arrays.
-
[COM-2470] Improve check determinism utility to work across DLL boundaries.
A define in the check determinsim utility now allows it to be used when called from different DLLs.
-
[COM-2499] Accumulate timer values before writing to the timer stream.
hkMonitorStream::MultiTimerCommand was added. This can accumulate multiple timer start/ends, reducing overhead and decreasing the likelihood of running out of timer buffer.
-
[COM-2515] Consolidate triangle-AABB intersection code.
hkcdParticleTriangleUtil, hclCollisionTriangles, and hkaiNavMeshUtils::triangleAabbCheck were replaced by hkcdIntersectAabbTriangle.
Interface Change
-
[COM-2539] hkRotation::getIdentity returns hkMatrix3.
A getIdentity() method has been added to hkRotation.
-
[COM-2541] Unnecessary compile time assert in hkVector4UtilImpl<FT>::setPermutation2.
A redundant check which could trigger a compiler's "condition is always true" has been removed from the SDK.
-
[COM-2549] Consolidate our ray vs triangle algorithms.
We consolidated all our different ray-triangle versions into a single new one:
- slightly faster than the old one
- will use a dynamically calculated tolerance so that rays never go through a closed mesh.
- allow for a user tolerance so that gaps inside a mesh will virtually be closed (like t-junctions).
- no consistent behavior can be expected if the ray start or end point is exactly on the surface of the meshInterface Change
-
[COM-2555] hkTask should be 16-byte aligned.
hkTask is now 16-byte aligned.
-
Fixes (13)
-
[COM-2518] 2013.2 Packfile loading broken in 2013.3.
* Fix the loading of packfiles written by the 2013.2 SDK. They have a bug where two fields are wrong in the packfile header and need to be fixed on load.
-
[COM-2597] Remove hkSerializeUtil::SAVE_TEXT_NUMBERS and SAVE_TEXT_FORMAT option for packfiles.
The SAVE_TEXT_NUMBERS option has been removed from the hkSerializeUtil save options. It had no effect for tagfiles and on platforms where printf/scanf are not inverses, could cause precision loss in packfiles. hkSerializeUtil::savePackfile will no longer save xml packfiles, the deprecated packfile writer can still be used if an xml packfile is required:
hkSerializeDeprecated::getInstance().saveXmlPackfile(&object, class, streamWriter, options, listener, errorDetails);Interface Change
-
[COM-2214] generateReflections.py fails for Source/Common/Base.
The Tools/Serialize/generateReflections.py script now runs successfully on the Source/Common/Base library, provided the separate HavokParser package (e.g. Havok_2014-1-0_20140618_HavokParser.zip) is also present.
-
[COM-2634] Leaking system resources when creating threads, semaphores and critical sections on Posix platforms.
Temporary resources created using pthread_attr_init, pthread_condattr_init and pthread_mutexattr_init are now correctly freed.
-
[COM-2441] Warnings/errors/reports require hkMemoryRouter on calling thread.
hkErrStream no longer requires a memory router on the calling thread to generate output.
-
[COM-2517] hkCheckingMemorySystem::tagAddress() is not thread safe.
A critical section lock was added to hkCheckingMemorySystem::tagAddress().
-
[COM-2519] hkMath::cos() isn't accurate near limits in double-precision.
A dedicated function for computing the cosine has been added.
-
[COM-2540] hkAabb16::isEmpty() does not work.
An incorrect bitmask has been fixed in hkAabb16::isEmpty()
-
[COM-2550] hkPs3Vector.inl generates compiler errors on SPU if HK_DEBUG is defined.
The hkVector4 code now compiles cleanly on SPU when any of DEBUG, _DEBUG and HK_DEBUG are defined.
-
[COM-2559] hkFileSystem::openWriter() can fail when trying to append to an non-existent file on some platforms.
On platforms which use hkStdioStreamWriter() (Xbox360 and PlayStation(R)3), opening to file for appending now calls fopen with "r+b" mode, and if that fails, calls fopen with "w+b".
-
[COM-2568] typedef PredicateResult in hkSerializeUtil.h can cause a warning on some platforms.
A compile warning (which could be an error on some platforms) was fixed in hkSerializeUtil.h.
-
[COM-2582] hkgMeshSystem::resolveTextureFilename() can read past the end of the DEFAULT_FILE_EXTENSIONS array.
A bug was fixed where if a texture was referenced from inside an asset, but that texture did not exist on disk, then the DEFAULT_FILE_EXTENSIONS array would be access outside of its bounds.
-
[COM-2590] Memory analyzer type window callstack view only shows "known" items.
The callstack window created from the "types" panel now shows a summary of allocations for which we were unable to retrieve callstack information.
-
Content Tools
Highlights (1)
-
[EXP-2770] Support for Maya 2015 and 3ds Max 2015.
Support for Maya 2015 and 3ds Max 2015 has been added to the Havok Content Tools.
NOTE: Maya 2015 and 3ds Max 2015 themselves are only available as 64-bit software, so only the 64-bit Havok Content Tools contain Maya 2015 and 3ds Max 2015 support.
-
New Features (1)
-
[EXP-2770] Support for Maya 2015 and 3ds Max 2015.
Support for Maya 2015 and 3ds Max 2015 has been added to the Havok Content Tools.
NOTE: Maya 2015 and 3ds Max 2015 themselves are only available as 64-bit software, so only the 64-bit Havok Content Tools contain Maya 2015 and 3ds Max 2015 support.
-
Improvements (2)
-
[EXP-2344] Vision export options diffuse and lightmap channel options ignored.
Export option for UV-channels are now respected when using the "Process Vision Data" filter.
-
[EXP-918] Make friction/restitution UI ranges consistent with asserts in the engine.
It was previously possible in the 3ds Max, Maya and XSI physics tools to assign friction and restitution values to rigid bodies that were outside the limits allowed by the engine, causing warning or assertions at run time.
The UI has been updated to limit the range of those parameters to the ranges accepted by the run-time.
-
Fixes (8)
-
[EXP-2760] Playing Maya animations back can cause memory stomp.
A bug was fixed in the Havok Maya plugin that could cause crashes during animation playback in Maya.
-
[EXP-2762] Preview tool doesn't flush denormalized SIMD values to zero.
The Havok Preview tool now correctly sets the SIMD control register to flush denormalized values to zero.
-
[EXP-2773] Mirrored geometry produces flipped faces and wrong tangents.
Meshes that have been mirrored will now produce correct tangents and their faces will have the correct orientation. This affects Max, Maya, XSI, FBXImporter and the Vision Integration.
-
[EXP-2740] [Physics2013] Create ragdoll filter stops responding when it encounters a circularly-constrained ragdoll.
The Create Ragdoll filter could stop responding when trying to process a ragdoll whose constraint graph contained a cycle. The filter will now detect these cases and aborts ragdoll creation instead.
-
[EXP-2763] hctMayaSceneExporter::processNurbs changes the selection.
The maya scene exporter used to modify the selection when exporting NURBS objects. It has been changed to preserve the selection.
-
[EXP-2767] Deselecting "Textures - Copy Used Textures" will still set the texture path to the generated path for the copy operation.
Vision Exporter: Disabling "Copy Used Textures" in the Vision Export Dialog will now use the original path of the texture instead of the generated path to the copy target location.
Enabling "Copy Used Textures" will now skip copying of the file if the source and target timestamps match.Behavior Change
-
[EXP-2768] Extract motion filter hangs on invalid data.
-
-
[EXP-2783] Exported Scaffolding Maya scene displays with incorrect textures.
The materials in the Maya scaffolding Destruction asset file were misconfigured (i.e. missing normal maps) and were causing the preview tool to render the walls as red. This issue has been resolved.
-
Physics 2012
Improvements (2)
-
[HVK-6529] Wrong height field coarse tree ray cast early out.
Sampled height field raycasts when using the coarse min-max tree optimization will now return all the raycast hits (instead of only reliably returning the first hit).
Behavior Change
-
[HVK-5961] Reduce amount of data sent by welding viewer.
Performance of the Welding viewer has been dramatically improved when live connected to the Visual Debugger.
-
Fixes (3)
-
[HVK-6521] Custom hkpSampledHeightFieldShapes are not serialized in world snapshots.
Fixed serialization of hkpSampledHeightFieldShape in Physics' world snapshots. It now works when the height field shape is contained in a hkpTriSampledHeightFieldBvTreeShape or used directly as the shape of a hkpRigidBody.
-
[HVK-6536] hkpShapeBuffer not aligned correctly on the stack with XCode 5.1.
A workaround was added to the hkpShapeBuffer class so that it gets stack-aligned correctly with XCode 5.1
-
[HVK-6518] Time factor is not taken into account when accumulating gravity.
The gravity factors accumulated in the solver sub-steps for each motion was not taking their time factor into account.
This has now been fixed.
-
Animation
Improvements (5)
-
[HKA-1400] Spline Compression doesn't work well with Additive Animations.
-
-
[HKA-1506] Warn if a bone is not found in bind pose and reference pose is calculated entirely from the first key frame.
If any bone in a skeleton is missing a bind pose, then all bones in the skeleton will use their first keyframe as the bind pose. A warning has been added to report when this happens.
-
[HKA-1517] Add an option to make the foot end not go through the floor.
A new option has been added to the hkaFootPlacementIkSolver: m_keepSourceFootEndAboveGround. This forces the IK solver to keep the source foot end bone above the ground. This helps keep blended animations that may cause the foot to go below the ground to stay above.
-
[HKA-1624] New Ragdoll Controller demo.
This is a new demo which drives a ragdoll from a chosen animation and allows the demoer to tweak various ragdoll settings. The settings are saved out automatically into an xml doc for reuse. The demo also allows for firing a gun or boulder at the ragdoll to see how external forces impact its behavior.
-
[HKA-1612] Unresolved issues with hkaFootPlacementIkSolver.
A few issues around the foot IK solver were solved:
1) Allow foot locking to use the foot unlock gain while locking, not just unlocking and support moving platforms with a locked foot.
2) Vertical error calculation fix. Vertical error now properly takes into account the ground height instead of the world from model translation. This is relevant when the model is quite long or wide and the world from model is rotated.
3) The ground position (hkbFootIkDriver::InternalLegData::m_groundPosition) is used for foot IK in order to obtain a rotation for the model. The way the ground position is computed uses the error from foot IK but depending on the case this result can be wrong. Saving off result of ground calculation in foot ik output and using that instead.
4) Foot IK gains can now be adjusted to respect timestep changes. The "base" timestep can be tweaked in hkbWorldCinfo. By default, the base timestep is set to -1, which will keep the old behavior. If you plan on drastically altering your timestep (ie. for slow motion), the base timestep should be set to timestep which is considered "normal" time (ie. if you normally step your game at 30hz, set m_baseTimestep to 1/30).
-
Fixes (4)
-
[HKA-1613] Additive animations with animated bone translations are incorrect.
An error in additive animation calculation/application has been fixed. The previous method of calculation/application could cause visibly incorrect results and sub-optimal compression in cases where bone translations were animated. All new additive animations will be created in the new format. Old assets will still work as expected in Animation-only pipelines (see Behavior notes for caveats specific to that product).
-
[HKA-1627] Additive animations are applied incorrectly by hkaSampleAndBlend jobs for Quantized Animations.
Quantized Animations now produce correct additive animation results
-
[HKA-1628] Animations are blended incorrectly by hkaSampleAndCombine jobs and sampleAndCombineAnimations for Quantized Animations.
Quantized animations are now blended correctly in deprecated job-type codepaths.
-
[HKA-1633] hkaPhysicsMigrationUtils crashes when converting ragdolls without constraints.
hkaPhysicsMigrationUtils::convertRootLevelContainer and hknpRagdollUtils::optimizeInertias no longer crash when converting a ragdoll with no constraints.
-