January 20, 2025
SDK 41
New Engine features:
- C++ reflection.
- JavaScript API.
- Node-based materials editing.
- Material depth intersection blending.
- Randomized texture coordinate sampling.
- All Core SDK language examples render torii objects.
- C++ API reflection plugin has been added.
- JavaScript API plugin for JavaScript-only applications has been added.
- MaterialFlow plugin provides full node-based material editing functionality.
- webp Image format plugin has been added.
- Bound types have been added to all languages.
- Flow plugin includes base GLSL generation library.
- Flow plugin supports different variants and versions.
- Input and output attachment, and create callbacks have been added to the Flow plugin.
- Primitive plugin skips zero-sized cylinder caps.
- All Explorer Material uniform sliders have text editing mode on the right mouse click.
- Explorer Material editor supports vec2 uniforms.
- Old scenes are backed up before the Explorer scene save action.
- Explorer includes a MaterialFlow plugin for node-based material editing.
- 10_hello_image manual sample.
- 11_hello_bindless manual sample.
- platform/storage test has been added.
- materials/material_foliage.scenex animation material example.
- nodes/node_geometry.scenex geometry selection example.
- render/render_refraction.scenex render refraction example.
- material_flow_animation|anisotropy|bumpmap|cell|forward|fractal|parallax|perlin|skinned|texcoord|transparent|vertex sample scenes with MaterialFlow-based materials have been added to Engine SDK.
- Each API class has reflection methods getClassName() and getClassNamePtr().
- makeQuickCompare() function has been added to enable simple inline comparison lambdas.
- Parser::expectToken|Name() functions have been added.
- Spatial::intersection() correctly handles single Node cases.
- Control::addChild() method replaces/swaps the child control and returns the old one if it was replaced (new child) or null if it was swapped.
- ControlCombo can hide the current text with setTextEnabled() and act as simple menu.
- ControlSlider has Double and Right mouse button callback handlers.
- ControlSlider has unconstrained editing mode with the Option key pressed.
- ControlEdit can handle user keyboard events (keyboard events from other controls) with updateKeyboard() method.
- HSV color conversion has been added to the Color struct.
- An issue with a wrong number of parameters returned from String::scanf() function on empty numbers has been fixed.
- Variables with “step” or any other reserved by external function names are automatically renamed into “step_%x” by the compiler to avoid name collision on some API.
- The shader preprocessor recognizes “quiet” pragma and hides macro debug information during errors.
- The shader compiler recognizes “dynamic” pragma and avoids shader cache creation for such shaders.
- ControlRoot::setOverlayOrder() automatically fixes the issue with overlays rendering inside ControlArea.
- ControlDialog limits the number of iterations to 8 to avoid hangs.
- A vertex shader pass has been added to the MaterialShading class. This pass is performed after vertex skinning and morphing and is useful for dynamic geometry that calculates motion vectors automatically.
- All Object shaders use #assign instead of #define macro to avoid “macro has been redefined” warnings.
- attribute_position and attribute_normal shader inputs provide pre-skinned|morphed values good for procedural texture coordinate generation.
- GLTF KHR_materials_anisotropy extension support.
- HLSL access to half SSBO types.
- Global GLSL constant arrays support has been added.
- GLSL array initialization is compatible with vector types.
- MeshMaterial::Anisotropy|AnisotropyAngle parameters have been added.
- The number of SSBO buffers in Pipelines, Kernels, and Traversals has been increased to 32.
- Correct evaluation of nested shader macros without values.
- The number of barriers per barrier() call has been increased to 128.
- A random bug with incorrect parsing of some JPEG files has been fixed.
- isFinite|Normal|Inf|Nan functions are manually implemented.
- Access to SpatialTree internal buffers has been added.
- WebGPU can be initialized from a preinitialized device.
- Frame Viewport struct includes scene_time|ifps|seed|layer members.
- Correct depth bias evaluation for screen space occlusion. The banding artifact has been removed.
- HDR reflection overflow has been fixed on iOS.
- Temporal antialiasing has a better reaction to luminance changes.
- An incorrect first frame motion vector artifact has been removed.
- NodeObject has a new geometry index parameter for strict geometry selection.
- LightGlobal has a new split offset parameter for a better split distribution.
- MaterialMetallic|Specular has a PixelDepth option for random depth value for smooth depth intersection.
- MaterialMetallic|Specular has a Randomized texture coordinates option for tile-less texture sampling.
- New Apple devices have been added to system Info. A device version is also included in the system info string.