コンテンツにスキップ

ARTv1 について

Animation and Rigging Toolkit と呼称されています。
これは、UE4 へ maya からリグを持っていくのに最適化されたツールとのことです。

原文

The Animation and Rigging Toolkit is used by Epic for all internal projects, including Fortnite, Paragon, Robo Recall, and Unreal Tournament. Autodesk Maya is required to use the tools (we use Maya 2016 internally), as is a Windows operating system. These tools allows you to rig and animate your own characters, with a robust suite of tools to make the process as easy as possible. These tools are fully compatible with the Epic Mannequin (he was built on them after all!), and all Epic skeleton animations available on the marketplace.

翻訳

Animation and Rigging Toolkitは、Fortnite、Paragon、Robo Recall、UnrealTournamentを含むすべての内部プロジェクトでEpicによって使用されています。 Windowsオペレーティングシステムと同様に、ツールを使用するにはAutodesk Mayaが必要です(内部ではMaya 2016を使用しています)。 これらのツールを使用すると、プロセスを可能な限り簡単にする堅牢なツールスイートを使用して、独自のキャラクターをリグおよびアニメーション化できます。 これらのツールは、Epic Mannequin(結局、彼はそれらに基づいて構築されました!)、および市場で入手可能なすべてのEpicスケルトンアニメーションと完全に互換性があります。

このツールにたどり着いた経緯

近頃、maya のリグにおいて、
joint の配置時、joint orient, rotate order に一体正解はあるのかを、ずっと模索しておりました。
将来的に、UE4にもっていきたいという希望もあり、いろいろサイトを探していました。
すると、UE4 に最適化されたリグを、maya で作成できるツールがある事を知ります。
但し、ARTv1 を maya で利用するためには、UE4 は、サポートエンジンバージョンに制限がありました。
サポートされたエンジンバージョン 4.10 - 4.21

参考: Maya アニメーション リギング ツールセット

バージョン情報 (2020/11/23付け)

UE4

  • UE4.21.2

ARTv1

  • 制限:サポートされたエンジンバージョン 4.10 - 4.21

maya

  • maya2018

以下、私のバージョンで実行できるまでの流れです。

■mayaで使用できるまでの流れ

  1. 割愛するが、前提として、EpicGamesLauncher.exe を使用して、
    UE4.21.2

    ARTv1

    の順に、EpicGamesLauncher で、PCへインストール出来ている必要がある。

  2. C:\Users\███\Documents\maya\2018\scripts\userSetup.py コードへ、以下を追記する。

userSetup.py への追記コード 抜粋
#################################################
# 14:10 2020/11/23
# maya へ UE4.21.2 plug-ins の ART(Animation and Rigging Toolkit)を追加した。
# 以下、オリジナルの userSetup.py の場所と中身です。
# C:\Users\███\program\Epic Games\UE_4.21\Engine\Plugins\Marketplace\ARTv1\MayaTools
# userSetup.py
# 実行後は、MayaTools の場所を尋ねられるので、同場所を指定する必要があります。
# 以下は、中身のコピペです。
MAYA_SEP = '/'


def correctSysPath():
    for i, path in enumerate(sys.path):

        if path[-1] in (MAYA_SEP, os.sep, os.altsep):

            sys.path[i] = sys.path[i][:-1]


correctSysPath()


def deleteOldAutoSaves():
    import maya.cmds as cmds

    import time

    import os.path, time

    save = cmds.autoSave(q = True, enable = True)

    destDir = cmds.autoSave(q = True, destinationFolder = True)

    deleteDays = 3

    if save:

        now = time.time()

        fileCap = now - 60 * 60 * 24 * deleteDays

        files = os.listdir(destDir)

        for file in files:

            fileCreation = os.path.getctime(os.path.join(destDir, file))

            if fileCreation < fileCap:

                os.remove(os.path.join(destDir, file))


def mayaToolsInstall_UI():
    if cmds.window("mayaToolsInstall_UI", exists = True):

        cmds.deleteUI("mayaToolsInstall_UI")

    window = cmds.window("mayaToolsInstall_UI", w = 300, h = 100,
                         title = "Maya Tools Install", mnb = False, mxb = False)

    mainLayout = cmds.columnLayout(w = 300, h = 100)

    formLayout = cmds.formLayout(w = 300, h = 100)

    text = cmds.text(
        label = "ERROR: Could not find Maya Tools directory.\n Please locate folder using the \'Browse\' button.",
        w = 300)

    cancelButton = cmds.button(label = "Cancel", w = 140, h = 50,
                               c = mayaToolsInstall_Cancel)

    browseButton = cmds.button(label = "Browse", w = 140, h = 50,
                               c = mayaToolsInstall_Browse)

    cmds.formLayout(formLayout, edit = True, af = [(text, 'left', 10), (text, 'top', 10)])

    cmds.formLayout(formLayout, edit = True,
                    af = [(cancelButton, 'left', 5), (cancelButton, 'top', 50)])

    cmds.formLayout(formLayout, edit = True,
                    af = [(browseButton, 'right', 5), (browseButton, 'top', 50)])

    cmds.showWindow(window)

    cmds.window(window, edit = True, w = 300, h = 100)


def mayaToolsInstall_Cancel(*args):
    cmds.deleteUI("mayaToolsInstall_UI")

    cmds.warning("Maya Tools will not be setup")


def mayaToolsInstall_Browse(*args):
    mayaToolsDir = cmds.fileDialog2(dialogStyle = 2, fileMode = 3)[0]

    # confirm that this is actually the maya tools directory

    if mayaToolsDir.rpartition("/")[2] != "MayaTools":

        cmds.warning("Selected directory is not valid. "
                     "Please locate the MayaTools directory.")
    else:

        cmds.deleteUI("mayaToolsInstall_UI")

        # create file that contains this path

        path = cmds.internalVar(usd = True) + "mayaTools.txt"

        f = open(path, 'w')

        f.write(mayaToolsDir)

        f.close()

        # run setup

        cmds.file(new = True, force = True)


def mayaTools():
    # import custom maya setup script

    print cmds.internalVar(usd = True)

    print cmds.internalVar(upd = True)

    path = cmds.internalVar(usd = True)

    path = path + "mayaTools.txt"

    print path

    if os.path.exists(path):

        f = open(path, 'r')

        mayaToolsDir = f.readline()

        if not os.path.exists(mayaToolsDir):

            mayaToolsInstall_UI()

        path = mayaToolsDir + "/General/Scripts"

        pluginPath = mayaToolsDir + "/General/Plugins"

        # look in sys.path to see if path is in sys.path. if not, add it

        if not path in sys.path:

            sys.path.append(path)

        # run setup

        import customMayaMenu as cmm

        cmm.customMayaMenu()

        # cmds.file(new = True, force = True)
    else:

        mayaToolsInstall_UI()


def launchCustomFileLister():
    import customFileLister

    reload(customFileLister)

    customFileLister.UI()


# setup script jobs

scriptJobNum = cmds.scriptJob(event = ["NewSceneOpened", launchCustomFileLister])

scriptJobNum2 = cmds.scriptJob(event = ["NewSceneOpened", mayaTools])

以上



最終更新日: 2024年4月18日 09:56:44