We are excited to bring you the second public preview of next year's Octane 2026.1 (Alpha 2 was an internal release). We have packed a large amount of changes into this release, and are looking forward to getting your feedback.

As with all experimental builds, we advise to not use this release for production purposes. We cannot guarantee that scenes saved with this version will be compatible in future releases, but we are trying our best to maintain this compatibility regardless. Please keep in mind that changes are still being made daily.
The macOS version needs a little longer for the last few features to arrive (texture displacement, Gaussian splats, meshlets).
Changes since 2026.1 Alpha 1
CUDA Driver minimum version is now 535. This change is so that we can leverage the latest optimizations and fixes.
LOD Render Data
With this version we added support for loading different levels of detail for images and meshes on the GPU, depending on their scale in image space. This allows you to render much larger scenes without running out of VRAM, without visibly losing details in the rendered image.
The LOD selection process requires rendering the scene and is iterative, i.e. until Octane has found a suitable LOD data selection it will render 1 sample per pixel, update the LOD data, restart rendering, render 1 sample per pixel. After it has found the LOD selection it will continue rendering beyond 1 sample per pixel. At the moment there are still corner cases where the LOD selection doesn't settle. Octane will stop iterating after a fixed number of iterations, log an error and then proceed with the regular progressive rendering.
To influence the LOD selection that decides which level of detail should be rendered, we added the input "LOD selection bias" to all kernel nodes. The default value is 0 and setting it to a lower value, will reduce the level of detail i.e. lower resolution texture and mesh data will be loaded to the GPU. Increasing the value will increase the level of detail.
Network rendering is currently not supported for meshlets or virtual textures and if you try to render a scene that contains either of those over the network, the net render nodes will be paused and only the master will render until the scene doesn't contain any LOD data anymore.
To make meshlets and virtual textures work on multi-GPU setups, Octane will stop and restart rendering whenever there is a change in the selection of rendering devices. We hope to avoid that in a future update.
Virtual Textures
You can load images and sets of tiles as a virtual texture. For tiles ("UV tiles" and "Tile set") one virtual texture will be built for the entire set of tiles. This allows you to load images of hundreds of gigapixels which are usually stored in image files as a grid of tiles. For both images and tile sets, virtual texturing can be enabled in the image import settings.
The first time an image is used as a virtual texture, a cache needs to be built so that the render engine can quickly update the data on the GPU as needed when the camera moves or when the scene is updated. After this cache is built, Octane no longer needs access to the original image data as long as this cache doesn’t get cleared.
The maximum tile cache size can be configured in the application preferences. You can use arbitrarily large images as long as you have the disk space necessary to store the tile cache (and the patience to get the tile cache built). A 1 gigapixel 8-bit color image will take up approximately 1.3 gigabytes.
Current limitations:
- If you use a virtual texture, neither the tile cache nor the original image will be embedded into ORBX files, due to the potentially very large data sizes involved.
- You can not yet use virtual textures in material previews, or in environment maps that have importance sampling enabled.
- Normal maps and bump maps may look weaker at coarser levels of detail
Meshlets
To enable the conversion of a mesh to a meshlet mesh, turn on the option "Convert to meshlets" in the mesh import preferences. The conversion will happen when the scene is compiled and prepared for rendering. This will probably move to the node evaluation stage in the future.
This is an early version and comes with the following limitations:
- Meshlets are only supported on Windows and Linux. We hope to have the macOS version ready for the next release.
- Vertex motion blur, displacement and vertex displacement are not supported yet. We are planning to support vertex motion blur and vertex displacement in the future.
- The baking camera is not supported for meshlet meshes and probably never will be.
octane.caches
module.Meshlet data will not be stored in ORBX packages - only the original source geometry will. The reason for that is that the meshlet data usually requires about 4-5x as much data as the original data.
The "Convert to meshlets" option is currently only available for mesh nodes and not in Scene node graphs, which means you can't convert Alembic or FBX mesh data to meshlets yet. We are planning to add the option to the Scene node graph as well.
Plugins that usually provide mesh data via memory buffers, need to specify a unique ID that identifies a mesh with the same data between sessions. The export to ORBX will then store those IDs in the Alembic and FBX files, which then load those meshes as meshlet meshes as well.
New Features in this Release
- Initial support for OpenPBR surface material that is authorable and importable from MaterialX
- Added Distorted UVW projection node.
- New node (tile set) which represents a single image split into tiles, which gets UV mapped
in the same way as image textures - Added ability to reverse the order of image tiles along the V axis
- Added "scan" button to automatically determine grid size in the image tiles load dialog
- The file name pattern for selecting image tiles is saved in ORBX and OCS files, so that we can reliably show the correct pattern after loading a scene from disk.
- Added a
type
parameter tooctane.node.getAttribute()
andoctane.node.getAttributeIx()
to explicitly specify which type of value is required. For NT_FLOAT, NT_INT and NT_FLOAT_TIME, we return AT_FLOAT3 by default to avoid a breaking change in Lua scripts, since that is the original attribute type. - Gaussian splatting now supports receiving shadows and scaling radiance with the scene light emitters. Note: Gaussian splats don't support shadows from shadow catcher material. The support for it may be added in future releases.
- Added covariance bias and scale pins for Gaussian splat node. This bias can be used to improve rendering of thin lines such as text labels.
- Added "Light pass ID" pin for Gaussian splat node. Gaussian splats will be displayed in the corresponding light AOV.
- Added new AOV for Gaussian splats (NT_AOV_GAUSSIAN_SPLAT)
- Added Gaussian splat info AOV (NT_AOV_GAUSSIAN_SPLAT_INFO). This AOV is less noisy than the beauty Gaussian splat AOV, but doesn't support lighting/shadows.
- Added Open Image Denoise quality settings to the "Imager" node and "Open Image Denoise" output AOV node. These let you to choose between fast, balanced and high quality (default) filter modes.
- Open Image Denoiser has been updated to version 2.3.3, which includes Blackwell support, and also support for Metal devices. Open Image Denoise is now the default denoiser type for newly-created imager nodes.
USD Updates
- Added a USD stage editor to Octane. The editor can be accessed from the "Window" tab menu, it currently only supports variants and layers features, but it will be expanded to do various USD related things in future. The intended workflow involves opening a USD stage, making edits then either import(converting to native Octane nodes) or saving changes to a USD file, Additionally you can render the USD stage and view updates in real time. Alternatively If no changes are required to a USD file, you can just use existing importer to load a USD scene.
- USD importer now supports importing Dome Lights with IBLs adding a texture input and environment output to the USD node
- USD importer now supports loading custom vertex color and float primvars from USD geometry
- USD importer now skipps loading unused materials
MaterialX Updates
- Added support for importing displacement and emission from both .mtlx and USD
- Improved support for 'bump', 'heighttonormal' and 'normalmap'
- Improved support for importing normal maps from both .mtlx and USD
- Added support for boolean typed texture inputs and outputs
- Added support for boolean input type to 'constant' node
- Added support for boolean input and output type to 'convert' node
- Changed 'space', 'fromspace' and 'tospace' inputs (for all nodes that have them) from Enum to String with value options
- Changed 'index' input of 'extract' nodes from Enum to Int with bounds
- Changed 'operationorder' input of 'place2d' node from Enum to texture int with combo-box
- Changed 'lomacoeffs' input pin from texture color pin to uniform float3 pin in 'luminance' and 'saturation' nodes
- Changed 'doclamp' input pin of 'range' node from uniform Bool type to a typed texture pin of static type boolean
- Changed default coordinate system of space pins to world space
- Fixed importing 'geompropvalue' node when set to prop "st" to use the texture coordinates
- Fixed errors in 'transformvector' , 'transformnormal' and 'transformpoint' when the from and to spaces are the same
- Fixed Frame node being skipped when importing
- Added 'heighttonormal' node using derivatives
- Added 'bump' node using 'heighttonormal' and 'normalmap' internally
- Added 'geompropvalue' and 'geomcolor' nodes
- Added 'trianglewave' node with a scalar float configuration
- Added 'fract' math node with a scalar float configuration
- Added 'colorcorrect' node with color3 and color4 configuration
- Added 'randomcolor' and 'randomfloat' nodes using 'cellnoise' for seeding
- Added 'creatmatrix' with separate node types for 3x3 and 4x4 matrices
- Added 'reflect' and 'refract' vector math nodes
- Added 'viewdirection' geom-prop node
- Added 'and', 'not', 'or' and 'xor' logical operator nodes
- Added 'style' input to 'worleynoise2d' and 'worleynoise3d' nodes with solid color option
- Added 'bitangent' input to 'normalmap' node and removed 'space' input
- Added int configurations to 'switch' and conditional nodes and to 'add' and 'subtract' math nodes
- Added UDIM support with "*<UDIM>*" pattern in the file path when authoring or importing
- Added support for the 'layer' input for selecting a layer by name from multi-layered files
- Changed pin type of filename pin of to be a regular string input
- Changed 'uadressmode' and 'vadressmode' inputs from Enum to String with value options
- Fixed support for border modes when using regular normal maps
- Fixed nodes incorrectly loading in greyscale when set to a scalar type
- Added matrix type configurations for 'switch' node
- Added matrix and int type configurations to conditional nodes ('ifequal', 'ifgreater' and 'ifgreatereq')
- Added conditional nodes that output a boolean and only take 2 compared value inputs
- Added IfEqualB node taking boolean comparison value inputs
- Changed conditional nodes to support int and float as main inputs and toggle on secondary value inputs between float and int
- Changed switch node which input UI to a drop-down list with options of 0-9 when it is toggled to use int type
OSL Updates
- You can use vector4 inputs on OSL nodes, the UI will now show all 4 channels of such inputs.
-
_evaluateDelayed
and related intrinsics now accept _sdf input parameters, and all types which can be turned into typed texture inputs: int, float, vector2, vector, vector4, color, color4. - In OSL you can now pass in differentials to texture().
- Typed texture OSL node inputs (like vector4) can have a custom slider step
- Fixed baking camera padding size not being updated correctly when using a camera switch node.
- Fixed camera navigation behaviour of universal cameras in panoramic mode.
- Fixed too fast panning speed with thin lens cameras when using distortion with very wide FOV angles.
- Fixed crashes when adjusting a baked texture that is used for texture displacement.
- Fixed default pin values for OSL inputs for struct inputs which are using function style constructors as initializers. (eg.
vector4 a = vector4(1, 2, 3, 4)
). - Fixed possible crash when using the "Open user script" button in the lua scripting component.
- Fixed possible infinite loop when stacking identical OSL nodes with delayed inputs.
- Fixed possible render engine hang after copying and pasting baking texture nodes.
- Fixed possible render engine hang when setting an interactive region immediately after starting a
render with photon mapping. - Fixed wrong SSS appearance for liquid in glass on macOS.
- Fixed wrong UV mapping of 3D procedural textures used as input to a Color to UV node if that node goes to an image texture node projection input.
- Added ability to load EXR layers that only contain a Z channel.
- Added a texture input to the Realistic Lens camera to specify a custom aperture texture.
- Added ability to select IOR < 1.0 on every material with dielectric transmission.
- Fixed crash when deleting a localDB category in the save dialog.
- Fixed descriptions of render pass nodes with a type input.
- Fixed differentials on fisheye, cubic and orthographic cameras.
- Mitigate bump map artefacts on curved meshes.
- Material and texture previews now render at full screen resolution on Retina displays.
- Denoise albedo render AOV will now include emission texture color.
- Dirt and curvature tracing is now affected by trace sets.
- Fixed a bug where render AOV inputs to output AOVs used an incorrect alpha channel if "keep environment" was enabled in the kernel.
- Fixed a crash when enabling the denoiser after rendering has already started (macOS with an M3 or M4 CPU only).
- Fixed undo of the "keep upright" input of the universal camera node.
- Fixed USD winding order orientation, it is now as per the orientation attribute of the USD geometry prim
- Fixed a bug that broke texture displacement (old and new) when making changes to the node graph.
- Fixed a bug that caused texture corruption when changing denoisers during rendering.
- Fixed a bug where exporting multiple AOVs during rendering could produce inconsistent samples per pixel between AOVs.
- Fixed a crash when a Composite Material is used as the base material input of a Layered Material.
- Fixed a decal rendering issue when the decal node is configured with six textures.
- Fixed a render failure when using a Mix material or Standard Surface material as the base of a Layered material while certain post processing effects are enabled.
- Fixed an issue where denoised AOVs could have bright fringes when alpha channel is enabled and environment medium is used.
- Fixed an unnecessary render restarts when switching the denoiser type while the denoiser is disabled.
- Fixed camera mask AOV having imager settings applied to it.
- Fixed denoised output being too dark when using a custom camera aperture texture.
- Fixed denoised output when using chromatic aberration with realistic lens camera.
- Fixed denoised render AOVs and volume mask render AOV containing an unintended alpha premultiplication when kernel alpha channel is enabled.
- Fixed denoiser output and environment AOV when using universal camera with custom aperture texture, or realistic lens camera.
- Fixed flickering tooltips in the Render Network browser.
- Fixed incorrect addition of post processing to beauty pass when alpha channel is enabled.
- Fixed link error when using new texture displacement with analytic lights.
- Fixed network rendering of gaussian splats
- Fixed output AOVs not working after using a switch node to change to a disconnected input.
- Fixed rendering error when rest attributes were used with
vertex displacement - Fixed spectral textures (e.g. star field) shifting to purple when used in a composite texture.
- Fixed that POSIX file handles were not released of loaded ORBX packages. This bug affected Linux and macOS.
- Fixed the denoiser sometimes not running for complex output AOVs when rendering completes.
- Fixed the render error which occurs when we add emission to decal wireframe materials.
- Fixed the render region settings that restarts render the first time its enabled and disabled.
- Gaussian splats can now be excluded using trace sets.
- Gaussian splats now correctly displayed in the render layer passes
- Improved gaussian splatting performance
- Improve node inspector UX for texture inputs that represent a boolean as a typed texture input of an integer by presenting a checkbox
- Improved log feedback when the installed driver does not support the required version of CUDA.
- Improved rendering of gaussian splats in scenes that contain volumes. Previously GS would always be rendered on top, even if volume was in front of it. It may still produce incorrect results if volume and GS intersect.
- In the application preferences you can specify the size of the meshlet cache in GB. This is a somewhat soft limit, because if the currently opened scene requires more storage space, then that will be allowed.
- Initial support for OpenPBR surface material that is authorable and importable from MaterialX.
- Multiple Octane processes on the same system can now use the Render Network browser at the same time.
- New node (tile set) which represents a single image split into tiles, which gets UV mapped in the same way as image textures
- OCIO configs up to version 2.4 are now supported. Archived OCIO configs (.ocioz files) are also supported. Built-in OCIO configs can now be used by using the OCIO URI format instead of a file path, e.g.
ocio://default
. - Removed CPU fallback for octane AI denoiser on linux to make it consistent across platforms.
- Removed incorrect error message about dirt when using global texture AOVs with no dirt.
- Resolved an issue where the decal node's priority and UV transform settings were not applied when connected to an object layer map node
- The Texture output AOV layer node now has a "Premultiplied alpha" pin, for RGB + alpha textures that are premultiplied.
- The post processing render AOV is now fully opaque, to make compositing easier, since it's a purely additive pass to which the alpha channel is irrelevant.
- Vectron geometry and volume SDFs can now be excluded using trace sets (by using an object layer map node).
- Volumes can now apply trace set exclusions on scatter bounces (these are considered "Diffuse" bounces by trace set visibility rules).
- You can access the path length in OSL shaders, with `getattribute("hit:pathlength")`.
- Vectron: Inset operator is replaced by Push and Pull. Push means we push into the surface of the first operand, in the shape of the second operand. Pull means we pull out of the surface of the first operand, in the shape of the second operand. These nodes have a "Transfer material" option that was lacking from Inset.
- Vectron: Added Avoid and Repel operators. Avoid means the first operand is deformed inward so as to not touch the second operand surface. Repel means the second operand is deformed inward so as to not touch the first operand.
- Vectron: Added Mirror, Linear array and Circular array operators.
- Vectron: Added Cone primitive.
- Fixed several bugs in new texture displacement.
- Fixed some random render failures.
- Fixed subtle intersection quality bug in new texture displacement.
- Gaussian splats now correctly displayed in the render layer passes
- Lua scripted node graphs can now be loaded by dragging and dropping a .lua file on the node graph editor.
- Round edges tracing is now affected by trace sets.
Studio+ Downloads
2026.1 Alpha 3 Standalone for Windows (installer)
2026.1 Alpha 3 Standalone for Windows (ZIP archive)
All other build types will be included in subsequent releases.
Happy rendering
Your OTOY team