PlayCanvas Releases V 2.9 of Engine

PlayCanvas Releases V 2.9 of Engine

PlayCanvas Releases V 2.9 of Engine

Michael Rubloff

Michael Rubloff

Jul 3, 2025

Email
Copy Link
Twitter
Linkedin
Reddit
Whatsapp
PlayCanvas
PlayCanvas

The latest PlayCanvas Engine update delivers a wide range of improvements aimed at making gaussian splatting rendering faster, more efficient, and more developer friendly. From fine tuned shader adjustments to broader input control support, this release continues PlayCanvas’s evolution as a top tier web based engine.

One of the key highlights in this update is a smart limitation on large Gaussians. Excessively large kernel sizes on high resolution displays were causing performance concerns, so the engine now caps Gaussian kernel dimensions at 1024 pixels. This change ensures better GPU performance across both WGSL and GLSL shader variants, keeping rendering efficient without compromising visual fidelity.

The team also added support for indirect draw calls in WebGPU, marking a major performance improvement. By batching draw parameters into a single storage buffer, the engine can now feed them through compute shaders more efficiently, enabling high performance rendering scenarios. This addition lays the groundwork for more scalable, complex scenes in WebGPU environments.

On the topic of shaders, a new fastExp implementation has been introduced specifically for Gaussian Splatting. This lightweight exponential function boosts performance when rendering large numbers of splats, especially on mobile devices.

Further enhancements include support for asynchronous texture writing, the ability to preprocess compute shader source code before runtime, and several shader side additions like WGSL based gizmos and grid rendering. These all contribute to smoother developer workflows and better runtime behavior.

Another major update arrives in the form of a comprehensive input system overhaul. Developers now have access to a flexible set of input sources, from gamepads and multitouch gestures to single touch and keyboard mouse setups. These input types feed into reusable controllers like FlyController, OrbitController, and FocusController, which apply smooth transformations to 3D poses. The new Pose class also introduces APIs for constraints, look directions, and interpolations.

For first-person views, the camera control scripts have been rewritten to use these new input sources. Developers can now access more keyboard bindings, better pointer lock support, and enhanced gamepad behavior, all using consistent camelCase naming conventions and static field structures.

Gaussian Splatting workflows also get a nice quality of life improvement with new PLY asset load events. When a PLY is loaded, the engine fires a load:data event that exposes the GSplatData before it becomes an instance. This allows custom scripts (like those used in SuperSplat) to tweak splat data at runtime.

A particularly clever optimization targets scenes using Self-Organizing Gaussians (SOGS). By switching to a fast render path for spherical harmonics, evaluated once per frame using the camera's Z direction rather than per Gaussian view vectors. The engine dramatically improves memory access patterns. Developers can toggle this behavior via a new highQualitySH flag.

Behind the scenes, PlayCanvas has also cleaned up and expanded several internal systems. The gsplat sort worker now supports Node.js environments, allowing preprocessing and sorting outside the browser. The engine also introduces baseVertex support, improved functionality for resizing textures, and adds beta build triggers for more flexible testing. Meanwhile, updates to JSDoc for the Material class and added export conditions continue to improve the overall developer experience.

This release is packed with features that serve both performance hungry use cases like real time Gaussian Splatting and usability focused improvements for developers working across desktop, mobile, and cloud-based workflows. PlayCanvas continues to cement itself as the go to platform for editing and distributing gaussian splatting captures. The full changelog can be found here.