mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-02 00:44:52 +01:00
multiple render camera supports for 3dsmax
This commit is contained in:
parent
d231558d90
commit
058fcb97a3
4 changed files with 34 additions and 15 deletions
|
|
@ -35,15 +35,8 @@ class RenderSettings(object):
|
|||
)
|
||||
|
||||
def set_render_camera(self, selection):
|
||||
for sel in selection:
|
||||
# to avoid Attribute Error from pymxs wrapper
|
||||
found = False
|
||||
if rt.classOf(sel) in rt.Camera.classes:
|
||||
found = True
|
||||
rt.viewport.setCamera(sel)
|
||||
break
|
||||
if not found:
|
||||
raise RuntimeError("Camera not found")
|
||||
# to avoid Attribute Error from pymxs wrapper
|
||||
return rt.viewport.setCamera(selection[0])
|
||||
|
||||
def render_output(self, container):
|
||||
folder = rt.maxFilePath
|
||||
|
|
|
|||
|
|
@ -14,7 +14,10 @@ class CreateRender(plugin.MaxCreator):
|
|||
|
||||
def create(self, subset_name, instance_data, pre_create_data):
|
||||
from pymxs import runtime as rt
|
||||
sel_obj = list(rt.selection)
|
||||
sel_obj = [
|
||||
c for c in rt.Objects
|
||||
if rt.classOf(c) in rt.Camera.classes]
|
||||
|
||||
file = rt.maxFileName
|
||||
filename, _ = os.path.splitext(file)
|
||||
instance_data["AssetName"] = filename
|
||||
|
|
@ -24,11 +27,20 @@ class CreateRender(plugin.MaxCreator):
|
|||
instance_data,
|
||||
pre_create_data) # type: CreatedInstance
|
||||
container_name = instance.data.get("instance_node")
|
||||
container = rt.getNodeByName(container_name)
|
||||
# TODO: Disable "Add to Containers?" Panel
|
||||
# parent the selected cameras into the container
|
||||
for obj in sel_obj:
|
||||
obj.parent = container
|
||||
if self.selected_nodes:
|
||||
# set viewport camera for
|
||||
# rendering(mandatory for deadline)
|
||||
sel_obj = [
|
||||
c for c in rt.getCurrentSelection()
|
||||
if rt.classOf(c) in rt.Camera.classes]
|
||||
|
||||
if not sel_obj:
|
||||
raise RuntimeError("Please add at least one camera to the scene "
|
||||
"before creating the render instance")
|
||||
|
||||
RenderSettings().set_render_camera(sel_obj)
|
||||
# for additional work on the node:
|
||||
# instance_node = rt.getNodeByName(instance.get("instance_node"))
|
||||
|
||||
|
|
@ -37,7 +49,5 @@ class CreateRender(plugin.MaxCreator):
|
|||
# Changing the Render Setup dialog settings should be done
|
||||
# with the actual Render Setup dialog in a closed state.
|
||||
|
||||
# set viewport camera for rendering(mandatory for deadline)
|
||||
RenderSettings().set_render_camera(sel_obj)
|
||||
# set output paths for rendering(mandatory for deadline)
|
||||
RenderSettings().render_output(container_name)
|
||||
|
|
|
|||
|
|
@ -48,6 +48,10 @@ class CollectRender(pyblish.api.InstancePlugin):
|
|||
instance.name,
|
||||
asset_id)
|
||||
self.log.debug("version_doc: {0}".format(version_doc))
|
||||
sel_obj = [
|
||||
c for c in rt.Objects
|
||||
if rt.classOf(c) in rt.Camera.classes]
|
||||
|
||||
version_int = 1
|
||||
if version_doc:
|
||||
version_int += int(version_doc["name"])
|
||||
|
|
@ -78,6 +82,7 @@ class CollectRender(pyblish.api.InstancePlugin):
|
|||
"renderer": renderer,
|
||||
"source": filepath,
|
||||
"plugin": "3dsmax",
|
||||
"cameras": sel_obj,
|
||||
"frameStart": int(rt.rendStart),
|
||||
"frameEnd": int(rt.rendEnd),
|
||||
"version": version_int,
|
||||
|
|
|
|||
|
|
@ -212,6 +212,17 @@ class MaxSubmitDeadline(abstract_submit_deadline.AbstractSubmitDeadline,
|
|||
plugin_data["RenderOutput"] = beauty_name
|
||||
# as 3dsmax has version with different languages
|
||||
plugin_data["Language"] = "ENU"
|
||||
render_cameras = instance.data["cameras"]
|
||||
if render_cameras:
|
||||
for i, camera in enumerate(render_cameras):
|
||||
cam_name = "Camera%s" % (i + 1)
|
||||
plugin_data[cam_name] = camera.name
|
||||
# set the default camera
|
||||
plugin_data["Camera"] = render_cameras[0].name
|
||||
# set empty camera of Camera 0 for the '
|
||||
# correct parameter submission
|
||||
plugin_data["Camera0"] = None
|
||||
|
||||
renderer_class = get_current_renderer()
|
||||
|
||||
renderer = str(renderer_class).split(":")[0]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue