User Tools

Site Tools


Version 6.2

Release Notes

Version 6.1 Beta was never officially brought out of beta state. Instead, we have released the final stable code as version 6.2, mostly to keep synchronized with the tools (SpeedTree Modeler and Compiler). The biggest update for version 6.2 was the addition of the special SpeedTree 5.x compilation mode, deferred rendering support for nearly all platforms and a complete reworking of our example render target system, eliminating the depth texture classes.


General Notes

1. The “SpeedTree60” namespace has been changed to simply “SpeedTree”, with no version number suffix. In ExportBegin.h, included by every file in the SDK, we have inserted macros such that “SpeedTree60”, “SpeedTree61”, and “SpeedTree62” will be replaced with “SpeedTree” so that legacy code that uses the versioned namespaces will compile without modification.

2. A special SpeedTree 5.x compilation mode was added for applications that need static vertex declarations for their vegetation geometry. While not as efficient as the general compilation modes (far more data per-vertex), it is guaranteed to produce consistent vertex declarations as described here.

3. The example render target system built-in to the SDK was heavily changed (note that we expect almost all clients to use their own render target system, but it's important that we provide a reasonably efficient example for the reference application). Changes include:

  • CRenderTargetRI and associated platform-specific policies were expanded to handle chores previously covered by CDepthTexture and CMultiRenderTargetsRI.
  • Hard-coded RENDER_TARGET0, RENDER_TARGET1, etc. were replaced with a more flexible G-buffer configuration system. See MyRenderTargets.h/cpp in the reference application for a full usage example.
  • The CDepthTexture and CMultiRenderTargetsRI classes and associated platform-specific policies were removed.

4. Support for VC8 / Visual Studio 2005 has been removed for all platforms.

5. The SDrawCall::GetProperty() polymorphic functions will now convert types. That is, if the st_float32 version of GetProperty() is called but the data was stored as st_float16, the values will be converted to st_float32 and returned. Previous behavior was to return false to indicate error if request and stored types did not match.

6. SRT format is consistent with 6.0 and 6.1 Beta; no signficant changes made for 6.2.

7. Added two convenience functions: CCore::IsCompiledForDeferred() and CCore::IsCompiledForGrass(). Each refers to an SRT file as a whole – an SRT file is either deferred or forward, grass or tree model.

8. Changes to SRenderState in Core.h to faciliate 5.x compilation mode include new hash name function and swapping of EInstanceType member variable for E5xMode. EInstanceType was for PS Vita only. The member function GetInstanceType() will report the correct EInstanceType value by deriving it from other member variables.

9. In SRenderState in Core.h, the CVoidPtr m_pUserData member variable was changed to CStringPtr.

10. CCore::SSupportingData was updated for the SpeedTree6/UE3 integration.

11. Entire CStateFunctionRI class and associated platform-specific policies were deleted. One side effect is that each reference application has its platform-specific clear calls in their respective MyMain<platform>.cpp files.

12. Added support for grass models to cast shadows. Each grass model has its own shadow casting flag (defaults to off as it's expensive). 13. Removed all code for rendering stars in the example sky system. Added support for the example terrain to cast shadows. In the reference application, the flag is set in the SFC file.

14. The term “FrameStamp” was replaced with “FrameIndex” in several places in the SDK, but mostly in the Forest library.

15. Built-in simple profiling class has deeper fallback functionality (that is, when Intel's GPA isn't installed).

16. “Shimmer defeat” parameters removed from CForest::ComputeLightView(), no longer an option.

17. A few more Vec3/Vec4/Matrix4x4 operators were added.


Bug Fixes and Performance

1. It was impossible to parse the same SRT memory block more than once; no limit now.

2. CVisibleInstancesRI::NotifyOfPopulationChange() wasn't properly clearing its instancing data, stored in CVisibleInstancesRI::m_aPerBaseInstancingData.

3. SRenderState::m_pDescription and SRenderState::m_pUserData sometimes failed to make it all the way through the tool pipeline to the SRT files/SDK.

4. In 6.0 and 6.1 the OpenGL renderer used uniform buffer objects (UBO) to implement mesh instancing. This has been frought with problems, but mainly it:

  • Performed poorly on ATI/AMD cards, causing very lengthy start-up delays and well as 1-2 second hitches all through the forest. We have filed an issue with AMD, but the wheels turn slowly.
  • Caused very lengthy run-time shader compilations on all platforms. The larger the UBO was, the longer the compilation took.

5. We opted to remove the UBO code path completely, replacing it with a much smaller reserve of traditional shader constants. While it results in more draw calls, performance isn't deeply impacted and portability & reliability are greatly improved.

6. Added an optimization in OpenGL constants upload system where the entire shader constant block isn't uploaded every time. At each commit, only the part of the table that was updated since the last commit is comitted.

7. Optimized the example shadow implementation in reference application.

8. Fixed PIX warnings about not using a NULL pixel shader when possible as well as a few shader patch warnings.

9. Removed the concept of the main RenderTarget and DepthStencil views in the SDK's DirectX10 and 11 render classes.

10. Improved memory use during initial forest population phase in reference application.

11. Reordered the wind-related global shader constants so that they could be uploaded from CPU to GPU in a single call. Prior to 6.2, several calls were needed. The changed affected Wind.h and ShaderConstants.h in the SDK and Template_Uniforms.fx in the SRT Exporter shader templates..

12. ShaderConstants.h changed significantly, including new organizing struct. It no longer stores update frequency or vertex/pixel shader affiliation hints.

13. Added trunction operation and issue warning in CCell::SetGrassInstances() when capacity set in SetHeapReserves() is exceeded.


Shader Updates & Fixes

  • Full deferred rendering implementations now included for DirectX 9, 10, 11, OpenGL, PS3, and Xbox 360.
  • In deferred mode, branch seam smoothing and detail layers were not properly fading when smooth LOD was active.
  • Reworked alpha testing & noise function to correct mismatch between lit and z-pass shaders.
  • On Xbox 360, bad depth matching between z-pass and lit 3D geometry shaders with wind active was fixed with liberal use of [isolate] directives.
  • Added better control for vertical/horizontal crossfade in Template_Billboard_Vertex.fx.
  • Adjustments made for new mesh instancing approach OpenGL where uniform object objects are no longer used.
  • Small changes to wind behavior to stay in sync with SpeedTree Modeler behavior.
  • Significant rework of Template_Uniforms.fx to accomodate new wind variable organization, OpenGL mesh instances, and new general uniform ordering.
  • General clean up in Template_Textures.fx.

Reference Application Changes

  • Added MyRenderTargets.h/cpp to define our example deferred system (note that it's generally configurable).
  • Terrain can cast shadows, configurable in the SFC file.
  • Each grass layer can be made to cast shadows, configurable in the SFC file.
  • Moved key population functions StreamTrees() and StreamGrass() into CMyPopulate.h/cpp source file (they were part of CMyApplication.h/cpp).
  • Removed all star-rendering code from the sky system.
  • Deferred rendering example included for DirectX 9, 10, 11, OpenGL, PS3, and Xbox 360.
  • Render functions in MyRenderFunction.cpp updated significantly to accomodate new render target system.
  • Numerous updates to MyShadowSystem.h/cpp as a result of new render target system and terrain & grass models casting shadows.