Скриптинг на python в cgpipeline. Часть 1

На текущий момент в индустрии производства спецэффектов фактическим стандартом является python. Он используется в большом количестве 3D и 2D пакетов, таких как Maya, Houdini, XSI, Nuke. Существует огромное количество расширений для связки python практически со всеми технологиями. При его помощи Вы можете напрямую обращаться к базам данных, генерировать динамические web cтраницы. Одним словом python является практически идеальным решением для написания pipeline. > Для того чтобы получить доступ ко всем возможностям Maya, необходимо всего лишь написать

import maya.standalone

maya.standalone.initialize()

C этого момента  мы можем использовать все  возможности maya прямо в интерпретаторе python.

Я приведу несколько  приципов программирования, которые  позволят сделать пайплайн гибким и  легко расширяемым при появлении новых задач

  • Разделяйте функциональные процедуры и процедуры создающие графический интерфейс. Это позволит использовать один и тот же скрипт как в графическом так и в командном режиме.
  • Используйте платформенно независимые решения. Это позволит бескровно портировать пайплайн при смене операционной системы.
  • Для вызова функциональных модулей используйте промежуточный скриптовую оболочку, предназначенную только для парсинга аргументов и вызова функционального модуля.

Пример скриптовой оболочки приведен ниже.

@setlocal enableextensions & mayapy -x %~f0 %* & goto :EOF

Эта команда  позволит переименовать скрипт-оболочку в *.cmd, для запуска скрипта вместо вызова mayapy scriptname.py args, можно будет пользоваться более коротким вызовом scriptname args. Далее следует описание основной функции скрипа main() и  описание всех аргуменов скрипта.

def main():

      usage = "usage: %prog [options] for example: \n

s3d_wrapper -c genBaseScene -i scene.ma -p //server/project/scenes/ -s 1 -e 70"

      parser = OptionParser(usage=usage)

      parser.add_option("-i", "--inputScene", action="store", type="string",  dest="sceneName",  help="Input Maya Scene to process")

      parser.add_option("-p", "--project",  action="store", type="string",  dest="projectPath",  help="Project Path")

      parser.add_option("-c", "--cmd",  action="store", type="string",  dest="command",  help="Describes a pipeline step.

Possible values: genAlfJob, genBaseScene, genRib, genRenderScene, ")

      parser.add_option("-s", "--startFrame", action="store", type="int",  dest="startFrame",   help="Start frame. Default value: %default")

      parser.add_option("-e", "--endFrame",  action="store", type="int",  dest="endFrame",  help="End frame")

      parser.set_defaults(startFrame=1)

      (options, args) = parser.parse_args()

      scene =  options.sceneName

      project =  options.projectPath

      command =  options.command

      start =  options.startFrame

      end =   options.endFrame

Далее мы определяем какой процесс пайплайна должен быть вызван скритом и передаем аргументы  в функциональный скрипт.

      if command == 'genBaseScene':

            exec 'from s3d_processScene import *'

            statusCode = s3d_processScene(project, scene, end, 4, start)

            cmds.quit(f=True) 

      elif command == 'genRenderScene':

            exec 'from s3d_processRenderScene import *'

            statusCode = s3d_genRenderScene(project, scene, end, start)

            cmds.quit(f=True)

      else:

            print 'Das Befehl ist nicht gefunden\n'

И этот блок запускает  функцию main() при вызове скрипта:

if __name__ == "__main__":

      import sys

      from optparse import OptionParser

      main()

Такая структура  позволит нам при необходимости  добавить новые процессы пайплайна, используя стандартный интерфейс вызова скрипта:

s3d_wrapper -c pipelineStep -i sceneName -p //server/project/scenes/ -s 1 -e 70

Clicky Web Analytics