J3Wは3次元アニメーション専用のプログラミング環境です.したがって,何らかの プログラミン言語の知識 (例えば,アセンブラ,C,C++,JAVA, VB 等) がある方は,簡単に 3次元アニメーションのプログラムが作成できると思います.
J3Wはフリーウェア (Linux版はGPL) です.J3Wを使用したり, J3Wで作成したアプリケーションの配布は自由です.
J3Wを使用して3次元アニメーションのプログラムを作成する場合,3Dライブラリ(例えば, DirectX, OpenGL等) を使用する上で必要となる三角関数や行列は全く意識する必要はありません.
「1秒間で90度右を向く」,「瞬間的に30度上を向く」,「30秒間で100m前進する」といった 物体の動きと速さをJAVA風の文法で記述するか,専用アセンブラで記述する事で3次元アニメーション を作成することが出来ます. J3Wは時間を管理しているため,表示速度にかかわらず常に指定した時間 で動作します. 高速な環境ではなめらかに表示されます.
1つの物体を表示して回転などをさせることは3Dライブラリを使用しても比較的簡単ですが, 独立して運動する複数の物体を表示するためには,物体毎に位置,速度,その他の状態を保持 しておく必要があります.通常はデータ構造の設計に頭を悩ませることになります. J3Wでは必要な情報は物体が知っています.
その代わりテクスチャマッピング,バンプマッピングなどの リアルな 3DCG を作成するために必要な機能はサポートしていません. (ver.5.60ではテクスチャマッピングが可能となりました) 3Dプログラミングの入門や本格的な3Dアプリケーションを作成する前に簡単にテストしてみる 「3Dプロトタイピングツール」には有効でしょう.慣性速度,角速度,重力加速度を物体毎に設定する ことが可能なので物理シミュレーションも作成できると思います.
「プログラムなんてした事がないが,3次元アニメーションには興味がある」という人も J3W で オブジェクト指向プログラミングとアセンブラによるプログラミング,さらに3次元アニメーション を同時にマスターできるかもしれません.
現在,WindowsXP/Vista または Unix + X (Linuxを主として,たぶんFreeBSD, AIX, Solarisでも) 環境で動作しています.
全体的な流れは以下の図で示すように通常のプログラミングと変わりません. ABC.j3? はファイル名で拡張子の ? の部分が異なっていることに注意してください.ファイル名 ABC は単にファイル名の例です. 下の例で最終的に生成された ABC.j3d は32ビットの16進数が並んだテキストファイルとなります. この ABC.j3d を j3w で実行することにより,3次元アニメーションが実行されます. 実行時にはデータである ???.j3d と j3w (Windows環境では J3W.EXE) 以外は必要ありません.
コンパイル(j3c),アセンブル(j3dasm),実行(j3w)という流れです.J3Wは,このバージョンが初めて という方や今までサンプルを実行してみただけという人は,J3C言語から始めてみて下さい. 入門用のドキュメント中のサンプルを改造して試している間にオリジナルなプログラムのアイデアが 生まれてくるでしょう. プログラミングは書籍を読むより実際に試してみるほうが,ずっと簡単に習得できるものです.
J3Wで作成することが出来る 3Dアプリケーションの例として付属するサンプルの一部の スクリーンショットを示します.実際に実行してみれば単なる3Dアニメーションのビューア ではなく,リアルタイムに操作できる3Dアニメーションであることが実感できると思います. J3W 5.60 のスクリーンショットです。
すべてサンプルとしてソースが付属しています.
blender で作成したメッシュをj3cのソースとしてエクスポートできます.blender から直接起動することもできます.
(blendview.j3c + blend.j3c) | |
タコと昆布がウネウネと動きます.皮膚のポリゴンを伸縮させる事が出来ます.
最近は,美しい 3DCG を作成できるアプリケーションが個人でも購入できる値段になってきていますが,
このような動きをさせるのは困難ではないでしょうか? (持っていないので知らないのですが:-)
(objview.j3s + taco.j3i + weed.j3i) | |
手がニギニギしています.多関節の物体をアニメーションすることができます.
各関節は独立した物体として空間に存在しますが,個々の物体の属している座標系を親子関係の階層構造とする
ことで実現しています. (objview.j3c + lhand.j3c) | |
光源の移動に伴って物体の照明を変化させる事が可能です. 点光源と平行光源を選択できます.
空間内に存在するすべての物体は光源となること (視点となることも可能) ができます.
リアルタイムに光源となる物体を変更することも可能です.
(list15.j3c) | |
J3Wで人体のアニメーションエディターを作成してみました.左図は格闘系のモーションデータを実行しています.
このサンプルはアセンブラ (J3DASM) で作成していますが,J3Cに移植中です. 人体のモデリングに時間をかけて体が「つながった」人間のアニメーションにしたほうがインパクトがあるのですが... (pose.j3s) | |
シューティングフライトシミュレータを作ってみると... フライトシミュレータは比較的簡単です. 航空機も外の世界も剛体(硬い物体)で生き物のようなウネウネした動きは必要ないからです.ただし物理的な正確さを実現しようとすると難しい . J3Wの機能として重力,加速度,慣性(角)速度は簡単に指定できますが,この例では使用していません. (flight.j3c または flight.j3s) | |
回転体を生成してみました.光源は視点右後方に置いています.706頂点, 737ポリゴンで構成されています. (objview.j3c + model.j3c + tobo.j3c) |
すべてユーザからの入力にリアルタイムに反応するアプリケーションです.
昔(今でも活躍しているのでしょうか?),Logoという言語では亀の意味の「タートル」が 移動した軌跡を図形として描画することで,幾何学の概念を知らない子供でも簡単に複雑な図形を コンピュータのスクリーンに描くことができました.これをタートルグラフィックスと呼んでいました. 例えば,亀に「前進10歩」「右20度」を18回繰り返す事を命令した場合,その軌跡は18角形となりますが, 18角形の頂点座標を計算で求めて,それら頂点を線分でつなぐことは大変面倒である ことが容易に想像できると思います.
そこで J3Wでは,軌跡を図形として残すのではなく,亀が自由に3次元形状を持つ事が可能で, 移動も前後左右に加え,上下も含めた3次元を活動範囲とすることでフライトシミュレータのような 3次元グラフィックのアプリケーションが簡単に作成できるのではないか?と考えたのが開発の動機でした.
実際には動く速度を表現するため時間の概念も導入し,複数物体が同時に存在しなければ ならない(つまらない)ことからマルチプロセス(スレッド?)を導入し,計算や判断を可能にし,多関節の 生物を表わすために物体の階層構造を可能にする,という形でJ3Wは進化してきました.
移動や回転,形状の定義,計算や判断が可能な亀(仮想機械)をJ3W(最初はJ3Dだった)と命名しました. その亀(J3W)に命令するための言語がJ3DASMというアセンブラ形式の言語です.
移動や回転,形状の定義が簡単でも計算や判断をアセンブラ形式で書くことは,作った本人でも(少し?) 面倒でした.そこで1997年末頃から高級言語化する計画を立てましたが,私の知る範囲では適当な言語 がなく 色々と言語仕様を考えていました.とにかく「物体」が主役となるためオブジェクト指向言語を中心に Delphi,Oberon-2,Forth,C,C++,JAVAなどが候補にあがりました.結局,J3Wのオブジェクトが独立 していることと,仮想マシンをターゲットにしているJAVAを基本として設計することになりました. ここまでに半年以上を費やしてしまいました.しかしJ3CではJAVAほどの汎用性を目標としていないので, 言語としてはJAVAの予約語をすべて(たぶん?)予約語としているものの,ウルトラサブセットとなって います.
J3Wは以下のサイトでダウンロード可能です.