diff options
-rw-r--r-- | intern/cycles/blender/addon/engine.py | 4 | ||||
-rw-r--r-- | release/scripts/modules/rna_manual_reference.py | 1 | ||||
-rw-r--r-- | source/blender/nodes/CMakeLists.txt | 10 | ||||
-rw-r--r-- | source/blender/nodes/NOD_static_types.h | 1 | ||||
-rw-r--r-- | source/blender/nodes/geometry/nodes/node_geo_remesh_voxel.cc | 91 |
5 files changed, 107 insertions, 0 deletions
diff --git a/intern/cycles/blender/addon/engine.py b/intern/cycles/blender/addon/engine.py index 1b03581ae03..61f47c0765b 100644 --- a/intern/cycles/blender/addon/engine.py +++ b/intern/cycles/blender/addon/engine.py @@ -232,6 +232,10 @@ def list_render_passes(scene, srl): for lightgroup in srl.lightgroups: yield ("Combined_%s" % lightgroup.name, "RGB", 'COLOR') + # Light groups. + for lightgroup in srl.lightgroups: + yield ("Combined_%s" % lightgroup.name, "RGB", 'COLOR') + def register_passes(engine, scene, view_layer): for name, channelids, channeltype in list_render_passes(scene, view_layer): diff --git a/release/scripts/modules/rna_manual_reference.py b/release/scripts/modules/rna_manual_reference.py index 6d0ff66d478..f9bb49cf48f 100644 --- a/release/scripts/modules/rna_manual_reference.py +++ b/release/scripts/modules/rna_manual_reference.py @@ -1964,6 +1964,7 @@ url_manual_mapping = ( ("bpy.types.shadernodebsdftoon*", "render/shader_nodes/shader/toon.html#bpy-types-shadernodebsdftoon"), ("bpy.types.shadernodeemission*", "render/shader_nodes/shader/emission.html#bpy-types-shadernodeemission"), ("bpy.types.shadernodehairinfo*", "render/shader_nodes/input/hair_info.html#bpy-types-shadernodehairinfo"), + ("bpy.types.shadernodepointinfo*", "render/shader_nodes/input/point_info.html#bpy-types-shadernodepointinfo"), ("bpy.types.shadernodemaprange*", "render/shader_nodes/converter/map_range.html#bpy-types-shadernodemaprange"), ("bpy.types.shadernodergbcurve*", "modeling/geometry_nodes/color/rgb_curves.html#bpy-types-shadernodergbcurve"), ("bpy.types.shadernodeseparate*", "render/shader_nodes/converter/combine_separate.html#bpy-types-shadernodeseparate"), diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt index 386e5fe14c9..fcb8e8cef52 100644 --- a/source/blender/nodes/CMakeLists.txt +++ b/source/blender/nodes/CMakeLists.txt @@ -155,9 +155,19 @@ if(WITH_GMP) endif() if(WITH_OPENVDB) + list(APPEND INC + ../../../intern/openvdb + ) + list(APPEND INC_SYS ${OPENVDB_INCLUDE_DIRS} ) + + list(APPEND LIB + bf_intern_openvdb + ${OPENVDB_LIBRARIES} + ) + add_definitions(-DWITH_OPENVDB ${OPENVDB_DEFINITIONS}) endif() diff --git a/source/blender/nodes/NOD_static_types.h b/source/blender/nodes/NOD_static_types.h index b45097a4ed1..532628145ec 100644 --- a/source/blender/nodes/NOD_static_types.h +++ b/source/blender/nodes/NOD_static_types.h @@ -381,6 +381,7 @@ DefNode(GeometryNode, GEO_NODE_SUBDIVIDE_CURVE, 0, "SUBDIVIDE_CURVE", SubdivideC DefNode(GeometryNode, GEO_NODE_SUBDIVIDE_MESH, 0, "SUBDIVIDE_MESH", SubdivideMesh, "Subdivide Mesh", "") DefNode(GeometryNode, GEO_NODE_SUBDIVISION_SURFACE, def_geo_subdivision_surface, "SUBDIVISION_SURFACE", SubdivisionSurface, "Subdivision Surface", "") DefNode(GeometryNode, GEO_NODE_SWITCH, def_geo_switch, "SWITCH", Switch, "Switch", "") +DefNode(GeometryNode, GEO_NODE_REMESH_VOXEL, 0, "REMESH_VOXEL", RemeshVoxel, "Voxel Remesh", "") DefNode(GeometryNode, GEO_NODE_TRANSFER_ATTRIBUTE, def_geo_transfer_attribute, "ATTRIBUTE_TRANSFER", AttributeTransfer, "Transfer Attribute", "") DefNode(GeometryNode, GEO_NODE_TRANSFORM, 0, "TRANSFORM", Transform, "Transform", "") DefNode(GeometryNode, GEO_NODE_TRANSLATE_INSTANCES, 0, "TRANSLATE_INSTANCES", TranslateInstances, "Translate Instances", "") diff --git a/source/blender/nodes/geometry/nodes/node_geo_remesh_voxel.cc b/source/blender/nodes/geometry/nodes/node_geo_remesh_voxel.cc new file mode 100644 index 00000000000..3e688ce525e --- /dev/null +++ b/source/blender/nodes/geometry/nodes/node_geo_remesh_voxel.cc @@ -0,0 +1,91 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "UI_interface.h" + +#include "BKE_mesh_remesh_voxel.h" + +#include "node_geometry_util.hh" + +namespace blender::nodes::node_geo_remesh_voxel_cc { +static void node_declare(NodeDeclarationBuilder &b) +{ + b.add_input<decl::Geometry>(N_("Mesh")).supported_type(GEO_COMPONENT_TYPE_MESH); + b.add_input<decl::Float>(N_("Voxel Size")).default_value(1.0f).min(0.01f).max(FLT_MAX); + b.add_input<decl::Float>(N_("Adaptivity")).default_value(0.0f).min(0.0f).max(1.0f); + b.add_output<decl::Geometry>(N_("Mesh")); +} + +static void node_geo_exec(GeoNodeExecParams params) +{ +#ifdef WITH_OPENVDB + GeometrySet geometry_set = params.extract_input<GeometrySet>("Mesh"); + const float voxel_size = params.extract_input<float>("Voxel Size"); + const float adaptivity = params.extract_input<float>("Adaptivity"); + geometry_set.modify_geometry_sets([&](GeometrySet &geometry_set) { + const Mesh *mesh_in = geometry_set.get_mesh_for_read(); + if (mesh_in != nullptr) { + Mesh *mesh_out = BKE_mesh_remesh_voxel(mesh_in, voxel_size, adaptivity, 0.0f); + geometry_set.replace_mesh(mesh_out); + } + }); + + /// + // GField field = get_input_attribute_field(params, data_type); + // + // auto return_default = [&]() { + // attribute_math::convert_to_static_type(data_type, [&](auto dummy) { + // using T = decltype(dummy); + // output_attribute_field(params, fn::make_constant_field<T>(T())); + // }); + // }; + // + // GField output_field; + // if (geometry.has_curves() && !geometry.has_mesh() && !geometry.has_pointcloud()) { + // params.error_message_add(NodeWarningType::Error, + // TIP_("The source geometry must contain a mesh or a point cloud")); + // return return_default(); + // } + // auto fn = std::make_unique<NearestTransferFunction>( + // std::move(geometry), std::move(field), domain); + // auto op = std::make_shared<FieldOperation>( + // FieldOperation(std::move(fn), {params.extract_input<Field<float3>>("Source Position")})); + // output_field = GField(std::move(op)); + // break; + // output_attribute_field(params, std::move(output_field)); + // + /// + + params.set_output("Mesh", std::move(geometry_set)); +#else + params.error_message_add(NodeWarningType::Error, + TIP_("Disabled, Blender was compiled without OpenVDB")); + params.set_default_remaining_outputs(); +#endif +} +} // namespace blender::nodes::node_geo_remesh_voxel_cc + +void register_node_type_geo_remesh_voxel() +{ + namespace file_ns = blender::nodes::node_geo_remesh_voxel_cc; + + static bNodeType ntype; + + geo_node_type_base(&ntype, GEO_NODE_REMESH_VOXEL, "Voxel Remesh", NODE_CLASS_GEOMETRY); + ntype.declare = file_ns::node_declare; + ntype.geometry_node_execute = file_ns::node_geo_exec; + nodeRegisterType(&ntype); +} |