Nukeというハリウッドも使う合成ソフトウェアがある。Pythonをスクリプト言語として採用しているのと、Linuxをプラットフォームとしてサポートしているので、サーバーサイドとして色々なことで使えそうだ。
例えばナイスなロジックを第三者に書いてもらって、Pythonを使ってそのNukeファイルを呼び出しうて随時画像に適用する、なんてことが出来る。
例えば以下のような処理をNukeで定義。
上記ロジックはsimpleblur.nkとしてSaveしておく。
さて、上記ロジックを
1. food_picture.jpgに適用
2. 追加のブラー処理も加えたい。
3. out.jpgで出力(Saveしたい)
という場合、次のように書けばいい。
import nuke, sys
def make_connect( _from, _to ): _to.setInput(0, _from) def my_blur( _from, _to ): b1 = nuke.nodes.Blur( size = 20) b2 = nuke.nodes.Blur( size = 30) b3 = nuke.nodes.Blur( size = 40) l = [ _from, b1, b2, b3, _to ] prev = l[ 0 ] for n in l: make_connect( prev, n ) prev = n def main(): # load nuke script. nuke.scriptOpen( sys.argv[ 1 ] )
input_file = nuke.nodes.Read(file="/home/maishoku/Desktop/food_picture.jpg") output_file = nuke.nodes.Write(file="/home/maishoku/Desktop/out.png") _input = nuke.toNode( 'ColorCorrect1' ) _output = nuke.toNode( 'Output1' ) make_connect( input_file, _input ) # ----- what you want in this script my_blur( _input, _output ) # ----- make_connect( _output, output_file ) nuke.render( output_file, 1, 1 ) print "hello world" if __name__ == '__main__': main()
|
あとは、次のように実行すれば良い。
$ ./Nuke7.0v9/Nuke7.0 -t nuketest.py simpleblur.nk読み込みファイル、出力画像ファイルはソースコード内でベタ書きでかいたけど、Pythonだからsys.argv[2], sys.argv[3]などでファイルパスを指定すればいい。
なんて素晴らしいんだ!
Nukeの考え方としてはパイプのように次々と処理をつなげていく事。
setInputという関数がつなげていく処理を示している。特定のノードを選択肢たい場合は、nuke.toNodeで指定する。
まぁ、ともかくNukeはPythonが使えていい!
Mayaとかそのソフトだけしか使えないような言語(MELスクリプト)とか覚える気がまったくしない。。
株式会社OctOpt
コンピューターサイエンス会社OctOptの技術公式ブログ等々力 康弘
@rocky_house