forked from blender/blender
Implement transparent background for Storm delegate #71
@ -71,7 +71,7 @@ void Engine::sync(Depsgraph *depsgraph, bContext *context)
|
||||
if (!hydra_scene_delegate_) {
|
||||
pxr::SdfPath scene_path = pxr::SdfPath::AbsoluteRootPath().AppendElementString("scene");
|
||||
hydra_scene_delegate_ = std::make_unique<BlenderSceneDelegate>(
|
||||
render_index_.get(), scene_path, scene_delegate_settings);
|
||||
render_index_.get(), scene_path, scene_delegate_settings_);
|
||||
}
|
||||
hydra_scene_delegate_->populate(depsgraph, context);
|
||||
}
|
||||
@ -86,7 +86,7 @@ void Engine::sync(Depsgraph *depsgraph, bContext *context)
|
||||
if (!usd_scene_delegate_) {
|
||||
pxr::SdfPath scene_path = pxr::SdfPath::AbsoluteRootPath().AppendElementString("usd_scene");
|
||||
usd_scene_delegate_ = std::make_unique<USDSceneDelegate>(
|
||||
render_index_.get(), scene_path, scene_delegate_settings);
|
||||
render_index_.get(), scene_path, scene_delegate_settings_);
|
||||
}
|
||||
usd_scene_delegate_->populate(depsgraph, context);
|
||||
}
|
||||
@ -95,10 +95,10 @@ void Engine::sync(Depsgraph *depsgraph, bContext *context)
|
||||
void Engine::set_sync_setting(const std::string &key, const pxr::VtValue &val)
|
||||
{
|
||||
if (key == "MaterialXFilenameKey") {
|
||||
scene_delegate_settings.mx_filename_key = pxr::TfToken(val.Get<std::string>());
|
||||
scene_delegate_settings_.mx_filename_key = pxr::TfToken(val.Get<std::string>());
|
||||
}
|
||||
else {
|
||||
scene_delegate_settings.render_tokens.add_overwrite(pxr::TfToken(key), val);
|
||||
scene_delegate_settings_.render_tokens.add_overwrite(pxr::TfToken(key), val);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -39,7 +39,6 @@ class Engine {
|
||||
void set_render_setting(const std::string &key, const pxr::VtValue &val);
|
||||
|
||||
std::string render_delegate_name;
|
||||
SceneDelegateSettings scene_delegate_settings;
|
||||
|
||||
Vasyl-Pidhirskyi marked this conversation as resolved
Outdated
|
||||
protected:
|
||||
float renderer_percent_done();
|
||||
@ -52,6 +51,7 @@ class Engine {
|
||||
pxr::HdPluginRenderDelegateUniqueHandle render_delegate_;
|
||||
std::unique_ptr<pxr::HdRenderIndex> render_index_;
|
||||
|
||||
SceneDelegateSettings scene_delegate_settings_;
|
||||
std::unique_ptr<BlenderSceneDelegate> hydra_scene_delegate_;
|
||||
std::unique_ptr<USDSceneDelegate> usd_scene_delegate_;
|
||||
|
||||
|
@ -109,7 +109,7 @@ void FinalEngine::prepare_for_render(Depsgraph *depsgraph)
|
||||
if (light_tasks_delegate_) {
|
||||
light_tasks_delegate_->set_camera_and_viewport(
|
||||
free_camera_delegate_->GetCameraId(), pxr::GfVec4d(0, 0, resolution_[0], resolution_[1]));
|
||||
tasks_ = light_tasks_delegate_->get_tasks(scene_delegate_settings);
|
||||
tasks_ = light_tasks_delegate_->get_tasks(scene->r.alphamode == R_ALPHAPREMUL);
|
||||
Vasyl-Pidhirskyi marked this conversation as resolved
Outdated
Bogdan Nagirniak
commented
Find corresponded c++ setting for Find corresponded c++ setting for `scene.render.film_transparent`
|
||||
}
|
||||
tasks_.push_back(render_task_delegate_->get_task());
|
||||
|
||||
@ -147,7 +147,7 @@ void FinalEngineGPU::render(Depsgraph *depsgraph)
|
||||
|
||||
GPU_framebuffer_bind(framebuffer);
|
||||
|
||||
float clear_color[4] = {0.0f, 0.0f, 0.0f, 1.0f};
|
||||
float clear_color[4] = {0.0f, 0.0f, 0.0f, 0.0f};
|
||||
|
||||
GPU_framebuffer_clear_color_depth(framebuffer, clear_color, 1.0f);
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
/* SPDX-License-Identifier: Apache-2.0
|
||||
* Copyright 2011-2022 Blender Foundation */
|
||||
|
||||
#include "BLI_map.hh"
|
||||
#include <pxr/imaging/hdx/simpleLightTask.h>
|
||||
#include <pxr/imaging/hdx/skydomeTask.h>
|
||||
|
||||
@ -19,14 +18,13 @@ LightTasksDelegate::LightTasksDelegate(pxr::HdRenderIndex *parent_index,
|
||||
GetRenderIndex().InsertTask<pxr::HdxSimpleLightTask>(this, simple_task_id_);
|
||||
}
|
||||
|
||||
pxr::HdTaskSharedPtrVector LightTasksDelegate::get_tasks(const SceneDelegateSettings &settings)
|
||||
pxr::HdTaskSharedPtrVector LightTasksDelegate::get_tasks(const bool isTransparent)
|
||||
{
|
||||
Vasyl-Pidhirskyi marked this conversation as resolved
Outdated
Bogdan Nagirniak
commented
simplify by using something like simplify by using something like `bool transparent_background`
|
||||
/*Note that this task is intended to be the first "Render Task",
|
||||
so that the AOV's are properly cleared, however it
|
||||
does not spawn a HdRenderPass.*/
|
||||
pxr::HdTaskSharedPtrVector tasks;
|
||||
const pxr::VtValue *ret_ptr = settings.render_tokens.lookup_ptr(pxr::TfToken("enableAlpha"));
|
||||
if (ret_ptr->Get<bool>()) {
|
||||
if (!isTransparent) {
|
||||
tasks.push_back(GetRenderIndex().GetTask(skydome_task_id_));
|
||||
}
|
||||
tasks.push_back(GetRenderIndex().GetTask(simple_task_id_));
|
||||
|
@ -3,8 +3,6 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "scene_delegate/blender_scene_delegate.h"
|
||||
#include "scene_delegate/usd_scene_delegate.hh"
|
||||
#include <pxr/imaging/hd/sceneDelegate.h>
|
||||
#include <pxr/imaging/hdx/renderSetupTask.h>
|
||||
#include <pxr/imaging/hdx/simpleLightTask.h>
|
||||
@ -16,7 +14,7 @@ class LightTasksDelegate : public pxr::HdSceneDelegate {
|
||||
LightTasksDelegate(pxr::HdRenderIndex *parentIndex, pxr::SdfPath const &delegate_id);
|
||||
~LightTasksDelegate() override = default;
|
||||
|
||||
pxr::HdTaskSharedPtrVector get_tasks(const SceneDelegateSettings &settings);
|
||||
pxr::HdTaskSharedPtrVector get_tasks(const bool isTransparent);
|
||||
void set_camera_and_viewport(pxr::SdfPath const &camera_id, pxr::GfVec4d const &viewport);
|
||||
|
||||
/* Delegate methods */
|
||||
|
@ -222,9 +222,10 @@ void ViewportEngine::render(Depsgraph * /* depsgraph */)
|
||||
/* Empty function */
|
||||
}
|
||||
|
||||
void ViewportEngine::render(Depsgraph * /* depsgraph */, bContext *context)
|
||||
void ViewportEngine::render(Depsgraph *depsgraph, bContext *context)
|
||||
{
|
||||
ViewSettings view_settings(context);
|
||||
const Scene *scene = DEG_get_evaluated_scene(depsgraph);
|
||||
if (view_settings.width() * view_settings.height() == 0) {
|
||||
return;
|
||||
};
|
||||
@ -254,7 +255,7 @@ void ViewportEngine::render(Depsgraph * /* depsgraph */, bContext *context)
|
||||
|
||||
pxr::HdTaskSharedPtrVector tasks;
|
||||
if (light_tasks_delegate_) {
|
||||
tasks = light_tasks_delegate_->get_tasks(scene_delegate_settings);
|
||||
tasks = light_tasks_delegate_->get_tasks(scene->r.alphamode == R_ALPHAPREMUL);
|
||||
}
|
||||
tasks.push_back(render_task_delegate_->get_task());
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user
That's not a good idea to change structure of engine just for using skydome task from
light_tasks_delegate_
.