Risseの進捗をお伝えするのはものすごく久しぶりです。
オブジェクト指向システムの作成のエントリを書いた時点からずっとオブジェクト指向システムを作ってました。
いまのところやっと、すべての祖となる Object クラスや、言語仕様としても重要なポジションの Array クラス、String Integer Real などのプリミティブ型クラスを作りました。
といってもまだ実装されている中身はほとんどありませんが、たとえば
var i = new Object(4);
こういったクラスとオブジェクトの基本的な機能であるnewであるとか、
global.t = 4;
こういった、インスタンスに対するメンバの新規作成&代入であるとかできるようになってます。
TJS2ではできなかった、プリミティブ型のクラスからの new ができるようになっています。
var i = new Integer(4);
ECMAScriptとちがい、この場合作成されるインスタンスは var i = 4; とした場合と違いがありません。
プリミティブ型クラスは、パフォーマンスの関係上いろいろと制約があり、おそらくサブクラスを作れないようにしたり、既存メソッドの置き換えをできなくしたりすると思いますが、それでもプリミティブ型のクラスにメソッドを追加することはできます。たとえば
String.repeat = function(i) { var s = ''; while(i--) s += this; return s; };
return "ab".repeat(5); //=> "ababababab"
のようにrepeatメソッドを追加して動作させることができます。
ちょっとおもしろいのが
Integer.charAt = String.charAt; return 987654321 . charAt(3); //=> 6
みたいに、Integer クラスに String クラスのメソッドを突っ込んだりしてもそれなりに動作してしまうということですね。この場合は Integer がいったん String に変換されてからcharAt()が動作しています。charAtが内部でthisをStringに変換してから処理しようとするためです。将来的にもこのような動作ができるようにするという保証はありませんが、内部的にはTJS2と比べて相当メタプログラミングがしやすいようになっています。
あと、今のところnew演算子は、new演算子の右側に書いたオペランドのnewメソッドを呼び出すだけの演算子として実装されています。これは
(new Object()).foo()
が
Object.new().foo()
とかけるということです。ちょっとRuby風味です。
綺麗なUIは割とやる気に直結するなと思いました。
BlenderのNode Editorはとても綺麗ですね。しかもUIをOpenGLで描画している恩恵か、ぬるぬると無段階ズームとかできたりします。これはよい。癖になるかも。
吉里吉里3(Risa) のグラフィックシステムはまだ全く構想段階ですが、最近BlenderのComposite Nodesを弄ってて、もやもやしていたものがピコーンと固まったわけです。
BlenderのComposite Nodesはこんな感じ。
基本的には左から右にデータが流れ、一番端っこのやつが出力画像になってます。各ボックスはノードと呼ばれ、入力に何らかの処理を加えて出力する物や、入力だけのものや出力だけのものもあります。
上記の例だと左端の画像からVector Blur(モーションブラーの一種)の出力が分岐して、一つは色調補正を通過した後にブラーがかかって、Add(加算合成)につながってます。Addのもう一方の入力はVector Blurの出力になってます。Addの出力が最終的な画像出力になっています。ちなみにこれはglowを実現するためのものです。Viewerでは、適当な画像出力に接続することにより、そこから流れてくる画像を見ることができます。
出力や入力は(形式があえば)それぞれ配線することができ、自由に組み替えることもできます。
似たような表現はMac OS のQuartz Composerで見ることができるものや旧ActiveMovieからあるGraphEditなどにもありますね。
吉里吉里2だと描画パイプラインがちょうどこれに相当しますが、裏方に回ってて表に出てくることは無い上に、吉里吉里2のそれは「レイヤ」の概念上に縛られていて、あまり自由な配線をすることができませんでした。
Risaで上記のComposite Nodesのようなアーキテクチャを採用するとなれば、エフェクトがかかった画像をトランジションさせた結果に回転をかけて他のトランジションに流し込んでそれを重ね合わせて出力、のような複雑なパターンにも対応できます。レイヤの概念をより一般化したとも言えるかもしれません。
あ、ちなみにこういう風に編集できるUIを作るとは言っていません。あくまでも内部的な概念やアーキテクチャの話です。
いろいろ課題はありますが、構想段階でのお話でした。
SONY製CRTを今まで使ってきたのですが、色ズレは調整しきれないし、フォーカスもボケてきたし、SONYタイマも壊れてるようだし、目が悪くなりそうな事も考えると、もうそろそろ乗り換え時期かな、と思ったので、三菱の液晶ディスプレイRDT261WH を買ってきました。
前回RDT178Sを買ったときに、ツクモで4回戦までやったので、今回も頑張るか、と思ってドット抜け保証かけたらドット抜けないでやんの。くそう、損した orz
ちなみにRDT178Sはサブマシン用ですが、サブマシンは数ヶ月前に煙を吐いてお亡くなりになっております。
新しいディスプレイは、とても良いです。
僕は吉里吉里を宣伝することはほとんどなくて、サイトも必要最小限な質素なものなのですが、ソフトウェアが注目される (≒協力してくださる方が増える) には宣伝も重要だなと思い始めています。さすがに将来構想をさもすでに実装されているかのように書いたりはしませんが、もうすこし派手なキーワードやメッセージを使ってみようかなと。
サイトもいずれリニューアルしなければ、とも思います。
あとは割ける時間ですね。最近こともあろうにBlenderにハマりだしたのですが、あまり吉里吉里の開発に影響が出ないようにしたいと思います。
一年近く前の日記にも書きましたが、RisaGLをどなたかやってくれるといいなぁということで、wikiにどんなものかを書きました。
いずれは作らなくてはならないのですが、比較的独立してて汎用性が高い部分なのでどなたかやってみませんかということで。
演出エディタをいずれ作りたいと考えていますが、こちらも比較的独立しているのでどなたかやってみませんか。
演出エディタとしてはこういう物を考えています。
どなたかやってみませんか、というのはいいんですけど、そう簡単にできる物じゃないですよねorz
今年もよろしくお願いいたします。