Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.

Commit

Permalink
Merge pull request #772 from quadproduction/release/3.16.9-quad-1.14.0
Browse files Browse the repository at this point in the history
release/3.16.9-quad-1.14.0
  • Loading branch information
BenSouchet authored Aug 20, 2024
2 parents 7af9183 + 2e9c442 commit a1a3c0b
Show file tree
Hide file tree
Showing 19 changed files with 578 additions and 57 deletions.
29 changes: 26 additions & 3 deletions openpype/hosts/blender/blender_addon/addons/RenderPlayblast.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,13 @@ class VIEW3D_PT_render_playblast(bpy.types.Panel):
bl_category = "Quad"

use_camera_view: bpy.props.BoolProperty(name="Use Camera View")
use_transparent_bg: bpy.props.BoolProperty(name="Use Transparent Background")

def draw(self, context):
layout = self.layout
col = layout.column()
col.prop(context.scene, 'use_camera_view')
col.prop(context.scene, 'use_transparent_bg')
col.operator('playblast.render', text="Render Playblast")
col.operator('playblast.open', text="Open Last Playblast Folder")

Expand All @@ -62,12 +64,12 @@ class OBJECT_OT_render_playblast(bpy.types.Operator):
bl_idname = "playblast.render"
bl_label = "Render Playblast"


def execute(self, context):
scene = bpy.context.scene
region = get_view_3D_region()

use_camera_view = context.scene.use_camera_view
use_transparent_bg = context.scene.use_transparent_bg

memorized_render_filepath = scene.render.filepath
memorized_file_format = scene.render.image_settings.file_format
Expand All @@ -80,12 +82,24 @@ def execute(self, context):
render_filepath = get_render_filepath()
Path(render_filepath).resolve().parent.mkdir(parents=True, exist_ok=True)

if use_transparent_bg:
# save current render parameters
memorized_engine = bpy.context.scene.render.engine
memorized_film_transparency = bpy.context.scene.render.film_transparent
memorized_image_settings = bpy.context.scene.render.image_settings.color_mode

# set scene transparency for alpha in png
bpy.context.scene.render.engine = 'CYCLES'
bpy.context.scene.render.film_transparent = True
bpy.context.scene.render.image_settings.color_mode = 'RGBA'

for file_format, options in get_renders_types_and_options():
scene.render.image_settings.file_format = file_format
scene.render.filepath = render_filepath.format(ext=options['extension'])

container = options.get('container')
if container : scene.render.ffmpeg.format = container
if container:
scene.render.ffmpeg.format = container

logging.info(f"{'Camera view' if use_camera_view else 'Viewport'} will be rendered at following path : {scene.render.filepath}")

Expand All @@ -98,6 +112,13 @@ def execute(self, context):
scene.render.use_file_extension = memorized_file_extension_use
if region and use_camera_view:
region.view_perspective = memorized_region

if use_transparent_bg:
# reset to memorized parameters for render
bpy.context.scene.render.engine = memorized_engine
bpy.context.scene.render.film_transparent = memorized_film_transparency
bpy.context.scene.render.image_settings.color_mode = memorized_image_settings

return {'FINISHED'}


Expand All @@ -113,7 +134,7 @@ def execute(self, context):
self.report({'ERROR'}, "File '{}' not found".format(latest_playblast_filepath))
return {'CANCELLED'}

subprocess.Popen(['start', str(latest_playblast_filepath.resolve())], shell=True)
subprocess.Popen('explorer "' + str(latest_playblast_filepath.resolve()) + '"', shell=True)

return {'FINISHED'}

Expand All @@ -124,6 +145,7 @@ def register():
bpy.utils.register_class(OBJECT_OT_open_playblast_folder)

bpy.types.Scene.use_camera_view = bpy.props.BoolProperty(default=False)
bpy.types.Scene.use_transparent_bg = bpy.props.BoolProperty(default=True)


def unregister():
Expand All @@ -132,3 +154,4 @@ def unregister():
bpy.utils.unregister_class(OBJECT_OT_open_playblast_folder)

del bpy.types.Scene.use_camera_view
del bpy.types.Scene.use_transparent_bg
119 changes: 119 additions & 0 deletions openpype/hosts/blender/blender_addon/addons/SetRenderPaths.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
import bpy
import logging
import os
import subprocess
from enum import Enum
from pathlib import Path

from libs import paths, templates


logging.basicConfig(level=logging.INFO)
log = logging.getLogger(__name__)


bl_info = {
"name": "Render Playblast",
"description": "Render sequences of images + video, with OpenGL, from viewport or camera view",
"author": "Quad",
"version": (1, 1),
"blender": (2, 80, 0),
"category": "Render",
"location": "View 3D > UI",
}


class NodesNames(Enum):
RENDER_LAYERS = 'R_LAYERS'
OUTPUT_FILE = 'OUTPUT_FILE'


def get_render_folderpath():
return templates.get_render_node_output_path()


def set_global_output_path(create_directory=False):
bpy.context.scene.render.filepath = templates.get_render_global_output_path()
log.info(f"Global output path has been set to '{bpy.context.scene.render.filepath}'")
if create_directory:
Path(bpy.context.scene.render.filepath).mkdir(parents=True, exist_ok=True)
log.info(f"Folder at path '{bpy.context.scene.render.filepath}' has been created.")


def set_render_nodes_output_path():
for output_node in [node for node in bpy.context.scene.node_tree.nodes if node.type == NodesNames.OUTPUT_FILE.value]:
render_node = _browse_render_nodes(output_node.inputs)
render_layer_name = render_node.layer
render_node_output_path = templates.get_render_node_output_path(render_layer_name=render_layer_name)

output_node.base_path = render_node_output_path
log.info(f"File output path has been set to '{output_node.base_path}'.")


def _browse_render_nodes(nodes_inputs):
node_links = list()
for nodes_input in nodes_inputs:
node_links.extend(nodes_input.links)

for node_link in node_links:
target_node = node_link.from_node
if target_node.type == NodesNames.RENDER_LAYERS.value:
return target_node

target_node = _browse_render_nodes(target_node.inputs)
if target_node:
return target_node


class VIEW3D_PT_set_render_paths(bpy.types.Panel):
bl_label = "Set Render Paths"
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_category = "Quad"

def draw(self, context):
layout = self.layout
col = layout.column()
col.operator('setpaths.render', text="Set Render Paths")
col.operator('setpaths.open', text="Open Last Render Folder")


class OBJECT_OT_set_paths(bpy.types.Operator):
bl_idname = "setpaths.render"
bl_label = "Set Render Path"

def execute(self, context):
set_global_output_path(create_directory=True)
set_render_nodes_output_path()

return {'FINISHED'}


class OBJECT_OT_open_render_folder(bpy.types.Operator):
bl_idname = "setpaths.open"
bl_label = "Open Last Render Folder"

def execute(self, context):
latest_render_folderpath = paths.get_version_folder_fullpath(
get_render_folderpath()
)

if not latest_render_folderpath or not latest_render_folderpath.exists():
self.report({'ERROR'}, "File '{}' not found".format(latest_render_folderpath))
return {'CANCELLED'}

subprocess.Popen('explorer "' + str(latest_render_folderpath.resolve()) + '"', shell=True)
return {'FINISHED'}


def register():
bpy.utils.register_class(VIEW3D_PT_set_render_paths)
bpy.utils.register_class(OBJECT_OT_set_paths)
bpy.utils.register_class(OBJECT_OT_open_render_folder)



def unregister():
bpy.utils.unregister_class(VIEW3D_PT_set_render_paths)
bpy.utils.unregister_class(OBJECT_OT_set_paths)
bpy.utils.unregister_class(OBJECT_OT_open_render_folder)
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,15 @@
import logging
import subprocess
from pathlib import Path
from openpype.settings import get_system_settings


def execute():
blender_addons_folder_path = get_addons_folder_path()
install_deadline_addon(blender_addons_folder_path)
system_settings = get_system_settings()
modules_settings = system_settings["modules"]
if modules_settings["deadline"].get("enabled", False):
install_deadline_addon(blender_addons_folder_path)
enable_user_addons(blender_addons_folder_path)
bpy.ops.wm.save_userpref()

Expand Down
Loading

0 comments on commit a1a3c0b

Please sign in to comment.