LuxCoreRender Release Notes v2.12
LuxCore
Features (of interest for users)
- New Prague Sky Model (Wilkie 2021) light sources: sky3 (sky-only) and sun3 (#748)
- OIDN firefly prefilter (#731)
- New parallel implementation of the Simplify shape, much faster; the legacy one kept as simplify_old (#723)
- Displacement shape parallelized with TBB (chunked pre-pass, no useless zero-fills, memory-budgeted chunking) (#742)
- New "tessellate" shape (flat triforce tessellation of a source mesh, props: source, rate) and test scenes scenes/displacement/tessellate*.{scn,cfg}
- Subdivision shape: enhanced mode is now the default and only mode; the simple path is the separate "subdiv_old" shape; merge-on-distance pre-step removed
- Subdivision shape: new "creases" property (none / computed / imported); imported creases are read from PLY edge elements (vertex1/vertex2/crease) or passed via pyluxcore Scene.DefineMeshExt(crease_pairs=..., crease_weights=...); new Scene.GetMeshCreaseCount()
- Faster startup: OpenCL kernels pre-compiled to SPIR-V at build time and cross-baked for all CI legs (work in progress, #733-#739); parallel CUDA/OpenCL kernel compilation with logging and cache management (#724, #725); opencl.splitkernels.enable property and split PathOCL micro-kernels (#726, #727); "Fill kernel cache" without rendering (#732)
Bugfix
- Subdivision shape memory bugs and crash on meshes with isolated vertices; cap adaptive subdivision level to prevent tessellation overflow (#753)
- Fix SavePly crash on phantom empty AOV layers (#741); Fix ComputeNormals leaving meshes without normals (#743); transmit AOVs clamped against their own channel in VarianceClamping (#722)
- Fix memory bugs from audit: bevel ownership, ExtTriangleMesh::Merge triAOV overflow, Buffer/ExtMeshProp sizing (#756); Properties move-assign self-move and dangling refs in luxcoreui (#755)
- OpenCL: skip devices already listed by another platform (#728); fix backend availability detection (#729)
- Serialize DLSCBvh/ELVCBvh/FilterLUT subtypes correctly (#757)
- Fix wheel-test on Windows
Coding/Backend
- Default branch renamed to main
- New slg::GroupByEquivalence (parallel TBB union-find) replacing the quotient-set templates, much faster; 32-bit indices variant; exposed to Python as pyluxcore.union_find (#721, #745)
- C++23; large raw-pointer removal campaign across the codebase (BVH, KdTree, distributions, lights, kernels, devices, meshes...) replaced by smart pointers/spans (#718, #719)
- Windows/macOS/clang build fixes (MSVC u_int, header self-containment, Shape ctor/dtor out-of-line, header-only fmt), CI concurrency control and timeouts for wheel builds
- OpenMP removed from the tessellation and displacement code; replaced by TBB
- Buffer is now a class template
- Buffer copies run in parallel on TBB
- Shared mesh point buffers: pyluxcore DefineMeshExt accepts a mesh name as "points" to share the vertex buffer instead of copying (save memory and time)
BlendLuxCore
Features (of interest for users)
- New Prague Sky Model (Wilkie 2021) light sources: sky3 (sky-only) and sun3 (#1108)
- OIDN firefly suppression option for the denoiser (#1106)
- Subdivision node: enhanced mode is now the only mode (the "enhanced" toggle is gone); the former simple/uniform path remains available as the "subdiv_old" shape
- New "Tessellate" shape node (flat tessellation, rate^2 triangles per source triangle)
- Subdivision node: creases can now be None / Computed (from dihedral angles, as before) / Imported from the mesh data (Blender's crease_edge attribute)
- The merge-on-distance pre-step before subdivision is gone: coincident vertices are welded at export, so subdivided meshes no longer show gaps
Bugfix
- Fix multi-submesh objects overwriting each other in the exported scene (only the last submesh of a material was rendered, e.g. only one ear of Suzanne)
- Fix UV-island run detection on seams
- Fix sky3/sun3 viewport update issues and world_cache initialization (avoids unnecessary viewport retriggerings)
- Fix crash from an assert in Debug builds (LuxCore issue #716)
- Update LoL asset bar preview images for the Blender 5.0 API change
Coding/Backend
- Mesh export: coincident vertices are welded once per mesh and the point buffer is shared between all its submeshes (via the new sharing support in pyluxcore's DefineMeshExt), instead of being duplicated per submesh
- Submeshes are split along UV seams (UV islands) at export; the union-find island computation is contracted to triangle level (much faster on large meshes) and skipped when the mesh has no UV layers
- Triangle indices are cast to uint32 at export (fixes pybind11 rejection of int64 arrays)
- CI: bundle workflow attestation job renamed to attest-bundle (fixes the dangling attestation-url output) and skipped for fork PRs, which have no OIDC ID token
LuxCoreDeps
- LuxCoreDeps 2.2.4 (OpenCL/CUDA kernel compilation improvements, #725)
BlendLuxHelper
- (no changes since v2.11)