3DCGで折り紙


Download

 
* 実行ファイル Executalbe Jar file
* ソースコード Java Source Codes

プログラムの実行には JRE 1.5 以上のバージョンのJavaと、1.3.1以上のJava3Dをあらかじめインストールしておく必要があります。

You have to install JRE 1.5 or later and Java3D 1.3.1 or later before execute it.

 
* アプレットとしてブラウザ上で実行 Run as Applet

アプレットとして実行する場合、Java-Pluginのインストールが必要です。また、形状をファイルに出力することなどが出来ません(メニュー項目が表示されないため)。

You have to install Java-Plugin if you run it as an applet. And then you can't output a geometry data as a file etc... (because it's menu is hidden in applet).

動作サンプル

本プログラムの実行例です。現在のところ面同士の衝突を考慮していないため、ごく狭い範囲に面が何重にも重なってる場合などでは面が交差してしまい、レンダリングが不正になってしまっています。また、重なった状態を保ったまま同時に動かすようなこともできません。ユーザインタフェースについてもまだまだ改善の余地があるようです。現在プログラムの改良中です。

They are examples of executing this program. Now there are problems that it doesn't solve face collisions. So it occurs that a rendering of faces becomes incorrect when they intersects with them. And we can't move them at the same time with keeping the state of overlap. Also there are many rooms of improvement in its GUI, I think. Now this program is being improved.


Flash Videoの再生には、Creative CommonsライセンスのFlash Video Playerを使っています。

だまし舟 Trick boat

ねじり折り Twist folding

風車 Spinwheel

鳳凰 Phenix

メダル Medal

扇子 Fan

 

 

 

はじめに

日本の代表的な伝統芸能の一つに折り紙があります。誰しも子供のころに遊んだ経験のある日本人にとっては非常になじみのある折り紙なのですが、単なる伝統芸能ではなく、幾何学の世界とも密接な関わりのあるという変わった存在です。折り紙の持つ性質を数学的に解き明かそうという研究は以前からいろいろ行われていますが、最近ではそういった研究成果の一部が、工学的な分野での「対象を如何に折り畳むか」といった問題の解決に応用されたりもしています。代表的なものとしては人工衛星の太陽電池パネルをたたむための三浦折りなどがありますが、他にもスタジアムなどの大規模施設の屋根の設計、あるいはクルマのエアバッグの収納などに用いられた例があります。

An Origami is one of typical traditional Japanese cultures. In Japan, all of us have enjoyed it. So it is very familiar with them. But Origami is not only a traditional culture but a material related to mathematics. Many researchers try to explain its character since before. Recentry some of such a fruit of research is applied to the solution of the problem in a technological field like "How to fold the object." For example, Miura-Ori used for folding solar panels is the typical one. And we use other ways like designing of the roof of large-scale facilities or folding an air bag of a car.

ミウラ-オリ太陽パドル試験衛星(想像図)
出典:水野哲也イラストレーション事務所©

また、幾何学との深い係わりがあることから折り紙を数学教育に用いることについても検討がなされています。近年話題となった「脳力トレーニング」を引き合いに出すまでもなく、指先を使うことは以前から脳に良い影響を与えることが知られており、両手を駆使して紙を折る折り紙は教材に非常に適した素材であるといえます。折り紙を学校で教えることによって、近年問題となっている日本の学力低下の歯止めにもつながるかもしれません。しかし教育の現場で実際に用いるためには指導用の教科書が必要で、折り紙の場合はその折り手順をわかりやすく伝えるための手段が必要となります。その方法として、ここではパソコンによる3DCGに注目してみます。

Moreover, someone try to use the Origami for the masmatical education because it has a deep relation with geometric. It is well known that using tips of fingure has a good influence for his brain. So we can say that it is a material very suitable for education as it needs both hands. However an excellent textbook is necessary to use it actually in there. In Origami, the way to understand folding easily is necessary to do. I pay attention to 3DCG to explain Origami folding.

なぜ3DCGか?

現在主に使われている折り手順伝達方法は、「折り図」と「動画」、そして「3DCGアニメーション」です。このうち、折り図とは折り操作による紙の形状変移を図で描いたものなのですが、複雑な形状の場合は多数の絵を描かなければならず描く人にとっては非常に負担がかかる方法です。また、原理的に各コマの間の時間的なつながりを表現できないため、それを見る人自身が頭の中で補完しなければならず、慣れない人にとっては非常にわかりにくい方法です。なお、この「頭の中で補完」という点も指先を使うことと同様に脳の活性化につながるという側面もありますが、ここではそういった面よりも、折り紙に興味があるが折り方を見てもよく分からない、という人が折り紙を楽しめるようになることを重視したいと思います。折り紙の裾野を広げることは様々な面でよい影響が期待できる、と私は思っています。ちなみに、わかりにくい折り方をわかりやすく折り図で表現するためには描く人間に高度な技術が必要です。難しい事柄を分かりやすく説明するのが難しいのと同様です。現在最も一般的な伝達方法である折り図は、見る人にとっても、描く人にとっても、もっとも情報伝達のしづらい方法であるといえます。

折り図
出典:日本折紙学会
「折紙探偵団」通巻56号p31

そのため最近では折り紙の様子をビデオカメラで撮影してDVDやテープなどのメディアに収めたものが市販されるようになってきました。動画の場合、機材さえ用意できれば後は折る様子をそのまま撮影するだけなので手軽に製作することが可能ですし、ビデオカメラなどの機材も最近は低価格化が進んでいるため容易に入手することが出来るといえます。また、折り図では表現できなかった時間的なつながりも表現できるため、見る人にとっても理解しやすく、手順をわかりやすく伝えるのに適した方法です。また、最近ではYueTubeなどの動画共有サービスが一般的になってきたため、Webを使った情報伝達も簡単に出来るようになりつつあります。

動画
出典:おりがみ会館監修
おりがみからくり箱「動くおりがみ」

さて、近年のコンピュータの高性能化に伴って注目を集めるようになったのが3番目の「3DCGアニメーション」です。これは広い意味では上記の動画に含まれる方法なのですが、カメラを使って撮影して得た動画と違い、固定された視点が存在せずユーザが自由な位置から対象物を見ることが出来るという特徴があり、見る人にとっては単純な動画以上に折り手順を理解できる分かりやすい方法です。また折り紙の形状は小数のポリゴンで表現できるためデータの容量が節約でき、Webなどを通じた情報伝達にも適しているといえます。しかしながら現在の3DCGは、まちがいなく見る人にとって最高の方法なのですが、作る人にとっては非常に敷居の高い方法です。

3DCGアニメーション
出典:Devin Balkcom
"Robotic Origami Folding"

3DCGの問題点

現在のところ、3DCGアニメーションは3Dモデリングソフトを使って作ることが普通なのですが、主な3DCDモデリングソフトはかなり高額なため、アニメを作るためには相当のお金が必要です。最近でこそフリーのBlenderや16800円で廉価版のShade 9 Basicが買えるようになりましたが、上位シリーズは普通に10万円以上します。映画製作や研究分野で使われている Autodesk & AliasのMayaなんていうソフトもありますが、Unlimited 8 スタンドアロン版は学割を使っても120,750円しますし、商用版のUnlimited スタンドアロンは976,500円です(2007年4月7日現在)。そしてもしそれらを買うための金銭的余裕があったり、あるいはフリーのBlenderを使うなどしたとしても、それを使いこなして実際にアニメーションを作るためには相当な時間をかけて勉強をすることが必要です。参考書も少ないですし、3DCGに詳しい人間も、一般社会にはほとんどいないでしょう。そして3DCGの分野は流れが速く、苦労して得た知識もすぐに風化してしまいます。本質的には折り紙とは全く関係ない知識にもかかわらず、その習得には法外に高いコストが必要なため、現在のところ3DCGの折り紙アニメーションを作ろうという人はほとんどいません。

ですが3DCGアニメーションの「わかりやすさ」は、見る人にとっては非常に魅力的です。言うまでもなく教科書のようなコンテンツの場合、分かり易さはとても重要なため、少しぐらいの作りにくさは問題とはならない場合があります。とはいえ、現状では作り手にとってあまりに敷居が高すます。もうすこし3DCGアニメーション製作の難易度を下げることは出来ないでしょうか。さらにいえば、モデリングソフトを駆使するのではなく、どうにかしてビデオカメラの手軽さで3DCGアニメーションを作ることは出来ないでしょうか。その目的を達成することが本研究の目標です。

研究の内容

現状ではモデリングソフトを駆使して3DCGアニメーションを作っていますが、それをどうにかしてビデオカメラでの撮影ぐらいまで手軽にすることは出来ないものかということで、もし仮に、パソコン上の仮想空間内で紙を折ることをシミュレーションできれば、あとはそこで得られた紙の形状変移をVRMLなどのファイルにすることで簡単に3DCGアニメーションが得られるような気がします。しかしながらそれはなかなか大変です。ひとつは三次元的な紙の形状変移を計算することが意外と難しいということ。もうひとつは、コンピュータ上で紙を折る動作をシミュレーションするに当たり、通常両手が必要なその動作をどうやってマウス・キーボードで再現するか、という点です。これらを解決するために、バネモデルによる形状計算アルゴリズムと、面の分割・回転を組み合わせたインタフェースについて考えました。

バネモデルによる形状計算

折り終わった紙は平坦な二次元図形となる場合も多くありますが、折っている最中の紙の形は立体的な場合がほとんどです。すでに折り目の付いた紙に対して力を加えて折り曲げようとした場合、次の瞬間にはどのような形になっているでしょうか。(ちなみに折り目のない紙を対象に含めると曲面を意識する必要が出てきて難易度が大きく上がるため、今回は除外して考えます。)多くの場合、単独の面が移動するのではなく、複数の隣接する面が相互に影響を与えながらダイナミックに移動するため、個々の面の動きは軸が移動し回転速度も不定な複雑なものとなります。その計算を正しく行うためには、面の持つ幾何形状だけでなく面同士の位相についても考慮する必要があり、それらを正しく考慮して計算を行わなければ面の形が歪んだり敗れたりしてしまいます。そういった紙の動きはヒンジでつながった剛体のキネマティクスを解くことで求めることができますが、その計算をリアルタイムに行うことは現在のPCの能力では非常に難しいため(つまり1秒間の動きの計算に1秒以上時間がかかるということ)シミュレーションのような用途には不向きです。また、途中で少しでも歪みが発生するような折り方の場合は面の分割をして歪まないようにしなければ計算できないという問題もあります。

正しく動かさなければ、面が歪んだり破れたり・・・
ヒンジでつながった剛体のイメージ

そこで、紙をヒンジでつながった剛体ではなく、いろいろな場所で端を共有する複数のバネであると見立てます。ある場所を動かした場合、それにつながったバネは一時的に伸びますが、バネなのですぐにもとの長さに戻ろうとします。するとつながっている別のバネの長さも変化します。しかもそれらのバネがまた引っ張るのですぐに元の長さに戻るわけではありません。しかしその計算を何度も繰り返すことでそのうちすべてのバネの長さが元通りになり、そのときの全体の形が求めたかったゆがみなき紙の形となります。面の形によって必要となるバネの本数が変わってきます。三角形なら3本あれば一意に形状が決まりますが、四角形なら対角線状にもバネを張るひつようがあるため6本必要です。一般的に、n角形なら n(n-1)/2 本必要です。また、バネを張るのは同じ面の中だけでよく別の面にある頂点の間にはバネをはる必要はありません。個々の面の形がすべて元通りの形でありさえすれば自動的に全体の形が求まるため、他の面との関係を考慮する必要がないからです。そのためアルゴリズムも単純なものとなり、条件分岐や必要メモリ量が少なくなるためコンピュータを使えば高速に計算することが出来ます。さらに、形状の変化が連続的なため計算の終了を待たずに途中で打ち切ったとしても、近い形状をユーザに提示することが出来ます。そのためこのアルゴリズムは、画面の書き換え時間内に計算を終了させなければならないという制約のあるシミュレーション的な用途に利用しやすい方法です。

頂点を共有する複数のバネのイメージ
実行例

マウスによるインタフェース

もうひとつの問題点が、両手で行われる紙を折るという動作を、マウスやキーボードだけで如何に再現するかという点です。マウスでは一つの二次元座標しか入力できず、奥行きを表現できないため指先一つの情報すら満足に表現できないためいろいろ工夫が必要です。またビデオで撮影するような手軽さで、折っている様子をそのままキャプチャという目的を達成するためには、実際の操作感や出来上がったアニメーションがそれなりに現実を模したものでなければなりません。市販の三次元入力装置を買ってしまえば問題は解決できるかもしれませんが、両手の10本の指の細かい動きをリアルタイムかつ同時に取り込み出来るようなスペックを持ったものは見たことないですし、本数や解像度のランクを下げたものであっても数十万するうえに、ドライバを書くのがめんどくさいので出来るだけ既存のデバイスでやりたいところです。

両手で行われる折り操作を、 マウスやキーボードで再現しなければならない
出典:おりがみ会館監修
おりがみからくり箱「動くおりがみ」

紙を折るとき、普通は片方の手で角をあわせてもう片方の手で紙を押し潰し、折れ線を作るという手順で行うことが多いでしょう。しかしこれは両手があることが前提で、片手でやるのは意外と大変です。しかし、角をあわせるのと折り目をつけるのを同時に行うのは両手が必要だといえますが、あらかじめ折り目を付けておき、その折り目を回転軸として面を回転させるということであれば、平面上に線を引くこと、軸を中心とした回転はどちらも二次元で表現できますので、マウスでもできるはずです。あらかじめ折り目をつけておくというのは普通の折り紙ではあまり行いませんが、硬い紙を使う場合や正確に折りたい場合などは事前に行うこともあるため、それほど非現実的な動作ではないでしょう。そしてある面を回転させることによって同時に他の面が動く場合は、上記のバネモデルを用いて追随する面の位置を計算します。

ただ、これらの方法を組み合わせる場合注意しなければならないのが、もともと一つの動作であった紙を折るという行為をいくつにも分割しているという点です。面の分割、回転面の選択、回転軸の選択、回転角の決定と行った複数の操作を組み合わせる必要があるため、ゴチャゴチャないよう出来るだけ少ない操作で紙を折ることをシミュレーションできるのが理想的です。そこで、省ける操作がないか考えます。回転軸の選択は回転面の選択と同時に行ってしまっていいのではないでしょうか。現実世界で紙を折る場合、人は無意識のうちに紙の反対側をつかんで折る事が多いのではないでしょうか?なので、マウスで面をつかんだ位置の反対側の折れ線を軸にしてしまえばいいじゃないのでしょうか。動かす面と回転軸が決まったら、ついでに面の回転角もマウスに追随するように計算してやれば、回転面の選択と軸の選択、回転角の決定という操作が一度のマウス操作で出来るようになります。

現実では、紙の反対側をつかんでおることが多い?

折れ線の入力は、2Dドローツールのインタフェースを参考としました。画面上の任意の場所をマウスの右ボタンを押しながらドラッグして線を引くことで、ユーザが自由に折れ線を「描く」ことが出来るようになってます。複数の面が重なっている場合は、交差するすべての面に折れ線が引かれるようになってます。また、頂点付近や辺、角を等分する場所の付近では自動的にマウスカーソルがスナップするようになってます。ちなみに面の分割と同時にバネの張りなおしも行うようになってます。

画面の任意の場所をドラッグすることで、自由に折れ線を「描く」

マウス座標の近似

番外編:押し潰し

上記の方法を組み合わせてモデリングを行う場合、180度に満たない中途半端な回転操作を繰り返すことで意図せず形状が立体的になってしまうケースがあります。実際の折り紙でも紙の塑性で膨らんでしまうことがあり、圧力を加えて形状を平らに戻すという作業を行うことがあります。そこで、プログラムにも「押し潰し」の機能を実装することで、ユーザが任意のタイミングで形状を平坦な状態に戻せるようになってます。

実行例

実績

この研究について述べた研究発表などです

謝辞

名古屋市立大学芸術工学部の高橋 信雄 講師、丹羽 伸二 教授、横山 清子 助教授、木本 晴夫 教授には、卒業製作の際にさまざまなご指導、アドバイスをいただいたにもかかわらず謝辞を述べる機会がありませんでした。遅ればせながら、この場を使って感謝の気持ちを述べたいと思います。どうもありがとうございました。


2007.April.