プレイブラストを何とかしたいシリーズ
表題の通りですね。
たまーにですが、連続するカットでmayaのシーン上では1fからスタートになってない場合があったり。
でも後工程の都合で1からにしたいとか
※ちなみにffmpegで連番を動画にする場合も1からスタートになっていないとうまく変換できません。
レンダリングする場合だとrenumber framesオプションでフレーム番号を振り直せるんですけどね
調べる
1からスタートにします!的なのは無さそうですね(2022
sequenceTime
シーケンス時間を使用します。
気になるのはこれ。 シーケンスタイムとは?
シーケンス時間を使用(Use Sequence Time)
オンに設定すると、プレイブラストの基準はカメラ シーケンサ(Camera Sequencer)のシーケンス時間(Sequence Time)になります(「カメラ シーケンサ(Camera Sequencer)のタイムラインと再生コントロール」も参照してください)。
はーん?
カメラ シーケンサ(Camera Sequencer)
https://help.autodesk.com/view/MAYAUL/2022/JPN/?guid=GUID-FDCA1426-D7FE-41A5-9563-5628C736BCCC
あー・・・なんか見たことある機能だな。使った事ないけど。
じゃぁこれをアニメーターさんに毎回必ず作っておいてもらえば問題ないですね。
ではなく
- カメラを指定
- カメラにshotノードが無い場合は作成する。
- shotノードの設定値は startFrame / endFrame と sequenceStartFrame = 1
ここでふとプレイブラストってカメラ指定できたっけ?
カメラではなく、ビューポート指定じゃぁなかったっけ?
なので
- ビューポートを指定(カレント
- ビューポートにセットされているカメラを取得
- カメラにshotノードが無い場合は作成する。
- shotノードの設定値は startFrame / endFrame と sequenceStartFrame = 1
かなぁ
実装
import maya.cmds as cmds
import maya.api.OpenMayaUI as omui
import maya.OpenMayaUI as OpenMayaUI
def getCurViewPanel():
curView = omui.M3dView.active3dView()
return OpenMayaUI.MQtUtil.fullName(int(omui.M3dView.active3dView().widget())).split("|")[-2]
def createShotNode(cameraname,shotName,timeRange):
shotNode = cmds.shot(shotName, startTime=timeRange[0], endTime = timeRange[1],sequenceStartTime = 1,currentCamera = cameraname)
return shotNode
def applyPlayblaseSeq(outputPath,sequenceTime):
start = cmds.playbackOptions(q =True, minTime=True)
end = cmds.playbackOptions(q =True, maxTime=True)
resolution = [
cmds.getAttr("defaultResolution.width"),
cmds.getAttr("defaultResolution.height")
]
panel = getCurViewPanel()
cameraName = cmds.modelEditor(panel, q=True, camera=True)
if sequenceTime:
if cmds.objExists("playblastTmp"):
cmds.delete("playblastTmp")
shotNode = createShotNode(cameraName,"playblastTmp",[start,end])
result = cmds.playblast(
filename =outputPath,
forceOverwrite =True,
format = "image",
compression = "png",
sequenceTime = sequenceTime,
clearCache = 1,
viewer = False,
showOrnaments = True,
offScreen = True,
fp = 4,
percent = 100,
quality = 100,
startTime = start,
endTime = end,
widthHeight = resolution,
editorPanelName = panel
)
if sequenceTime:
cmds.delete(shotNode)
outputPath = "C:/Users/kubo/Desktop/hoge/hoge"
applyPlayblaseSeq(outputPath,True)
こんなかんじかな?
一旦テストしてみる
なぜにwhy?
んー・・・・
あ、理解しました。
start / end で指定しましたが、
Sequence Time上でのそのフレームを出力する
ということか
なので
import maya.cmds as cmds
import maya.api.OpenMayaUI as omui
import maya.OpenMayaUI as OpenMayaUI
def getCurViewPanel():
curView = omui.M3dView.active3dView()
return OpenMayaUI.MQtUtil.fullName(int(omui.M3dView.active3dView().widget())).split("|")[-2]
def createShotNode(cameraname,shotName,timeRange):
shotNode = cmds.shot(shotName, startTime=timeRange[0], endTime = timeRange[1],sequenceStartTime = 1,currentCamera = cameraname)
return shotNode
def applyPlayblaseSeq(outputPath,sequenceTime):
start = cmds.playbackOptions(q =True, minTime=True)
end = cmds.playbackOptions(q =True, maxTime=True)
resolution = [
cmds.getAttr("defaultResolution.width"),
cmds.getAttr("defaultResolution.height")
]
panel = getCurViewPanel()
cameraName = cmds.modelEditor(panel, q=True, camera=True)
if sequenceTime:
if cmds.objExists("playblastTmp"):
cmds.delete("playblastTmp")
shotNode = createShotNode(cameraName,"playblastTmp",[start,end])
#seqタイムに変換
start = cmds.getAttr(shotNode + ".sequenceStartFrame")
end = cmds.getAttr(shotNode + ".sequenceEndFrame")
result = cmds.playblast(
filename =outputPath,
forceOverwrite =True,
format = "image",
compression = "png",
sequenceTime = sequenceTime,
clearCache = 1,
viewer = False,
showOrnaments = True,
offScreen = True,
fp = 4,
percent = 100,
quality = 100,
startTime = start,
endTime = end,
widthHeight = resolution,
editorPanelName = panel
)
if sequenceTime:
cmds.delete(shotNode)
outputPath = "C:/Users/kubo/Desktop/hoge/hoge"
applyPlayblaseSeq(outputPath,True)
はい できました。