User Tools

Site Tools


Version - 7.0.0

Release Notes

Version 7.0.0 is the immediate successor to version 6.3.2. This is a major release with several new features, optimizations, and coinciding with a upgraded Modeler and Compiler applications.

If you're already a 6.x SDK user and want to dive right in, be sure to check out our 6.3.2 to 7.0 Porting Guide.


New Features

  • Online Documentation: As you see here, all documentation is now online in wiki format. This enables us to keep it current without having to build new SDK installers.
  • Full Source For Evaluation SDK: The evaluation version of the SDK now includes full source for all of the SDK libraries, so there is no longer a dependency on IDV to provide compiled libraries that match a particular Visual Studio or console SDK version.
  • New Visual Studio Support: Projects for Visual Studio 2012, 2013, and 2015 added.
  • Rolling Wind Effects: Rolling wind effects added, which enable wind to ripple through a tree or across a field of grass. These effects can be previewed in the Modeler application and can be enabled or disabled in the Compiler settings. They LOD out, just like other higher-end wind effects.
  • Hue Variation: Hue variation is now supported and can be controlled in the Compiler and per base tree from the SDK. There are two paths: i) each instance can be given a unique hue to its overall color – particularly helpful when breaking up a forest filled with the same species of tree, or ii) each vertex may be given a unique hue, helping in visually breaking up a canopy composed of a single leaf mesh. Note that the SFC file syntax for the reference application provides some control for these values to experiment with.
  • New Shader Compilation Mode: In an effort to reduce the number of shaders generated for a given forest, a new shader compilation mode has been added that favors fewer longer shaders over many shorter shaders in an effort to reduce the number of context switches in the render loop.
  • Image-Based Ambient Lighting: Use a small texture to vary the ambient lighting color per instance.
  • Shader Compiler Control: Users can now set the location of any of the shader compiler executables directly from the pulldown menu in the Compiler application.
  • Bloom Post Shader: A notional bloom effect shader was added to the reference application.
  • Hand-Tuning: For desktop builds, one float4 shader variable has been reserved to be driven by user input as the reference application runs. This can help to tune specific parameters on the fly instead of many execution iterations.
  • Depth Pre-Pass: A Z-prepass is now support for the deferred rendering mode. Speed was increased slightly for forward Z-prepass as well.
  • SFC Syntax Updated: Updated to support a number of new 7.0 features and generally cleaned up for consistency.
  • SpeedForest File Support: The reference application now reads SpeedForest population files. SpeedForest is world-building product under development at IDV.



Optimizations

  • Shader Constant Updates Faster: Dramatically faster constant updating on most platforms about DirectX 9.
  • OpenGL Performance Improved: Dramatic rendering speed increases for OpenGL.
  • Instance Streaming Improved: Grass, 3D tree instances, and billboard instances all stream much more quickly without an intermediate buffer between the client data and GPU.
  • Improved Render Loop: Worked with a AAA developer to improve speed of render loop. Now includes a draw call sorting stage to further reduce state changes.



General Notes

  • DirectX 10 is no longer supported.
  • Visual Studio 2008 for DirectX 11 no longer supported.
  • Several alternate coordinate system issues fixed, some related to lighting in deferred rendering, others in culling.
  • The Reference Application Launcher now features:
    • Ability to specify location of SFC files
    • Improved syntax coloring
    • Larger fixed-width font
    • Ability to specify forward or deferred rendering at launch time
    • Specify whether console should appear when reference application launches
  • There are a few quirks about the various render modes in the reference application:
    • Contrary to expectations, the bloom effect works only in forward rendering mode
    • The depth blur effect works only in deferred rendering mode
    • the per-tree ambient_image_scalar value works only in forward rendering mode; in deferred every object is given the same ambient image scalar value



SDK C++ Code Details

  • Remnants of PS Vita and WiiU support removed.
  • Added PortableCrt.h that works with ST_WINDOWS_SECURE_CRT macro to avoid warnings about insecure CRT functions under Windows.
  • CShaderConstantRI replaced with CShaderConstantBufferRI. Constant buffers are now set in an SDK-structure and bound to the GPU as opposed to setting each GPU constant slot individually on the fly. This speeds constant changes dramatically.
  • Fixed a number of inconsistencies in enumeration and macro naming convention throughout the SDK. Some started with “SPEEDTREE_” others with “ST_”. All now begin with “ST_”.
  • EShaderPass enumeration renamed to ERenderPass.
  • CCore::SSupportingData removed, no longer needed for UE3 support.
  • CForest::WindPreroll() added so that a game or level can begin with trees in mid-wind effect instead of having to watch the initial wind build up.
  • A very small CPerlinNoiseKernel class was added to the Core library to assist with rolling wind effects. It's ultimately used to generate a noise texture.
  • OpenGL instancing code path revamped and much improved. Now on par with DirectX 11 rendering speeds.
  • SCellKey and SRowCol were redundant (each simply holds an integer pair). SCellKey was removed and replaced with SRowCol.
  • CCell::AppendTreeInstances() in the Forest library was renamed to CCell::SetTreeInstances() because, well, it didn't append instances, it only set them.
  • CVisibleInstancesRI::Update3dTreeInstanceBuffers() renamed to CVisibleInstancesRI::Cull3dTreesAndUpdateInstanceBuffers() for accuracy's sake.
  • Similarly, CVisibleInstancesRI::UpdateBillboardInstanceBuffers() was renamed to CVisibleInstancesRI::CopyBillboardInstancesToGpu().
  • CVisibleInstancesRI::Clear() was added for efficiency when all instances needed to be deleted quickly.
  • CInstance in Forest.h reworked a little:
    • Padded to align with S3dTreeInstanceVertex and S3dBillboardInstanceVertex for streaming efficiency's sake.
    • SPEEDTREE_COMPRESS_INSTANCE_VECTORS was removed. It wasn't being used and broke new alignment with S3dTreeInstanceVertex and S3dBillboardInstanceVertex.
  • The class CGrassInstance is now the structure SGrassInstance. This helped with grass streaming performance. Get*() and Set*() functions have been replaced with direct member variable assignments.
  • CVisibleInstances::VisibleCells() no longer returns const TCellPtrArray& but a const TRowColCellPtrMap&. While our reference application does not access this function, yours might.
  • SRenderPass has been removed from Core.h. Functions that took it as a parameter now take the enumeration ERenderPass, also defined in Core.h.



Shader Template and Generation Notes

  • Better overall organization of the shader templates. Organized in fewer, bigger files with more code per file. InlineVertex*.fx and InlinePixel*.fx no longer used.
  • Shader files meant to be used as include files now named Include_*.fx.
  • Shader constants completely reorganized. Probably the biggest change in the entire release.
  • Instead of a single source file #ifdef'd to death to tackle each possible pass (forward, deferred, shadow-cast, etc), there are separate files for each pass, vertex and pixel.
  • Huge standardization pass on the macros used throughout the shaders, including naming consistency.
  • In the Compiler application, users can now specify a path for the shader templates, allowing users to maintain multiple shader template sets. Also works for the “Compile Extra Shaders” dialog in the Compiler.
  • #include “ShaderTemplates/” syntax no longer needed.
  • Non-vegetation shaders in the example Meadow forest renamed and reorganized from 6.3.2.