Implement Viewport render with material preview #56

Merged
Bogdan Nagirniak merged 22 commits from BLEN-421 into hydra-render 2023-06-30 09:03:28 +02:00
3 changed files with 35 additions and 35 deletions
Showing only changes of commit 17cad0766c - Show all commits

View File

@ -16,10 +16,15 @@ CLG_LOGREF_DECLARE_GLOBAL(LOG_RENDER_HYDRA_SCENE, "render.hydra.scene");
bool BlenderSceneDelegate::ShadingSettings::operator==(const ShadingSettings &other) bool BlenderSceneDelegate::ShadingSettings::operator==(const ShadingSettings &other)
{ {
return use_scene_lights == other.use_scene_lights && use_scene_world == other.use_scene_world && bool ret = use_scene_lights == other.use_scene_lights &&
studiolight_name == other.studiolight_name && use_scene_world == other.use_scene_world;
studiolight_rotation == other.studiolight_rotation && if (ret && !use_scene_world) {
studiolight_intensity == other.studiolight_intensity; /* compare studiolight settings when studiolight is using */
ret = studiolight_name == other.studiolight_name &&
studiolight_rotation == other.studiolight_rotation &&
studiolight_intensity == other.studiolight_intensity;
}
return ret;
} }
BlenderSceneDelegate::BlenderSceneDelegate(pxr::HdRenderIndex *parent_index, BlenderSceneDelegate::BlenderSceneDelegate(pxr::HdRenderIndex *parent_index,
@ -409,17 +414,16 @@ void BlenderSceneDelegate::update_instancers(Object *object)
void BlenderSceneDelegate::update_world() void BlenderSceneDelegate::update_world()
{ {
World *world = scene->world;
if (!world_data_) { if (!world_data_) {
if (world) { if (!shading_settings.use_scene_world || (shading_settings.use_scene_world && scene->world)) {
world_data_ = std::make_unique<WorldData>(this, world, world_prim_id()); world_data_ = std::make_unique<WorldData>(this, world_prim_id());
world_data_->init(); world_data_->init();
world_data_->insert(); world_data_->insert();
} }
} }
else { else {
if (world) { if (!shading_settings.use_scene_world || (shading_settings.use_scene_world && scene->world)) {
world_data_->update(world); world_data_->update();
} }
else { else {
world_data_->remove(); world_data_->remove();
@ -672,14 +676,12 @@ void BlenderSceneDelegate::update_visibility()
bool BlenderSceneDelegate::set_light_shading_settings() bool BlenderSceneDelegate::set_light_shading_settings()
{ {
bool ret = false; if (!view3d) {
if (view3d) { return false;
if (shading_settings.use_scene_lights != V3D_USES_SCENE_LIGHTS(view3d)) {
shading_settings.use_scene_lights = V3D_USES_SCENE_LIGHTS(view3d);
ret = true;
}
} }
return ret; ShadingSettings prev_settings(shading_settings);
shading_settings.use_scene_lights = V3D_USES_SCENE_LIGHTS(view3d);
return !(shading_settings == prev_settings);
BogdanNagirniak marked this conversation as resolved Outdated
if (!view3d) {
  return false;
}
.....
return !(shading_settings == prev_settings);
``` if (!view3d) { return false; } ..... return !(shading_settings == prev_settings); ```
} }
BogdanNagirniak marked this conversation as resolved Outdated

simplify by using add operator==() and copy constructor to ShadingSettings

ShadingSettings prev_settings(shading_settings);
shading_settings. ....
return shading_settings != prev_settings;
simplify by using add `operator==()` and copy constructor to ShadingSettings ``` ShadingSettings prev_settings(shading_settings); shading_settings. .... return shading_settings != prev_settings; ```
bool BlenderSceneDelegate::set_world_shading_settings() bool BlenderSceneDelegate::set_world_shading_settings()

View File

@ -32,30 +32,28 @@
namespace blender::render::hydra { namespace blender::render::hydra {
WorldData::WorldData(BlenderSceneDelegate *scene_delegate, WorldData::WorldData(BlenderSceneDelegate *scene_delegate, pxr::SdfPath const &prim_id)
World *world, : IdData(scene_delegate, nullptr, prim_id)
pxr::SdfPath const &prim_id)
: IdData(scene_delegate, (ID *)world, prim_id)
{ {
} }
void WorldData::init() void WorldData::init()
{ {
ID_LOG(1, "");
write_transform(); write_transform();
World *world = (World *)id;
data_.clear(); data_.clear();
data_[pxr::UsdLuxTokens->orientToStageUpAxis] = true; data_[pxr::UsdLuxTokens->orientToStageUpAxis] = true;
float intensity = 1.0f; float intensity = 1.0f;
float exposure = world->exposure; float exposure = 0.0f;
pxr::GfVec3f color(1.0f, 1.0f, 1.0f); pxr::GfVec3f color(1.0f, 1.0f, 1.0f);
pxr::SdfAssetPath texture_file; pxr::SdfAssetPath texture_file;
if (scene_delegate_->shading_settings.use_scene_world) { if (scene_delegate_->shading_settings.use_scene_world) {
World *world = scene_delegate_->scene->world;
BogdanNagirniak marked this conversation as resolved Outdated
if (scene_delegate_.shading_settings.use_scene_world) {
   <previous code>
}
else {
  <new code>
}
``` if (scene_delegate_.shading_settings.use_scene_world) { <previous code> } else { <new code> } ```
CLOG_INFO(LOG_RENDER_HYDRA_SCENE, 1, "%s: %s", prim_id.GetText(), world->id.name);
exposure = world->exposure;
if (world->use_nodes) { if (world->use_nodes) {
/* TODO: Create nodes parsing system */ /* TODO: Create nodes parsing system */
@ -117,6 +115,12 @@ void WorldData::init()
} }
} }
else { else {
CLOG_INFO(LOG_RENDER_HYDRA_SCENE,
1,
"%s: studiolight: %s",
BogdanNagirniak marked this conversation as resolved Outdated

thif if can be removed

thif `if` can be removed
prim_id.GetText(),
scene_delegate_->shading_settings.studiolight_name.c_str());
StudioLight *sl = BKE_studiolight_find( StudioLight *sl = BKE_studiolight_find(
scene_delegate_->shading_settings.studiolight_name.c_str(), scene_delegate_->shading_settings.studiolight_name.c_str(),
STUDIOLIGHT_ORIENTATIONS_MATERIAL_MODE); STUDIOLIGHT_ORIENTATIONS_MATERIAL_MODE);
@ -139,7 +143,7 @@ void WorldData::init()
void WorldData::insert() void WorldData::insert()
{ {
ID_LOG(1, ""); CLOG_INFO(LOG_RENDER_HYDRA_SCENE, 1, "%s", prim_id.GetText());
scene_delegate_->GetRenderIndex().InsertSprim( scene_delegate_->GetRenderIndex().InsertSprim(
pxr::HdPrimTypeTokens->domeLight, scene_delegate_, prim_id); pxr::HdPrimTypeTokens->domeLight, scene_delegate_, prim_id);
} }
@ -152,23 +156,17 @@ void WorldData::remove()
void WorldData::update() void WorldData::update()
{ {
ID_LOG(1, ""); CLOG_INFO(LOG_RENDER_HYDRA_SCENE, 1, "%s", prim_id.GetText());
init(); init();
scene_delegate_->GetRenderIndex().GetChangeTracker().MarkSprimDirty(prim_id, scene_delegate_->GetRenderIndex().GetChangeTracker().MarkSprimDirty(prim_id,
pxr::HdLight::AllDirty); pxr::HdLight::AllDirty);
} }
void WorldData::update(World *world)
{
id = (ID *)world;
update();
}
pxr::VtValue WorldData::get_data(pxr::TfToken const &key) const pxr::VtValue WorldData::get_data(pxr::TfToken const &key) const
{ {
auto it = data_.find(key); auto it = data_.find(key);
if (it != data_.end()) { if (it != data_.end()) {
ID_LOG(3, "%s", key.GetText()); CLOG_INFO(LOG_RENDER_HYDRA_SCENE, 3, "%s: %s", prim_id.GetText(), key.GetText());
return pxr::VtValue(it->second); return pxr::VtValue(it->second);
} }
return pxr::VtValue(); return pxr::VtValue();

View File

@ -20,7 +20,7 @@ namespace blender::render::hydra {
class WorldData : public IdData { class WorldData : public IdData {
public: public:
WorldData(BlenderSceneDelegate *scene_delegate, World *world, pxr::SdfPath const &prim_id); WorldData(BlenderSceneDelegate *scene_delegate, pxr::SdfPath const &prim_id);
void init() override; void init() override;
void insert() override; void insert() override;