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
同じディレクトリに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ファイルを見て書き込む。
注 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などで見ることができる。
イメージは二度ずつ作成するといい感じ。
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などを使うとよいかもしれない。