News Examples Documentation Download Buy Forum Contact

Release Notes Version 1.23

krpano 1.23 (2025-07-11)


3D Gaussian Splatting Support

  • New: Render 3D Gaussian Splat models directly inside krpano.
  • New: krpano offers a new unique high-quality perspective-mode for rendering the 3D Gaussian Splats. This ensures accurate and stable visuals, especially in wide-angle views, where 'normal' Gaussian Splats rendering-modes get visual problems.
  • New: With this perspective-rendering-mode krpano can render the Gaussian Splats also using the typical krpano projections / view-distortions, such as Fisheye, Stereographic, Architectural, Pannini or Little-Planet-View.
  • New: The loading of the Gaussian Splats is done very efficiently using an advanced buffered streaming, which transfers the loaded Splats as directly as possible to the GPU. This reduces the memory usage and ensures better stability on mobile devices.
  • New: With full support for VR and stereo/anaglyph rendering.
  • New: krpano supports these Gaussian Splats file formats:
  • New: For better understanding, analysing the structure a Gaussian Splat model, there are several debug visualizations available.
  • New: For further customization there is shader support to modify the Spalts in realtime. Such shaders can be used for various effects, e.g. unveil animations, lighting, color changes.
  • New: See the included 3D Gaussian Splats Examples for comparing the rendering-modes and try your own 3D Gaussian Splat Models with it (by using Drag-and-Drop with your own files).
  • New: The 3D Gaussian Splats Example includes also a small helper tool (Viewpoints Tool) for creating animated camera-paths.

Improved 3D Controls

  • New: controls3d.xml - a new helper script to extend krpano with controls for 3D environments (replaces the depthmap_navigation.xml). Supports mouse, keyboard and touch usage and provides also onscreen-controls.
  • New: cursor3d.xml - add a 3D navigation cursor, with mouse, touch and VR support.
  • New: control.dragscale - with this setting a custom pano-dragging/panning scale can be set. This is used in 3D-controls when using orbit-like controls to avoid that the dragging/moving speed depends on the field-of-view (as it would otherwise).

Improved Depthmap / 3D-Model Support

  • New: To differante better between depthmapped pano-images and textured 3D-models there is the new <model> xml declaration. Technically this is just an alias for <depthmap> and both names can be used at any time and vice versa, however for clarity, the actually right name should be used.
  • New: The image.prealign setting for rotating pano images or 3D models has been replaced with individual image.rx, image.ry, image.rz and image.rotationorder settings. These new settings offer easier usage and more flexibility (using the old image.prealign setting is still supported and automatically mapped to the new settings).
  • New: The depthmap.align setting for rotating the pano image that gets depthmapped onto a 3D-model also has been replaced with individual depthmap.rx, depthmap.ry, depthmap.rz and depthmap.rotationorder settings (the old depthmap.align setting is also still supported and automatically mapped to the new settings).
  • New: The depthmap.origin setting for defining the origin of a 3D-model has been replaced with individual depthmap.ox, depthmap.oy, depthmap.oz settings (the old depthmap.origin setting is still supported and automatically mapped to the new settings).
  • Change: The depthmap.cubemapsize default value has been increased from 512 to 1024 for more accurate depthmapping.
  • Change: The display.depthrange setting has been replaced by the new display.depthnear and display.depthfar settings (but the old depthrange setting is supported).
    Additionally the default value for depthnear has been increased from 0.1 to 1.0 to provide more rendering accuracy in 3D scenes.
  • Fix: The depthmap.align setting was working differently (wrong) in version 1.22.
  • Fix: The 3D-Model depthmapping accuracy was very low in some cases.
  • Fix: Support url placeholders in the depthmap.backgroundurl setting.
  • Fix: Exclude text-based 3D-Model formats (obj/mtl, stl, depth) from the sameorigin check. Handle them like image-resources, they can't contain any code anyway.

Hotspot Rendering Filters


embedpano()

  • New: Optionally limit the viewer to 'WebGL 2.0 only' by changing the webgl embedpano() setting to 2.0. Then the viewer will only start when WebGL 2.0 is available, otherwise an error will be shown. This could be used for examples that specifically require WebGL 2.0 features to work.
  • New: The embedpano() target setting can now also be null or unset. In this case automatically the parent element of the current <script> element is used.
  • New: It is now possible to set the bgcolor and WebGL settings (e.g. antialias) by URL query parameters. This can be usefully for iframe-embedding or specific rendering cases.

API Improvements

  • New: registerattribute() now supports a versatile new mode: A single handler function can serve as both setter and getter. The attribute value is stored internally, can be modified in the handler during setting or getting, and can be shared across multiple attributes by checking the attribute name within the function.
  • New: Actions for easier adding and removing events: events.add(), events.remove(), events.once().
  • New: cursorraycast() function for doing a raycast from the current mouse cursor position. As special feature this function also supports the VR mode, in this case automatically the current VR controller or VR cursor is used.
  • New: The raycast() and The screenraycast() functions are now also also callable in expressions code. This allows directly using the return value.
  • New: view.adjustoffset(ox, oy ,oz) - change the view.ox / oy / oz values without changing the current view. To compensate, the view.tx / ty / tz position will be adjusted to keep the view!
  • New: Update the view.ox_rotated / oy_rotated / oz_rotated values ​​immediately in a view.update() call rather than later in the next frame update.
  • New: view.camera.x/y/z object for getting the actual 3D positon of the view camera.
  • New: onviewinteraction event to track interactions of the user with the view, and a new lastviewinteraction variable to shows what the last user interaction with the view was.
  • New: display.wireocclusion setting for customizing the wireframe display (enable or disable the occlusion of hidden wireframe lines).
  • New: display.currentfps_int for getting the current framerate as rounded Integer value.
  • New: formatnumber() expression function for formating numbers with custom thousand- and comma-separators.
  • New: MOD operator for expressions (modulate, remainder of division).
  • New: mix(a,b,m) expression function for blending from a to b by factor m.
  • New: istweening() expression function for checking if a specific variable is currently tweened.
  • New: Textfield relinktemplate() function for linking the variables from the template again. This could be used when linking to variables that have still the same names/addresses, but are different objects now, e.g. when linking to image.* properties and loading a new pano.
  • New: The Array addChangeListener() callback function reports now also the changed element and the type of change.
  • New: krpano.saveLocalFile() - a new built-in API for saving contents to local files.
  • New: utils.objtoxml() - generates a XML String representation of an object.
  • New: xml.sceneindex for getting the index of the current scene.
  • New: keyboard.physicalkey and keyboard.pressedphysical for checking for the physical key positions. This allows controls independent of the keyboard layout.
  • New: gesture.startx / starty for getting the center where the multi-touch gesture started.
  • New: Hierarchical customParsePath support - sub-krpano-layers are calling also the customParsePath function from parent krpano viewers.
  • New: blob: URL support. If a filename is required for the blob file (e.g. because the file-extension is important), it can be defined by adding #filename.ext to the blob URL.
  • New: Support using Javascript Arrays for the polygonal hotspot points and points3d settings.
  • New: display.antialias variable for checking if rendering with WebGL anti-aliasing.
  • Change: Do the controls friction calculations before running animations and scripts, this way scripts can use or control the actual view values before rendering the frame.
  • Fix: parent="OVERLAY" elements might have been behind other elements
  • Fix: The tween() action pre-resolved all array indices in the done and update callback codes to allow array indices to be used in the variable being tweened. But this pre-resolving could lead to strange errors if the array indices there had no relation to the tweening variable. Now, only the array indices actually used in the tweening variable are resolved in the callback codes.
  • Fix: krpano Array items can now only be created sequentially if an index-value is used to create them. This prevents the creation of krpano Arrays that have 'holes', which can cause unexpected problems.
  • Fix: setvars() did not set attributes that were not lowercase.
  • Fix: Textual operators like AND, OR, ... were not working in certain nested expressions.
  • Fix: Textfield - skip the BBCode [] to <> conversion inside Strings (e.g. in attributes). This avoids problems when trying to use event code that uses [] characters.
  • Fix: Using <if> inside <layer> elements wasn't working.
  • Fix: There was a wrong local scope in events when the event was dispatched from a localscope action.
  • Fix: There could a be Javascript crash when using setting the parent setting of a hotspot to another hotspot.
  • Fix: If an expression variable evaluates to a value that begins or ends with characters that are also used for expression operators, the expression may have wrongly caused an 'invalid expression' error.
  • Fix: The default value for capturewheel wasn't initialized for polygonal hotspots.
  • Fix: The transition from normal-view to fisheye-view has been smoothed. Previously there was a short initial 'step' before the actual distortions were added.
  • Fix: The text in the krpano-log inside sub-krpano layers was not selectable.

Plugins

  • New: WebVR plugin - new activevrcontroller variable to get the currently active VR controller (the one on which certain buttons, defined by vr_controller_activationbuttons, were pressed most recently).
  • Fix: Disable any custom safearea sizes in WebVR mode and use the full-screen.
  • Fix: webvr.xml - when entering VR mode, hide only the 'root-level' layers without vr="false". Hiding also children layers is not necessary and can be even unwanted.
  • Fix: minimap_zoomrect.xml - using stagescale wasn't supported.
  • Fix: Googlemaps plugin - hide also the default UI controls if no control settings are set.
  • Fix: combobox.xml - wrong opening height inside some layers.

Tools


Examples



Previous Versions: