Implement transparent background for Storm delegate #71

Merged
Bogdan Nagirniak merged 3 commits from Vasyl-Pidhirskyi/blender_bn:BLEN-463 into hydra-render 2023-07-23 21:03:02 +02:00
4 changed files with 13 additions and 7 deletions

View File

@ -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();
tasks_ = light_tasks_delegate_->get_tasks(scene->r.alphamode == R_ALPHAPREMUL);
Vasyl-Pidhirskyi marked this conversation as resolved Outdated

Find corresponded c++ setting for scene.render.film_transparent

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);

View File

@ -18,12 +18,17 @@ LightTasksDelegate::LightTasksDelegate(pxr::HdRenderIndex *parent_index,
GetRenderIndex().InsertTask<pxr::HdxSimpleLightTask>(this, simple_task_id_);
}
pxr::HdTaskSharedPtrVector LightTasksDelegate::get_tasks()
pxr::HdTaskSharedPtrVector LightTasksDelegate::get_tasks(const bool isTransparent)
{
Vasyl-Pidhirskyi marked this conversation as resolved Outdated

simplify by using something like bool transparent_background

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.*/
return {GetRenderIndex().GetTask(skydome_task_id_), GetRenderIndex().GetTask(simple_task_id_)};
pxr::HdTaskSharedPtrVector tasks;
if (!isTransparent) {
tasks.push_back(GetRenderIndex().GetTask(skydome_task_id_));
}
tasks.push_back(GetRenderIndex().GetTask(simple_task_id_));
return tasks;
}
void LightTasksDelegate::set_camera_and_viewport(pxr::SdfPath const &camera_id,

View File

@ -14,7 +14,7 @@ class LightTasksDelegate : public pxr::HdSceneDelegate {
LightTasksDelegate(pxr::HdRenderIndex *parentIndex, pxr::SdfPath const &delegate_id);
~LightTasksDelegate() override = default;
pxr::HdTaskSharedPtrVector get_tasks();
pxr::HdTaskSharedPtrVector get_tasks(const bool isTransparent);
void set_camera_and_viewport(pxr::SdfPath const &camera_id, pxr::GfVec4d const &viewport);
/* Delegate methods */

View File

@ -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();
tasks = light_tasks_delegate_->get_tasks(scene->r.alphamode == R_ALPHAPREMUL);
}
tasks.push_back(render_task_delegate_->get_task());