2008年2月29日金曜日

blender - ファイルフォーマットを書き換えたい(2)

はじめに書いておくけど  俺 TOEIC 400点 くらいです。
しかもメンドイので超早く(あまり調べずに)訳してます。
無いよりマシだ!誤訳どんとこい!って人のみ、参考にしてください。
実際、さっき1つ前の記事書いてから、50件くらいのRSSチェックしたあと訳し始めてるので、クオリティはその間の時間くらい少ないです。

http://www.blender.org/development/architecture/
Data structure

Most of the design time for Blender was spent on defining the right choices for which types of data belongs together, and how relationships between data is defined. With the 'implementation follows design' concept in mind, it was well understood that any design decision would both enable as restrict functionality.


Blenderのほとんどのデザイン時間は、グループを成すデータ型の正しい選択の決定と、データ間の関係がどのように定義されるかを決定することに割かれる。
「次のデザインの実装」という脳内のコンセプトは、どんなデザインの決定も、制限された機能の中で可能、ということに基づく。

Based on how we internally needed 3D for our projects, decided was to design the data design on a high abstraction level, with as requirements:

- allowing multiple people to work together

- allowing complex animation projects to be created within 1 project (or file)

- allowing re-use of data efficiently

- allowing templates (or backdrops)

私たちのプロジェクトのために、3Dに基づくどのような内部構成が必要か、の決定は、高抽象レベルのデータ構成をデザインすることを要求される。

-複数人での仕事がお互いできる
-複雑なアニメーションプロジェクトを1プロジェクト(または1ファイル)で作れる
-データの効率的な再利用
-テンプレートが使える

This resulted in designing a non-standard 'database', not like the tradional 'scene graph' (which was at that time perception/display based), but based on creating generic 3d 'data worlds' where you can construct as many scene graphs (displays, images, animations) as you need to.

これは結果的に、普通じゃないデータベースになり、伝統的な scene graph(認識/画面ベースのものだった)だけでなく、一般的な3D"data worlds"の構築をベースとしている。3D"data world"は、必要ならば多くのscene graph(画面、画像、アニメーション)を構成できる。

In Blender the data blocks are the user's building blocks: they can be copied, modified, and linked to one another as desired.

データブロックは、ユーザの作ったブロック。それらはコピー、変更、他のブロックへのリンクが可能である。

Creating a link is actually the same as indicating a relationship; this causes a block to be 'used'.

リンクを作ることは、関係を指し示すのと同じで、ブロックの「使用されている」状態を引き起こす。

For example, the block type 'Object' makes a 'Mesh' block appear in the 3d scene. The Object here determines the exact location, rotation and size of the Mesh. The Mesh then only stores information on vertex locations and faces. Also, more than one Object can have a link to the same Mesh (use, create an instance). Other block types, e.g. Materials, can be linked to Meshes to obtain the block type's features.

例えば、Objectブロックは、Meshブロックを3Dシーンに表示する。Objectは、Meshの位置、回転、大きさを決定する。Meshはそれから、頂点位置や面の情報を蓄えるだけ。また、1つ以上のObjectが同じMeshにリンクできる。他のブロックタイプは、Materialとかで、ブロックタイプの特徴に従うことで、Meshにリンクできる。

Each of such blocks in Blender starts with an ID struct, which contains the unique name of the block and, in certain cases, the Library from which the block comes. The ID structure allows Blender data to be manipulated in a uniform manner, without knowledge of the actual data type.

このようなブロックは、ID構造体で始まり、ブロックごとに一意の名前と、ブロックがどのLibraryから来たか、を持つ。ID構造体は、Blenderデータを、正しいマナーにのっとり、実際のデータ型を知ることなしに、操作できるようにしている。

These IDs also allow Blender to arrange the files internally as a sort of file structure; as if it were a collection of directories with files.

また、これらのIDは、ファイル構造のソートとして、ファイル群を内部的に変更できるようにしている。
ファイル群のあるディレクトリのコレクションとして。

This arrangement is also important when combining Blender files or using them as a 'Library'.

このお膳立ては、また、Blenderファイル群を結合するときや、それらをLibraryとして使用するときに重要である

All data in Blender is stored in a Main tree, which is actually nothing more than a block of Lists. Here the data always resides, independent how a user has linked it together. In the pictures above you can see how a 'Scene graph' was constructed from the data as available in the Main tree.

すべてのデータは、Main treeに蓄えられていて、実際1つのリストのブロックでしかない。
ここにデータがいつもあり、ユーザがどおようにお互いをリンクしても独立している。
画像では、あるScene graphが、Main treeで利用可能なデータとして構成されているかが分かる。

The fact that the actual data remains in the Main tree is further visualized in the Scene block. Internally it has a list of Base structs which allows a Scene to link to many Objects without removing them from the list in the Main structure.
(A Base also allows some local properties, such as layer and selection, enabling a single Object to be used by multiple Scenes with such properties different.)

Main treeに残っている実際のデータは、Scene blockでより視覚化されている。
内部的に、それはBase構造体で、Main構造のリストからObjectを消すことなしに、Sceneに多くのObjectをリンクすることを可能にしている。
(あるBaseには、また、レイヤや選択のようなローカルプロパティがあり、1つのObjectを複数のSceneで、このようなプロパティを変えて使用することが出来る。)

When using Blender, library blocks are usually not freed themselves, but just unlinked. They remain in the Main block lists. Only when the user count is zero, such a block isn't written in a file.

Blenderを使っているとき、library blockは、リンクを外されない限り、通常開放されない。
それらはMain blockのリストに残っている。ユーザ数が0になったとき、このようなblockはファイルに書かれない。

In yellow here are the two main global variables, the current Screen (denoting active Scene too) and the active Object.

ここ(画像)の黄色は、2つの主なグローバル変数で、現在の画面(Sceneがアクティブなことも意味する)と、アクティブなObject。

blender - ファイルフォーマットを書き換えたい

あっちのシナリオエディタが完成したので、今度はこっちを。

Blenderのファイルフォーマットの特徴
・バイナリ形式
・blenderの「.blend」ファイルは、たぶんリストに有効グラフがぶら下がってるみたいな構造になってる?
・GPLで、フォーマットの仕様書がソースコード
http://www.blender.org/development/architecture/


上記3点から、物凄く扱いにくいです。

PythonScriptからエクスポーター書けるって言っても、pythonクソ遅いし、アニメーション付きだとうまく吐けないとか、面倒です。

そこで、GPL汚染を避けて、自前ソフトで使うために、

・Blenderのファイルフォーマット(バイナリ)を、自前のXML(テキスト形式)に変換する
・それを別フォーマットに変換して利用


というのを考えています。変換するソフトウェアは、BlenderのGPLなソースコードを使うので、GPLライセンスで公開します。しかし、XMLフォーマット自体は、(.blendファイルに沿ったものになるが)独自なのでGPLとか関係なしに利用できます。さらにXMLは高性能なパーサがゴロゴロあるので、楽に使えます。

というわけで、これから1ヶ月ほどがんばってみます!(できれば2週間ほどで完了したい・・)
え、出来る自信?まったく無いですよ…orz

2008年2月26日火曜日

etc - サークルパツコ

サークルパツコでコミケ申し込みました。
http://patsuko.net


ガチです!

経緯
・2月14日結成。数時間で概要がほとんど決まる。
・サークル名 = 高校時代のある人のあだ名
・2月17日シナリオエディタ製作開始。1時間で仕様作成。
・2月26日シナリオエディタの7、8割完成

受かりますように…。

------

で、某モーションツール(VPVP)を、サークルパツコの結成が決ったころ、mixi経由で知りました。
リアルタイムモーション作成ツールとしては、エルフレイナというのがありますが、IKとかカーブまで対応してフリーで公開されたのは、結構衝撃でした。もしファイルフォーマットの仕様まで公開されたら、今後新たな動画作成モデルになりそうですね。(職人がデータと骨入れ→エンドユーザ(?)がVPVPで動画作成)。いやー本当素晴らしい。

あと、実行ファイル容量の小ささにコメントしてる人が多かったけど、ネットワーク前提じゃないので、小さくても余りいいこと無いと思う。小さいとGUIがデフォ部品なので見栄えが悪かったりする。あと、本当に小さくしようとして小さくしている場合、1クラスに詰め込んでたり、static使いまくりとか、外部ライブラリに依存せず自前で手計算とか、そもそもクラス使ってなかったりとか。

2008年2月24日日曜日

blender - Nの製作開始




夏に向けて某Nの製作開始。2、30分くらい経過。
元が似てると楽だな~。

あと、以前に作ろうとしてたやつは、おぺらたんなんですが、そっちは全然何も進んでませんorz
おぺらたん、かわゆす。

2008年2月19日火曜日

etc - SAIが製品化

SYSTEMAX Software Development


ついにっ!!!
試用版毎月更新するのがめんどくさくて、全然使ってなかったんですが、製品になるんだったら買うかも。
UIも好印象だし、操作性が素晴らしいし。
なんせ5千円って。破格過ぎです。

機能面抜きにして、1人で何年もかかってこのレベルのソフトを作り上げられるという、良い例だと思います。企業に買収されてもおかしくないレベル。俺も将来こういうソフトを作りたいですね。

--------

こっちも完全版が出てました。
ITMedia
上野康平――3次元空間を統べる若き天才プログラマー(完全版)


中学2年のときに参加したScience Fair(自由研究大会)ですかね。そこで簡単なレンダラを発表して、今に至るという感じですので。

中学生でレンダラ開発!俺はHSP(笑)でプログラミングとか言ってたころですよ。
レンダラ開発を始めてみようという方に、以下の4冊を。
・Physically Based Rendering
・省メモリプログラミング―メモリ制限のあるシステムのためのソフトウェアパターン集
・Windowsプロフェッショナルゲームプログラミング
・Modern C++ Design

なぜか「やね本」を紹介。色んなところで繋がってるんだなぁ。。
ModernC++ Design持ってますが、俺が理解するにはあと30倍くらいのスタックが必要ぽい。

―― プログラマーはモテないと思いますか?
はい。

LOLOLOLOL

--------

さて、気づいたら今週試験が2つもあることを思い出しました。
今から簿記の勉強はじめます。4日で受かったら凄いな…。

2008年2月18日月曜日

etc - ゆうゆPが凄い!



experimental-002【初音ミク】(オリジナル)
http://www.nicovideo.jp/watch/sm2099245

なんてこったい!ミクなのに、world’s end girlfriend+ドラムンベース(AphexTwin、DJ KLOCKあたり?)。今まで聞いたミク曲の中で間違いなく一番良い。個人的には、もうちょっと攻撃的な音でも良いと思う。

blender - 初音ミク(7)

svnリポジトリ(このブログの右側参照)にデータうpしました。

骨入れがめんどくさすぎです。
もういやだw




後は、表情増やして、動画作るだけなんですが、うーん、めんどくさい…。

ということで、動画の構成でも考えながら、新しいモデル製作に入ります。

blender - subsurf

プログラムばっかやってて、ネタが無いので。
subsurfは先っぽだけ尖がらせれば、それなりに見えるという例。

subsurf Lv0


subsurf Lv1


subsurf Lv2


ちなみに目とか口をちゃんとしたミクは、眉毛のボーンと、パンツとか、調整中です。
svnに上げる予定だけど、ムービー作る過程でゴミが付いてるので、もうちょいしてから。
そういや、東京行ってる間に、vistaの自動更新でサーバーが再起動してアボーンってなりました。

2008年2月16日土曜日

blender - DirectX(Xファイル)エクスポート

滋賀に帰ってきました。
東京では2月14日に、居酒屋で夏までに云々という方針が決定しました。

-----

さて、1年ほど前、Xファイルの出力に挑戦していたのですが、再び必要になってきたので、やろうとしみたところ、あっけなく挫折。DirectX初心者は、まずXファイルを使おうとして挫折するのが常のようです。それから独自形式を扱える、スキルの高い人のみが、生き残っていくようです。

BlenderのDirectXExporterスクリプトは日本人の方が微妙に改良なさっているようなのですが、アニメ付きだとうまくいきませんでした。アニメ出力は、DirectXに限らず、利用者側の努力が必要になるようです。

どうしよう・・・。困ったな。Blender本体に埋め込みでがんばって作るとか、そんなのしか思いつかない。XSI mod toolの使い方習得して、そっちに持っていこうかな…。


ちなみに昔mixiのBlenderコミュに書いたバグ(?)もまだ残ってるっぽい。


2007年03月17日 15:25

保存するたびにXファイルの容量が増える問題は、DirectX8Exporter.pyの289行目あたりから、次のように変更して、スクリプト読み直す(=Exportから選びなおす)と直ります。global変数の初期化ミスが原因です。

class xExport:
def __init__(self, filename):
global bone_list, index_list, mat_dict
bone_list = []
index_list = []
mat_dict = {}
self.file = open(filename, "w")

2008年2月12日火曜日

blender - 初音ミク(6)

つい勢いでニコニコにうpしてみました。


ミクとリンでウマウマ(゚∀゚)
http://www.nicovideo.jp/watch/sm2303890


アニメーション苦手で、長続きしないので、ウマウマくらいが楽で丁度いいです。
でも画質落ちまくってて悔しい~。
もうちょいアップにしたほうが良かったかな。
ずっと同じだとつまらないから、途中に昔録画したBlenderGEリン入れてます。

Youtube

2008年2月10日日曜日

blender - 初音ミク(5)

風邪引いて鼻水と涙が止まりません。まさに涙目。


どっかで見たような構図で、相変わらずツンデレ仕様です。1024x768の壁紙サイズ。

ところで、あさってくらいから週末まで東京行ってきます!!
それまでに早く風邪を治さねば(涙目


上の画像はレンダリグした後縮小して、ガンマ値下げて、頬は手描きです。


ちょっと動かしてみた。1枚11秒x40フレーム(1.6秒)

youtubeだと潰れて線が見えないな…。

2008年2月6日水曜日

blender - VS2005proでビルド成功

blenderのVC++2005によるデバッグ・ビルドが無事成功 (blenderソースコード最新version 2.45にて)
http://blog.livedoor.jp/hinode_torihito/


↑ここをかなり参考にさせてもらい、無事ビルド成功しました。物凄く詳細まで解説されていて、頭が下がります。感謝。

ちなみに所要時間は上記解説を読んだ後テキパキやって、ダウンロード入れて30分~40分くらいです。
Blender Debugに変えるのは、構成マネージャで1つずつやるより、上の枠で変えるだけで、全部変わります。

↑適当にブレークポイントかけて止めてみた様子。

さて、問題はこれからなわけです。
こんな巨大プロジェクトをビルドできたところで、俺が少々何しようが、本家に取り入れられるようなものは作れないし、英語とか、GNUのコーディング規約とかもサッパリです。パッチとかも、書ける自信ないです。なので、何か作るとしたら、Blendファイルの外部ビューアとかですかねー。トゥーンの。

2008年2月4日月曜日

blender - 頂点カラー練習



↑適当に塗りたくった様子。



↑マテリアルノードで色変えてレンダリング。
結構使えそうなような。



GEでの表示。緑にするんじゃなかった・・・。

2008年2月2日土曜日

blender - 何か製作開始



何か作り始めました。
かなり難易度高そうなような。
ちなみに現状1ミリも似てません。
挫折しそうな予感。


ひたすら根性で修正を繰り返す。

ちなみに一番最初の最初にblender始めたときに作ったモデルを、毎回修正しまくって使ってるので
2年前最初に作ったときのポリゴンが、いまだに含まれてます。たぶん。

---

以下どうでもいい日記。

試験終わって、爆睡して、起きて、10話くらいで見るのとまってた、らき☆すたを全話見てました(遅っ。
いやー、最初は、何だこのコッペパン?やる気あんのか?とか思ってたけど、見ていくうちに徐々に分かってきて、最後は何かめちゃめちゃ感動してました。

見終わったら今朝8時で、それから寝て起きて、ひたすらプログラムのデバッグしてました。

いまからミクがんばります。目を何とかせねば。