diff options
author | Sebastian Herhoz <sebastian.herholz@intel.com> | 2022-09-21 18:58:34 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2022-09-27 16:56:32 +0300 |
commit | 75a6d3abf75f3082adf5240ae34973844c0d9a09 (patch) | |
tree | 6967aea2480187db007cdc003bad14fbb372570d /intern/cycles/cmake | |
parent | 6d19da0b2d468f099e0c1f56392ab8a1750d114f (diff) |
Cycles: add Path Guiding on CPU through Intel OpenPGL
This adds path guiding features into Cycles by integrating Intel's Open Path
Guiding Library. It can be enabled in the Sampling > Path Guiding panel in the
render properties.
This feature helps reduce noise in scenes where finding a path to light is
difficult for regular path tracing.
The current implementation supports guiding directional sampling decisions on
surfaces, when the material contains a least one diffuse component, and in
volumes with isotropic and anisotropic Henyey-Greenstein phase functions.
On surfaces, the guided sampling decision is proportional to the product of
the incident radiance and the normal-oriented cosine lobe and in volumes it
is proportional to the product of the incident radiance and the phase function.
The incident radiance field of a scene is learned and updated during rendering
after each per-frame rendering iteration/progression.
At the moment, path guiding is only supported by the CPU backend. Support for
GPU backends will be added in future versions of OpenPGL.
Ref T92571
Differential Revision: https://developer.blender.org/D15286
Diffstat (limited to 'intern/cycles/cmake')
-rw-r--r-- | intern/cycles/cmake/external_libs.cmake | 23 | ||||
-rw-r--r-- | intern/cycles/cmake/macros.cmake | 3 |
2 files changed, 26 insertions, 0 deletions
diff --git a/intern/cycles/cmake/external_libs.cmake b/intern/cycles/cmake/external_libs.cmake index 5854c80fb9f..ab709b1ca10 100644 --- a/intern/cycles/cmake/external_libs.cmake +++ b/intern/cycles/cmake/external_libs.cmake @@ -104,6 +104,10 @@ if(CYCLES_STANDALONE_REPOSITORY) else() unset(_cycles_lib_dir) endif() +else() + if(EXISTS ${LIBDIR}) + set(_cycles_lib_dir ${LIBDIR}) + endif() endif() ########################################################################### @@ -270,6 +274,25 @@ if(CYCLES_STANDALONE_REPOSITORY AND WITH_CYCLES_OSL) endif() ########################################################################### +# OpenPGL +########################################################################### + +if(WITH_CYCLES_PATH_GUIDING) + if(EXISTS ${_cycles_lib_dir}) + set(openpgl_DIR ${_cycles_lib_dir}/openpgl/lib/cmake/openpgl) + endif() + + find_package(openpgl QUIET) + if(openpgl_FOUND) + get_target_property(OPENPGL_LIBRARIES openpgl::openpgl LOCATION) + get_target_property(OPENPGL_INCLUDE_DIR openpgl::openpgl INTERFACE_INCLUDE_DIRECTORIES) + else() + set(WITH_CYCLES_PATH_GUIDING OFF) + message(STATUS "OpenPGL not found, disabling WITH_CYCLES_PATH_GUIDING") + endif() +endif() + +########################################################################### # OpenColorIO ########################################################################### diff --git a/intern/cycles/cmake/macros.cmake b/intern/cycles/cmake/macros.cmake index 786d061599f..4ad438c65f9 100644 --- a/intern/cycles/cmake/macros.cmake +++ b/intern/cycles/cmake/macros.cmake @@ -118,6 +118,9 @@ macro(cycles_external_libraries_append libraries) if(WITH_ALEMBIC) list(APPEND ${libraries} ${ALEMBIC_LIBRARIES}) endif() + if(WITH_PATH_GUIDING) + target_link_libraries(${target} ${OPENPGL_LIBRARIES}) + endif() list(APPEND ${libraries} ${OPENIMAGEIO_LIBRARIES} |