Release Notes for Version 2.10 and Release Notes for Version 4.2: Difference between pages

From C4 Engine Wiki
(Difference between pages)
Jump to navigation Jump to search
(Created page with "__NOTOC__ '''Release date:''' November 16, 2012 == Core Engine == * The engine can now be compiled for 64-bit Windows. New project files for Visual Studio 2012 are included, and they have 64-bit configurations in addition to 32-bit. * Several parts of the Mac OS X code in the engine have been rewritten to use the Cocoa API. The engine no longer calls any deprecated API functions, and it can compile with the latest Mac SDK for 32-bit and 64-bit targets. * The <code>fl...")
 
(Created page with "__NOTOC__ '''Release date:''' January 11, 2015 == Core Engine == === Graphics Manager === * Screen-space depth derivatives are now stored in the structure buffer along with the existing high-precision linear depth value. This allows for higher quality rendering along depth discontinuities, making effects such as SSAO look better. When motion blur is enabled, screen-space velocities are now stored in a separate render buffer. * Support for the Nvidia driver API has be...")
 
Line 1: Line 1:
__NOTOC__
__NOTOC__
'''Release date:''' November 16, 2012
'''Release date:''' January 11, 2015


== Core Engine ==
== Core Engine ==
* The engine can now be compiled for 64-bit Windows. New project files for Visual Studio 2012 are included, and they have 64-bit configurations in addition to 32-bit.
* Several parts of the Mac OS X code in the engine have been rewritten to use the Cocoa API. The engine no longer calls any deprecated API functions, and it can compile with the latest Mac SDK for 32-bit and 64-bit targets.
* The <code>float4</code> type has been renamed to <code>vec_float</code>, and new types <code>vec_int8</code>, <code>vec_int16</code>, <code>vec_int32</code>, <code>vec_unsigned_int8</code>, <code>vec_unsigned_int16</code>, and <code>vec_unsigned_int32</code> have been added. This affects your code only if you are directly using the engine's SIMD functions.
* The <code>align_address</code> macro has been renamed to <code>alignas</code> to be consistent with the new C++11 keyword.
* The Extras plugin has been eliminated, and most of the functionality it contained has been moved to the core engine (star field particle system, flash controller, rotation controller, and shock wave effect).
=== Movie Manager ===
* The Movies plugin based on QuickTime has been removed from the engine and replaced by a new proprietary cross-platform movie format. Movie compression and playback functionality is now part of the core engine in a new Movie Manager component, and it is available on all platforms supported by the engine.
* Movie data is stored in a resource file with the extension <code>.mvi</code>. Movies can contain both video and audio tracks.
* Video tracks are compressed using standard DCT and block truncation methods followed by a bit encoding that is optimized for fast decompression. This is a lossy compression technique with a variable quality level that can be controlled at the time a movie is generated. Pixel data is decompressed into the YCbCr 4:2:0 format, which is transformed into filtered RGB 4:4:4 format on the GPU using shader code.
* The video codec supports key frames and delta frames for temporal compression. The frequency of key frames can be controlled at the time a movie is generated.
* Audio tracks are compressed using a lossless technique to preserve perfect fidelity.
* The Movie Manager uses an integer time base for which there are exactly 36000 ticks per second. This number was chosen because it is evenly divisible by the following numbers (plus others): 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 30, 32, 36, 40, 45, 48, 50, 60, 72, 75, 80, 90, 96, 100, 120.
* Movies can be recorded inside the engine by using the <code>record</code> console command. This causes the engine to generate one or more "sequence" files containing raw video data and a single wave file containing raw audio data. These can be imported through the Movie Tool to create a compressed movie resource.
=== Interface Manager ===
* There is a new movie widget that is used to display movies in a panel or window. Movie widgets can be controlled from a script using the Play Movie, Stop Movie, Get Movie Time, and Set Movie Time controller functions.
* A movie widget belonging to a panel effect can specify that its audio track be played through a connected source node. This allows the audio for a movie to be fully spatialized in a scene just like any other sound.
* Paint widgets now have settings that can be used to specify the initial properties of the paint brush: radius, fuzziness, opacity, and color.


=== Graphics Manager ===
=== Graphics Manager ===


* The Combine Normals shader process has been extended so it can take an optional interpolation parameter. If the port named "t" has an input, then the normal "N1" is weighted by 1&nbsp;&minus;&nbsp;''t'' and the normal "N2" is weighted by ''t''.
* Screen-space depth derivatives are now stored in the structure buffer along with the existing high-precision linear depth value. This allows for higher quality rendering along depth discontinuities, making effects such as SSAO look better. When motion blur is enabled, screen-space velocities are now stored in a separate render buffer.


=== Physics Manager ===
* Support for the Nvidia driver API has been removed from the engine. This was only used to query the driver version, and it's not worth the extra dependency.


* The "mover" controller has been redesigned and replaced by the "movement" controller. The movement controller moves a node between a start and finish location at a constant speed with optional acceleration and deceleration at the beginning and end. The node to which a movement controller is assigned must have connectors that link to other nodes (usually markers) specifying the start and finish positions, and the connector keys used for this are specified in the controller settings.
=== World Manager ===


* The "rotation" controller previously in the Extras plugin has also been redesigned and moved into the core engine. The functionality has been split into two separate types of controllers: a "rotation" controller that is used for nodes that rotate in between two specific angles, and a "spin" controller that is used for nodes that rotate continuously about a given axis. The node to which either of these controllers is assigned must have a connector that links to another node (usually a marker) specifying the center and axis of rotation, and the connector key used for this is specified in the controller settings. Rotation takes place in the counterclockwise direction about the object-space ''z'' axis of the center node (which is shown in blue inside the World Editor). This means that reversing the direction of the ''z'' axis (by rotating the node 180 degrees about the ''x'' or ''y'' axes) causes the rotation to reverse direction.
* A couple new performance improvements have been implemented in the morph and skin controllers.


=== World Manager ===
=== Physics ===


* The perspective exclusion mask for geometries, portals, and fog spaces has been modified so that visibility in the primary, reflection, and refraction perspectives can be controlled separately for direct rendering, rendering through a remote portal (that is not rendered into the reflection or refraction buffer), and rendering through a camera widget.
* The movement controller, oscillation controller, rotation controller, and spin controller all have a new setting that cause them to wake up any rigid bodies that might be in their way while they're moving. When active, this would prevent a door from moving straight through a sleeping rigid body without affecting it, for example. The new setting is a flag that belongs to a new <code>KinematicController</code> base class for these controllers.


* The perspective exclusion mask settings for the portal object and fog space object have been moved to the portal node and fog space node.
* A new function called <code>CalculateWorldPositionVelocity()</code> has been added to the <code>[http://c4engine.com/docs/PhysicsMgr/RigidBodyController.html RigidBodyController]</code> class. This function is provided as a convenient way to calculate the velocity of a point on a rigid body due to the rigid body's own motion, accounting for both the linear and angular velocities.
 
* A perspective exclusion mask can now be set for all effect nodes, which include particle systems.


=== Scripting ===
=== Scripting ===


* The previously existing method called Fade Ambient Source has been renamed to Vary Source Volume, and it can now be used on any type of source node to smoothly vary the playback volume.
* The Evaluate Expression script method now accepts the same syntax that's supported by OpenDDL 1.1 for all literal types. In particular, boolean and octal literals are accepted, underscores are allowed in numerical literals, and all of the escape sequences supported by OpenDDL are available in strings and character literals.


* A new script method called Vary Source Frequency has been added, and it can be used to smoothly increase or decrease the relative playback frequency of a source node.
=== Interface Manager ===


* If an instance node is the target of a Call Controller Function script method and the instanced world contains a rigid body, then the Script Editor now displays the available functions for the rigid body instead of the instance node. This makes sense because the rigid body inside an instanced world is always extracted and placed in the referencing world, and the instance node is deleted.
* The text button widget will no longer automatically change its alpha value based on whether it's enabled. If you want the text button's appearance to change when it's in a disabled state, you'll need to set its widget color directly.
 
=== File Manager ===
 
* The <code>FileMgr::BuildFileList()</code> function has been replaced by the <code>FileMgr::BuildFileMap()</code> function. File names are now sorted on all platforms such that letter case is ignored and numerical parts of the names are sorted numerically instead of lexicographically.
 
=== Resource Manager ===
 
* The Resource Manager is now 100% thread-safe. Any type of resource can be loaded outside the main thread without risk of corrupting internal data structures.


== Tools ==
== Tools ==


=== Movie Tool ===
=== Model Viewer ===
 
* There is a new Movie Tool plugin that contains a movie player window and the movie generation functionality. The movie player can be opened by selecting Open Movie from the [[C4 Menu]], and a movie can be generated by selection Import Movie from the C4 Menu.
 
* The movie generator can import a sequence of individual frames from TGA files and/or a group of sequence files that were recorded by the engine. (Each sequence file contains multiple frames.) Audio data for a movie is specified by a separate wave file.
 
=== World Editor ===
 
* A check box has been added to the [[Worlds Page]] that let's you click through instances already in the main world when placing a new instance node.
 
* A modifier preset list has been added to the [[Worlds Page]]. A modifier preset stores a list of modifiers that can be assigned to instance nodes, and whenever a preset is selected, the modifiers stored in it are automatically assigned to each new instance that is placed in the scene. A modifier preset is created by selecting an instance node in the scene that already has modifiers assigned to it and selecting New Modifier Preset from the popup menu in the Worlds Page. Another menu command, Replace Modifiers, can also replace the modifiers for all currently selected instance nodes with the modifiers stored in the currently selected modifier preset.
 
* A random Z offset range has been added to the [[Placement Page]]. This causes a node to be offset by a random distance in the specified range along the node's local ''z'' axis after the other placement adjustments have been made. This is useful for sinking objects into the ground by random amounts.
 
=== Script Editor ===
 
* The OK and Cancel buttons have been removed from the [[Script Editor]]. There are now items named Close and Save Script under the Script menu.


* Boxes that display the letters "T" or "F" are now displayed on conditional fibers in a script that execute only if the result of the starting method is true or false. The fibers also still retain the green and red colors.
* The Model Viewer now always creates imported animations in the same directory as the model resource regardless of where the imported files were stored.


=== Shader Editor ===
* Fixed a problem where the Model Viewer would not save a morph weight animation track.


* The OK and Cancel buttons have been removed from the [[Shader Editor]]. There are now items named Close and Save Shader under the Shader menu.
* The Model Viewer will now warn you if an animation's cue track has been modified and you attempt to close the window, select a different animation, or import a new animation without having saved the modified animation first.

Latest revision as of 10:18, 15 July 2023

Release date: January 11, 2015

Core Engine

Graphics Manager

  • Screen-space depth derivatives are now stored in the structure buffer along with the existing high-precision linear depth value. This allows for higher quality rendering along depth discontinuities, making effects such as SSAO look better. When motion blur is enabled, screen-space velocities are now stored in a separate render buffer.
  • Support for the Nvidia driver API has been removed from the engine. This was only used to query the driver version, and it's not worth the extra dependency.

World Manager

  • A couple new performance improvements have been implemented in the morph and skin controllers.

Physics

  • The movement controller, oscillation controller, rotation controller, and spin controller all have a new setting that cause them to wake up any rigid bodies that might be in their way while they're moving. When active, this would prevent a door from moving straight through a sleeping rigid body without affecting it, for example. The new setting is a flag that belongs to a new KinematicController base class for these controllers.
  • A new function called CalculateWorldPositionVelocity() has been added to the RigidBodyController class. This function is provided as a convenient way to calculate the velocity of a point on a rigid body due to the rigid body's own motion, accounting for both the linear and angular velocities.

Scripting

  • The Evaluate Expression script method now accepts the same syntax that's supported by OpenDDL 1.1 for all literal types. In particular, boolean and octal literals are accepted, underscores are allowed in numerical literals, and all of the escape sequences supported by OpenDDL are available in strings and character literals.

Interface Manager

  • The text button widget will no longer automatically change its alpha value based on whether it's enabled. If you want the text button's appearance to change when it's in a disabled state, you'll need to set its widget color directly.

Tools

Model Viewer

  • The Model Viewer now always creates imported animations in the same directory as the model resource regardless of where the imported files were stored.
  • Fixed a problem where the Model Viewer would not save a morph weight animation track.
  • The Model Viewer will now warn you if an animation's cue track has been modified and you attempt to close the window, select a different animation, or import a new animation without having saved the modified animation first.