MacにもNiVEのようなのが欲しいと思ったので作ってみる(詳細)

オープンソース

最初に大事なことを宣言しておきます。ある程度仕上がってきたらオープンソースにしますよ、と。

そんなわけでライセンスを決めておきたいのですが、いちばんシンプルなMITライセンスでいっかなーくらいにしか考えてないです。ライセンスを決める上で注意点とか何かありますかね? また、現状使用してるライブラリを最後に列挙したので、ライセンスの互換性の問題とかあったら指摘して頂けるとありがたいです。vecmathはGPLですがCLASSPATH例外条項があるのでOKという認識で間違いないですよね?

名前

名前は重要ですが、かなり適当なネーミング。Javie(=Java+Movie)
もっといい名前あったら変えてもいいんだけど、プログラム内のパッケージ名とか変えるの面倒なので、たぶんこのままかなぁ。

MacPro。いいえ、miniです。

動作環境について一番重要なのは、GPUが必須ということです。今のところOpenGL2.1に加えてテクスチャユニット数が8以上、texture_rectangle拡張、framebuffer_object拡張が必要だったかな。他にも何かあったような気がしますが忘れたw

スペックについてのコメントがいくつかありましたが、今回の動画はMac mini(early 2009)*1で動かしたものです。ですから、現行のMacであればどれでもスペック的には問題無いだろうと思います。ただし、スペックが高い方がエフェクトを沢山かけてもプレビューが軽いとかそういう違いは出てくるでしょう。また、素材を多く使用するとディスクの速度やデコードのCPU負荷の方が先にボトルネックになってしまいやすいです。


Windows版は RadeonHD4850 と GeForce8600GT で動作確認しています。


なんか動画のタグに「JavaなのでWin/Mac/Linuxなどに対応」とか付いてんだけどw Linuxについては...Mac版とWin版ができてからですね。GUIにはswtを使っていますが、MacとWinの間でも挙動の微妙な差異があってかなり苦労してます。これに今Linuxが加わるともうわけわからなくなると思う。

レイヤーの交差について聞きたい...

交差できるレイヤー数に上限があるのですが、それがどのくらい問題になるのかならないのか聞きたいです。具体的には、

交差できるレイヤー数は 3 or 7 or 15レイヤーまで(GPUのスペックによる*2 )

となります。独立した交差は別々に扱えるので、例えば「3レイヤー交差する組が100組ある」というのはOKです*3

元が平面のものを無闇に交差させても平面だってことがすぐにわかっちゃう動画になると思うので、たくさん交差が必要になることはそう多くないだろうと考えているのですが、どうでしょうか。

それと、交差すべきレイヤー同士は「交差グループ」プロパティに同じ名前を指定する必要があります。これを指定しないと交差するはずのレイヤーが交差せず、不正なレンダリング結果となります。ですので「交差レイヤー数の上限は問題ないけど、交差グループをいちいち指定しなきゃいけないのは煩わしい」ということはあるかも。

なんでこんな制約があるかというと、3Dレイヤーの半透明合成を正確に行うためにちょっと強引なこと*4をしてるためで、交差数の制約が大きな問題になるようであれば、3Dレイヤーの半透明合成を加算のみとするかわりに交差数の制約がなくなるオプションを用意するかもしれません。


(実際のモノを見てみないとよくわからないですかね?)

実装予定の機能など

動画で紹介したもの(実装済み)
  • 平面
  • 動画ファイルの読み込み
  • コンポジション
  • 3Dレイヤー
  • レイヤープロパティ各種
  • エクスプレッション
動画で紹介したもの以外で実装済みのもの(GUIが未実装のものも含む)
  • 静止画ファイルの読み込み
  • サウンドファイルの読み込み
  • 2Dレイヤー
  • キーフレーム
  • キーフレームの補完
    • 停止、リニア、Catmull-Rom
    • 球面線形補間(方向プロパティのみ)
  • コンポジションのネスト
  • コラップストランスフォーム
  • 複数回のUndo/Redo
実装予定のもの
  • エフェクト各種
  • 描画モード各種
  • カメラレイヤー
  • ヌルオブジェクト
  • 調整レイヤー

他にももっとあった気がするけど何だったかな? 思い出したら追記します。


あと、レンダラ自体には16bitモード、浮動小数モードの実装はしてあります。ただ、これらはレンダラだけが対応すればいいものでもないので最終的には削るかもしれません。

使用しているライブラリ一覧

ライブラリ名 ライセンス
eclipse rcp Eclipse Public License v1.0
google guice Apache License v2.0
java3d vecmath GPL 2 with the Classpath Exception
javassist MPL 1.1 (or LGPL)
jogl 修正BSDライセンス
jsonic Apache License v2.0
scannotation Apache License v2.0
slf4j MIT License
rhino MPL 1.1 (or GPL 2.0)

*1:Core2Duo 2.0GHz/メモリ4GB/GeForce9400M(256MB)

*2:(テクスチャユニット数−1)÷2

*3:100組もあったら負荷的に死ねるけど

*4:フラグメント単位でソートしてます