🎥

tk-cinema

2021/08/31に公開

MAXON Cinema4DSGとの連携について書いていきたいと思います。
結果だけ先に書くと正攻法では動かず、無理やり頑張りました(๑´ڡ`๑)

この記事は、こちらのBook▼の一部として書かれました。
https://zenn.dev/it_ks/books/0dd16c796f470e

これができると?

この記事の内容を達成すると、SGのパイプラインツールキットを用いてCinema 4Dをパイプラインに組み込むことができます。

それができると、SG DesktopからC4Dを起動し、SGと連携するための各種ツール群を利用できるようになります。
それによって下記のようなワークフローが実現できるそうです。

統合ユーザ ガイド

パイプラインのチュートリアル

Github

mikedatsik さんが開発・Githubに公開しておられます。Clarisse用に開発されたものをベースにしておられるとのこと。ツールキット名は「tk-cinema4d」とか「tk-c4d」ではなく、 「tk-cinema」 です。

https://github.com/mikedatsik/tk-cinema
https://github.com/diegogarciahuerta/tk-clarisse

本稿執筆時点で最新リリースは v1.0.0(2019/11/04)。
https://github.com/mikedatsik/tk-cinema/releases/tag/v1.0.0

ただし、Github右カラムのReleases欄にリリースしていなくても 更新はされている (ことがある)という点に注意が必要です。

備考 - 対応C4Dバージョンについて

READMEによると開発時のテストはR20でやったとのこと。ただし現在ではR20はインストールできなくなっているため、R24で作業を進めることにします。


なおR23がpy37、R24がpy39。VESのVFX Reference Platform では2022DRAFT時点でpy39と書かれているので、2021年時点ですでに39というのは攻めてますね。

R23

R24

作業の内容

以下、大きくは Blenderでの連携作業記事 に沿い、Blender記事と重複する内容は言及にとどめます。

SG上でtk-cinemaを登録
↓
ローカルのconfigファイルを改変
↓
tankコマンド実行

SG上でtk-cinemaを登録

ADMINメニューの「Software」にて登録します。

configを改変

engine_locationやenv以下など各種ymlに、githubの内容を追記していきます。

templates.ymlのShotセクションにはレンダリング関連のパスがありませんので、必要ならtk-mayaやtk-nukeを参考に足すことを検討しましょう。

settings以下にtk-cinema.ymlを設置するのも忘れずに。

engine location

tankコマンド実行時にファイルを取得してくるための「tk-cinemaの場所」をengine_location.ymlに記述しますが、すでに触れた通り最新版はgithub上でreleaseされていない(バージョンがついていない)ため、readmeで紹介されている書き方では取得できません。

tk-cinema
# Cinema 4D
engines.tk-cinema.location:
  type: github_release
  organization: mikedatsik
  repository: tk-cinema
  version: v1.0.0

▲ この書き方だと、v1.0.0 = R20当時のtk-cinemaがダウンロードされます。

R24対応をコミットしているのはまた別の開発者(danbradhamさん)で、
ここが一番新しいようです。
https://github.com/danbradham/tk-cinema/tree/bns-master
bns-masterのBNSがなんなのかはよくわかりません[1]バンダイ・ナムコ・スタジオ?

ともあれ、こういう感じで記述してみました。

tk-cinema/d99ccfb
  type: git_branch
  branch: bns-master
  path: https://github.com/danbradham/tk-cinema
  version: d99ccfb

書き方は公式ドキュメント▼を参照しました。

https://developer.shotgridsoftware.com/tk-core/descriptor.html#descriptor-types

余談ですが、typeにgit_branchを指定するとき、branchでmasterを指定するとtankに正しくないと言われます。typeがgitの時には自動的にmasterを見るため、git_branchの時ならmaster以外を指定せよ、ということのようです。
また、versionは v1.0.0 のようなセマンティックバージョンな書き方以外にコミットのハッシュを指定できます。上記の書き方だと

https://github.com/danbradham/tk-cinema/commit/d99ccfbd4fe7601b71b88d07c08654f4aedc63a2

の時のtk-cinemaを見に行くということになります。

tankコマンド実行

tankコマンドを実行し、githubのファイルをローカルにダウンロードしてきます。

tank
tank cache_apps

constant_apps.py を編集

constant_apps.py は、tankでダウンロードしてきた後に tk-cinema以下のpython\tk_cinemaに置かれるpyファイルで、C4Dに追加されることになるSGメニューの内容を編集するためのものです。自作appを追加するときなどに更新します。

https://github.com/mikedatsik/tk-cinema/blob/master/python/tk_cinema/constant_apps.py

メニューラベル、コマンドID、ペース、の3要素をリストにして記入するとのこと。ペース(pace, 歩調・速度・足並み)というのはどういう用語かよくわかりませんが、「separater」「main」「submenu」が確認でき、なんとなくわかります。

また、IDを確認するための関数が併記されています。

get_plugins
def get_plugins():
    out = []
    for item in engine.commands.items():
        tmp = [item]
        m = hashlib.md5()
        m.update(item[0])
        plug_id = str(int(m.hexdigest(), 16))[0:7]
        tmp.append(plug_id)
        out.append(tmp)
    return out

…もしかしたら、編集したものをtk-cinema直下に保存して使うのかもしれませんが、本稿では未詳です。

SG DesktopからCinema4Dを起動

一応C4Dのアイコンをクリックすれば起動しますが、試行時は上記で触れたようにv1.0.0をダウンロードしていました。
するとまずsgtkが見つからないというエラーが発生し、ここでreleaseされているバージョンよりも開発が進んでいること、mikedatsikさん以外にdanbradhamさんも開発していること、などの事態が発覚します。

▼sgtkがみつからないときの図。

▼SG Communityの、C4DがPython 37へ移行した際のトラブルについてのDanさんの投稿

https://community.shotgridsoftware.com/t/shotgun-toolkit-engine-for-maxon-cinema-4d/6437/23

その後、R24をアンインストールしてR23で試してみたり、SG DesktopをPy3 Modeにしたり、mikedatsikさん、danbradhamさんのいろんなコミットバージョンを遡ってみたりと試しましたが、エラーは解消できず。具体的には以下の二点です。

PySide2/__init__.py: Unable to import shiboken2 from C:\Program Files\Maxon Cinema 4D R24\resource\modules\python\libs\python39, C:(後略)
...
AttributeError: 'NoneType' object has no attribute 'qVersion'
...
AttributeError: 'NoneType' object has no attribute 'QTextCodec'
...
raise RuntimeError(
RuntimeError:Failed to load tk-cinema! Can not start or find engine.

importしたQtCore、QtGuiがなかみがNoneになっているようで、sys.path.insert的なのを頑張ればいけるのかなと思いますが、コミュニティのやり取りを見ていると解決していたはずでは?という感もあり。

苦肉の策

SG Desktopと一緒にインストールされるPySide2、shiboken2を、Roaming以下のC4DのPython lib置き場に 手動コピー しました。(SG由来のものでなくても、37用のPySide2/shiboken2であれば大丈夫だと思います。未確認ですがR24なら39用を。)

from
C:\Program Files\Shotgun\Python3\Lib\site-packages
to
C:\Users\{user}\AppData\Roaming\Maxon\Maxon Cinema 4D R23_DBA5903C\python37

すると▼SGメニューが起動時に現れました!(SG Desktopはpy2、py3モードどちらでも)


Shotgun Panelが表示されなかったりAsset工程(asset_step)なのにSync Frame Range があったりと、実用するなら調整が必要そうです。

バージョンは以下です。

Cinema4D : v 23.110 (R23_DBA5903C ?)
tk-cinema : https://github.com/mikedatsik/tk-cinemaの6caa901(https://github.com/danbradham/tk-cinemaのdb27e8dも確認した)
SG Desktop : v1.7.0 (py2,py3 mode)

※本稿投降後、 6caa901 と db27e8d がマージされ 44f5f3b になりました。

備考

mikedatsikさんはほかにC4D用appとして、「tk-cinema-setuprender」「tk-cinema-playblast」も開発しておられるようです。

https://github.com/mikedatsik/tk-cinema-setuprender

https://github.com/mikedatsik/tk-cinema-playblast

https://mikedatsik.github.io/

またdanbradhamさんは環境設定/モジュール管理システム「cpenv」を開発していて、それとSGを連携させる「tk-cpenv」を公開されてます。

https://github.com/cpenv
https://github.com/cpenv/tk-cpenv

備考2 - SG Desktop py3 mode

環境変数SHOTGUN_PYTHON_VERSIONを3にすると、SG Desktopがpy3モードで起動します。

https://support.shotgunsoftware.com/hc/en-us/articles/219039888-Shotgun-Desktop-Release-Notes#v1.6.1

…ざっと探した感じ、readme的な場所じゃなくてこの「リリースノートv1.6.1」くらいしかこれについて言及してないんですが、それってどうなんですかね。。。

sg_desktop_py3.bat
SET SHOTGUN_PYTHON_VERSION=3
"C:\Program Files\Shotgun\Shotgun.exe"

おしらせ

ShotGrid のTipsを技術同人誌としてまとめました。
製本版をBOOTHにて、電子版を技術書典オンラインマーケットにて頒布中です。

BOOTH :
https://circleqt.booth.pm/items/3472241
技術書典 :
https://techbookfest.org/product/5412773246795776?productVariantID=5465863454982144

脚注
  1. Brand New Schoolという制作会社のようです。 https://www.linkedin.com/company/brand-new-school  
    Githubではいくつかのsg関連の開発をおこなっているようです。 
    https://github.com/nybrandnewschool ↩︎

Discussion