This patch automatically grays out input values which can't affect the output currently. It works with inputs of group nodes, geometry nodes modifiers and node tools. To achieve this, it analyses the node tree and partially evaluates it to figure out which group inputs are currently not linked to an output or are disabled by e.g. some switch node. Original proposal: https://devtalk.blender.org/t/dynamic-socket-visibility/31874 Related info in blog post: https://code.blender.org/2023/11/geometry-nodes-workshop-november-2023/#dynamic-socket-visibility Follow up task for designing a UI that allows hiding sockets: #132706 Limitations: * The inferencing does not update correctly when a socket starts being animated/driven. I haven't found a good way to invalidate the cache in a good way reliably yet. It's only a very short term problem though. It fixes itself after the next modification of the node tree and is only noticeable when animating some specific sockets such as the switch node condition. * Whether a socket is grayed out is not exposed in the Python API yet. That will be done separately. * Only a partial evaluation is done to determine if an input affects an output. There should be no cases where a socket is found to be unused when it can actually affect the output. However, there can be cases where a socket is inferenced to be used even if it is not due to some complex condition. Depending on the exact circumstances, this can either be improved or the condition in the node tree should be simplified. Pull Request: https://projects.blender.org/blender/blender/pulls/132219
216 lines
4.6 KiB
CMake
216 lines
4.6 KiB
CMake
# SPDX-FileCopyrightText: 2006 Blender Authors
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
set(DISCOVER_NODES_PATH ${CMAKE_CURRENT_SOURCE_DIR}/intern/discover_nodes.py)
|
|
|
|
# Creates a library with the given name that exposes one function which calls
|
|
# the register functions of all nodes in the provided source files.
|
|
function(add_node_discovery
|
|
lib_name
|
|
sources
|
|
output_file
|
|
output_function
|
|
)
|
|
|
|
set(extra_args "")
|
|
|
|
# See `add_definitions(-DUSE_MAKEFILE_WORKAROUND)` comment for `makesrna`.
|
|
if(CMAKE_GENERATOR MATCHES ".*Unix Makefiles")
|
|
set(extra_args "--use-makefile-workaround")
|
|
endif()
|
|
|
|
add_custom_command(
|
|
OUTPUT
|
|
${output_file}
|
|
COMMAND
|
|
${PYTHON_EXECUTABLE}
|
|
${DISCOVER_NODES_PATH}
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
${output_file}
|
|
${output_function}
|
|
${sources}
|
|
${extra_args}
|
|
DEPENDS
|
|
${SRC}
|
|
${DISCOVER_NODES_PATH}
|
|
)
|
|
set_source_files_properties(${output_file} PROPERTIES GENERATED TRUE)
|
|
add_library(${lib_name} ${output_file})
|
|
endfunction()
|
|
|
|
add_subdirectory(composite)
|
|
add_subdirectory(function)
|
|
add_subdirectory(geometry)
|
|
add_subdirectory(shader)
|
|
add_subdirectory(texture)
|
|
|
|
set(INC
|
|
PUBLIC .
|
|
composite
|
|
function
|
|
geometry
|
|
intern
|
|
shader
|
|
texture
|
|
../animrig
|
|
../editors/include
|
|
../depsgraph
|
|
../makesrna
|
|
../modifiers
|
|
|
|
# RNA_prototypes.hh
|
|
${CMAKE_BINARY_DIR}/source/blender/makesrna
|
|
)
|
|
|
|
set(INC_SYS
|
|
)
|
|
|
|
set(SRC
|
|
intern/derived_node_tree.cc
|
|
intern/geometry_nodes_dependencies.cc
|
|
intern/geometry_nodes_execute.cc
|
|
intern/geometry_nodes_foreach_geometry_element_zone.cc
|
|
intern/geometry_nodes_gizmos.cc
|
|
intern/geometry_nodes_lazy_function.cc
|
|
intern/geometry_nodes_log.cc
|
|
intern/geometry_nodes_repeat_zone.cc
|
|
intern/inverse_eval.cc
|
|
intern/math_functions.cc
|
|
intern/node_common.cc
|
|
intern/node_declaration.cc
|
|
intern/node_exec.cc
|
|
intern/node_geometry_exec.cc
|
|
intern/node_multi_function.cc
|
|
intern/node_register.cc
|
|
intern/node_rna_define.cc
|
|
intern/node_socket.cc
|
|
intern/node_socket_declarations.cc
|
|
intern/node_util.cc
|
|
intern/partial_eval.cc
|
|
intern/socket_search_link.cc
|
|
intern/socket_usage_inference.cc
|
|
intern/value_elem.cc
|
|
|
|
NOD_common.hh
|
|
NOD_composite.hh
|
|
NOD_derived_node_tree.hh
|
|
NOD_geometry.hh
|
|
NOD_geometry_exec.hh
|
|
NOD_geometry_nodes_dependencies.hh
|
|
NOD_geometry_nodes_execute.hh
|
|
NOD_geometry_nodes_gizmos.hh
|
|
NOD_geometry_nodes_lazy_function.hh
|
|
NOD_geometry_nodes_log.hh
|
|
NOD_inverse_eval_params.hh
|
|
NOD_inverse_eval_path.hh
|
|
NOD_inverse_eval_run.hh
|
|
NOD_math_functions.hh
|
|
NOD_multi_function.hh
|
|
NOD_node_declaration.hh
|
|
NOD_node_extra_info.hh
|
|
NOD_node_in_compute_context.hh
|
|
NOD_partial_eval.hh
|
|
NOD_register.hh
|
|
NOD_rna_define.hh
|
|
NOD_shader.h
|
|
NOD_socket.hh
|
|
NOD_socket_declarations.hh
|
|
NOD_socket_declarations_geometry.hh
|
|
NOD_socket_items.hh
|
|
NOD_socket_items_blend.hh
|
|
NOD_socket_items_ops.hh
|
|
NOD_socket_items_ui.hh
|
|
NOD_socket_search_link.hh
|
|
NOD_socket_usage_inference.hh
|
|
NOD_texture.h
|
|
NOD_value_elem.hh
|
|
NOD_value_elem_eval.hh
|
|
intern/node_common.h
|
|
intern/node_exec.hh
|
|
intern/node_util.hh
|
|
)
|
|
|
|
set(LIB
|
|
PRIVATE bf::blenkernel
|
|
PRIVATE bf::blenlib
|
|
PRIVATE bf::blenloader
|
|
PRIVATE bf::blentranslation
|
|
PRIVATE bf::bmesh
|
|
PRIVATE bf::depsgraph
|
|
PRIVATE bf::dna
|
|
PRIVATE bf::functions
|
|
PRIVATE bf::geometry
|
|
PRIVATE bf::gpu
|
|
PRIVATE bf::imbuf
|
|
PRIVATE bf::intern::guardedalloc
|
|
bf_nodes_composite
|
|
bf_nodes_function
|
|
bf_nodes_geometry
|
|
bf_nodes_shader
|
|
bf_nodes_texture
|
|
PRIVATE bf::extern::fmtlib
|
|
PRIVATE bf::extern::xxhash
|
|
PRIVATE bf::render
|
|
PRIVATE bf::windowmanager
|
|
)
|
|
|
|
if(WITH_BULLET)
|
|
list(APPEND INC_SYS
|
|
${BULLET_INCLUDE_DIRS}
|
|
../../../intern/rigidbody
|
|
)
|
|
list(APPEND LIB
|
|
${BULLET_LIBRARIES}
|
|
)
|
|
add_definitions(-DWITH_BULLET)
|
|
endif()
|
|
|
|
if(WITH_TBB)
|
|
if(WIN32)
|
|
# TBB includes Windows.h which will define min/max macros
|
|
# that will collide with the STL versions.
|
|
add_definitions(-DNOMINMAX)
|
|
endif()
|
|
endif()
|
|
|
|
if(WITH_IMAGE_OPENEXR)
|
|
add_definitions(-DWITH_OPENEXR)
|
|
endif()
|
|
|
|
if(WITH_FREESTYLE)
|
|
add_definitions(-DWITH_FREESTYLE)
|
|
endif()
|
|
|
|
if(WITH_OPENSUBDIV)
|
|
add_definitions(-DWITH_OPENSUBDIV)
|
|
endif()
|
|
|
|
if(WITH_GMP)
|
|
add_definitions(-DWITH_GMP)
|
|
|
|
list(APPEND INC_SYS
|
|
${GMP_INCLUDE_DIRS}
|
|
)
|
|
|
|
list(APPEND LIB
|
|
${GMP_LIBRARIES}
|
|
)
|
|
endif()
|
|
|
|
if(WITH_OPENVDB)
|
|
list(APPEND INC
|
|
../../../intern/openvdb
|
|
)
|
|
list(APPEND INC_SYS
|
|
${OPENVDB_INCLUDE_DIRS}
|
|
)
|
|
add_definitions(-DWITH_OPENVDB ${OPENVDB_DEFINITIONS})
|
|
endif()
|
|
|
|
blender_add_lib(bf_nodes "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
|
|
add_library(bf::nodes ALIAS bf_nodes)
|
|
|
|
# RNA_prototypes.hh
|
|
add_dependencies(bf_nodes bf_rna)
|