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:

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:

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


Reference Application Changes