スクリーンショット_2019-08-14_22

[2.8]コマ数を画面に表示する

スタジオカラーの件で驚いた方もいらっしゃるかと思いますが、アニメに「結構Blender使われてました」案件があるそうです。結構昔から。

そしてこの最近アニメの原画とかたまにTwitterのタイムラインに流れてくることがあります。こんな感じで。

Togetterにまとまってますね(実は何気にBlender回)。

まとめの中のツイートの動画にもありますが、動画用紙を取り込んだ感じの動画、そこにコマ数をカウントする形で文字が入っているっていうやつですね。

はい、よいしょー。とりあえずでっち上げてみました。

右上のところ、文字がコマ数に応じて変わってますよね。これをどうやって実現するか、ってことですね。

特にBlenderの使い方は特に説明しませんが、やったことだけちょちょいと書いておきますね。

仕込み

カメラの枠にメッシュオブジェクトで現画用紙の枠を作ります。あとテキストも適当に配置。位置関係はこんな感じ。

カメラ視点にすると、はい。

テキストオブジェクトも配置しておきます。このオブジェクト名は t_time とします。

みんな大好きPythonの出番

ここでハンドラーを使って画面上のフレーム変化で関数を実行するようにします。

Application Handlers (bpy.app.handlers)

テキストエディタのテキストに以下を入力、一度だけ実行します。

import bpy

scene = bpy.context.scene
obj = scene.objects['t_time']

def timecount_text(scene):

   cur = scene.frame_current
   fps = scene.render.fps
   sec ,stp = divmod(cur , fps)

   obj.data.body = '{0:03d} ({1:d} {2:03d})'.format(cur,sec,stp)

bpy.app.handlers.frame_change_pre.append(timecount_text)

間違いがないことを確認して[Run Script]ボタンを押します。

特に変わらないですね。では3Dビューに戻ってコマ数を変化させてみましょう。

文字列が変わっていたらOK。登録された関数が実行されて、テキストオブジェクトのテキストが現在のコマ数,(秒数, 秒中のフレーム数) という風に書き換えられていることが確認できます。

もし上記のスクリプトを修正したものを再実行する場合には、Python Interactive Console から、以下の1行を入力して実行。そのあとスクリプトを実行。

bpy.app.handlers.frame_change_pre.clear()

はい、簡単でしょ?(何も説明してないですけど)

See Also:


お読みいただきありがとうございます。サポートいただいた分はおやつのグレードアップに使おうかと思います。スキ、SNSにシェアもよろしくお願いします!