回転するムービーを作成

2003.11.13 by M. Hidaka

Molscript, Raster3D, Perlを使う。Raster3dのHPを参考に作成 (Pymolを使った方がもっと簡単?)

1. Molscriptの入力ファイルHoge.msをanimate.molという名前にコピーする

>cp Hoge.ms animate.mol

 

2. animate.molのrotation、transration指定部分の最後に

@frame_rotation.mol

と加える。

 

3.これをanimation.plとして保存する。

 

4. animation.plに実行パーミッションを与える。

>chmod +x animation.pl

 

5. animation.plを実行する。

>./animation.pl

 

6. うまくいけばframe_(0-357).jpegというイメージファイルができる。

このPerlでは、3度ずつ回転させた0−360度までのイメージができる。

角度の指定はPerlの対応部分を書き直せばよいはず。

 

7. convertコマンドを使って、できたイメージファイルを繋げて

アニメーションGifに変換する。

>convert -delay 15 -loop 0 frame_*.jpeg movie.gif

delay部分やloop部分についてはまだ検討中。

delayを小さくしすぎると、処理に時間がかかる。

ファイルサイズは変わらないみたい。

伏信注:convertコマンドはIRIX標準にはないみたい。Imagemagickをインストールすれば入るらしい。最近のLinuxには入ってる。MacintoshのGraphicConverterを使えばdelayやloopを後で変更できる。

8. linuxではanimateというコマンドでアニメーションGifを見ることができる。

>animate movie.gif

 

補足1:ヘッダーの使い方

同じディレクトリにheader.r3dという名前で、以下の内容を保存しておく

render (Raster3D) input file, MolScript v2.1.2, Copyright (C) 1997-1998 Per J. Kraulis
30 30 tiles in x,y
15 15 pixels (x,y) per tile
3 antialiasing level (1,2,3)
1 1 1 background colour
F no shadows cast (T = shadows cast)
25.6 Phong power (specular highlights)
0.25 secondary light contribution
0.05 ambient light contribution
0.25 specular reflection component
0 eye position (0 = no perspective)
1 1 1 main light source position
1 0 0 0 view matrix: input coordinate transformation
0 1 0 0
0 0 1 0
0 0 0 15.7 ←ここ
3 mixed objects
* (free format triangle and plane descriptors)
* (free format sphere descriptors)
* (free format cylinder descriptors)
3

Molscriptは、同じディレクトリにheader.r3dという名前のファイルが存在すると、

r3dファイル出力のときにheader.r3dの内容をHederとして使う。

一番上にあるTilesの値を指定することで、

出来上がるImageファイルの大きさを指定できる。

これを使わないと、50X50という少し大きなイメージができる。

30X30くらいがいいんじゃないでしょうか。

viewmatrixの最後の行にある15.7って値は、

MolscriptのWindowの項に当たるものなので、

MolscriptのInputファイルを見て書き込む。

 

補足2:mpegファイルの作り方

注 Linuxにはmpeg_encodeとmpeg_playのrpmをインストールすること。

まず、mpeg_encoding.datとして以下の内容を保存する。

#
# file "mpeg_encoding.dat"
#
INPUT_DIR .
INPUT
frame_*.ppm [000-360+3]
END_INPUT
OUTPUT movie.mpeg
BASE_FILE_FORMAT PNM
INPUT_CONVERT *
PATTERN IBPBB
FORCE_ENCODE_LAST_FRAME
SLICES_PER_FRAME 1
GOP_SIZE 10
PIXEL HALF
RANGE 2
IQSCALE 5
PQSCALE 10
BQSCALE 15
REFERENCE_FRAME DECODED
PSEARCH_ALG LOGARITHMIC
BSEARCH_ALG CROSS2

各項目の詳しい内容は不明。

次に、Perlを実行してできたJPEGファイルをPPMファイルに変換する。

>convert frame_000.jpeg frame_000.ppm

 

これを全部のイメージについてやるわけだが、120枚もやってられないので、

>for x in *.jpeg ; do convert $x ${x/jpeg/ppm}; done

とやると、すべてのjpegがppmに変換される。

 

ちょっと補足。

mpeg_encodeのマニュアルによると、JPEGもサポートしているらしいのだが、

実際にJPEGを使ってエンコードしようとするとsegmentation faultで失敗する。

そのため一度ppm形式に変換してやる。

BASE_FILE_FORMAT PNM は、PPMで実行するとPNMでやれと言われるので、

PNMになっている。

 

>mpeg_encode mpeg_encoding.dat

と入力すると、movie.mpegができあがるはず。

 

Linuxでは

>mpeg_play movie.mpeg

とやるとMovieを見ることができる。

WindowsではMedia playerなどで見ることができる。

 

補足3

イメージは二度ずつ作成するといい感じ。

Perlの

Frame: for ($i = 0.0; $i < 360.0; $i += 3.0)

Frame: for ($i = 0.0; $i < 360.0; $i += 2.0)

にする。

スタートはマイナス側からもはじめることができるが、

convertを使ってアニメーションGifに変換すると並びがめちゃくちゃになる。

Graphic converterなどを使うとよいかもしれない。


Back