main sync #3

Merged
Patrick Busch merged 318 commits from blender/blender:main into main 2023-03-17 15:52:21 +01:00
8 changed files with 44 additions and 3 deletions
Showing only changes of commit 7317da80fe - Show all commits

View File

@ -153,6 +153,16 @@ static float3 output_estimate_emission(ShaderOutput *output, bool &is_constant)
estimate *= node->get_float(strength_in->socket_type); estimate *= node->get_float(strength_in->socket_type);
} }
/* Lower importance of emission nodes from automatic value/color to shader
* conversion, as these are likely used for previewing and can be slow to
* build a light tree for on dense meshes. */
if (node->type == EmissionNode::get_node_type()) {
EmissionNode *emission_node = static_cast<EmissionNode *>(node);
if (emission_node->from_auto_conversion) {
estimate *= 0.1f;
}
}
return estimate; return estimate;
} }
else if (node->type == LightFalloffNode::get_node_type() || else if (node->type == LightFalloffNode::get_node_type() ||

View File

@ -260,6 +260,7 @@ void ShaderGraph::connect(ShaderOutput *from, ShaderInput *to)
if (to->type() == SocketType::CLOSURE) { if (to->type() == SocketType::CLOSURE) {
EmissionNode *emission = create_node<EmissionNode>(); EmissionNode *emission = create_node<EmissionNode>();
emission->from_auto_conversion = true;
emission->set_color(one_float3()); emission->set_color(one_float3());
emission->set_strength(1.0f); emission->set_strength(1.0f);
convert = add(emission); convert = add(emission);

View File

@ -723,6 +723,8 @@ class EmissionNode : public ShaderNode {
NODE_SOCKET_API(float3, color) NODE_SOCKET_API(float3, color)
NODE_SOCKET_API(float, strength) NODE_SOCKET_API(float, strength)
NODE_SOCKET_API(float, surface_mix_weight) NODE_SOCKET_API(float, surface_mix_weight)
bool from_auto_conversion = false;
}; };
class BackgroundNode : public ShaderNode { class BackgroundNode : public ShaderNode {

View File

@ -25,6 +25,7 @@ class AssetIdentifier {
AssetIdentifier(const AssetIdentifier &) = default; AssetIdentifier(const AssetIdentifier &) = default;
std::string full_path() const; std::string full_path() const;
std::string full_library_path() const;
}; };
} // namespace blender::asset_system } // namespace blender::asset_system

View File

@ -92,7 +92,11 @@ class AssetRepresentation {
/* C-Handle */ /* C-Handle */
struct AssetRepresentation; struct AssetRepresentation;
const std::string AS_asset_representation_full_path_get(const ::AssetRepresentation *asset); std::string AS_asset_representation_full_path_get(const ::AssetRepresentation *asset);
/** Get the absolute path to the .blend file containing the given asset. String will be empty if
* the asset could not be mapped to a valid .blend file path. Valid in this case also means that
* the file needs to exist on disk. */
std::string AS_asset_representation_full_library_path_get(const ::AssetRepresentation *asset);
std::optional<eAssetImportMethod> AS_asset_representation_import_method_get( std::optional<eAssetImportMethod> AS_asset_representation_import_method_get(
const ::AssetRepresentation *asset_handle); const ::AssetRepresentation *asset_handle);
bool AS_asset_representation_may_override_import_method(const ::AssetRepresentation *asset_handle); bool AS_asset_representation_may_override_import_method(const ::AssetRepresentation *asset_handle);

View File

@ -5,6 +5,7 @@ set(INC
intern intern
../blenkernel ../blenkernel
../blenlib ../blenlib
../blenloader
../makesdna ../makesdna
../../../intern/clog ../../../intern/clog
../../../intern/guardedalloc ../../../intern/guardedalloc

View File

@ -4,8 +4,11 @@
* \ingroup asset_system * \ingroup asset_system
*/ */
#include <string>
#include "BLO_readfile.h"
#include "BLI_path_util.h" #include "BLI_path_util.h"
#include <iostream>
#include "AS_asset_identifier.hh" #include "AS_asset_identifier.hh"
@ -24,4 +27,16 @@ std::string AssetIdentifier::full_path() const
return path; return path;
} }
std::string AssetIdentifier::full_library_path() const
{
std::string asset_path = full_path();
char blend_path[1090 /*FILE_MAX_LIBEXTRA*/];
if (!BLO_library_path_explode(asset_path.c_str(), blend_path, nullptr, nullptr)) {
return {};
}
return blend_path;
}
} // namespace blender::asset_system } // namespace blender::asset_system

View File

@ -111,7 +111,7 @@ const AssetLibrary &AssetRepresentation::owner_asset_library() const
using namespace blender; using namespace blender;
const std::string AS_asset_representation_full_path_get(const AssetRepresentation *asset_handle) std::string AS_asset_representation_full_path_get(const AssetRepresentation *asset_handle)
{ {
const asset_system::AssetRepresentation *asset = const asset_system::AssetRepresentation *asset =
reinterpret_cast<const asset_system::AssetRepresentation *>(asset_handle); reinterpret_cast<const asset_system::AssetRepresentation *>(asset_handle);
@ -119,6 +119,13 @@ const std::string AS_asset_representation_full_path_get(const AssetRepresentatio
return identifier.full_path(); return identifier.full_path();
} }
std::string AS_asset_representation_full_library_path_get(const AssetRepresentation *asset_handle)
{
const asset_system::AssetRepresentation *asset =
reinterpret_cast<const asset_system::AssetRepresentation *>(asset_handle);
return asset->get_identifier().full_library_path();
}
std::optional<eAssetImportMethod> AS_asset_representation_import_method_get( std::optional<eAssetImportMethod> AS_asset_representation_import_method_get(
const AssetRepresentation *asset_handle) const AssetRepresentation *asset_handle)
{ {