Difference between revisions of "LuxCoreRender Release Notes v2.4"

From LuxCoreRender Wiki
Jump to navigation Jump to search
Line 76: Line 76:
===Known Problems===
===Known Problems===
* LuxCore API requires latin locale
* accelerator.bvh.builder.type = EMBREE_MORTON doesn't work with the latest Embree
* accelerator.bvh.builder.type = EMBREE_MORTON doesn't work with the latest Embree
* Python crashes when calling sys.exit()
* Python crashes when calling sys.exit()

Revision as of 09:42, 28 June 2020


New Features

  • New OpenCL code to evaluate textures and materials. It doesn't require kernel re-compilation anymore
  • LuxCoreUI "Fill kernel cache" menu option now pre-compile all possible GPU kernels
  • LuxCore API KernelCacheFill() is now available for Python
  • New 2-levels Env. Light Visibility Cache (ELVC)
  • Added the support for a new ".sharpness" (default value 0.1, range [0.0, 1.0]) Intel OIDN parameter to blend original and denoised output
  • Removed LuxRays support for virtual devices and hybrid rendering (old LuxRender GPU doing ray intersections and CPU everything else)
  • Geometry vertex and triangle AOVs (arbitrary data associated to mesh vertices and triangle usable by textures)
  • Removed the support for Triplanar texture .uvindex (side effect of the above new feature)
  • New hitpointvertexaov and hitpointtriangleaov textures
  • Pointiness shape can now assign curvature values to vertex AOV with .aovindex property (a 4294967296 value will force the use of alpha channel instead, default value for compatibility with the past)
  • LuxCore API has now SetMeshVertexAOV() and SetMeshTriangleAOV() methods to set geometry vertex and triangle AOV
  • Added the support for new Random texture
  • Added the support for the new IslandAOV shape
  • Added the support for RandomTriangleAOV shape
  • Accelerated duplicate vertex detection in pointiness shape (from 6.7 seconds to 0.016 seconds on a 100k vertex mesh)
  • LuxRays API reworked to support generic hardware devices (now OpenCL, potentially CUDA, Vulkan, Metal, etc.)
  • Added the support for light groups to PhotonGI
  • New LuxCore API RenderConfig::HasCachedKernels() method to check if a (long) kernel compilation time is required
  • Glossycoating material on GPUs now supports bump mapping exactly like CPU version (issue #307)
  • Mix material on GPUs now supports bump mapping exactly like CPU version (issue #307)
  • Added processor group support to enable LuxCoreRender to use more than 64 logical processors on Windows
  • Added the support for CUDA rendering
  • Added the support for out of core CUDA rendering (i.e. to render scenes larger than GPU ram available)
  • GPU rendering now uses 64bit image map pixel indices (i.e. removed the limit of 8 * 4GB of scene image maps)
  • New cache and out-of-core friendly mode for Random/Sobol samplers
  • Added the support for denoising baked light maps with Intel ODIN
  • pyluxcoretools merge now supports saving film AOVs via new --aov-output option
  • New improved Metropolis sampler warmup period
  • Added thin film interference option for many materials
  • Added the support for a new color re-mapping image pipeline plug-in using .cube files (issue #81)
  • LuxCore API now support unicode UTF-8 strings and files
  • luxcore::KernelCacheFill() now supports opencl.devices.select, scene.epsilon.min and scene.epsilon.max properties (issue #374)
  • LuxCoreRender can now be compiled without OpenCL/CUDA SDK and it will load OpenCL/CUDA at run time (one executable can now be used for all types of installations)
  • RTPathOCLRenderEngine::WaitNewFrame() takes is not more synchronous with rendering refresh
  • The use of more than 64 logical processors on Windows is now extended to all render engines
  • It is now possible to render scenes without light sources (!)
  • The use of more than 64 logical processors on Windows is now extended to all pre-processing tasks like caches, etc.

Fixed Bugs

  • Fixed a rendering difference when using/not using geometry negative scale transformations (issue #309)
  • Fixed an out of bound access in BAKECPU
  • Fixed a problem when using path.forceblackbackground.enable and env. lights
  • Fixed a problem with scenes with very hard light paths and Metropolis sampler (issue #312)
  • Sampler shared data are now reseted at the end of a scene edit (issue #312)
  • Fixed a problem in automatic cache radius estimation of PhotonGI when using Orthographic camera (issue #324)
  • Fixed an OpenCL compilation error when using large number of objects on some old GPUs
  • Fixed a problem with BlendLuxCore when parsing more than 9 image pipelines (#336)
  • Fixed a bug causing fireflies when using light tracing for caustics in some case (#329)
  • Fixed a crash when using RemoveUnusedTextures() with Volumes (issue #377)
  • Fixed a banding problem when using sphere light sources with very small radius (issue LuxCoreRender/BlendLuxCore#477)
  • Fixed LXS parsing of UV inlined coordinates (issue #392)

Changes that break backwards-compatibility

Due to Glossycoating updated support for bump mapping on GPUs, some old scene using this kind of material/bump map combination may require some fix.

About Performance on GPUs

In the past versions, we have been moving from very specialized, scene dependent OpenCL kernels to general-purpose kernels. This development simultaneously has drawbacks and benefits in simple scenes, which are explained below. Complex scenes that use most features and shaders of LuxCore are less affected by the drawbacks, sometimes not at all, while still reaping the full benefits.

  • v2.2 is fastest (at samples/sec) because it uses conditional compilation: lots of renderengine features and materials/textures are turned off when not used. Requires kernel re-compilations each time you change rendersettings or material/texture settings. Viewport rendering with OpenCL engines is out of the question, unless all you do is move the camera or other objects around.
  • v2.3 is slower because it no longer uses conditional compilation for renderengine features: all of them are active, always. This means that re-compilations are no longer necessary when changing render settings (e.g. clamping value). Materials/textures still use conditional compilation in v2.3, requiring re-compilations on most shader changes, which makes OpenCL engines still unusable for viewport rendering.
  • v2.4 is slowest because it has no conditional compilation at all anymore. The kernel is compiled once for each engine type with all features enabled, and materials/textures are now evaluated at runtime using a stack-based method.

Note, the speed difference is more visible the simpler the scene is. This is because with conditional compilation, most features will be disabled in such a scene. The more features your scene uses (meaning, the more complex it is), the less this matters. With a very complex scene using all features, v2.2 will have very similar speed to v2.4.

Also, don't forget that you now save the time for kernel compilation, always (which could range from seconds to minutes). This can actually benefit simpler scenes, if the total rendertime is short (like for animations). If you render 500 frames at 60 sec/frame, saving 20 seconds of kernel compilation can matter a lot.

Known Problems

  • accelerator.bvh.builder.type = EMBREE_MORTON doesn't work with the latest Embree
  • Python crashes when calling sys.exit()
  • TILEPATHOCL (and RTPATHOCL) count the layers of transparent surfaces as an iteration of the rendering finite state machine so they require to increase the max. path depth to avoid black regions.
  • Light emitted by motion blurred triangle lights is approximated using the triangle area of time 0.0 (computing triangle area at runtime would be expansive) so it may be not totally accurate if the motion blur transformation include a scale.
  • Variance clamping is not applied to AOVs

Blender Addon (BlendLuxCore)

New Features

  • Optimize viewport update checks in scenes with many particles/duplis
  • Replaced the Eevee lookdev (which required Cycles materials) with an albedo render mode that is intended as a fast texture preview for both Lux and Cycles node trees
  • Node editor quality of life (support for muting nodes and some node wrangler functions)
  • When using PhotonGI debug modes, disable light tracing and use an exposure compensated tonemapper
  • Support for custom split normals, weighted normals etc. (only in Blender versions 2.82a and 2.83)
  • Reworked statistics, added some sub-stats about export time (mesh conversion time, hair conversion time) as well as information about which caches are enabled/disabled
  • Use Cycles nodes on linked materials without Lux nodes (so materials on Cycles assets automatically try to use Cycles nodes, unless you create a Lux material on the assets)
  • Limit max. subdiv in material previews to 1
  • Add support for indirect only collection visibility mode
  • Support for manta flow smoke export in blender 2.82
  • New triplanar normalmap node
  • Add triplanar projection mode to imagemap node, general rework/polishing of the imagemap node
  • Add support for transparency in the denoised result (both viewport and final render)
  • Emulate Cycles material UI in Lux material node editor (material and slot dropdown instead of node tree dropdown)
  • Thin film coating support for glass and disney materials
  • Cycles node reader:
    • Add support for nested Cycles node groups
    • Add support for principled emission, alpha and transmission sockets
    • Add support for geometry node outputs: position and normal
    • Add support for object info node outputs: object index, material index, random
    • Add support for refraction shader
    • Add support for blackbody texture
  • LuxCore Online Library is now integrated in Blender (3D view > N-Panel > LuxCoreOnlineLibrary tab)
  • New addon preferences:
    • GPU backend (OpenCL/CUDA)
    • Option to enable/disable image node thumbnails on new nodes by default
    • LuxCore Online Library preferences
  • Support for new sampling patterns and out-of-core rendering
  • Amount of light tracing samples is now shown in statistics (image editor > N-Panel > LuxCore tab)
  • Support for COLOR_LUT imagepipeline plugin, allowing to load .cube LUT files
  • New material presets:
    • Hybrid glass (regular refractive glass with white shadow color, as an alternative to architectural glass)
    • Colored smoke
  • New interactive render settings guide
  • New maximum input to invert node
  • New "Visible" setting for area lights, disabling hides the light not only for the camera, but also for shadow rays

Fixed Bugs

  • Fix world volume ui panel drawing
  • Fix material presets panel not showing without a material
  • Fix remesh panel in mesh data properties not showing up
  • Fix bugs in 3D mapping node UI (the controls were disappearing when the selected object was of type "CURVE", "SURFACE" or "FONT")
  • Fix export of metaballs with shared data
  • Fix shapes being added to cached meshes over and over in viewport render
  • Fix check for UV maps on curve, surface and font objects being broken
  • Fix shapes not working on hair
  • Fix possible key collision in image exporter after undo (fixes #431)
  • Fix color tint not working for sky and HDRIs
  • Put Blender post processing panel in the right place (output props instead of render props)
  • Fix wrong view layer visibility check
  • Fix possible config export error if film opencl device was not set

Known Problems