Merge branch 'feature/multiverse' of github.com:j-cube/OpenPype into feature/multiverse

This commit is contained in:
Bo Zhou 2022-03-24 16:59:57 +09:00
commit 9c9ea78233
3 changed files with 47 additions and 50 deletions

View file

@ -21,15 +21,9 @@ class CreateMultiverseUsdOver(plugin.Creator):
self.data["writeVariantsDefinition"] = True
self.data["writeActiveState"] = True
self.data["writeNamespaces"] = False
self.data["numTimeSamples"] = 1
self.data["timeSamplesSpan"] = 0.0
# The attributes below are about animated cache.
self.data["writeTimeRange"] = True
self.data["timeRangeNumTimeSamples"] = 0
self.data["timeRangeSamplesSpan"] = 0.0
# Add animation data
animation_data = lib.collect_animation_data(True)
self.data["timeRangeStart"] = animation_data["frameStart"]
self.data["timeRangeEnd"] = animation_data["frameEnd"]
self.data["timeRangeIncrement"] = animation_data["step"]
self.data["timeRangeFramesPerSecond"] = animation_data["fps"]
self.data.update(animation_data)

View file

@ -178,7 +178,8 @@ class ExtractMultiverseUsd(openpype.api.Extractor):
time_opts.framePerSecond = fps
asset_write_opts = multiverse.AssetWriteOptions(time_opts)
options_discard_keys = [
options_items = getattr(options, "iteritems", options.items)
options_discard_keys = {
'numTimeSamples',
'timeSamplesSpan',
'frameStart',
@ -187,8 +188,8 @@ class ExtractMultiverseUsd(openpype.api.Extractor):
'handleEnd',
'step',
'fps'
]
for key, value in options.items():
}
for key, value in options_items():
if key in options_discard_keys:
continue
setattr(asset_write_opts, key, value)

View file

@ -1,7 +1,7 @@
import os
import avalon.maya
import openpype.api
from openpype.hosts.maya.api.lib import maintained_selection
from maya import cmds
@ -35,13 +35,8 @@ class ExtractMultiverseUsdOverride(openpype.api.Extractor):
"writeVariantsDefinition": bool,
"writeActiveState": bool,
"writeNamespaces": bool,
"writeTimeRange": bool,
"timeRangeStart": int,
"timeRangeEnd": int,
"timeRangeIncrement": int,
"timeRangeNumTimeSamples": int,
"timeRangeSamplesSpan": float,
"timeRangeFramesPerSecond": float
"numTimeSamples": int,
"timeSamplesSpan": float
}
@property
@ -62,13 +57,8 @@ class ExtractMultiverseUsdOverride(openpype.api.Extractor):
"writeVariantsDefinition": True,
"writeActiveState": True,
"writeNamespaces": False,
"writeTimeRange": True,
"timeRangeStart": start_frame,
"timeRangeEnd": end_frame,
"timeRangeIncrement": 1,
"timeRangeNumTimeSamples": 0,
"timeRangeSamplesSpan": 0.0,
"timeRangeFramesPerSecond": 24.0
"numTimeSamples": 1,
"timeSamplesSpan": 0.0
}
def process(self, instance):
@ -79,7 +69,7 @@ class ExtractMultiverseUsdOverride(openpype.api.Extractor):
staging_dir = self.staging_dir(instance)
file_name = "{}.usda".format(instance.name)
file_path = os.path.join(staging_dir, file_name)
file_path = file_path.replace('\\', '/')
file_path = file_path.replace("\\", "/")
# Parse export options
options = self.default_options
@ -88,41 +78,53 @@ class ExtractMultiverseUsdOverride(openpype.api.Extractor):
# Perform extraction
self.log.info("Performing extraction ...")
with avalon.maya.maintained_selection():
with maintained_selection():
members = instance.data("setMembers")
members = cmds.ls(members,
dag=True,
shapes=True,
type=("mvUsdCompoundShape"),
type="mvUsdCompoundShape",
noIntermediate=True,
long=True)
self.log.info('Collected object {}'.format(members))
self.log.info("Collected object {}".format(members))
# TODO: Deal with asset, composition, overide with options.
import multiverse
time_opts = None
if options["writeTimeRange"]:
frame_start = instance.data["frameStart"]
frame_end = instance.data["frameEnd"]
handle_start = instance.data["handleStart"]
handle_end = instance.data["handleEnd"]
step = instance.data["step"]
fps = instance.data["fps"]
if frame_end != frame_start:
time_opts = multiverse.TimeOptions()
time_opts.writeTimeRange = True
time_opts.frameRange = (
frame_start - handle_start, frame_end + handle_end)
time_opts.frameIncrement = step
time_opts.numTimeSamples = instance.data["numTimeSamples"]
time_opts.timeSamplesSpan = instance.data["timeSamplesSpan"]
time_opts.framePerSecond = fps
time_range_start = options["timeRangeStart"]
time_range_end = options["timeRangeEnd"]
time_opts.frameRange = (time_range_start, time_range_end)
time_opts.frameIncrement = options["timeRangeIncrement"]
time_opts.numTimeSamples = options["timeRangeNumTimeSamples"]
time_opts.timeSamplesSpan = options["timeRangeSamplesSpan"]
time_opts.framePerSecond = options["timeRangeFramesPerSecond"]
over_write_opts = multiverse.OverridesWriteOptions()
over_write_opts = multiverse.OverridesWriteOptions(time_opts)
options_items = getattr(options, "iteritems", options.items)
for (k, v) in options_items():
if k == "writeTimeRange" or k.startswith("timeRange"):
options_discard_keys = {
"numTimeSamples",
"timeSamplesSpan",
"frameStart",
"frameEnd",
"handleStart",
"handleEnd",
"step",
"fps"
}
for key, value in options_items():
if key in options_discard_keys:
continue
setattr(over_write_opts, k, v)
over_write_opts.timeOptions = time_opts
setattr(over_write_opts, key, value)
for member in members:
multiverse.WriteOverrides(file_path, member, over_write_opts)
@ -131,9 +133,9 @@ class ExtractMultiverseUsdOverride(openpype.api.Extractor):
instance.data["representations"] = []
representation = {
'name': 'usda',
'ext': 'usda',
'files': file_name,
"name": "usd",
"ext": "usd",
"files": file_name,
"stagingDir": staging_dir
}
instance.data["representations"].append(representation)