LuxCoreRender Release Notes v2.12: Difference between revisions

From LuxCoreRender Wiki
Jump to navigation Jump to search
Line 4: Line 4:
* OIDN firefly prefilter (#731)
* OIDN firefly prefilter (#731)
* New parallel implementation of the Simplify shape, much faster; the legacy one kept as simplify_old (#723)
* 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)
* Displacement shape parallelized with TBB (chunked pre-pass, no useless zero-fills, memory-budgeted chunking), much faster (#742)
* New "tessellate" shape (flat triforce tessellation of a source mesh, props: source, rate) and test scenes scenes/displacement/tessellate*.{scn,cfg}
* New "tessellate" shape (flat triforce tessellation of a source mesh, props: source, rate) and test scenes scenes/displacement/tessellate*.{scn,cfg}. Can be a faster alternative to subdivision in "subdivide -> displace -> simplify" workflow.
* 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: 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()
* 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()

Revision as of 07:48, 8 November 2026

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), much faster (#742)
  • New "tessellate" shape (flat triforce tessellation of a source mesh, props: source, rate) and test scenes scenes/displacement/tessellate*.{scn,cfg}. Can be a faster alternative to subdivision in "subdivide -> displace -> simplify" workflow.
  • 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 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)