第三講座の宮崎慎也です。私は計算機上に定義された非剛体の、すなわち入力操作に応じて変形のおこる物体を対象とした仮想空間操作に関する研究を行いました。 最近、バーチャルリアリティなど、コンピュータ内に仮想的な物体を定義し、コンピュータグラフィックスの映像を介して、その物体に様々なリアルタイム操作を行なおうという試みが盛んになされております。このような仮想空間操作の技術は実世界の物体を操作する感覚、すなわち人間にとって自然な形でコンピュータと対話できるため、様々な分野、特に実世界でリスクを伴う軍事、医療などの分野でその応用が期待されています。また、人間の五感をコンピュータに直接入力できるデバイスを用いた人工現実感システムの研究も盛んに行なわれております。 仮想空間操作に関する研究は数多く報告されていますがその中の典型的なものをいくつか紹介しますと、マニピュレータにより手の動きを直接入力でき仮想物体を握ったときに手に反力が感じられるもの、仮想空間内の材料をオリジナルのデバイスにより彫刻できるものなどが例として挙げられます。また仮想空間操作において空間内の位置を指定することは重要でありこれに関しても、6自由度を入力できるデバイスや3次元ビームカーソルの操作性についての実験が報告されています。しかし、これらのほとんどは、例えば手の指の細かい座標値などをいかにコンピュータに入力するかといったハードウェアの部分に重点を置いており、仮想物体やその操作など、ソフトウェアによる部分はリアルタイム性の問題もあってか剛体の移動、彫刻など比較的単純なものしか実現されておりません。従って今後は、このソフトウェアによる部分を積極的に開発していかなければならないと考えられます。本システムでは多重に折り重なる紙を操作対象としております。 本システムは3種類の基本折りの組み合わせにより仮想空間内の1枚の紙を自由に折ることができるものです。スクリーンにモニターされた仮想の紙をマウスによる操作で頂点をつまんで移動することにより簡単に折ることができます。ボタン入力による視点移動も可能で折り紙を上下左右からや回転ズームして見ながら操作することができます。4種類の移動をそれぞれ2つのボタンで操作します。このシステムの特徴は操作により紙の状態が変化していく過程をリアルタイムで表示することにより、オペレータが紙の頂点を移動しているように感じられることであります。このシステムは、平面の操作を可能としていますので、更にカッティングなどの機能を付加して、紙、布、皮などの平面素材の加工製品のデザインなどに応用していきたいと考えています。 従来の折り紙を対象とした研究としましては、いくつかのキーフレーム画像をもとに折り過程のアニメーションを生成するものや、折り紙の展開図から出来上がりの状態を推論するもの、折れ線により折り操作を対話的に入力できるものがあります。本システムではリアルタイムのインタラクションを実行するため、これらとはまったく違った形のマンマシンインタフェイスを考える必要があり、データ構造もそれに適したものを用意する必要があります。 本システムには3つの基本折りが用意されております。折られる紙面がすべて同一の方向に回転するもののうち折り曲げ角度が180度のものを特に折り返しと呼び、それ以外のものを折り曲げと呼んでいます。またある折れ線を中心とし紙面が対称的に内側に折られる折り込みを用意しています。折り返しと折り込みは平面折りですが、折り曲げにより立体的に折ることができます。これは鶴を折る途中の段階ですが、このような折り方も上の基本折りの組み合わせで実現できます。  次にマウスにより頂点をつかんで移動する操作について説明します。まず移動したい頂点の近くにカーソルを持っていきマウスの中央のボタンを押すとその頂点をつかみます。ボタンを押したままマウスを移動するとそれに伴い頂点が移動し紙の状態が連続的に変わります。最後にボタンを離した瞬間に頂点の位置が固定され折り紙の状態が決定されます。マウスカーソルは画面上の2次元の移動しかできないので、マウスの両側の2つのボタンにより奥行方向の移動を可能にしています。これにより頂点の移動を空間的に行なうことができます。 マウスカーソルは画面上の2次元の移動しかできないので、マウスの両側の2つのボタンにより奥行方向の移動を可能にしています。これにより上の頂点の移動を空間的に行なうことができます。 折り操作は紙面を折れ線の周りに回転することにより行なわれますが、そのための折れ線と折り曲げ角度の決定が必要です。移動した頂点の元の位置と移動先の位置からの等距離面と元の紙面との交線が折れ線となり、その2面の交角の2倍が折り曲げ角度となります。  この頂点の移動元を固定したまま移動先を連続的に変化させて表示する、頂点を移動したように感じることができます。 ある面が折られる時、面の接続、重なりから同時に折られる他の面が存在します。左の例で上の面が折られる時、この辺により接続する下の面も同時に折られます。右の例では下の面が折られる時、この部分の重なりにより上の面も同時に折られます。これらの条件により折られるすべての面が求められます。このとき、オペレータが面を重ねていないつもりでも、微妙に重なってしまう場合が生じます。 そこで本システムでは以下の4つの場合に頂点の位置を自動的に補正します。 折り紙は複数の面で構成されていますので基本的にサーフェイスモデルで表現できます。折り紙を表すデータ構造は面、辺、頂点をそれぞれ表す Face Layer, Edge Layer, Vertex Layer の3つの層から構成されています。 まず Face Layer について説明しますと、面は一回の折り操作により2分割されていきますので2分木リストで表すのが都合がよいと考えられます。これは折り返しと折り曲げの組み合わせの例ですが、ルートのセルが面の初期状態を表し、1つの面が分割されるごとに2つの子のセルが生成されます。葉のセルが現在の面の状態を表しています。また木全体が操作の履歴を保持していますので折り操作を途中からやり直すことができます。この方法は折り操作によるデータの更新のための処理が少なくてすむのでリアルタイムのインタラクションを実現するのに都合がよいと考えられます。また操作の履歴を保持しているので折り操作を途中からやり直すことができます。 また全ての面は同一平面上に属する面同士グループ化されます。この例では F2 と F3 は同一平面上に存在しますのでこれらの面は1つのグループを形成します。また F1 は単独で一つのグループを形成します。またグループ内には同一平面上に存在する面に重なり順序を与えるための面番号があります。折り紙をレンダリングする際にはこのグループ番号と面番号により対応するセルが高速に検索されます。 辺についても同様に2分木リストで表されますが、辺については分割されるだけでなく折れ線により新たに生成されますのでリストの総数は増加していきます。  次に面の分割によりリストが更新される過程を3角形の面を例に説明します。 このセルは面FOが辺E1,E2,E3により構成されることを示しています。このセルは辺E1が頂点V1,V2により構成されることを示しています。E1の分割によりE11,E12が生成され、折れ線により新たな辺E4が生成されます。これはE4の端点が頂点V3と新しく生成された頂点V4により構成され、E4が面F1,F2を構成する辺であることを示します。 ある面が折られる場合、面の接続、重なりから同時に折られる面が存在します。この例で上の面が折られる時、この辺により接続する下の面も同時に折られます。またこの例では下の面が折られる時、この部分の重なりにより上の面も同時に折られます。このようにして折られる面がすべて求められます。 折られるすべて面は、更に折れ線により分割される面とされない面に分けられます。この面は分割されませんがこの面は折れ線により分割されます。このうち分割される面についてのみリストの更新が行なわれます。 頂点については一つの頂点の折り操作による移動の履歴を一つの線形リストで表します。頂点番号により対応する頂点の最新の位置を示すセルが高速に検索されます。また辺の分割により新たな頂点が生成されるとリストの総数は増加します。 本システムはグラフィックワークステーションアイリス4D/70上で約3000ステップのC言語のプログラムにより実現されています。 本研究ではコンピュータ上で紙をリアルタイム操作で折ることができる折り紙のシミュレーションシステムを実現しました。これは様々な仮想物体の操作のほんの一例ではありますが、今後はこれを更に複雑な振る舞いをする物体の操作に応用していきたいと考えます。 またビデオでお見せしましたように、実際の紙が折り目を意識的につけるまでは丸まるだけであるのに、この仮想の紙は常に折り目がついた状態で変化します。そこで、紙を弾性モデルで表現することにより紙の丸みなども実現していきたいと思います。また今回のシステムでは実際の折り紙で考えられているもののほんの一部しか折ることができません。そこで、更にいろいろな折り方を実現するとともに、紙に切り込みなどを入れられるようにすることなども考えています。 以上です