AnimeBody

正式公開版 Ver 2.62(2000/2/23公開)


 アニメ調3D表示ルーチンのサンプルプログラム。アニメ調の人体を、リアルタイム&インタラクティブに操作することができます。また、動作モーションを物理演算で自動生成します(オートバランサーにより踊りも踊れます(^^;)その状態で、操作点に対する直接操作も可能です。スカートや髪の毛もクロスシミュレータもどきで物理演算処理されています。

AnimeBody ver2.62をダウンロードする(Windows95/98 要DirectX5以降、LZH圧縮、197KB)

AnimeBody ver1.53をダウンロードする(Windows95/98/NT4.0、LZH圧縮、166KB)


作者のたわごと

2000/2/23日 Ver2.62

 またまたバグ取りメインの修正です。修正点は、

という点を直してあります。あと細かい修正点として

ぐらいで、今回の修正はほとんどわからんのではないかと思います。

すでにBBSの方では書きましたけど、一応、パンチやキックが可能になってますので、キー操作ダイアログで操作法見て適当に遊んでください。キャラ間の当たり判定がありますので、もう一方のキャラを殴って遊ぶとかも一応可能なはずです。が、とんでもなく操作が難しいです。

キックの方は、反対側の足が地面についてる場合にのみ可能、パンチは、腕が縮んでないとできないモーションですので、一度腕を持ち上げてから行ってください。キックを両足同時は無理ですが(転ぶだけ)、パンチは可能です。あと、ジャンプも足が縮んでないと無理なモーションですので、一度しゃがんでください。各モーションは、データ垂れ流しとかでないので、回りながらキックするとまわし蹴りになるとか・・・

 

2000/2/19日 Ver2.61

 主にバグ取りです。バグ修正点は、

あと細かい修正点として

などの、指摘されないと分からないような細かい修正がされています。
エッジ処理でグローポリゴンを使った滑らかなものを選択できるようになったので、見かけが多少よくなっているとは思います。

あと、Ctrlキーで制御点をロックできるようになっています。制御点を表示させて操作してください。

 

2000/2/15日 Ver2.6

 服装の変更に対する要望が非常に多いため、服の変更に対応しました。といっても、これの場合、形状やモーションのデータ読み込んで動かしているわけではないので、頭部形状や髪型同様、パラメータ変更による対処となります。

 これに関連して、今回、上着を追加し、各オブジェクトの大きさや形状、色などを変えられるようにしておきました。単に表面の色を変えたり、特定の個所を表示していないようにできるだけですが、サンプルを見ればわかるように、大抵の格好(らしく)することはこの程度のパラメータ量でも可能です。ちょっと工夫が要りますので、サンプルパラメータを良く見て、なぜそうなるのか考えて設定してください。エッジを全て表示させてどのようなポリゴンが使われているかを考慮するとわかりやすいと思います。ポリゴン単位で色変えたり、表示OFFにしているだけですので。

 

2000/2/14日 Ver2.5

 久しぶりに更新。今後はモーションを増やそうかな、ということで、とりあえず歩行や向き変更、しゃがみやジャンプをつけてみました。キー操作はヘルプメニューで見てください。あと、実際はパンチとかキックとかも試したんですが、どーも変(^^;

 

12/23日 Ver2.42英語版追加

 英語版作ってくれというリクエストがあったので仕方なく追加。一応、プログラムソースの方もコメント英語にしてありますが、もともと英語は苦手なので、HPも英語にしてくれとかいうのは勘弁ね(^^; 

Please ask me for e-mail about those programs and mechanism.

 

10/8日 Ver2.42

 突発的に連続VerUP。Ver2.41では髪の毛の表と裏をくっつけてるのですが、ふっと、円周的に同じことやれば髪の毛、留められるやんということでやってみました。髪型のところ、パラメータが増えてますので試してみてください。あと、サンプルも二つ増えてます。

 

10/8日 Ver2.41

 遅いっつー意見多数により高速化。もちろん、遅いとこでは遅いはずですが、私のとこでは30fps出てるってことで(^^;

 結局Ver 2.33に戻しただけいう気がしないでもないです。ただ、Ver2.4の処理(後頭部から髪の毛が生えてる)は周到しているので、ちょっとだけ違います。ちゃんと髪の毛に体積があります(実際は紙でできた花みたいに蛇腹になってるだけですけどね)

 あと、各種高速化してあります。また、これに伴いエッジの処理法が変わってまして、細い線でエッジ書く用になってます。ちょっとかすれるはずですが、前のでもそうだったので、早い分こちらの方がよいのではないかと。

 しかし、そろそろ根本的に変えたいような気がしてきましたねぇ。

 

9/30日 Ver2.4

 髪の毛を一本一本別々に表示するように変更。髪の動き処理自体は変わってませんが、髪に見えるためには画面の各ピクセルを全て埋めるぐらいの本数を表示する必要がある都合上、髪の毛の動点数が5倍程度になっています(髪の毛160本、動点数髪の毛だけで3200点)。そのため激遅(^^;とりあえず髪の毛をリアルタイム処理することも、今のPCならできなくはないということを示すサンプルということで。

 ただ、この改良のせいで髪周りの設定自由度がほとんどなくなっています。できればプログラムソースの方を書き換えるようにしてください。

 あと、あまりカメラを近づけないように(^^;髪の毛の本数、本当は1000本は欲しいとこです。

 

9/13日 Ver2.33

 いつのまにか関節角度制約処理が甘くなっていたので修正しました。これで逆関節とかにはなってないはずなんですが、前のバージョンと違いがよく分からないと思います。地面ぎりぎりで片足持ち上げて無理な体勢取らせて見るとか、胴体中心もって持ち上げてみるとかしましょう。

 

8/30日 Ver2.32

 BBSの方で、動きがなんかリングの貞子みたいという意見が続出したので、修正しました。これ、なんで貞子なんだと思ったら(笑)、起き上がり動作を足の位置に関係なく、足が地面についていれば体が垂直に持ち上がるという、インチキ処理を評してこういう評価になるらしいです。人間の目というのは良くできている(^^;。ということで、いんちきしないで、ちゃんと足から体のほうに斜めに力がかかるようにしました。オートバランサまわりは前のままですが、いんちきしない状態でもちゃんとバランス取れてます。ということで、オートバランサ、結構まともにできてたようです。

 あと、このままだと、一度倒れると二度と立ち上がれませんので、ちゃんと手を付いて起き上がるようにしました。倒れた場合、手を付いて上半身を持ち上げたあと、足を下に持ってきて胴体を持ち上げることで起き上がります。これで、倒れるときと、起き上がるときの動作が、少しはまともになったはず(貞子みたいというのではなく(笑))。



8/29日 Ver2.31

 当たり判定周りバグってたので修正。プログラムよく見たらぜんぜん違う変数を参照してた。なんでこれで動いてたんだか(^^;

 あと、バグフィックスだけでもなんなんで、細かい修正をしておきました。覚えているのだけでも、

など、いろいろです。本当は、こういう地道な細かい修正が、ぱっと見、凄いソフトを実現するわけなんですが、結構時間がかかるんですよねぇ。こういうの微調整は。あとモデルのほう(顔とか)も微調整したいんですが、時間が足りんです。

 あ、あと重要な改良点として、やっとキャラ間の当たり判定がつきました。2キャラ出して、ボディアタックとかかけてみてください。
プログラム的には、オブジェクト間のあたり判定に1キャラ当たり11の判定用回転体(or円柱)を使ってるわけですが、これらの判定オブジェそれぞれの自キャラ間の接触判定と相手キャラとの組み合わせ全部、あとそもそもスカートとか髪の全点と各オブジェクト間で当たり判定をするという、かなり大量の接触判定をやっているのにもかかわらず、(私のとこでは)計算側はぜんぜん問題にならないということで、今のマシンは本当に早いです(^^;ここまでやっても、まだ表示側(DrawPrimitive側)がネックですからねぇ。2キャラをデフォルトとするためには、そろそろまた高速化を考えないといけませんが、当たり判定周りはこんなとこで終わりにして、とりあえずモーション生成を次のテーマとしますか。

 

8/27日 Ver2.3

 BBSの方でリクエストがあって、こちらでもやりたいと思っていた、各オブジェクト間の当たり判定を追加しました。まだちょっと変なとこありますが、その辺は目をつぶってください。前のよりは動きがまともなんではないかと思います。足が引っかかるようになったので転びやすくなったとか、胴体で跳ね返る都合上、腕の動きが怪しくなったとかありますが、まあ、楽しめるのではないかと。

 あと開発中に使っていたスケルトン表示機能(内部で用いている関節間のリンク情報を表示するものです)と、自律動作時の立ち上がりをOFFできるようにしておきました。特に後者の機能が予想外に怪しい動作をしてくれるんですけど(^^;。まあ、プログラムの方が勝手に作ったモーションで、こっちがわざとやってるんじゃないので、怪しい動作してても私のせいじゃないですよ(笑)。基本的にだるそーな動作になりますね。プログラム書き換えられる人は、ここのところのパラメータ書き換えると挙動がいろいろ変わって面白いと思います。

 そういえば、この当たり判定ですが、関節間のリンクでできる線分間であたり判定を行い、ある程度以上線分が接近したら離すという簡単な処理で対処してます。そのため、静止している円柱間のあたり判定と同じです。大きく動いたり、変な角度で接触すると破綻することがありますが、この程度でもそこそこ良いようです。プログラマさんは、あたり判定部分を見ると面白いかもしれません。あ、ただしまだ、人体間のあたり判定はやってません。よろしくです。

 

8/19日 Ver1.53

 GDI版である、Ver1.52の方で、ボディを二つ表示するとポリゴンバッファがあふれるというバグがあったので直しておきました。他は特に変わってません。

 どうでもいいけど、今見るとこちらのバージョンの方が顔がかわいいなぁ(笑)。Ver1.0系はポリカケを使って顔作ってたからねぇ。Ver2.0系では、目周辺は同様、Zバッファ値を変えてどうにかしてますが、どーも失敗している(^^;。目周辺だけ他より優先されるという、謎の処理なんですが・・。実は本物のアニメもこういう処理されてません?(笑)

 

8/5日 Ver2.22修正

 良くプログラム見たら、スカートの一部分が繋がってなかったことが判明したので修正。なんかスカートの前のところから胴体はみだしやすいなぁと思ったら、なるほど、そういうバグね・・(笑)

 

8/3日 Ver2.22

 そういえば、髪の毛がそのままだったなぁということで、スカートの処理を髪の毛側にもいれてみましたが、だめですねぇ(^^;いんちきしまくってるので、いろいろ変。根本的には、布1枚で髪の毛作ってるのがいけない。まあ、この辺はそのうち直すということで。

 あと、手足が伸びないように調整などの細かい修正がしてあります。

 

6/13日 Ver2.21

 こまごまとした調節を行いました。プログラム的には、ポリゴンの当たり判定が少しまとも(スカートのメッシュがオブジェクトのセンター軸をぶち抜けない)になってるんですが、良く見ないと分からんと思います。あと、スカートの空気抵抗値を増やしておいたので、動作が落ち着いているはず。胴体の方も標準ではよたつかない程度の抵抗値にしておきました。ダンスが見たければメニューのチェックをONにしてください。

6/7日 Ver2.2

 単にプログラムソースを公開したいというだけの理由によりバージョンアップします。内容的にはVer2.1実験版とそれほど変わってません。一応、スカートと地面との摩擦、スカートと謎の壁との当り判定つけたけど、それだけです。あと、スカートにかかる空気抵抗を増やしておいたので、こころもちスカートの挙動が落ち着いていると思います。

 さて、それより問題はプログラムの方でして、スカートのしわ(ひだ?)が特に反響を呼べているようです。これの秘密ですが、基本的にはわざとメッシュの距離を大きくとってあるということに加えて、実はVer2.1以前のいんちきスカート形状ルーチンがこころもち残っているためだったりします(^^;。基本的には物理演算で処理するけど、こころもち(今回のは4%)固定形状を含ませることによって、スカートらしくさせているわけです。スカートはただの一枚布と違って、ひだがあるので、初期形状を保ちやすいだろうとの判断です。実は単に足との接触判定が破綻しないように、スカートを広がりやすくするために入れたんですけどね(^^;

 というわけで、まともな接触判定はめんどそうなので、ちょっと休憩。これだけ相手にしているわけにはいかないし。

あ、あとこっちでもちょっと書いているのでのプログラム技術面で興味があるかたはどうぞ。

6/6日 Ver2.1実験版その1

 なんか暇プロにはまってるなぁ。ここんとこ毎日HP更新してるし。

 で、また実験版の未完成バージョンです。スカートの方に胴体で使った物理演算入れて見ました。確かに動きが良くはなったとは思うんですが、やっぱり足とかとの当たり判定の不都合が出やすくなってます。うーん・・・
 地面上に立って踊っているときはそれほど違和感ないんですが、転んだり急な動作すると、スカートが胴体から外れる(^^;。この辺はどうにかしたいけど、プログラム的にはどうすれば良いんでしょうねぇ(^^;;;;;

 なお、物理演算のせいで胴体を回転させるとスカートが広がるようになりましたので、わざと布をたるみ気味にして、スカート特有のしわを作ってあります。

6/5日 Ver2.1

 オートバランサーを付けました。その結果歩けるようにもなりましたが、恐ろしいことに副作用でダンスも踊れるようにもなりました(笑)。どこにもそんな処理書いてないんですが、複雑系の脅威ってやつですかねぇ(^^;。製作者側が想像もできなかった動きをしてくれます。とりあえず、ここまでの結果を整理してプログラム公開しておきましたので、技術面で興味がある方はそちらをどうぞ。モーション部は非常に簡単なプログラムです(数十行ぐらい?)。これでモーションデータの類は一切利用していないんですから、凄くないですか?

 あ、あとユーザさん向けの話としてですが、人によっては勝手に動かれても困る方がいるでしょうから、物理演算を切れるようにしてあります。他に重力も切れるようにしてありますので、こちらもどーぞ。なお、どこかに行かれてもこまるので、球状に見えない壁を作ってあります。

6/3日 Ver2.0実験版その3

 なんか面白すぎるんですけど。これ(^^;

ということで、とりあえず自律動作の基本ということで、起立というのをやってみました。一応、地面の上で自律的にたち上がります。試しに、足元すくったりして見てください。姿勢によっては困ってしまうこともありますが、その場合は引き上げて助けてあげましょう。

ちなみにこれ、一部いんちきがありまして、足からの力が必ず地面から垂直に体にかかるようになってます。ですので、良く見てると、なぜそこから立ち上がれるという動作をしているはず。
#だって、こうしないとたちあがれないんだもん(^^;;

自立動作といっても、まだ胴体を持ち上げているだけなので、もしまじめに力が斜めに掛かる状態で立ち上がるには、本当は足を自分で動かしてバランスをとらないといけません(おなじみ、オートバランサー(笑))。これができてしまえば、歩かせるのは簡単です。体を傾けるとバランスとるために勝手に足出すので、結果的に歩く動作になるだろうと・・・。まあ、これを目指してがんばりましょう。ここまでくると、そんな難しくない気するし。

6/3日 Ver2.0実験版その2

 物理演算万歳。

ということで、地面との接触判定をやってみました。ここまでくると誰でも凄いと思えるのではないでしょうか?なんか現状では、投身自殺シミュレータな気もしますが(笑)。あ、そういえば、いちいちiniファイル消すのも面倒なので、メニューから初期化できるようにしときました。

もう少しチューニングすれば、各ゲーの投げ技モーションとか十分これでできそうな気がしますねぇ。

6/1日 Ver2.0実験版

 うーむ、我ながらこれはすごいかも(^^;;;; ということで、まだ実験中のバージョンですが、急遽公開。
今回ですが、モーションを自動生成してやろうということで、ためしに各制御点に速度成分持たせてみたのがこれです。姿勢の表現法として、各制御点のワールド座標を採用するという私独自のいんちきIKだから取れる方法ですね(笑)。各制御点にちょっと物理計算入れただけでこうなります。この調子で、モーションの自動生成行ってみますかぁ。回し蹴りはできるの確実だし。

ちなみに、今回は単に頭を固定点にして、空気抵抗と重力かけただけです。これだけでもかなり笑える。ぜひとも20fps以上でる環境で見てください。ちなみに、制御点リアルタイムにマウスで制御できるので、そこのところよろしくです。でないと、ただの首吊りシミュレーション(^^;

5/31日 Ver2.0

 そろそろ速度的に問題が出てきたので高速化しました。で、この速度に関して最もネックになっていたのは実はポリゴン表示周りだったので、GDIを使うのをやめてDirect3D-IMでポリゴンを書くようにしました。これで、Direct3D-HALが動作する最新PCなら30fps程度出るようになったはずです。ただ、DirectX5以降専用なので、NT4.0では動作しません。また、DirectXベースになったせいで環境によってはいろいろ問題が出るのではないかと思います。例えば、私が今使ってるビデオボードVoodoo3-3000では、画面モードを16ビットモードにしないと動作しませんでした。

 あと、せっかくDirectXを使うのですから、グーローシェーディング表示もできるようにしときました。以前、プログラマ向けページの方で、アニメ調はエッジ強調が重要で、シェーディングはグーローでも良いでしょうと書きましたが、やはりそうみたい。ということで、こちらのが綺麗なので、こっちをデフォルトにしてあります。少しは今風の画像になったのではないでしょうか?あと、隠面処理がZソートでなくZバッファリングになったので、ポリ欠けがまともになってます。ただ、ポリ欠けを逆に利用していた顔周りがなんか変かも(^^;この辺はあとで直したいとこです。

 あ、あとDirectX周りの初期化に関しては清3z氏のDirect3Zライブラリを用いてます(ただ、今回使っているのは昔のバージョンですが・・)。これ、NekoFlightでも使ってまして、非常に重宝してます。感謝感謝。

5/24日 Ver1.52

 またまた細かい修正。

と、こんなところです。ただ、今回はかなり実験的な要素が強いです。それがスカート&髪の毛と胴体(各腕を含む)との当たり判定でして、前のバージョンまではこの辺は完全に無視してました。それらしくしてただけ。それはこういう任意形状に近い物体間の当たり判定は作るのが非常に面倒なためですね。で、実験的に手抜きでない当たり判定をつけたのが今回のバージョンです。

 処理的には、胴体の方が基本的に全て回転体(正確には楕円の集まり)で構成されているので、任意点とこの任意回転体との当たり判定ルーチンを作って、あとはスカートと髪の全点にこの処理をかけるということをしてます。当たり判定する一方が回転体なら、その各ローカル座標系変換系にワールド座標を変換することで、ローカル系のZ座標からどの楕円との当たり判定をすれば良いかがすぐわかるため、O(n)で高速に処理できるということですね。

 ということで、(スカート<->脚を含む下半身全部)、(髪の毛<->腕を含む上半身全部)の間の全ての当たり判定をやってるわけですが、思った通りあまり動きが美しくならない(^^;。この手の当たり判定では、ポリゴンの各点がめり込んでなくても、ポリゴンレベルで見るとめり込んでしまうことがありますし、大きく胴体などが動いたときに布の各頂点をいくつか飛び越えてしまうことがあるので、メッシュをものすごく細かくするとか、動きに制約を加える、dtを可変にする、任意形状とポリゴン間の当たり判定を行うなどのもっと面倒な処理しないとだめなんでしょう。ただ、リアルタイムものでは、この辺まじめに解きゃいいってもんでもないし、何か如何ににいんちき処理をその場その場に応じて考え付けるかがポイントな気がしてきた(^^;;ということで、今回の改造はプログラム組む人には評価してもらえるかもしれんけど、一般的には改悪かもしれません(エッジ形状とかが汚くなってるわりには、速度落ちてる・・・)。結果的に、それらしいものになんないと、だめですよねぇ(^^;

 あと、少しは当たり判定がまともになっているということを示すため、今回、横風が発生できるようにしてあります。スカート持ち上げた状態で風を発生させると、少しはらしくなっているのがわかるのではないかと。

 その他、前回の改造で結構メールをいただけたので、細かい点を変更してあります。ウインドウリサイズ処理とか、ビュー側のパラメータ保存とか頭部形状のパラメータ追加とかです。

 さーて、あと技術的に面白そうなのは、各胴体パーツ間の当たり判定かなぁ。これも楽しめそうだなぁ(^^;

5/13日 Ver1.51

 細かい修正がたまったので一応バージョンUP。Ver1.5からすると、

 目立つ変更点は関節の制約でしょうか?ここで、このプログラム、いんちきIKなため各関節の自由度って何?ってな状態なわけですが(^^;普通のIKと比べて単に表現系が違うだけ(各関節各自由度の角度で姿勢を表すか、制御点の絶対座標で表すか)なので、ひじ・ひざなどの様に自由度が低い個所に関しては明示的に制約を加えることで対処できます。普通のIKならこの辺の制約はより簡単なんでしょうけど、制御点が非常に多い場合とか、自由度高の間接が多い時は、こちらの方法の方が簡単じゃないのかな?限界以上に各関節動かした場合とかの制御も簡単だし、腕とか伸びるのがまずかったら、またそういう制約加えれば良いだけだしね(まあ、普通のIK良く知らんけどさー(笑))。

 ということで、「そんな格好できたら人間じゃない」という点に関してはそれなりにOKなはず。あと各制御点の当たり判定つければ格ゲーに持っていけそうですが、このモデルの場合、関節技しかけるとぺキッと腕を折って逃げそう(笑)。

4/25日 Ver1.5もう一回修正

 姿勢に関する制約を追加。

4/21日 Ver1.5修正

 スカート周りのパラメータを修正。これで少しは足がはみ出にくくなったのでは?

4/19日 Ver1.5公開

 今月出たOh!XのPS2の記事によると、最近のCGでの流行は布ということ(へ〜)。というとことで、いつまでも裸では何なので、試しに服を着せて見ました。ここで、服といっても、表面の色変えただけでは技術的に面白くもなんともないので、一番めんどくさそうなスカートに挑戦。

 結果・・・あまりできが良くないなぁ(^^;。単にひらひらな感じを出すのは簡単なのですが、問題は胴体との接触判定。これ作り始めた際には、任意回転体との当たり判定ルーチン作ってこれで全点の接触判定でやってみたのですが、どーもうまく行かない。

 ということで、どうせいんちき計算だし、それらしければ良いかと開き直り、今回は胴体や足の接触判定を行わないですむ方法で処理してみました。その考え方は、胴と足の位置から大まかなスカート全体の形状を直接はじきだして、あとは髪の毛で使ったいいんちき手法でごまかすというものです(^^;。いんちきといっても、いちおう足の位置(ひざより上だけ)は見てますので、足をあげればスカートも持ち上がります。分かりにくいですが、布(や髪)に一応重力もかかってます。ただ、まったく接触判定をしていない都合上、姿勢によってはスカートから胴体が見えたり、スカートから足が生えたりすることがあります(^^;

 あと、このいんちき計算ルーチンは髪の毛にも使えるので、髪の毛の方も少し修正しときました。昔のものだと髪の毛が縦方向にもびよ〜んと伸びてましたが、このバージョンでは平気です。

なお、今までのバージョンは他への転載禁止でしたが、ソースも含めてこのバージョンから転載自由とします。
#理由は、やっと裸でなくなったから・・・(笑)

4/1日 リンク追加

 同士を発見したのでリンク。

 http://www.ya.sakura.ne.jp/~rin/nemuneko/anime3d/

 です。彼の漫画調は、エッジの効果が非常にわかりやすくて良いと思うのですがどうでしょう?特に、ゲーム作っている方々、こういう表現方は使えないですかぁ?特に特に、PS2でやったら凄いと思うんですがどうでしょう(笑い)?

3/13日 Ver1.41公開

 ちょっとバグ修正。修正したのは、

というとこです。

あとの変更点は、

です。

 実は、今のバージョンでは3Dグラフィックスお約束のクリッピング処理をまったくしてないので、視点設定によって(フロントクリッピングするべき状況で)、まずいことになることがあります。そういうときはAnibody.iniファイルを消してください。設定が初期状態に戻ります。

 あと目の設定追加の方ですが、ちょっと気がついたことがあるので実験。

 下の方で、アニメキャラの目が大きいのは、実際には目自体が大きいのではなく、目の開け方が異常だということを書きました。ただ、よく観察すると、確かに白目の大きさは普通なんですが、黒目の大きさは異様に大きいんです。なぜなんだろうかと思ってたんですが、実際に黒目の大きさを変えてみれば納得。目で気になるのは主に、目の開け具合と、黒目の上下隙間なんですな。で、この黒目上下の隙間が大きい(俗にいう、三白眼)だと非常に怖い感じがするんです。(自分で目を大きく見開いてみればよくわかる)。ですので、

「美人的な目→お目々パッチリ→まぶたの開度を大きくする→単純に目の開き方を大きくしただけだと目が怖い→黒目を大きくしてごまかす→黒目の比率が変だけど、こちらは実はあまり気にならないので無視

という理屈で美形アニメキャラはあんなに大きな黒目になるのでしょう。もしかしたら絵描きさん達には常識すか?(^^;

結局あれは、人間の認識メカニズムに基づいた(騙したともいう(^^;)究極の美人というのを目指しているのでしょうねぇ。

 

3/1日 Ver1.4公開

 髪の毛付けました。髪の毛の動き計算というと、パーティクル配置して物理計算とか、メッシュ作って有限要素法などのちと負荷の高い方法しかないかと思ってたのですが、ふっと、凄い簡単な方法があることに気が付いたので、実験。

 いや〜、やはり髪の毛があるのとないのではかなり差がありますねぇ。いつも通り、全てプログラムOnlyでやってますので、ちゃんと髪の毛がなびきます。これ、なかなか効果が高いです。アルゴリズム的にはプログラムの方を参照すればわかるように非常に「いんちき計算(^^;」ですが、まあそれらしいから良いでしょう(プログラム20行程度で済んでるし;)。

 あと、顔同様いろいろパラメータを調節できるようにしてあるのですが、かなりパラメータ設定が難しいので、試行錯誤でお願いします。今回の髪型生成の基本的な考え方は、頭頂から放物線を多数放って、その間を繋ぐというものです。設定ダイアログでXと言ってるのは頭の座標系で水平方向、Yが垂直方向です。放物運動同様、初速と加速度の概念がありますので、これで制御します。ただし放物運動が、XYの両軸方向にあるので注意。あと、適当なところで髪をカットできるようになってます。ここ指定できるのは0から20までです(0でショート、20でロング)。その他、基準面を傾けられるようになってます。

 髪に使ってる形状は基本的に放物面ですので、作れる髪形は限られてしまいますが、とりあえず、このプログラムは、アニメキャラらしく見えるものが実際にリアルタイム動作可能であることを示すのが目的ですので、その点についてはかんべんしてください(髪型シミュレータじゃないよ〜ん、これ(^^;)。Shift+ASDWQEキーで胴体全体を動かしてみるとか、顔の制御点をマウスドラックで動かすなどして、髪の毛の動きを見てみてください。

 あと細かい改造点としては、設定をiniファイルに保存するようになったとか、各設定ダイアログがモードレスダイアログになったとかありますが、この辺は動かしてみればわかります。

 ということで、当初狙っていたところまではどうにか達した気がしますので、あとは適当に何か思いついたら改造することにします。何か要望などありましたらどーぞ。

 

2/15日 Ver1.3公開

 顔付けました。ただし、まだ髪の毛がありません(って、前の文と口調おなじやん(^^;)
顔といっても、実質付けたの目だけです。口の表示はおまけ程度ですし、鼻は頭部形状の方に任せてます。耳も無し。

 で、今回のポイントとなる目ですが、これがなかなか曲者でして思ったより苦労しました。初めはベジェAPIあたりを呼んで直接顔に目を書いちゃおうかと思ってましたが、それだと正面以外から見たとき変なので、結局、眼球をポリゴンで作ってまぶたをかぶせるという正攻法となりました。ただし、テクスチャマップの類はまったく使わず全部プログラムでポリゴンの色変えて表示しているので、顔形状同様、パラメータをいろいろ変更することができます。

 今回、これらパラメータ設定するためのダイアログを別に作りましたので、年齢や頭の形、目の位置、目の大きさなどを各自で変えて遊んでみてください。

 あと、プログラムで目を書いている都合上、いろいろプログラム的なお遊びがありまして、まず、目玉が動きます(笑)。デフォルトでは常にこっち向くようになってます。あと、まばたきします(笑^2)。あと、二重まぶたにできるとか、ちゃんと眼球にハイライト処理があって動くとか、垂れ目、吊り目にできる(笑^3)とかありますが、その辺は動かしてみてください。

 他の機能的な追加はPage Up/Downキーでズームできるようになったとか、各アニメ調処理をOFFできるようになったということぐらいでしょうか。一応内部的には髪の毛表示ルーチンも実験的に作ったんですが、やっぱ変なのでコメントアウトしてあります。VC++持ってる方は試しにどーぞ。ただ、髪ロングだと、どうもノリが18禁(^^;(って、いまさら気が付いたのかって?)

 あと、やっぱり、かわいくしてみようということで、いろいろパラメータ試してみたんですが、かわいい系キャラ顔の特徴というのは、

ということなのではないのかという結論にいたりました。このプログラム組む前は、異常な目の大きさが特徴かと思ってたんですが、正確には目の大きさでなくて、まぶたの開き方が異常なんですな、あれは。すなわち、異様に目がパッチリしている。

↓実際にパラメータ調節すると、こんなん。

abody2.gif (8910 バイト)

 

うーん、ど〜だろ〜。髪の毛ないからわからんけど、かわいい系キャラはこんなもんじゃないのかなぁ。このプログラム作ってる最中、変な顔ばっかり見てたので、美的感覚が狂ってきてる気もしますが・・・

ちなみに、設定ダイアログで子供(美形)選ぶとこのパラメータになります。

次、順番からすると作るの髪の毛ですが、まともに作るの無理な気が・・・
服も無理な気しますし、このプログラム、そろそろお蔵入りかも。

 

2/2日 Ver1.2公開

 頭付けました。ただし、まだ顔がありません(^^;
 本当は頭は変形しないんだから、頭部形状はモデラで作れば良いんでしょうけど、面倒なのでFaceCheckerの方から頭部形状生成ルーチン持ってきました。そのため、頭部の年齢が変更できます(笑)。これにあわせて胴体の年齢とか性別も変えられるようにしようかと思ったんですが、今回はくじけました。この辺はあとのバージョンでやるかもしれません(って和製Poser?(笑);)

 次はやはり顔とか手足でしょうか。あと髪の毛作って服作って・・・ってなんかアニメ調実験という当初の目的を忘れているなぁ。なんか作るの面白いんですよね。これ。

99/1/11日 Ver1.1公開

 うーむ。なんかNekoFlightのバグとりよりこっちの方が面白くて、ついこちらをいじってしまう(^^;
ということで、ちょっと変更してみました。主な変更点は

です。前のバージョンでは、あまり胴体が動くとモデルが破綻するので、胴体制御点はそんなに大きく動かせないようになってたんですが、今回、胴体をひねっても破綻しないように改良しましたので、この動作の制約をはずしました。ですので、どんな格好でもとれるはずです(といっても、無理すると破綻します)。

あと、少し高速化したのと、プログラム内部を整理(Bodyを別クラスに分離)したので、ついでにBodyを二つまで表示できるようにしときました。ほか、ドラッグで複数の制御点を同時に選択できます(&Shiftキーで全選択可能)。

 そして今回の目玉がプログラムソース公開です。ある程度読みやすくしてコメント入れときましたので、VC++をお持ちの方は自分で適当に改造して遊んでください。そんなに大きなプログラムではないですし、MFCだけでやってますので、読むのは簡単だと思います。

さ〜て、次は、いいかげん頭を付けたいですねぇ(笑)。

98/12/21日

 思ったより反響があるようなので、そのうち技術面での詳細をここで公開すると思います。技術面での基本的な部分は既にLightWaveで実現されていたようなので、これに関するオリジナリティは私の方では主張しません。これ見ただけでプログラムが想像できるような方(自力で3Dレンダラが書ける人)は、勝手にアイデアパクッてください。

 とりあえずの技術的な話は3DF-BBSの方で出てますので、そちらを参照願います。

98/12/18日、Ver1.0 公開

 謎の暇プロ、第n段(って、私がつくるのそんなんばっか(笑))。

 えーと、前から思ってたんですが、今の3DCGで最も苦手とするのが、アニメ調の表現だと思います。最近はアニメでもよく3DCGが併用されて使われているんですが、ご存知の様に、人物などを今の3Dポリゴン技術で表示すると、非常にヘンです(笑)。ということで背景などだけに3DCGを使うことがやられているようですが、今度は人物が背景から浮きます。

 そもそも、今のポリゴン技術は写実的な考え方がベースにあるので、この行き着く先にあるのは非常にリアル(写真のよう)な画像です。で、人物に関してはこの技術で行き着く先は、非常にリアルな人形になってしまうと思います(最近の3Dポリゴン格闘ゲームを見るたびにそう思う)。

 ではどうしたら良いのか?ということで、注目するのが漫画・アニメの手法です。この手法は、人物の表現に向くことは周知の事実で、その理由は人間の物体認識メカニズムに向いた表現法だからです。人が人物(特に顔)を見たばあい、脳内では主にその輪郭線と明るさ変化の激しい部分を検出し、その情報を元に人と認識します。ということは、漫画のような表現が最も人と認識し易い表現となります。

・・・・・と、めちゃくちゃ馬鹿プログラムなのでまじめなノリでごまかしてますが(笑)、この漫画風の表現を3D技術でリアルタイムに作れないのか?ということで作ったのがこのプログラムです。動かしてみればわかりますが、上のような、アニメ絵がリアルタイムに計算で作れ、自由に回転させたり関節を動かすことができます。

技術的には、インバースキネマティクス+メタボール+エッジ検出+特定の明るさ閾境界判定です
#が、実際には全部いんちき処理(^^;

えーと、

です。

 このプログラム、表示ルーチン周りはかなり前からできてたんですが、これに最も有効な形状である、人体モデルの方が作れなくて苦労してました。あと今回、頭と手足は作るの辛いので、省略してあります(あと、服とか髪とか・・・)。FaceCheckerの頭をつければ良いかとも思うんですが、この倍程度の処理量では目鼻とか髪の毛ないから、どうせ作ってもすごい怖いはず(笑)。

 これ作るきっかけになったPoser(人体専用CGモデリングツール)でも、顔が怖かったですしねぇ(^^;。ただあの場合、外人ベースでモデリングされているのが顔が怖い大きな理由かもしれず(^^。余裕があったら頭もアニメ調でちゃんとつけたいす。

 このあたりは、今回のプログラムみたいにポリゴン技術ベースでなく、NURBSでモデル作って、エッジをスプラインで処理すれば綺麗そうだけど・・・・めんど〜(^^;

 第一、もっとも軽く処理できるはずのこのモデルの時点でこんな遅いんだから、NURBSでやったら劇遅。今の3Dハードウェアは、こういうことやることを考えられてないし。将来的にはこういう処理に対応したハードって面白いと思うけど。

 ちなみに今回は、全てGDIだけで表示してます。DirectXとかは使ってません。あと、やる人いないと思うけど、このプログラムは転載禁止です。どっちかというと技術面で興味がある方がいるかもしれませんので、そのときは連絡してください。やっぱ応用は、アニメ調3D格闘ゲームとか3DリアルタイムXゲー?(笑)。


ソフトウェアトップページに戻る