(57)【要約】【課題】３次元仮想空間でメタボールを用いたオブジェクトを動的に表現するこができるプログラムを提供する。【解決手段】全てのメタボールＭＢを仮想枠ＩＢ内に配置し、与えられたメタボールＭＢの立体形状を表す計算式に従ってメタボールＭＢの中心からボクセルＶｘのボクセルインデクスの最小方向及び最大方向に向かってボクセルＶｘの頂点毎に（ｒ／Ｒ）２を演算する。このとき、２階差分を演算し、この値と前回の１階差分から、１階差分を更新して（ｒ／Ｒ）２を演算する（Ｓ６１８、６３４）。前回演算した隣接するボクセルＶｘの頂点での情報を利用することで加算２回で済ませ、（ｒ／Ｒ）２の演算時間を短縮する。【選択図】　図１８
2004062582.tif 000002
【特許請求の範囲】
【請求項１】
３次元仮想空間内に動的に描画されるメタボールの基準位置からの距離を演算するプログラムであって、コンピュータを、
前記メタボールの中心又は中心線となる基準位置を演算する位置演算手段、
前記基準位置から前記メタボールの外部に向かって前記３次元仮想空間を多数に分割するボクセルの頂点までの距離を、前記３次元仮想空間のｘ，ｙ，ｚのいずれかの方向へ連続的に演算する距離演算手段、
として機能させるためのプログラム。
【請求項２】
前記位置演算手段は、前記基準位置を前記メタボールの濃度が１となる座標位置として演算することを特徴とする請求項１に記載のプログラム。
【請求項３】
前記距離演算手段は、前記メタボールの半径をＲ、前記メタボールの基準位置から前記ボクセルの頂点までの距離をｒとしたときに、前記基準位置から前記ボクセルの頂点毎にｒ２又はｒ２／Ｒ２の値を演算することを特徴とする請求項１又は請求項２に記載のプログラム。
【請求項４】
前記距離演算手段は、前回演算したｒ２又はｒ２／Ｒ２の値に前記ｘ，ｙ，ｚのいずれかの方向での前記ボクセルの大きさ（Δｘ，Δｙ，Δｚ）分の１階差分を加算することでｒ２又はｒ２／Ｒ２の値を演算することを特徴とする請求項３に記載のプログラム。
【請求項５】
前記距離演算手段は、前記１階差分を差分した２階差分を演算し、隣接するボクセルの頂点でのｒ２又はｒ２／Ｒ２の値を加算により演算することを特徴とする請求項４に記載のプログラム。
【請求項６】
前記距離演算手段は、前記２階差分を演算し、この２階差分と前回演算した隣接するボクセルの頂点での前記１階差分とから該１階差分を更新してｒ２／Ｒ２の値を加算により演算することを特徴とする請求項５に記載のプログラム。
【請求項７】
前記距離演算手段で演算されたｒ２／Ｒ２の値が１以上のときに前記距離演算手段による演算を終了させる演算終了手段を更に備えたことを特徴とする請求項４乃至請求項６のいずれか１項に記載のプログラム。
【請求項８】
請求項１乃至請求項７のいずれか１項に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項９】
３次元仮想空間内に動的に描画されるメタボールの基準位置からの距離を演算する距離演算方法であって、
前記メタボールの中心又は中心線となる基準位置を演算し、
前記基準位置から前記メタボールの外部に向かって前記３次元仮想空間を多数に分割するボクセルの頂点までの距離を、前記３次元仮想空間のｘ，ｙ，ｚのいずれかの方向へ連続的に演算する、
ステップを含むことを特徴とする距離演算方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプログラム、記録媒体及び距離演算方法に係り、特に、３次元仮想空間内に動的に描画されるメタボールの内部濃度を演算する際のメタボールの中心から評価点までの距離を演算するプログラム、該プログラムを記録したコンピュータ可読記録媒体及び該距離演算方法に関する。
【０００２】
【従来の技術】
メタボールは、３次元仮想空間内に形成される立体であり、複数のメタボールが相互に近づくと相互に影響し合いながら融合し、逆に、遠ざかると分離する特性を有している。このため、メタボールを多数用いて自由曲面を持った形状を表現することができる。
【０００３】
１９９７年に米国で出版された書籍「Ｉｎｔｒｏｄｕｃｔｉｏｎ　ｔｏ　Ｉｍｐｌｉｃｉｔ　Ｓｕｒｆａｃｅｓ」（ＭＯＲＧＡＮ　ＫＡＵＦＭＡＮＮ　ＰＵＢＬＩＳＨＥＲＳ，　ＩＮＣ．　Ｓａｎ　Ｆｒａｎｃｉｓｃｏ，　Ｃａｌｉｆｏｒｎｉａ発行）の２６ページ（１．４．２　Ｂｌｅｎｄｓ）には、下式（１）に示すように、１９８６年にＷｙｖｉｌｌらによって開示されたメタボールの濃度を求める計算式が記載されている。式（１）において、ｈ（ｒ）はメタボール内部の濃度、すなわち、メタボールの強さを示す変数、ｒはメタボールの中心から濃度の評価点までの距離、Ｒはメタボールの半径を表している。また、（株）照晃堂発行、安居院猛、中嶋正之共著、「コンピュータグラフィックス」の第１１５頁から第１１７頁には、３次元行列内に蓄積されたデータから一定の濃度の表面を多角形で近似するマーチンキューブ法についての記載がある。
【０００４】
【数１】
2004062582.tif 000003
【０００５】
図３９に示すように、式（１）によるメタボールの濃度ｈ（ｒ）は、距離ｒに対し６次関数の特性を有している。図４０（Ａ）に、半径１の２つのメタボール球が一部重なっている場合の式（１）によるメタボール球の内部の濃度分布を示す。重なっている部分の濃度ｈ（ｒ）は、２つのメタボール球の濃度の和となる。なお、図４０（Ａ）に示す形状は濃度分布であって、メタボールの形状そのものを表したものではない。図４０（Ｂ）に、この濃度分布を真上から見たときの等濃度曲線（等濃度となる点を結んだ線）を示す。一番外側の太線がメタボール球の原形であり、内側の細線がメタボールの中心に向かって、閾値（０〜１の値をとり得る）を０．１刻みで大きくした場合の等濃度曲線である。閾値の値を大きくすると２つのメタボール球が分離し、閾値を小さくするとメタボール球が滑らかに融合する（くっつく）ことが分かる。
【０００６】
図４１（Ａ）に示すように、図４０（Ｂ）に示した等濃度曲線は、ちょうど２つのメタボール球の中心を通るように切断した断面の濃度分布に等しい。特定の等濃度曲線に対応する濃度値が、上述した閾値となる。指定した閾値で定まる断面での等濃度曲線の形状が、そのまま再生成される２つのメタボール球の形状となる（球なのでどこから見ても同じ形状となる）。なお、図４１（Ｂ）は、式（１）において、閾値０．５の場合に再生成される２つのメタボール球の融合した形状を示している。
【０００７】
また、特開平５−２０４０６号には、距離ｒの次数を２次まで落とすと共に、特性については式（１）の６次関数と近似するように工夫したメタボール濃度の計算式が開示されている。この技術では、距離ｒの取り得る範囲を３つの区間に区分して各区分で特性の異なる別な計算式を用いて切り替えることによりメタボールの内部の濃度を演算する。
【０００８】
ところで、メタボールの形状として多用される楕球の場合に、Ｐ０（ｘ０，ｙ０，ｚ０）を楕球の中心、Ｐ（ｘ，ｙ，ｚ）を任意の点、Ｘ≡ｘ−ｘ０，Ｙ≡ｙ−ｙ０，Ｚ≡ｚ−ｚ０として表したときに、楕球の形状は下式（２）による（ｒ／Ｒ）２が一定となる面で与えられる。この場合、Ｘ、Ｙ、Ｚについて計算すると、乗算１２回、加算５回の演算処理が必要となる。
【０００９】
【数２】
2004062582.tif 000004
【００１０】
なお、本発明に関連する文献としては、Ａｄｄｉｓｏｎ　Ｗｅｓｌｅｙ　Ｐｕｂｌｉｓｈｉｎｇ　Ｃｏ．，　Ｉｎｃ．から１９９０年に発行された「Ｃｏｍｐｕｔｅｒ　Ｇｒａｐｈｉｃｓ」誌、第４８８頁から４９１頁に、Ｊａｍｅｓ　Ｄ．　Ｊｏｌｅｙらのベジエ曲線に関する記載があり、１９８８年４月に発行された「Ｔｈｅ　Ｖｉｓｕａｌ　Ｃｏｍｐｕｔｅｒ」誌、第２８３頁から２９５頁に、「Ｄｙｎａｍｉｃ　ａｎｉｍａｔｉｏｎ：ｉｎｔｅｒａｃｔｉｏｎ　ａｎｄ　ｃｏｎｔｒｏｌ」（Ｊａｎｅ　Ｗｉｌｈｅｌｍｓ，　Ｍａｔｔｈｅｗ　Ｍｏｏｒｅ，　ａｎｄ　Ｒｏｂｅｒｔ　Ｓｋｉｎｎｅｒ）の「２．２　Ｎｕｍｅｒｉｃａｌ　ｉｎｔｅｇｒａｔｉｏｎ　ｍｅｔｈｏｄｓ」と題される、オイラー法による運動方程式に関する記載がある。また、（株）照晃堂発行、安居院猛、中嶋正之共著、「コンピュータグラフィックス」の第１１５頁から第１１７頁には、３次元行列内に蓄積されたデータから一定の濃度の表面を多角形で近似するマーチンキューブ法についての記載がある。
【００１１】
【発明が解決しようとする課題】
しかしながら、上記従来技術は、３次元仮想空間における静的な立体を滑らかな曲線で表現し曲線美の描画に用いられるため、ゲーム等の動的な描画に利用するには不向きであった。すなわち、例えば、複数のメタボールでキャラクタを表現しようとすれば、キャラクタには３次元仮想空間内で動的な動きが生じるので、キャラクタの動作につれてメタボールも動的な処理が必要となるが、従来技術では３次元仮想空間内のキャラクタ等を構成する複数のメタボールの動的処理、高速処理への対応が難しかった。特に、メタボールの内部濃度を演算するときに、メタボールの中心から評価点までの距離演算では乗算や加算の演算回数が多いために、メタボールの動的描画の際の障害となっていた。
【００１２】
本発明は上記事案に鑑み、３次元仮想空間でメタボールを用いたオブジェクトを動的に表現することができるプログラム、該プログラムを記録したコンピュータ可読記録媒体及び該距離演算方法を提供することを課題とする。
【００１３】
【課題を解決するための手段】
上記課題を解決するために、本発明の第１の態様は、３次元仮想空間内に動的に描画されるメタボールの基準位置からの距離を演算するプログラムであって、コンピュータを、前記メタボールの中心又は中心線となる基準位置を演算する位置演算手段、前記基準位置から前記メタボールの外部に向かって前記３次元仮想空間を多数に分割するボクセルの頂点までの距離を、前記３次元仮想空間のｘ，ｙ，ｚのいずれかの方向へ連続的に演算する距離演算手段、として機能させる。
【００１４】
第１の態様では、位置演算手段によりメタボールの中心又は中心線となる基準位置が演算され、距離演算手段により基準位置からメタボールの外部に向かって３次元仮想空間を多数に分割するボクセルの頂点までの距離を、３次元仮想空間のｘ，ｙ，ｚのいずれかの方向へ連続的に演算される。本態様によれば、基準位置からメタボールの外部に向かってボクセルの頂点までの距離をｘ，ｙ，ｚのいずれかの方向へ連続的に演算するので、前回演算した隣接するボクセルの頂点座標での情報を利用して演算回数を低減させ、演算時間の短縮を図ることができる。従って、３次元仮想空間でメタボールを用いたオブジェクトを動的に表現することが可能となる。
【００１５】
上記態様において、位置演算手段は、基準位置を前記メタボールの濃度が１となる座標位置として演算することが好ましい。また、距離演算手段は、メタボールの半径をＲ、前記メタボールの基準位置からボクセルの頂点までの距離をｒとしたときに、基準位置から前記ボクセルの頂点毎にｒ２又はｒ２／Ｒ２の値を演算することが好ましい。例えば、距離演算手段が、前回演算したｒ２又はｒ２／Ｒ２の値にｘ，ｙ，ｚのいずれかの方向でのボクセルの大きさ（Δｘ，Δｙ，Δｚ）分の１階差分を加算することでｒ２又はｒ２／Ｒ２の値を演算してもよく、更に、前記１階差分を差分した２階差分を演算し、隣接するボクセルの頂点でのｒ２又はｒ２／Ｒ２の値を加算により演算すれば、乗算や除算による処理時間の掛かる演算を排除することができるので、より高速にｒ２又はｒ２／Ｒ２を演算することができる。距離演算手段が、前記２階差分を演算し、この２階差分と前回演算した隣接するボクセルの頂点での前記１階差分とから該１階差分を更新してｒ２／Ｒ２の値を加算により演算するようにすれば、ｒ２／Ｒ２の演算を加算２回で済ませることができ、基準位置からボクセルの頂点までの演算を高速に行うことが可能となる。そして、距離演算手段で演算されたｒ２／Ｒ２の値が１以上のときに距離演算手段による演算を終了させる演算終了手段を更に備えるようにすれば、メタボールの外部（ｒ２／Ｒ２≧１）で濃度を演算する時間を省くことができる。
【００１６】
また、上記課題を解決するために、本発明の第２の態様は、上記第１の態様のプログラムを記録したコンピュータ読み取り可能な記録媒体であり、第３の態様は、３次元仮想空間内に動的に描画されるメタボールの基準位置からの距離を演算する距離演算方法であって、前記メタボールの中心又は中心線となる基準位置を演算し、前記基準位置から前記メタボールの外部に向かって前記３次元仮想空間を多数に分割するボクセルの頂点までの距離を、前記３次元仮想空間のｘ，ｙ，ｚのいずれかの方向へ連続的に演算する、ステップを含む。
【００１７】
【発明の実施の形態】
以下、図面を参照して本発明をビデオゲームに適用した実施の形態について説明する。
【００１８】
（構成）
図１に示すように、本実施形態のビデオゲームが実行される家庭用ビデオゲーム装置１０は、ゲーム装置本体２に、スピーカ５を内蔵したテレビモニタ４及び入力装置３が接続されている。ゲーム装置本体２は、ＣＤ−ＲＯＭ等の記録媒体１を装着可能な媒体読取部（図３参照）を有している。この媒体読取部に記録媒体を装着することにより記録媒体１に記録されたゲームプログラムやゲームデータが自動的にゲーム装置本体２内の記憶メモリにロードされる。
【００１９】
図２に示すように、入力装置３には、ゲームを開始するためのスタートボタン３０やゲームキャラクタを操作したり、ゲーム装置本体２からの選択問い合わせ等に応答するための□ボタン３１、△ボタン３２、○ボタン３３、×ボタン３４、及び、↑ボタン３５、→ボタン３６、←ボタン３７、↓ボタン３８で構成される十字方向ボタンセット等の種々のボタンが配置されている。
【００２０】
図３に示すように、ゲーム装置本体２は装置全体の制御を行うＣＰＵブロック２０を備えている。ＣＰＵブロック２０は、ゲーム装置本体２内の各部とのデータ転送を主に制御するＳＣＵ（Ｓｙｓｔｅｍ　Ｃｏｎｔｒｏｌ　Ｕｎｉｔ）、中央演算処理装置として高速クロックで作動するＣＰＵ、ゲーム装置本体２の基本制御動作が記憶されたＲＯＭ、ＣＰＵのワークエリアとして働くと共に記録媒体１に記録されたゲームプログラム及び種々のデータを一時的に記憶するＲＡＭ及びこれらを接続する内部バスで構成されている。
【００２１】
ＳＣＵには外部バス２５が接続されている。外部バス２５は、コントローラパッド等の入力装置３からの入力を受信してＣＰＵブロック２０へ入力情報を転送する入力受信部２１、図示しないサブＣＰＵを備え記録媒体１に記録されたゲームプログラムを読み取りＣＰＵブロック２０へ転送するＣＤ−ＲＯＭドライブ等の媒体読取部２２、グラフック処理を行うＣＰＵ及びＶＲＡＭを備えＣＰＵブロック２０から送出された情報に従ってオブジェクトに対してテクスチャ処理、光源処理等を行い３次元フィールドでの描画処理を施す画像処理部２３、並びに、図示しないサブＣＰＵを備え、例えば、バックミュージックや戦闘音等の音響を処理する音響処理部２４、に接続されている。また、入力受信部２１は入力装置３に、画像処理部２３はテレビモニタ４に、音響処理部２４はテレビモニタ４に内蔵されたスピーカ５にそれぞれ接続されている。
【００２２】
（動作）
次に、フローチャートを参照して、家庭用ビデオゲーム装置１０の動作についてＣＰＵブロック２０のＣＰＵを主体として説明する。なお、ゲーム装置本体２に電源が投入され、記録媒体１が挿入されると、３次元仮想空間にメタボールで構成されたオブジェクトを動的に描画するためのメタボール描画ルーチンが実行される。
【００２３】
図４に示すように、メタボール描画ルーチンでは、まず、ステップ１０２において、初期設定処理が行われる。この初期設定処理では、キャラクタのフレーム毎のノード（関節）のモーションデータ、ノードの階層データ、キャラクタを構成するメタボール等の形状、大きさ等のオブジェクト情報を含むゲームデータ及びゲームプログラムがＲＡＭにロードされ、時間ｔ及びモーションカーソル（フレームカウンタ）ｍｃをそれぞれ初期値の０とする。
【００２４】
次にステップ１０４において、テレビモニタ４の垂直帰線周期と一致した、１／６０秒（１６．６ミリ秒）に一度の周期で行われる垂直帰線割込（Ｖｓｙｎｃ）がなされたか否かを判断する。否定判断のときは、次のステップ１０６において、入力受信部２１から転送された入力情報に対する入力処理やゲーム効果音を音響処理部２４に合成させるための音響処理等のメイン処理を実行して、ステップ１１０へ進む。
【００２５】
一方、ステップ１０４で肯定判断のときは、ステップ１０８において、３次元仮想空間（後述する仮想枠）内にメタボールで構成されたオブジェクトを配置・描画するための描画演算処理サブルーチンが実行される。
【００２６】
ここで、本実施形態で描画されるキャラクタを含むオブジェクトの概要について説明する。図２０（Ａ）、（Ｂ）に示すように、キャラクタｃは、人間の関節に相当する複数のノードＮ１〜Ｎ１１を有している。図２１に示すように、ノードＮ１〜Ｎ１１は階層（親子関係）を構成しており、各ノードＮ間の距離は一定とされている。これらのノードＮはテレビモニタ４上では非表示とされる。図２２に示すように、ノードＮには複数のノード所属ボールＮＢが割り当てられ（配置され）、後述するように、各ノード所属ボールＮＢの濃度分布処理やマーチンキューブ処理を経て、テレビモニタ４上に図２１（Ａ）に示すようなキャラクタｃが表示される。なお、本実施形態でオブジェクトという場合には、３次元仮想空間上に描画されるキャラクタｃ以外の対象物を含む。すなわち、下表１に示すように、メタボールには複数の種類が存在するが、詳細については後述する。
【００２７】
【表１】
2004062582.tif 000005
【００２８】
図５に示すように、描画演算処理サブルーチンでは、ステップ１１２において、モーションカーソルｍｃに対応する現フレームでのキャラクタｃのノードＮ１〜Ｎ１１のモーションデータを取得する。このようなモーションデータは、スケール（Ｓｃａｌｅ）情報、回転（Ｒｏｔａｔｉｏｎ）情報及び位置（Ｔｒａｎｓｌａｔｉｏｎ）情報（平行移動情報）で構成され、例えば、中前栄八郎、西田友是共著、株式会社昭晃堂発行、「３次元コンピュータグラフィックス」等に開示されているように、４行４列の行列の計算をフレーム毎に行うことでモーションを表現することができる。
【００２９】
次のステップ１１４では、プレイヤがキャラクタｃを攻撃するときに放たれる弾丸ボールＢＢに関連する処理を行うための弾丸ボール関連処理サブルーチンを実行する。図２３に示すように、プレイヤは入力装置３を操作し弾丸ボールＢＢを発射することでキャラクタｃに対する攻撃が可能である。すなわち、図２に示すように、入力装置３の十字方向ボタンセットを操作することでキャラクタｃに対してカーソルを合わせ、○ボタン３３を押下することで弾丸ボールＢＢを発射することできる。上述したステップ１０６のメイン処理では、○ボタン３３が押下されたときに、カーソルの位置（弾丸ボールＢＢの着弾目標座標）を取り込み、弾丸ボールＢＢが発射された状態を表す弾丸ボール状態フラグｂｂｆｌ（の状態値）を０から１に変更する。なお、本例では説明を簡単にするために、弾丸ボールＢＢが１個発射された場合について説明するが、弾丸ボールＢＢは複数個発射可能である。
【００３０】
図６に示すように、弾丸ボール関連処理サブルーチンでは、ステップ１４２において弾丸ボール状態フラグｂｂｆｌが１か否かを判断し、否定判断のときは、弾丸ボールＢＢが未発射のため、弾丸ボール関連処理サブルーチンを終了して図５のステップ１１６へ進み、肯定判断のときは、次のステップ１４４で前回の垂直帰線割込時（１／６０秒前）の弾丸ボール状態フラグｂｂｆｌと現在の弾丸ボール状態フラグｂｂｆｌとを比較することで、弾丸ボール状態フラグｂｂｆｌが０から１に変更されたか、換言すれば、弾丸ボールＢＢが今プレイヤにより発射されたか否かを判断する。
【００３１】
ステップ１４４で肯定判断のときは、次のステップ１４６において、弾丸ボールＢＢの速度ベクトルＶＢを演算し、ＲＡＭに記憶する。弾丸ボールＢＢの発射位置座標は予め設定されており、弾丸ボールＢＢの速度（初速）の大きさ（スカラ値）も予め与えられている。このため、発射位置座標から弾丸ボールＢＢの着弾目標座標に向かう方向ベクトルを演算し、方向ベクトルに弾丸ボールＢＢの速度のスカラ値を掛けることによって速度ベクトルＶＢを求めることができる（図２３参照）。ここに、方向ベクトルとは、大きさについて意味を持たない単位ベクトルで、方向だけが意味を持つベクトル（ｘ，ｙ，ｚ）をいい、この場合の方向ベクトル（ｘ，ｙ，ｚ）は、着弾目標座標（ｘ，ｙ，ｚ）から発射位置座標（ｘ，ｙ，ｚ）の差を求め、単位ベクトル化することにより得ることができる。また、ステップ１４６では、着弾目標座標と発射位置座標との距離を演算してＲＡＭに記憶する。なお、弾丸ボールＢＢの速度は一定として扱われ、空気の摩擦抵抗による減速については考慮していない。
【００３２】
次にステップ１４８では、弾丸ボールＢＢの位置を演算しＲＡＭに記憶し、弾丸ボール関連処理サブルーチンを終了して図５のステップ１１６へ進む。弾丸ボールＢＢの位置Ｐは、Ｐ０を弾丸ボールＢＢの発射位置座標Ｐ（ｘ，ｙ，ｚ）とすると、Ｐ＝Ｐ０＋ＶＢ・（１／６０）により３次元座標軸ｘ、ｙ、ｚの各成分毎に求めることができる。
【００３３】
一方、ステップ１４４で否定判断のときは、ステップ１５０において弾丸ボールＢＢの現在位置Ｐを演算してＲＡＭに格納する。弾丸ボールＢＢの現在位置Ｐは、Ｐｔ−１を前回の垂直割込時の位置、δｔを垂直帰線割込の時間（１／６０秒）とすると、Ｐ＝Ｐｔ−１＋ＶＢ・δｔを用いて３次元座標軸ｘ、ｙ、ｚの各成分毎に求めることができる。従って、ステップ１５０では、弾丸ボールＢＢの最新位置（ｘ，ｙ，ｚ）を前回の位置に基づいて垂直帰線割込毎に演算してＲＡＭに記憶することとなる。なお、ステップ１４８及びステップ１５０で用いた弾丸ボールＢＢの位置Ｐの演算式は、弾丸ボールＢＢの速度ベクトルＶＢが一定のため（加速度＝０）、オイラー法の運動方程式の加速度を含む第３項を削除して表したものである。
【００３４】
次いでステップ１５２では、弾丸ボールＢＢがノード所属ボールＮのいずれかに命中したか否かを判断する。すなわち、現在のフレームでの各ノードＮに割り当てられる全ノード所属ボールＮＢの中心座標Ｃを演算し（詳細後述）、図２４（Ａ）に示すように、弾丸ボールＢＢの（中心）位置Ｐが各ノード所属ボールＮＢの中心座標Ｃの所定半径ｄ内にあるかを判断する。弾丸ボールＢＢが複数のノード所属ボールの所定半径ｄ内に入るときは、そのうち最も距離の短いノード所属ボールＮＢに命中したものとみなす。なお、本例では、キャラクタｃの頭を構成するノード所属ボールＮＢの半径を３０〜４０としたときに、弾丸ボールＢＢの半径は２０〜３０に設定されている（テレビモニタ４に実際に表示されるときには、後述するように、これらの大きさより小さくなる。）。
【００３５】
ステップ１５２で否定判断のときは、次のステップ１５４において、弾丸ボールＢＢの位置Ｐのｙ成分（垂直方向座標成分）が地面又は地面より下の位置となったか（ｙ≦０）否かを判断し、肯定判断のときは、ステップ１５８へ進み、否定判断のときは、ステップ１５６において、現在の弾丸ボールＢＢの位置Ｐがステップ１４６で演算した着弾目標座標と発射位置座標との距離の１．５倍（所定距離）以上の距離となったか否かを判断し、否定判断のときは、弾丸ボール関連処理サブルーチンを終了して図５のステップ１１６へ進み、肯定判断のときは、次のステップ１５８において、弾丸ボール状態フラグｂｂｆｌを１から０とし、弾丸ボール関連処理サブルーチンを終了して図５のステップ１１６へ進む。従って、弾丸ボールＢＢがキャラクタｃのノード所属ボールＮＢに命中しない場合に、位置Ｐが地面（ｙ＝０）より下になったとき又は所定距離以上となったときに、弾丸ボール状態フラグｂｂｆｌを０とする。なお、弾丸ボール状態フラグｂｂｆｌが０となると、弾丸ボールＢＢは消滅する。
【００３６】
一方、ステップ１５２で肯定判断のときは、ステップ１６０で、弾丸ボールＢＢが命中した特定のノード所属ボールＮＢ及び下位のノード所属ボールＮＢの命中フラグｓｈｆｌを０から１に変更する。すなわち、全ノード所属ボールＮＢは命中フラグｓｈｆｌを持っており、通常は命中フラグが０とされている。図２２、図２３に示すように、例えば、ノードＮ７に割り当てられるノード所属ボールＮＢＡに弾丸ボールＢＢが命中したときには、図２１に示す階層情報により、ノードＮ７より下位のノードＮ８、Ｎ９に割り当てられるノード所属ボールＮＢＢ、ＮＢＣの命中フラグｓｈｆｌも０から１に変更される。なお、実際には、図２３に示したノード所属ボールＮＢＡ、ＮＢＢ等はそれぞれ３個程度のノード所属ボールに分割されてノードＮ７、Ｎ８、Ｎ９又はこれらのノード間に割り当てられており、図２１に示した階層もより複雑となっているが、本実施形態では説明を簡単にするために、ノード所属ボールＮＢＡ、ＮＢＢ等が１個で構成されているものとして説明する。
【００３７】
次にステップ１６２では、図２４（Ｂ）に示すように、複数個の破片ボールＦＢを発生させる。ここに、破片ボールＦＢとは、弾丸ボールＢＢがノード所属ボールＢＢに命中したときに飛び散るボールをいい（表１参照）、弾丸ボールＢＢの速度ベクトルＶＢの方向に対して命中点Ｈ（弾丸ボールＢＢの中心点）から０度、±３０度、±６０度となる位置で弾丸ボールＢＢが命中したノード所属ボールＮＢの命中点Ｈ側の反対側に発生させる。各破片ボールＦＢは、バラツキを表現するために大きさが異なっており、例えば、平均半径を５とすると、±１程度の半径となるように半径４、６にランダムに設定される。また、ステップ１６２では、各破片ボールＦＢの速度ベクトルが演算され、ＲＡＭに格納される。各破片ボールＦＢの速度のバラツキを表すために、バラツキ係数ａ（０．５≦ａ≦１）が導入される。例えば、命中点Ｈから０度で発生する破片ボールＦＢの速度の場合には、命中前の弾丸ボールＢＢの方向ベクトルと同じ方向ベクトルに、命中前の弾丸ボールＢＢの速度ベクトルのスカラ値と０．５≦ａ≦１の範囲で乱数により取得したバラツキ係数ａとを掛けることにより求められる。±３０度、±６０度で発生する破片ボールの速度ベクトルの場合は、まず、±３０度、±６０度で発生する破片ボールの方向ベクトルを算出し、この方向ベクトルに、命中前の弾丸ボールＢＢの速度ベクトルのスカラ値と０．５≦ａ≦１の範囲で乱数により取得したバラツキ係数ａとを掛けることにより求められる。
【００３８】
続いてステップ１６４では、命中した弾丸ボールＢＢがキャラクタｃを構成するノード所属ボールＮＢに食い込んで停止した状態を表示するために（図３１（Ａ）参照）、弾丸ボールＢＢの速度ベクトルを（０，０，０）とし、ステップ１６６で、命中したノード所属ボールのパワーｎｂｐから３０を減算して、次のステップ１６８で、命中したノード所属ボールＮＢのパワーｎｂｐが０未満となったか否かを判断する。すなわち、ステップ１０２での初期設定処理では、各ノード所属ボールＮＢにはパワーｎｂｐとして１００が与えられており、同じノード所属ボールＮＢに弾丸ボールＢＢが４回命中するとそのノード所属ボールＮＢのパワーｎｂｐは０未満となる。
【００３９】
ステップ１６８で否定判断のときは、弾丸ボール関連処理サブルーチンを終了して図５のステップ１１６へ進み、肯定判断のときは、次のステップ１７０において、当該ノード所属ボールＮＢ及び当該ノード所属ボールの下位となるノード所属ボールＮＢの状態フラグｎｂｆｌを「崩落」とし、ＲＡＭに記憶した後、弾丸ボール関連処理サブルーチンを終了して図５のステップ１１６へ進む。上述した例に即して更に付言すれば、図２２に示すように、ノードＮ７に割り当てられるノード所属ボールＮＢＡに弾丸ボールＢＢが命中したときは、ノードＮ７より下位のノードＮ８、Ｎ９に割り当てられるノード所属ボールＮＢＢ、ＮＢＣの状態フラグｎｂｆｌも「通常」から「崩落」に変更される。ここに、「通常」とはノード所属ボールＮＢが所属するノードＮに割り当てられた位置にある状態をいい（図２２参照）、「崩落」とはノード所属ボールＮＢ（例えば、ＮＢＡ、ＮＢＢ、ＮＢＣ）が所属するノードＮ（例えば、Ｎ７）に割り当てられた位置から離れて（千切れて）自然落下する状態をいう。
【００４０】
図５のステップ１１６では、キャラクタｃを構成する全ノード所属ボールＮＢの爆発に関連する処理を行うための爆発関連処理サブルーチンを実行する。図７に示すように、爆発関連処理サブルーチンでは、ステップ１８２で、全ノード所属ボールＮＢのパワーｎｂｐの総和（Σｎｂｐ）を演算し、次のステップ１８４において、全ノード所属ボールＮＢのパワーｎｂｐの総和が初期設定処理でのパワーの総和の５０％以下か否かを判断する。上述したように、各ノード所属ボールＮＢの初期設定処理でのパワーｎｂｐは１００であり、図２２に示すように、ノード所属ボールＮＢが１８個のときは、Σｎｂｐが９００以下か否かが判断される。
【００４１】
否定判断のときは、キャラクタｃは爆発しないものとして、爆発関連処理サブルーチンを終了し図５のステップ１１８へ進む。一方、肯定判断のときは、ステップ１８６で全ノード所属ボールＮＢの状態フラグｎｂｆｌを「爆発」とし、次のステップ１８８において、全ノード所属ボールＮＢの拡散順（拡散開始時間）を演算し、ＲＡＭに記憶した後、爆発関連処理サブルーチンを終了して図５のステップ１１８へ進む。
【００４２】
ノード所属ボールＮＢの状態フラグｎｂｆｌが「爆発」となると、キャラクタｃを構成するノード所属ボールＮＢは楕球状の破片となって散乱（拡散）する。全ノード所属ボールＮＢは同時に散乱するようにしても良く又ランダムでも良いが、本実施形態では時間的にばらばらに散乱する。爆発の中心は、図６のステップ１５２で弾丸ボールＢＢが命中したノード所属ボールＮＢとなる。図２２に示したノード所属ボールＮＢＡが爆発の中心となる場合には、例えば、ノードＮ７、Ｎ８、Ｎ９に割り当てられるノード所属ボールＮＢＡ、ＮＢＢ、ＮＢＣの拡散開始時間ｔｓ＝０（現在）、ノードＮ７、Ｎ１０、Ｎ１１に割り当てられるノード所属ボールＮＢの拡散開始時間ｔｓ＝２０（現在から２０／６０秒後）、ノードＮ７、Ｎ６に割り当てられるノード所属ボールＮＢの拡散開始時間ｔｓ＝４０、ノードＮ７、Ｎ１に割り当てられるノード所属ボールＮＢの拡散開始時間ｔｓ＝６０、ノードＮ１、Ｎ２、Ｎ３に割り当てられるノード所属ボールＮＢの拡散開始時間ｔｓ＝８０、ノードＮ１、Ｎ４、Ｎ５に割り当てられるノード所属ボールＮＢの拡散開始時間ｔｓ＝１００というように、拡散開始時間ｔｓに時間差を設けて拡散順が設定される。また、拡散開始時の各ノード所属ボールＮＢの方向及び初速は、爆発により全ノード所属ボールＮＢが概ね全方向に散乱するように各拡散初速ベクトルＶ０が予め設定されている。
【００４３】
図５のステップ１１８では、全てのメタボールについて後述するメタボール更新処理及び濃度分布処理が終了したか否かを判断し、否定判断のときは、ステップ１２０でメタボールのオブジェクト情報を更新（生成）するためのメタボール更新処理サブルーチンを実行する。
【００４４】
図８に示すように、メタボール更新処理サブルーチンでは、ステップ２１２において、処理対象がノード所属ボールＮＢか否かを判断する。肯定判断のときは、ステップ２１４で後述するノード所属ボール処理サブルーチンを実行し、否定判断のときは、ステップ２１６において、処理対象が接地ボールＧＢか否かを判断する。接地ボールＧＢとは、キャラクタｃの真下に配置されキャラクタｃの移動に伴って地面を這いずるボールをいい（表１、図２０（Ａ）参照）、テレビモニタ４上ではキャラクタｃの真下に配置された水たまりのように表示される。肯定判断のときは、ステップ２１８で後述する接地ボール処理サブルーチンを実行し、否定判断のときは、ステップ２２０において、処理対象が触手ボールＴＢか否かを判断する。触手ボールＴＢとは、特定のノード所属ボールから突出し細長い触手を構成するボールをいう（表１、図２０（Ａ）参照）。肯定判断のときは、ステップ２２２で後述する触手ボール処理サブルーチンを実行し、否定判断のときは、ステップ２２４において、処理対象が弾丸ボールＢＢか否かを判断する。肯定判断のときは、ステップ２２６で後述する弾丸ボール処理サブルーチンを実行し、否定判断のときは、ステップ２２８において、処理対象が破片ボールＦＢか否かを判断する。肯定判断のときは、ステップ２３０で後述する破片ボール処理サブルーチンを実行し、否定判断のときは、ステップ２３２で滴ボール処理サブルーチンを実行する。なお、滴ボールとは、特定のノード所属ボールＮＢから滴り落ちるボールをいう（表１、図２０（Ａ）参照）。
【００４５】
図９に示すように、ノード所属ボールサブルーチンでは、ステップ２５２において、処理対象のノード所属ボールＮＢの状態フラグｎｂｆｌが通常か否かを判断する。ステップ２５２での判断が肯定のときは、次のステップ２５４で、処理対象のノード所属ボールＮＢの命中フラグｓｈｆｌが１か否かを判断し、否定判断のときはステップ２５７へ進み、肯定判断のときは、ステップ２５６において、ステップ１１２で取得した、処理対象のノード所属ボールＮＢが所属する（割り当てられる）ノードＮのモーションデータを、弾丸ボールＢＢの衝撃に従って補正するためのノード補正処理サブルーチンを実行する。
【００４６】
図１０に示すように、ノード座標補正処理サブルーチンでは、ステップ３０２において、処理対象のノード所属ボールＮＢの回転角が既に演算されているか否かを判断し、肯定判断のときはステップ３０８に進み、否定判断のときは、次のステップ３０４において、弾丸ボールＢＢが命中した衝撃によるキャラクタｃの仰け反りを表すための回転角を演算する。
【００４７】
図２３に示すように、命中点Ｈに弾丸ボールＢＢが命中すると、命中点Ｈには、（ノードＮ１から命中点Ｈに向かうベクトルｒ）と（力を表すベクトルＦ）との外積となるトルクＴが生ずる。このとき、キャラクタｃの仰け反りを表すために、キャラクタｃの中心ノードとなるノードＮ１を中心として回転するものとする。なお、ベクトルＦは、便宜上、ステップ１４６で演算した弾丸ボールＢＢの速度ベクトルＶＢ（ｘ，ｙ，ｚ）の各成分値をそのまま用いてもよいし、ステップ１４６で演算した弾丸ボールＢＢの方向ベクトルに所定のスカラ値を掛けて算出するようにしてもよい。
【００４８】
例えば、ベクトルｒ、ベクトルＦの（ｘ，ｙ，ｚ）成分を、それぞれ（０，１０，−２）、（９，２，−４）とすると、ノードＮ１に働くトルクＴは、Ｔ＝（０，１０，−２）×（９，２，−４）＝（−３６，−１８，−９０）となり、ノードＮ１を中心とする回転量ＡＲは、｛（−３６）２＋（−１８）２＋（−９０）２｝１／２＝９８．６として求めることができる。回転量ＡＲ＝９８．６をこのまま回転角Ａとするには値が大きいので、１／１０として算出する。弾丸ボールＢＢが命中した衝撃によるキャラクタｃの仰け反りをゲーム上適切に表現するためには、キャラクタｃの仰け反り角度を３０度以上とすることが好ましいので、回転角Ａ＝３０＋９．８６＝３９．８６（度）として演算する。なお、回転角Ａが６０（度）を超えるときは、ゲーム上適切に表現するために、回転角Ａを最大値の６０（度）とする。
【００４９】
続いてステップ３０６では、単位時間（１／６０秒）当たりの進み回転角及び戻り回転角を演算してＲＡＭに記憶する。すなわち、上記の例に則して説明すれば、弾丸ボールＢＢが命中したときのキャラクタｃの仰け反りを１フレームで描画すると奇異に感じられるため、１０フレームで回転量Ａ＝３９．８６（度）の回転を表し（単位時間当たりの進み回転角Ａａ＝３９．８６／１０＝３．９８６（度））、３０フレームで本来の（ステップ１１２で取得する）ノードＮの座標位置に戻す（単位時間当たりの戻り回転角Ａｒ＝３９．８６／３０＝１．３２（度））。また、図２１に示す階層情報によりノードＮ７より下位のノードＮ８、Ｎ９もノードＮ７と同様に回転する。従って、ステップ３０６では、これらのノードのうち最初の処理対象となるノードＮの進み回転角Ａａ、戻り回転角Ａｒのみを演算してＲＡＭに記憶する。なお、ステップ３０２で既に回転角を演算済みかを判断するには、処理対象のノード所属ボールＮＢの命中フラグｓｈｆｌが１のときに、ステップ３０６で記憶する（記憶した）ＲＡＭの所定領域を参酌すればよい。
【００５０】
ステップ３０８では、現フレームでの回転状態を把握するために、回転角カウンタｒｏｔｃを１インクリメントし、次のステップ３１０において、回転角カウンタｒｏｔｃが１０以下か否かを判断する。肯定判断のときは、ステップ３１２において、ステップ１１２で取得した処理対象のノードＮのモーションデータについてステップ３０６でＲＡＭに記憶した進み回転角Ａａ分回転させ、ノード補正処理サブルーチンを終了して図９のステップ２５７へ進む。このようなモーションデータの補正（ノード補正）は、上述した「３次元コンピュータグラフィックス」等で公知のように、モーションデータを含む行列と回転角を含む行列とを掛けることで演算することができる。一方、否定判断のときは、次のステップ３１４において、回転角カウンタｒｏｔｃが４０か否かを判断し、否定判断のときは、ステップ３１６において、ステップ１１２で取得した処理対象のノードＮのモーションデータについてステップ３０６でＲＡＭに記憶した戻り回転角Ａｒ分回転させ、ノード補正処理サブルーチンを終了して図９のステップ２５７へ進み、肯定判断のときは、ステップ３１８において、弾丸ボールＢＢの衝撃の影響がなくなったものとして、命中フラグｓｈｆｌを１から０とし、ノード補正処理サブルーチンを終了して図９のステップ２５７へ進む。
【００５１】
ステップ２５７では、所属ノードに処置対象のノード所属ボールＮＢを配置する（割り当てる）。図２５に示すように、例えば、ノードＮ１に配置されるノード所属ボールＮＢＤを例として説明すると、ノードＮ１のモーションデータｍａｔＮ１は、スケール情報（ｘ，ｙ，ｚ）＝（１，１，１）、（グローバル）位置情報（ｘ，ｙ，ｚ）＝（３０，１２０，０）及び回転情報（ｘ，ｙ，ｚ）＝（０，０，０）を含んでおり、現在のフレームでのモーションデータとしてステップ１１２で取得されている（又はステップ３０６で補正されている。）。ノードＮ１に所属するノード所属ボールＮＢＤのスケール情報（ｘ，ｙ，ｚ）＝（２０，３０，２０）、ノードＮ１に対する位置情報（ｘ，ｙ，ｚ）＝（０，１０，１０）は一定で予め定められており、行列ｍａｔＣＤで表すことができる。行列ｍａｔＣＤは一定なため、例えば、ゲームデータを作成する前に静的なモデルデータを作成して得ることができる。ノード所属ボールＮＢＤは、行列ｍａｔＣＤでノードＮ１に割り当てられる。ノード所属ボールＮＢＤのグローバル座標でのオブジェクト情報は、ｍａｔＮＢＤ＝ｍａｔＮ１・ｍａｔＣＤで演算することができる。すなわち、ノード所属ボールＮＢＤのグローバル座標における中心位置ＣＤは（３０，１３０，１０）であり、スケール（大きさ）は（２０，３０，２０）である。なお、図２５には、上述したステップ３１２、３１６に関連してｙ軸を中心に回転した場合のｍａｔＮ１の一例を示しており、スケール情報が（１，１，１）以外となる。また、詳細説明を省略したステップ１５２での全ノード所属ボールＮＢの中心座標Ｃは、本ステップのように４行４列の行列同士を掛けることで、又は、演算負荷を軽減するために、両行列のうちの位置情報のみを加算することで演算することができる。
【００５２】
次のステップ２５８では、処理対象のノード所属ボールＮＢの大きさを変更する呼吸処理を行う。例えば、ノード所属ボールＮＢＤの大きさが（２０，３０，２０）の場合に、当該ノード所属ボールＮＢは、１．５倍（３０，４５，３０）までの大きさに垂直帰線周期毎に周期的に変更される。すなわち、垂直帰線周期毎にスケール情報が１．１倍、１．２倍、・・・、１．５倍に変更され、その後、１．４倍、１．３倍、・・・、１．０倍に変更される周期を繰り返す。前回の垂直帰線周期の大きさのデータをＲＡＭに記憶しておくことで、現在のスケール情報の変更データを得ることができる。このような処理により、各ノード所属ボールＮＢの大きさが変更され、キャラクタｃが呼吸している様子を描画することができる。
【００５３】
次にステップ２６０では、処理対象のノード所属ボールＮＢが滴ボールＤＢを発生させるノード所属ボールか否かを判断する。図２０（Ａ）、（Ｂ）に示すように、本例では、ノードＮ９、Ｎ１１に割り当てられるノード所属ボールＮＢが滴ボールＤＢを発生させるノード所属ボールである。否定判断のときは、ノード所属ボール処理サブルーチンを終了して図５のステップ１２２へ進み、肯定判断のときは、次のステップ２６２において、滴ボールフラグｄｂｆｌが０か否かを判断する。ステップ２６２で否定判断のときは、ノード所属ボール処理サブルーチンを終了して図５のステップ１２２へ進む。一方、ステップ２６２で肯定判断のときは、次のステップ２６４で滴ボールフラグｄｂｆｌを０から１に変更し、ノード所属ボール処理サブルーチンを終了して図５のステップ１２２へ進む。これにより、滴ボールＤＢが発生する。
【００５４】
ステップ２５２での判断が否定のときは、ステップ２６６において、処理対象のノード所属ボールＮＢの状態フラグｎｂｆｌが「爆発」か否かを判断する。ステップ２６６での判断が肯定のときは、次のステップ２６８において、ステップ１８８で演算した処理対象のノード所属ボールＮＢの拡散開始時間が経過したか否かを判断し、否定判断のときは、拡散順に至ってないのでノード所属ボール処理サブルーチンを終了して図５のステップ１２２へ進み、肯定判断のときは、ステップ２７０で当該ノード所属ボールＮＢの位置を演算する。上述したように、拡散速度ＶＳは、地面より上にあるときは、ＶＳ＝ＶＳ−１−ｇ・δｔで演算するが地面まで来たら止まる。ノード所属ボールＮＢの位置は、その拡散速度ベクトルＶＳをオイラー法の運動方程式で求める（Ｐｔ＝Ｐｔ−１＋ＶＳ−１・δｔ）。なお、Ｖｓ−１は前回の垂直帰線割込時の拡散速度、ｇは重力加速度、δｔは垂直帰線割込時間（１／６０秒）、Ｐｔは現在の位置、Ｐｔ−１は前回の垂直帰線割込時の位置をそれぞれ表している。
【００５５】
次にステップ２７２において、ステップ２７０で演算された処理対象のノード所属ボールＮＢの位置ＰＮのｙ成分が０又は０より小さいか否かを判断し、否定判断のときは、ステップ２７４において、処理対象のノード所属ボールＮＢが楕球状となるように変更する形状変更処理を行う。例えば、処理対象のノード所属ボールＮＢの拡散開始前のスケール情報が（２０，３０，２０）で、現在の拡散速度ＶＳがｘ、ｙ、ｚ成分で（３，４，５）とすると、拡散速度ＶＳのｘ、ｙ、ｚ成分のうち最も絶対値の大きいｚ成分の数値を利用して、２０×３０×２０＝（２０＋ａ）×（３０＋ａ）×（２０＋５）を満たすａを算出し（ａ＝−２．５）、ノード所属ボールＮＢの拡散前の体積と拡散中の体積とが概ね同じとなるように、処理対象のノード所属ボールＮＢのスケール情報を（２０−２．５，３０−２．５，２０＋５）＝（１８．５，２７．５，２５）として演算して、ノード所属ボール処理サブルーチンを終了し図５のステップ１２２へ進む。なお、拡散速度ＶＳが減衰してＶＳ＝０となる瞬間に、処理対象のノード所属ボールＮＢは拡散開始前のスケール情報と同じ（２０，３０，２０）となる。
【００５６】
一方、ノード所属ボールＮＢが自然落下するときに、ステップ２７０（又は後述するステップ２８０）で演算したノード所属ボールＮＢのｙ成分の速度が３（ｍ／ｓ）とすると、ｙ成分の速度の絶対値に着目して、２０×３０×２０＝（２０＋ａ）×（３０＋３）×（２０＋ａ）を満たすａを算出し（ａ＝−１）、ノード所属ボールＮＢの拡散前の体積と自然落下中の体積とが概ね同じとなるように、処理対象のノード所属ボールＮＢのスケール情報を（２０−１，３０＋３，２０−１）＝（１９，３３，１９）として演算して（図３２（Ｂ）参照）、ノード所属ボール処理サブルーチンを終了し図５のステップ１２２へ進む。なお、この場合に２０×３０×２０＝（２０×ａ）×（３０×１．１）×（２０×ａ）としてａを演算するようにしてもよい。このとき、３０×１．１は３０＋３と同じ意味となる。
【００５７】
このように拡散速度ＶＳに応じて、処理対象のノード所属ボールＮＢのスケール情報が確定し、ステップ２７０（又は後述するステップ２８０）で演算した位置情報と併せて、「爆発」状態のノード所属ボールＮＢのオブジェクト情報となる行列ｍａｔＮＢを得ることができる。
【００５８】
一方、ステップ２７２で否定判断されたときは、ステップ２７６において、ノード所属ボールＮＢの状態フラグｎｂｆｌを「這いずり」とし、ＲＡＭに記憶した後、ノード所属ボール処理サブルーチンを終了して図５のステップ１２２へ進む。ここに、「這いずり」とは、図２６に示すように、ノード所属ボールＮＢが地面に到達した後に、予め設定された一定速度Ｖ（スカラ値）でキャラクタｃの足部のノードＮ３又はノードＮ５向けて地面を這いずり、ノードＮ３又はノードＮ５に到達した後、図２０（Ｂ）に示すように、階層を構成するノードＮを経由して本来所属するノードＮの位置まで移動することをいう。例えば、図２２に示したノード所属ボールＮＢＡの状態フラグｎｂｆｌが「這いずり」となると、ノード所属ボールＮＢＡは、地面に到達したときの形状でノードＮ３に向かって地面を這いずり、ノードＮ３に到達した後、ノードＮ２、Ｎ１を経て所属するノードＮ７の位置まで移動する。また、ノードＮ７に対して反対側に配置されたノードＮ１０に所属するノード所属ボールＮＢの場合には、地面に到達したときの形状でノードＮ５に向かって地面を這いずり、ノードＮ５に到達した後、ノードＮ４、Ｎ１、Ｎ７を経て所属するノードＮ１０の位置まで移動する。従って、図２１に示した階層情報に従ってノード所属ボールＮＢが割り当てられる左右のノードより地面を這いずるときに到達目標となるノードや経由するノードが異なることになる。
【００５９】
ステップ２６６での判断が否定のときは、ステップ２７８において、処理対象のノード所属ボールＮＢの状態フラグｎｂｆｌが「崩落」か否かを判断する。肯定判断のときは、ステップ２８０で、処理対象のノード所属ボールＮＢの位置を演算する。「崩落」では、処理対象のノード所属ボールＮＢがキャラクタｃから千切れ自然落下する状態が描画される。このため、ステップ２７０で地面より上にあったときの演算と同様に、処理対象のノード所属ボールＮＢの状態フラグｎｂｆｌが「崩落」となる直前の（「通常」での）ｘ成分、ｙ成分、ｚ成分をそのまま維持する。なお、次の垂直帰線割込時（１／６０秒後）にＶｔ−１として用いられる現在のｙ成分の速度Ｖｔ＝−ｇ・δｔ＋Ｖｔ−１についても併せて演算しＲＡＭに記憶して、ステップ２７２に進む。
【００６０】
一方、ステップ２７８で否定判断のとき、すなわち、処理対象のノード所属ボールＮＢの状態フラグｎｂｆｌが「這いずり」のときは、ステップ２８２で、処理対象のノード所属ボールＮＢの位置を演算する。ノードＮ３、Ｎ５の位置はフレーム毎にモーションデータが変更されるので、処理対象のノード所属ボールＮＢが地面を這いずる方向は垂直帰線割込毎に異なる。このため、行列ｍａｔＮ３（又はｍａｔＮ５）によりノードＮ３（又はノードＮ５）の現在位置（到達目標）と前回の垂直帰線割込時の処理対象のノード所属ボールＮＢの位置とから方向ベクトルＶＵを算出し、スカラ値で表される速度Ｖを掛けることによって速度ベクトルＶｃｒ（Ｖｃｒ＝Ｖ・ＶＵ）を求めＲＡＭに記憶する。処理対象のノード所属ボールＮＢの（中心）位置Ｐｃｒは、Ｐｃｒ＝Ｐｔ−１＋Ｖｃｒ・δｔで演算することができる。なお、処理対象のノード所属ボールＮＢが地面を這いずっているときは、テレビモニタ４上での楕球状のノード所属ボールＮＢの上部半球のみが表示される。また、ノードＮ３（又はノードＮ５）に到達した後は、到達目標をノードＮ２（又はノードＮ４）、Ｎ１と順次変更して、処理対象のノード所属ボールＮＢの位置が状態フラグｎｂｆｌ「通常」の位置となるまで、位置が演算される。これにより、「這いずり」状態のノード所属ボールＮＢのオブジェクト情報となる行列ｍａｔＮＢを得ることができる。
【００６１】
上述したように、ノード所属ボールＮＢはノードＮ３（又はノードＮ５）に到達すると、ノードＮ２（又はノードＮ５）に向かう。換言すれば、ノード所属ボールＮＢのｙ成分は０より大きくなる。従って、ステップ２８４では、ノード所属ボールＮＢの位置情報のｙ成分が０より大きいか否かを判断し、否定判断のときは、地面を這いずっている状態を続行するためにノード所属ボール処理サブルーチンを終了して図５のステップ１２２へ進み、肯定判断のときは、次のステップ２８６で、処理対象のノード所属ボールＮＢの「通常」での位置を演算し（図２２、図２５参照）、ステップ２８８において、処理対象のノード所属ボールＮＢの現在の位置がステップ２８６で演算した「通常」での位置の所定半径内にあるかを判断することで、処理対象のノード所属ボールＮＢが通常位置に戻ったか否かを判断する。否定判断のときは、ノードＮ間を這いずっている状態を続行するためにノード所属ボール処理サブルーチンを終了して図５のステップ１２２へ進む。一方、肯定判断のときは、次のステップ２９０で、処理対象のノード所属ボールＮＢの状態フラグｎｂｆｌを「通常」とすると共に、処理対象のノード所属ボールのパワーｎｂｐを１００とし、ノード所属ボール処理サブルーチンを終了して図５のステップ１２２へ進む。
【００６２】
次に、図２７（Ａ）を参照して、接地ボールＧＢについて説明する。接地ボールＧＢは、地面に配設される（位置情報のｙ成分が０の）４つの小接地ボールＧＢａ、ＧＢｂ、ＧＢｃ、ＧＢｄで構成されている。各小接地ボールＧＢａ〜ＧＢｄが分離すると接地ボールＧＢが複数個となり奇異に感じられるため、フレーム毎に各小接地ボールのスケール情報及び位置情報を調整し、１個の接地ボールＧＢが形成される。このため、小接地ボールＧＢａ〜ＧＢｄはノードＮ３又はノードＮ５に関連付けられており、仮想バネの概念が導入されている。すなわち、小接地ボールＧＢａ、ＧＢｂの中心及びノードＮ５、小接地ボールＧＢｃ、ＧＢｄの中心及びノードＮ３は、それぞれ仮想バネを介して接続されている。また、小接地ボールＧＢａ、ＧＢｂの中心間及び小接地ボールＧＢｃ、ＧＢｄの中心間は、別の仮想バネで接続されている。
【００６３】
図１１に示すように、接地ボール処理サブルーチンでは、ステップ３２２において、全ての小接地ボールの処理が終了したか否かを判断し、否定判断のときは、次のステップ３２４で、対象の小接地ボールの前回の垂直帰線割込時の位置及び対象の小接地ボールが関連付けられたノードＮの現在の位置を読み出し、ステップ３２６において対象の小接地ボールに働く加速度αを演算する。
【００６４】
図２７（Ｂ）に示すように、小接地ボールＧＢａを例に挙げて説明すると、ノードＮ５及び小接地ボールＧＢａの中心間の距離ｘはステップ３２４で読み出した位置から求めることができる。仮想バネには、ｋを予め設定されたバネ定数、ノードＮ１から受ける加速度をα１とすると、Ｆ＝−ｋｘ＝ｍα１の力Ｆが作用している。いま、小接地ボールＧＢａの質量ｍを１とすると、加速度α１は、α１＝−ｋｘとして求めることができる。上述したように、小接地ボールＧＢａ及びＧＢｂ間には、別の仮想バネが存在している。この仮想バネによる加速度α２を算出するため、対象の小接地ボールＧＢａと小接地ボールＧＢｂとの前回の垂直帰線割込時の位置を読み出し、両者間の距離ｘを求める。加速度α２は、Ｆ＝−ｋｘ＝α２（ｍ＝１）により算出される。加速度αは加速度α１と加速度α２とを（ｘ，ｙ，ｚ）成分毎に加算することで得ることができる。
【００６５】
次いでステップ３２８では、対象の小接地ボールの速度Ｖｔを、Ｖｔ＝Ｖｔ−１＋αδｔによりｘ成分及びｚ成分について演算しＲＡＭに記憶する。この演算式において、Ｖｔ−１は前回の垂直帰線割込時の小接地ボールの速度を表している。なお、接地ボールＧＢの位置情報のｙ成分は常に０のため演算する必要はない（Ｖｔ＝（ｘ，０，ｚ））。
【００６６】
次のステップ３３０では、対象の小接地ボールの前回の垂直帰線割込時のスケール及び速度Ｖｔ−１を読み出して、ステップ３２８で演算した速度Ｖｔから対象の小接地ボールの大きさを演算し現在のスケールとしてＲＡＭに記憶する。例えば、小接地ボールＧＢａの前回の垂直帰線割込時のスケールが（２０，０，３０）で速度Ｖｔ−１が（１０，０，５）のときは、速度Ｖｔ−１のｘ，ｚ成分のうち絶対値の大きいｘ成分（１０）に着目し、小接地ボールＧＢａの大きさ（面積）を同じに維持するために、２０×３０＝（２０＋１０）×（３０−ａ）から、現在の小接地ボールＧＢａのｚ成分のスケールを算出する（ａ＝１０）。この演算により、現在の小接地ボールＧＢａのスケールは（３０，０，２０）となる。なお、小接地ボールＧＢａの現在の位置には、前回の垂直帰線割込時の位置が用いられる（後述するステップ３３２参照）。
【００６７】
従って、ステップ３２４〜３３０では、ノードＮ３（又はノードＮ５）の移動により小接地ボールとの距離が大きくなる場合に、仮想バネによる力Ｆが大きくなる（小接地ボールＧＢａの加速度α及び小接地ボールＧＢａがノードＮ３（又はノードＮ５）に追随する速度Ｖｔが大きくなる）結果、加速度αが作用する方向へ小接地ボールのスケールが大きくなるように変更されるので、小接地ボール同士が分離しない傾向を保持することができ、接地ボールＧＢを１個として描画することができる。
【００６８】
次にステップ３３２では、対象の小接地ボールの最新位置Ｐｔを演算しＲＡＭに記憶して、ステップ３２２へ戻る。最新位置Ｐｔは、Ｐｔ＝Ｐｔ−１＋Ｖｔ・δｔで演算することができる。なお、Ｐｔ−１は前回の垂直帰線割込時の対象の小接地ボールの位置を表している。ステップ３２２で肯定判断のときは、ノード所属ボール処理サブルーチンを終了し図５のステップ１２２へ進む。
【００６９】
図１２に示すように、触手ボール処理サブルーチンでは、ステップ３３６において、触手ボールＴＢの基部位置Ｐ０を演算する（図２０（Ａ）も参照）。触手ボールＴＢの基部位置Ｐ０は、ノード所属ボールＮＢＥの状態フラグｎｂｆｌが「通常」のときに、特定のノード所属ボールＮＢ（本例では、ノードＮ７に割り当てられキャラクタｃの肩に配置されるノード所属ボールＮＢＥ）の中心に位置する（例えば、（５０，１２０，１００））。ただし、ノード所属ボールＮＢＥの状態フラグｎｂｆｌが「爆発」（正確には、拡散開始時以降）、「崩落」、又は「這いずり」（正確には、ｙ＝０での這いずり）のときは、触手ボールＴＢの基部位置Ｐ０は、ｙ成分が０の（５０，０，１００）として接地ボールＧＢの表面に位置する。触手ボールＴＢの基部位置Ｐ０は、ノード所属ボールＮＢＥの状態フラグｎｂｆｌが「這いずり」でｙ＝０の間は、垂直帰線割込が繰り返されても、変わることなく維持され、ノード所属ボールＮＢＥの状態フラグｎｂｆｌが「這いずり」でｙ＞０となると、ノード所属ボールＮＢＥの中心となる。
【００７０】
従って、触手ボールＴＢの基部位置Ｐ０は、ノード所属ボールＮＢＥの状態フラグｎｂｆｌが「通常」以外のときに、ノード所属ボールＮＢＥが「爆発」（拡散開始時以降）、「崩落」又はその後の「這いずり」となると、接地ボールＧＢに固着するように描画され、「這いずり」でノード所属ボールＮＢＥのｙ成分が０より大きくなると、ノード所属ボールＮＢＥの中心に固着して本来のノード所属ボールＮＢＥの位置まで戻るように描画される。
【００７１】
次のステップ３３８では、触手ボールＴＢの先端位置Ｐ５を演算する。図２０（Ａ）に示すように、触手ボールＴＢの先端位置Ｐ５は、プレイヤキャラクタが存在するときは、当該プレイヤキャラクタを威嚇するように、プレーヤキャラクタの移動に追随するように設定することも可能であるが、本例では、プレイヤキャラクタが存在しない場合を想定して、仮想カメラに向かって触手ボールＴＢの先端位置Ｐ５を移動させることでプレイヤを威嚇する。すなわち、非可視の目標点Ｐδｔが予めモーションデータとして設定されており、前回の垂直帰線割込時の目標点Ｐδｔ−１（図２９（Ｃ）参照）から一定間隔（例えば、（１０，１０，１０））隔てられた位置が触手ボールＴＢの先端位置Ｐ５として演算される。
【００７２】
図２０（Ａ）に示すように、触手ボールＴＢは、基部位置Ｐ０及び先端位置Ｐ５間でベジエ曲線を利用して滑らかな曲線として描画される。図２９（Ａ）に示すように、ベジエ曲線は、一般に４点（Ｐ０，Ｐ１，Ｐ２，Ｐ３）で形成される。本例では、触手ボールＴＢをリアルに表現するために、４点を超える中間点が用いられている。この場合に、図２９（Ｂ）に示すように、４点で形成されるベジエ曲線をそのまま連結すると、点Ｐ３が不連続点となる（滑らかでなくなる）。このため、図２９（Ｃ）に示すように、点Ｐ２と点Ｐ３との中間に点Ｐ２’を存在させて、触手ボールＴＢを滑らかな曲線で描画している。
【００７３】
図３０（Ａ）に示すように、触手ボールＴＢの基部、先端及び中間点は仮想バネで接続されている。今、中間点Ｐ１に着目して、現在の中間点Ｐ１の位置を演算する場合について詳述すると、図３０（Ｂ）に示すように、前回の垂直帰線割込時に中間点Ｐ１に働いていた力Ｆδｔ−１は、Ｆδｔ−１＝Ｆ０１＋Ｆ０２によりベクトルで表される。力Ｆ０１、Ｆ０２は、前回の垂直帰線割込時に、基部位置Ｐ０に接続された仮想バネ及び中間点Ｐ２に接続された仮想バネが、それぞれ中間点Ｐ１に作用していた力を表している。力Ｆ０１は、前回の垂直帰線割込時の基部位置Ｐ０と前回の垂直帰線割込時の中間点Ｐ１の位置との距離をｘ、仮想バネのバネ定数をｋ、基部位置Ｐ０に接続された仮想バネによる前回の垂直帰線割込時の中間点Ｐ１の加速度をα０１とすると、Ｆ０１＝−ｋｘ＝ｍα０１として求めることができる。質量ｍ＝１とすると、加速度α０１はα０１＝−ｋｘとなる。同様に、力Ｆ０２は、Ｆ０２＝−ｋｘ＝ｍα０２として求めることができる。なお、α０２は中間点Ｐ２に接続された仮想バネによる前回の垂直帰線割込時の中間点Ｐ１の加速度を表している。従って、前回の垂直帰線割込時に中間点Ｐｍに働いていた加速度αｔ−１は、αｔ−１＝α０１＋α０２で求めることができる。中間点Ｐ１は、この加速度αｔ−１の方向に移動する。このように、前回の垂直帰線割込時の加速度、速度、位置を用いて中間点Ｐ１を含む各中間点の演算するのは、基部位置Ｐ０から中間点Ｐ１、Ｐ２、・・・、Ｐ４方向、及び、先端位置Ｐ５から中間点Ｐ４、Ｐ３、・・・、Ｐ１方向への双方向に、基部位置Ｐ０、先端位置Ｐ５の位置の変動が１／６０秒毎に仮想バネを介して順に隣りの中間点に伝達される様子を描画するためである。
【００７４】
ステップ３４０では、前回の垂直帰線割込時に中間点Ｐ１、Ｐ２、Ｐ２’、Ｐ３、Ｐ４（以下、これらの中間点を総称するときは中間点Ｐｍという。）に働いていた加速度αｔ−１、速度Ｖｔ−１及び前回の垂直帰線割込時の中間点Ｐｍの位置Ｐｔ−１を読み出して、中間点Ｐｍの現在位置Ｐｔを演算する。現在の中間点Ｐｔの位置は、現在の中間点Ｐｍの速度をＶｔ（＝Ｖｔ−１＋αｔ−１・δｔ）とすると、Ｐｔ＝Ｐｔ−１＋Ｖｔ−１・δｔで与えられる。
【００７５】
次のステップ３４２では、図３０（Ｃ）に示すように、中間点Ｐｍの現在位置Ｐｔで働く力Ｆｔから加速度αｔ及び速度Ｖｔを演算し、現在位置Ｐｔと共にＲＡＭに記憶して、次回の垂直帰線割込時のステップ３４０での演算に備える。次いでステップ３４４では、ステップ３３６、３３８、３４０で演算した基部位置Ｐ０、先端位置Ｐ５、中間点Ｐｍで表されるベジエ曲線を演算し、次のステップ３４６でベジエ曲線上に触手ボールＴＢを配置して触手ボール処理サブルーチンを終了し図５のステップ１２２へ進む。なお、触手ボールＴＢの太さ（直径）は予め定められており、触手ボールＴＢに仮想バネの概念を導入したことで、触手ボールＴＢは伸縮（基部位置Ｐ０、先端位置Ｐ５、中間点Ｐｍ間の距離が変動）することとなる。このため、本例では、触手ボールＴＢは、触手ボールの伸縮に反比例するように触手ボールＴＢの基部位置Ｐ０、先端位置Ｐ５、中間点Ｐｍ間で太さが変更される。
【００７６】
図１３に示すように、弾丸ボール処理サブルーチンでは、弾丸ボールＢＢの方向ベクトルが０（図６のステップ１６４参照）か否かを判断し、否定判断のときは、弾丸ボール処理サブルーチンを終了して図５のステップ１２２へ進み、肯定判断のときは、ステップ３５４で弾丸ボールカウンタｂｂｃを１インクリメントし、次のステップ３５６において、弾丸ボールカウンタｂｂｃが１８０か否かを判断する。なお、弾丸ボールカウンタｂｂｃが１８０となるのは、弾丸ボール方向ベクトルが０となってから、１８０×１／６０＝３（秒）後である。
【００７７】
肯定判断のときは、次のステップ３５８で、ノード所属ボールＮＢに命中後の弾丸ボールＢＢの位置を演算する。なお、命中前の弾丸ボールＢＢの位置は図６のステップ１４８、１５０で演算済みである。図３２（Ａ）に示すように、弾丸ボールＢＢは、ノード所属ボールＮＢに命中すると、方向ベクトルが０となるため、命中点Ｈを弾丸ボールＢＢの中心としてノード所属ボールＢＢに食い込んだ状態で静止するが、命中したノード所属ボールＢＢは、所属するノードＮの位置がフレーム毎に更新されるため、グローバル座標上で移動するので、結果として弾丸ボールＢＢもグローバル座標上で移動することになる。このため、ステップ３５８では、ステップ１６４で命中したノード所属ボールＮＢの中心を０とした命中点Ｈの座標系（ｘ，ｙ，ｚ）を予め演算しておき、その座標系（ｘ，ｙ，ｚ）を用いて、図２８に示すように、命中したノード所属ボールＮＢの中心に対する弾丸ボールＢＢの中心のグローバル座標上での位置（５０，１０，１３０）を演算する。なお、図２８は、ノード所属ボールＮＢの中心を０としたときの命中点Ｈの座標系（ｘ，ｙ，ｚ）を（１，０，０）とした例である。
【００７８】
次のステップ３６０では、後述する、メタボールの外形を演算するときに用いる濃度係数ｍ＿ｆＣｈａｒｇｅを通常での１から−１に変更し、弾丸ボール処理サブルーチンを終了して図５のステップ１２２へ進む。なお、濃度係数ｍ＿ｆＣｈａｒｇｅを−１とすることで、図３１（Ｂ）に示すように、弾丸ボールＢＢは非可視となり、命中したノード所属ボールＮＢの弾丸ボールＢＢが食い込んでいる箇所が穴が空いた状態で描画される。
【００７９】
一方、ステップ３５６で否定判断のときは、ステップ３５８と同様に、弾丸ボールＢＢの位置を演算し、弾丸ボールカウンタｂｂｃが３００か否かを判断し、否定判断のときは、弾丸ボール処理サブルーチンを終了して図５のステップ１２２へ進み、肯定判断のときは、ステップ３６６で弾丸ボール状態フラグｂｂｆｌを０とし、弾丸ボール処理サブルーチンを終了して図５のステップ１２２へ進む。弾丸ボールカウンタｂｂｃが３００となるのは、弾丸ボールＢＢがノード所属ボールＮＢに命中してから５秒後である。従って、弾丸ボールＢＢはノード所属ボールＮＢに命中後３秒間は可視状態で表示され、その後２秒間は非可視状態、すなわち、ノード所属ボールＮＢに穴が空いた状態で表示される。
【００８０】
図１４に示すように、破片ボール処理サブルーチンでは、ステップ３７２で破片ボールカウンタｆｂｃを１インクリメントし、次のステップ３７４において、ｆｂｃが１００かを判断する。肯定判断のときは、ステップ３８０へ進み、否定判断のときは、ステップ３７６において、破片ボールＦＢが発生した位置に、ステップ１６２で演算した破片ボールＦＢの速度ベクトルと破片ボールカウンタｂｂｃと垂直帰線割込の時間（１／６０秒）を掛けた移動距離を加えることで、破片ボールＦＢの現在位置（ｘ，ｙ，ｚ）を演算する。次にステップ３７８では、破片ボールＦＢの位置のｙ成分が０又は０より小さいか否かを判断し、否定判断のときは、破片ボール処理サブルーチンを終了して図５のステップ１２２へ進み、肯定判断のときは、破片ボールＦＢの存在期間（１００／６０秒）が経過したか、又は、地面に到達したので、処理対象の破片ボールＦＢを消滅させ、破片ボール処理サブルーチンを終了して図５のステップ１２２へ進む。なお、本例では、破片ボールＦＢは滴ボールＤＢより小さく存在期間も短いため、ノード所属ボールＮＢの拡散時、崩落時、自然落下時のような、又は、後述する滴ボールの自然落下時のような形状変更処理を欠いている。
【００８１】
図１５に示すように、滴ボール処理サブルーチンでは、ステップ３９２で落下速度を補正する。上述したように、滴ボールＤＢを発生させるノード所属ボールＮＢが予め設定されており、ノード所属ボールＮＢ上の滴ボールＤＢを発生させる発生点（ｘ，ｙ，ｚ）も定められている。グローバル座標上では、図２８に示した行列で滴ボールＤＢの発生点が演算可能である。滴ボールＤＢは自然落下するため、発生時の滴ボールＤＢの位置のｘ成分、ｚ成分をそのまま保持し、ｙ成分について滴ボールＤＢの現在位置を演算すれば、滴ボールＤＢを描画することができる。滴ボールＤＢの落下速度（ｙ成分）は、ステップ２７０の場合と同様に、Ｖｔ＝−ｇ・δｔ＋Ｖｔ−１−Ｃ・Ｖｔ−１・δｔにより演算することができる（図３２（Ａ）参照）。滴ボールＤＢは、自然落下により空気による摩擦抵抗を受ける（Ｃは摩擦抵抗）。この結果、落下速度Ｖｔの最大値は３．１ｍ／ｓとなる（図３２（Ｂ）参照）。
【００８２】
続くステップ３９４では、滴ボールＤＢのスケール情報（形状）を変更する。滴ボールＤＢの発生点でのスケール情報を（１０，２０，１０）、ステップ３９２で演算された現在の落下速度Ｖｔのｙ成分を３（ｍ／ｓ）とすると、落下速度Ｖｔを利用して１０×２０×１０＝（１０×ａ）×（２０×１．１５）×（１０×ａ）を満たすａの絶対値を算出し（ａの絶対値：０．７）、滴ボールＤＢの落下前の体積と落下中との体積とが概ね同じとなるように、滴ボールＤＢのスケールを（１０×０．７，２３，１０×０．７）＝（７，１３，７）として演算する（図３２（Ｂ）参照）。
【００８３】
次いでステップ３９６では、滴ボールＤＢの位置を演算する。滴ボールＤＢの現在位置のｙ成分は、ステップ２７０の場合と同様に、ＰＮ＝Ｐｔ−１＋ＶＳ−１・δｔにより演算することができる。次にステップ３９８では、ステップ３９６で演算した滴ボールＤＢの現在位置のｙ成分ＰＮが０又は０より小さいか否かを判断し、否定判断のときは、滴ボール処理サブルーチンを終了して図５のステップ１２２へ進む。一方、肯定判断のときは、次のステップ４００で滴ボールフラグｄｂｆｌを０とし、滴ボール処理サブルーチンを終了して図５のステップ１２２へ進む。これにより、処理対象の滴ボールＤＢは接地ボールＧＢに到達して消滅し、次の垂直帰線割込時に滴ボールＤＢの発生点で新たな滴ボールが発生する（ステップ２６４）。
【００８４】
従って、メタボール更新処理サブルーチンでは、現在のフレームで存在する全メタボールが、原則的にスケール情報、位置情報、回転情報を含むオブジェクト情報（４行４列の行列）により３次元仮想空間（仮想枠）内に原始的に配置される。なお、上述したように、触手ボールＴＢはベジエ曲線上に配置されるので、４行４列の行列の形式ではないが、ベジエ曲線で特定されるオブジェクト情報により３次元仮想空間内に配置される。
【００８５】
図５のステップ１２２では、３次元仮想空間内に配置されたメタボールの濃度分布を評価点毎に調べる濃度分布処理サブルーチンが実行されるが、濃度分布処理サブルーチンについて触れる前に、本実施形態で用いられるメタボール内部の濃度評価式、評価点及び濃度評価について説明する。
【００８６】
本実施形態では、メタボール内部の濃度ｈ（ｒ）を評価する濃度評価式として下式（３）が用いられる。式（３）において、Ｒはメタボールの半径、ｒはメタボールの基準位置から評価点までの距離、ｍ＿ｆＣｈａｒｇｅは１又は−１をとるメタボールの濃度係数を表している。なお、基準位置とは、メタボールの濃度が１となる位置をいい、例えば、楕球の場合にはその中心位置となる。
【００８７】
【数３】
2004062582.tif 000006
【００８８】
図３３に示すように、式（３）によるメタボールの濃度ｈ（ｒ）は、距離ｒに対して２次関数の特性を有している。式（３）は、ｒ２／Ｒ２＜１のときに用いられるメタボール内部の濃度の評価式であり、図３３から明らかなように、ｒ２／Ｒ２≧１（メタボールの外部）では、濃度ｈ（ｒ）は０となる。
【００８９】
式（３）でメタボールの濃度係数ｍ＿ｆＣｈａｒｇｅが１の場合に、半径１（Ｒ＝１）の２つのメタボール球が一部重なっている（融合している）状態を考えると、図３４（Ａ）に示すように、融合部分に相当する位置に凸部が形成された濃度分布状態となる。図３４（Ｂ）、（Ｃ）に、この濃度分布を真上から見たときの等濃度曲線、閾値が０．８のときの２つのメタボールの融合形状を示す。閾値は、等濃度曲線を指定（特定）するパラメータとして機能する。なお、本実施形態では、メタボール描画ルーチンにおいて閾値を一定値（０．３程度）として用いているため、レンダリング空間にメタボールを再生成すると、メタボールのスケール情報より小さな形状となる。一方、半径１の２つのメタボール球が一部重なっている場合に、一方のメタボール球に濃度係数ｍ＿ｆＣｈａｒｇｅ＝−１を与えると、当該一方のメタボールが非可視となる状態が表現されると共に、その周りの濃度が下がり、他方のメタボール球の融合部分に穴が空いた状態を表現することができる（図３１（Ｂ）参照）。
【００９０】
図３５（Ａ）に示すように、メタボールＭＢは、３次元仮想枠ＩＢ内に配置される。仮想枠ＩＢは、大きさが（Δｘ，Δｙ，Δｚ）の多数のボクセルＶｘに仮想的に分割されている。例えば、仮想枠ＩＢの大きさを（１５０，１５０，１５０）、ｘ，ｙ，ｚ方向にそれぞれ１２０個のボクセルが存在すると、Δｘ，Δｙ，Δｚは、１５０／１２０として求めることができる。各ボクセルＶｘには、ボクセルを識別するためのボクセルインデクスが付与されている。例えば、グローバル座標（０，０，０）に頂点を有するボクセルＶｘ（図３５（Ａ）の紙面手前左下のボクセル）には最小値（１，１，１）のインデクスが付与されており、グローバル座標（１５０，１５０，１５０）に頂点を有するボクセルＶｘ（図３５（Ａ）の紙面奥右上のボクセル）には最大値（ｎｘｍａｘ，ｎｙｍａｘ，ｎｚｍａｘ）のインデクスが付与されている。各ボクセルＶｘの頂点（グリッド）が式（３）による評価の対象となる濃度評価点となる。なお、仮想枠ＩＢの一番外側（仮想枠ＩＢを画定する面）での濃度ｈ（ｒ）は０に設定されている。
【００９１】
次に、本実施形態でメタボールの形状として多用される楕球を例として、濃度評価について上述した式（２）に則して説明する。濃度評価では、（ｒ／Ｒ）２＜１内のすべてのボクセルの頂点に対して、式（３）による濃度ｈ（ｒ）の値を求める必要があり、メタボールでオブジェクトを動的に描画する場合には、濃度ｈ（ｒ）を高速で演算しなければならない。
【００９２】
式（２）において、Ｚを固定したときに、（ｒ／Ｒ）２の最小値を与える（Ｘ，Ｙ）は、下式（４）に示すように、式（２）をＸ，Ｙで偏微分した値を０として求めることができる。また、Ｚ，Ｙを固定したときに、（ｒ／Ｒ）２の最小値を与えるＸは、下式（５）に示すように、式（２）をＸで偏微分した値を０として求めることができる。
【００９３】
【数４】
2004062582.tif 000007
【００９４】
（ｒ／Ｒ）２を各ボクセルに対して評価する場合に、まず、ｚをメタボールの中心のｚ座標ｚ０からｚが大きくなる方向、及び、小さくなる方向に動かしていき、（ｒ／Ｒ）２の最小値を与える（ｘ，ｙ）を式（４）で求め、最小値の（ｒ／Ｒ）２が１又は１を超えたところでｚを動かすのを止める。そのとき、動かすそれぞれのｚに対して（ｒ／Ｒ）２の最小値を与える点からｙが大きくなる方向、及び、小さくなる方向に動かしていき、そのそれぞれのｚ，ｙに対して（ｒ／Ｒ）２の最小値を与えるｘを式（５）で求め、最小値が１を超えたところでｙを動かすのを止める。そして、それぞれのｚ，ｙに対してｘを（ｒ／Ｒ）２の最小値を与える点から大きくなる方向、及び、小さくなる方向に動かしていき、式（２）で（ｒ／Ｒ）２を次々に評価し、（ｒ／Ｒ）２が１を超えたところで評価を終える。この演算は、楕球を表す式（２）のどの断面をとってみても、（ｒ／Ｒ）２の値の中央が最小値となり両側が２次曲線のように単調にせり上がっていく性質を利用したものであり、評価の対象となる楕球の内部を過不足なく高速に評価することができる。ｘについては連続的に変化させて（ｒ／Ｒ）２を評価して行くが、（ｒ／Ｒ）２は二次式のため、隣接点の差分はｘの一次式となる。従って、二階差分までとるようにすれば、一区間の（ｒ／Ｒ）２の計算ループが加減算だけで得ることができる。
【００９５】
図１６に示すように、濃度分布処理サブルーチンでは、ステップ５０２において、処理対象のメタボールの形状情報を読み出す。メタボールの形状には楕球、円柱（カプセル）、円錐台（カプセル）等があり、形状情報にはデフォルト値を用いることができる。なお、図１６の濃度分布処理サブルーチンは、メタボールの形状情報が楕球のときの処理であるが、後述するように、形状情報に応じたメタボールの立体形状を表す計算式により濃度評価が可能である。
【００９６】
次にステップ５０４では、予め設定されたボクセルインデクス（ｎｘ，ｎｙ，ｎｚ）の最小値（１，１，１）及び最大値（ｎｘｍａｘ，ｎｙｍａｘ，ｎｚｍａｘ）を読み出して、メタボールの中心のｚ座標ｚ０からｚが小さくなる方向の計算を開始する。まず、ｚ０／Δｚの商をボクセルインデクスｎｚ０として余りを切り捨てる。従って、ボクセルＶｘの頂点の中間がメタボールＭＢの中心位置となる場合がある。次にステップ５０６では、ｎｚ＝ｎｚ０としてｚ方向のボクセルインデクスを設定する。
【００９７】
次いでステップ５０８では、ｚが小さくなる方向の最初のｚ座標ｚ＝ｎｚ・Δｚ及び（ｒ／Ｒ）２が最小値となる（ｘ，ｙ）の座標を演算する。なお、式（５）に従って、ｘ−ｘ０＝｛（ｄｅ−ｂｆ）／（ａｂ−ｄ２）｝（ｚ−ｚ０）から、本ステップ（及び後述するステップ５２２）における定数項ｃ１は−（ｄｅ−ｂｆ）・ｚ０／（ａｂ−ｄ２）＋ｘ０となり、ｙ−ｙ０＝｛（ｄｆ−ａｅ）／（ａｂ−ｄ２）｝（ｚ−ｚ０）から、定数項ｃ２は−（ｄｆ−ａｅ）・ｚ０／（ａｂ−ｄ２）＋ｙ０となる。次にステップ５１０において、ｎｚがｎｚの最小値（図３５（Ａ）参照）の１以上か否かを判断し、否定判断のときはステップ５２０へ進み、肯定判断のときは、次のステップ５１２で、このときの（ｘ，ｙ，ｚ）での（ｒ／Ｒ）２を式（２）を用いて演算し、ステップ５１４において、（ｒ／Ｒ）２が１以上か否かを判断する。肯定判断のときはステップ５２０へ進み、否定判断のときは、次のステップ５１６においてｙ処理サブルーチンを呼び出す。
【００９８】
図１７に示すように、ｙ処理サブルーチンでは、ステップ５４２で現在のｙ座標からｙ０／Δｙの商をボクセルインデクスｎｙ０として余りを切り捨てて、ステップ５４４で現在のｙ座標からボクセルインデクスｎｙをｎｙ０として設定し、次のステップ５４６でｙが小さくなる方向の最初のｙ座標ｙ＝ｎｙ・Δｙを演算する。次にステップ５４８で（ｒ／Ｒ）２が最小値となるｘを演算する。なお、上述した式（５）に従って、（ｘ−ｘ０）＝−｛ｄ（ｙ−ｙ０）＋ｆ（ｚ−ｚ０）｝／ａから、本ステップ（及び後述するステップ５６４）における定数項ｃ３は（ｄｙ０＋ｆｚ０）／ａ＋ｘ０となる。次にステップ５５０において、ｎｙがｎｙの最小値の１以上か否かを判断し、否定判断のときはステップ５６０へ進み、肯定判断のときは、次のステップ５５２で、このときの（ｘ，ｙ，ｚ）での（ｒ／Ｒ）２を式（２）を用いて演算し、ステップ５５４において、（ｒ／Ｒ）２が１以上か否かを判断する。肯定判断のときはステップ５６０へ進み、否定判断のときは、次のステップ５５６においてｘ処理サブルーチンを呼び出す。
【００９９】
図１８に示すように、ｘ処理サブルーチンでは、ステップ６０２で現在のｘ座標からｘ０／Δｘの商をボクセルインデクスｎｘ０として余りを切り捨てて、ステップ６０４で現在のｘ座標からボクセルインデクスｎｘをｎｘ０として設定すると共に、ｘが小さくなる方向の最初のｘ座標ｘ＝ｎｘ・Δｘを演算する。次にステップ６０６で書き込みポインタを現在の（ｎｘ，ｎｙ，ｎｚ）に合わせ、ステップ６０８でこのときの（ｘ，ｙ，ｚ）での（ｒ／Ｒ）２を演算し、次のステップ６１０でｘがΔｘ減少した場合の（ｒ／Ｒ）２の差分Δ（ｒ／Ｒ）２及び２階差分Δ２（ｒ／Ｒ）２を演算する。
【０１００】
式（２）をＸについてみれば、（ｒ／Ｒ）２＝ａＸ２＋２（ｄＹ＋ｆＺ）Ｘ＋Ｃ（Ｃは定数）の形で表すことができる。ＸがΔｘ減少した場合の差分Δ（ｒ／Ｒ）２は、Δ（ｒ／Ｒ）２＝（ｒ／Ｒ）２（Ｘ−Δｘ）−（ｒ／Ｒ）２（Ｘ）＝ａ（Ｘ−Δｘ）２＋２（ｄＹ＋ｆＺ）（Ｘ−Δｘ）＋Ｃ−｛ａＸ２＋２（ｄＹ＋ｆＺ）Ｘ＋Ｃ｝により、Δ（ｒ／Ｒ）２＝｛（２ａ（−Δｘ）｝ｘ＋｛ａ（−Δｘ）＋２（ｄｙ＋ｆｚ）｝（−Δｘ）＋ｃ４として求めることができる。なお、定数項ｃ４は−２（ａｘ０＋ｄｙ０＋ｆｚ０）（−Δｘ）となる。同様に、ｘがΔｘ減少した場合の（ｒ／Ｒ）２の２階差分Δ２（ｒ／Ｒ）２は２ａ（−Δｘ）２となる。
【０１０１】
次にステップ６１２において、ｎｘがｎｘの最小値の１以上か否かを判断し、否定判断のときはステップ６２０へ進み、肯定判断のときは、次のステップ６１４で（ｒ／Ｒ）２が１より小さいか否かを判断する。否定判断のときはステップ６２０へ進み、肯定判断のときは、ステップ６１６で、（ｎｘ，ｎｙ，ｎｚ）のボクセルに対応するＲＡＭの位置に（ｒ／Ｒ）２から求めたメタボールの濃度ｈ（ｒ）を書き込んで、次のステップ６１８で書き込みポインタを１デクリメントしてステップ６１２へ戻る。このとき、ｎｘ＝ｎｘ−１、（ｒ／Ｒ）２＝（ｒ／Ｒ）２＋Δ（ｒ／Ｒ）２、Δ（ｒ／Ｒ）２＝Δ（ｒ／Ｒ）２＋Δ２（ｒ／Ｒ）２として演算が行われる。すなわち、ステップ６１０で（ｒ／Ｒ）２の１階差分、２階差分を求めているので、ｎｘが減少する毎に２階差分と前回の１階差分から、１階差分を更新して（ｒ／Ｒ）２を演算することができる。
【０１０２】
ステップ６２０では、ボクセルインデクスｎｘをｎｘ０＋１として設定すると共に、ｘが大きくなる方向の最初のｘ座標ｘ＝ｎｘ・Δｘを演算し、ステップ６２２で書き込みポインタを現在の（ｎｘ，ｎｙ，ｎｚ）に合わせ、ステップ６２４でこのときの（ｘ，ｙ，ｚ）での（ｒ／Ｒ）２を式（２）を用いて演算し、次のステップ６２６で、ステップ６１０と同様に、ｘがΔｘ増加した場合の（ｒ／Ｒ）２の差分Δ（ｒ／Ｒ）２及び２階差分Δ２（ｒ／Ｒ）２を演算する。Δ（ｒ／Ｒ）２は２ａ（Δｘ）ｘ＋｛ａΔｘ＋２（ｄｙ−ｆｚ）｝Δｘ＋ｃ５、Δ２（ｒ／Ｒ）２は２ａ（Δｘ）２として求めることができる。なお、定数項ｃ５は−２（ａｘ０＋ｄｙ０＋ｆｚ０）Δｘとなる。
【０１０３】
次にステップ６２８において、ｎｘがｎｘの最大値ｎｘｍａｘ（図３５（Ａ）参照）より小さいか否かを判断し、肯定判断のときは、次のステップ６３０において、（ｒ／Ｒ）２が１より小さいか否かを判断する。肯定判断のときは、ステップ６３２において、（ｎｘ，ｎｙ，ｎｚ）のボクセルに対応するメモリ（ＲＡＭ）の位置に（ｒ／Ｒ）２から求めたメタボールの濃度ｈ（ｒ）を書き込んで、次のステップ６３４で書き込みポインタを１インクリメントしてステップ６２８へ戻る。これにより、ｎｘ＝ｎｘ＋１、（ｒ／Ｒ）２＝（ｒ／Ｒ）２＋Δ（ｒ／Ｒ）２、Δ（ｒ／Ｒ）２＝Δ（ｒ／Ｒ）２＋Δ２（ｒ／Ｒ）２として演算が行われる。すなわち、ステップ６２６で（ｒ／Ｒ）２の１階差分、２階差分を求めているので、ｎｘが増加する毎に２階差分と前回の１階差分から、１階差分を更新して（ｒ／Ｒ）２を演算することができる。ステップ６２８又はステップ６３０で否定判断のときは、ｘ処理サブルーチンを終了して図１７のステップ５５８（又は、後述するステップ５７４）へ進む。
【０１０４】
ステップ５５８では、ｎｙを１デクリメントして（ｎｙ＝ｎｙ−１）、ステップ５５０へ戻る。これにより、ｙ、ｘ（ステップ５４６、５４８参照）を、それぞれ、ｙ＝ｙ−Δｙ、ｘ＝ｘ−（−ｄ／ａ）Δｙとして演算が実行される。
【０１０５】
ステップ５６０では、ｙ方向のボクセルインデクスｎｙをｎｙ０＋１として設定し、ステップ５６２でｙが大きくなる方向の最初のｙ座標ｙ＝ｎｙ・Δｙを演算し、次のステップ５６４において、ステップ５４８と同様に、（ｒ／Ｒ）２が最小値となるｘを演算する。
【０１０６】
次にステップ５６６において、ｎｙがｎｙの最大値ｎｙｍａｘより小さいか否かを判断し、肯定判断のときは、ステップ５６８でこのときの（ｘ，ｙ，ｚ）での（ｒ／Ｒ）２を式（２）を用いて演算し、次のステップ５７０において、（ｒ／Ｒ）２が１以上か否かを判断する。否定判断のときは、ステップ５７２において、上述したｘ処理サブルーチンを呼び出して実行し、ステップ５７４でｎｙを１インクリメントして（ｎｙ＝ｎｙ＋１）、ステップ５６６へ戻る。このとき、ｙ、ｘ（ステップ５６２、５６４参照）を、それぞれ、ｙ＝ｙ＋Δｙ、ｘ＝ｘ＋（−ｄ／ａ）Δｙとして演算が実行される。ステップ５６６で否定判断のとき、又は、ステップ５７０で肯定判断のときは、ｙ処理サブルーチンを終了して図１６のステップ５１８（又は、後述するステップ５３２）へ進む。
【０１０７】
ステップ５１８では、ｎｚを１デクリメントして（ｎｚ＝ｎｚ−１）、ステップ５１０へ戻る。これにより、ｚはΔｚデクリメントされ（ｚ＝ｚ−Δｚ）、ｘ、ｙは、それぞれ、ｘ−｛（ｄｅ−ｂｆ）／（ａｂ−ｄ２）｝Δｚ、ｙ−｛（ｄｆ−ａｅ）／（ａｂ−ｄ２）｝Δｚとして演算が実行される。
【０１０８】
ステップ５２０では、ｚ方向のボクセルインデクスｎｚをｎｚ０＋１として設定し、ステップ５２２でｚが大きくなる方向の最初のｚ座標ｚ＝ｎｚ・Δｚ、及び、ステップ５０８と同様に、（ｒ／Ｒ）２が最小値となるｘ，ｙの座標を演算する。次にステップ５２４において、ｎｚがｎｚの最大値ｎｚｍａｘより小さいか否かを判断し、肯定判断のときは、ステップ５２６でこのときの（ｘ，ｙ，ｚ）での（ｒ／Ｒ）２を式（２）を用いて演算し、次のステップ５２８において、（ｒ／Ｒ）２が１以上か否かを判断する。否定判断のときは、次のステップ５３０において、上述したｙ処理サブルーチンを呼び出して実行し、ステップ５３２でｎｚを１インクリメントして（ｎｚ＝ｎｚ＋１）、ステップ５２４へ戻る。このとき、ｚはΔｚインクリメントされ（ｚ＝ｚ＋Δｚ）、ｘ、ｙは、それぞれ、ｘ＋｛（ｄｅ−ｂｆ）／（ａｂ−ｄ２）｝Δｚ、ｙ＋｛（ｄｆ−ａｅ）／（ａｂ−ｄ２）｝Δｚとして演算が実行される。ステップ５２４で否定判断のとき、又は、ステップ５２８で肯定判断のときは、濃度分布処理サブルーチンを終了して図５のステップ１１８へ進む。
【０１０９】
上述したように、メタボールＭＢは、楕球以外に種々の形状を採る。図３６（Ａ）に示すように、メタボールＭＢがＰ０（ｘ０，ｙ０，ｚ０）、Ｐ１（ｘ１，ｙ１，ｚ１）を端点とし両端が半球状に丸められた半径Ｒの円柱のときには、直線Ｐ０Ｐ１上の点をＰｔ（ｘｔ，ｙｔ，ｚｔ）とすると（ｔ：媒介変数）、点ＰｔはＰｔ＝Ｐ０＋ｖｅｃ（Ｖ０１）ｔと表すことができる。ここで、ｖｅｃ（Ｖ０１）≡Ｐ１−Ｐ０であり、ｖｅｃ（Ｖ０１）はベクトルＶ０１を表している。任意の点Ｐ（ｘ，ｙ，ｚ）から直線Ｐ０Ｐ１に降ろした垂線の足は、ｔ＝ｖｅｃ（Ｖ０１）・ｖｅｃ（Ｖ０Ｐ）／｛ｖｅｃ（Ｖ０１）｝２としたときのＰｔ上の点となる。このとき、直線Ｐ０Ｐ１からの距離ｒは、ｒ２＝［｛ｖｅｃ（Ｖ０１）｝２・｛ｖｅｃ（Ｖ０Ｐ）｝２−（｛ｖｅｃ（Ｖ０１）・ｖｅｃ（Ｖ０Ｐ）｝２］／｛ｖｅｃ（Ｖ０１）｝２となる。ここで、ｖｅｃ（Ｖ０Ｐ）≡Ｐ−Ｐ０である。実際には直線でなく線分Ｐ０Ｐ１が対象なので、媒介変数ｔがｔ≦０のときは、ｒ２＝｛ｖｅｃ（Ｖ０Ｐ）｝２、ｔ≧１のときは、ｒ２＝｛ｖｅｃ（Ｖ１Ｐ）｝２となる（図３６（Ｂ）参照）。従って、基準位置は中心線となる。
【０１１０】
以上を纏めると、ｖｅｃ（Ｖ０１）・ｖｅｃ（Ｖ０Ｐ）≦０（図３６（Ｂ）のａ部）ではｒ２＝｛ｖｅｃ（Ｖ０Ｐ）｝２、０＜ｖｅｃ（Ｖ０１）・ｖｅｃ（Ｖ０Ｐ）＜｛ｖｅｃ（Ｖ０１）｝２（図３６（Ｂ）のｂ部）ではｒ２＝［｛ｖｅｃ（Ｖ０１）｝２・｛ｖｅｃ（Ｖ０Ｐ）｝２−（｛ｖｅｃ（Ｖ０１）・ｖｅｃ（Ｖ０Ｐ）｝２］／｛ｖｅｃ（Ｖ０１）｝２、ｖｅｃ（Ｖ０１）・ｖｅｃ（Ｖ０Ｐ）≧｛ｖｅｃ（Ｖ０１）｝２（図３６（Ｂ）のｃ部）ではｒ２＝｛ｖｅｃ（Ｖ１Ｐ）｝２となる。なお、ｖｅｃ（Ｖ１Ｐ）≡Ｐ−Ｐ１である。
【０１１１】
一般性を失わないので、以下、ｚ１≧ｚ０と仮定すると、ｚを固定したときにｒ２の最小値を与える（ｘ，ｙ）は、ｒ２をｘ，ｙで偏微分した値が０となる点で得ることができるが、直感的にも明らかなように、ｚ≦ｚ０では（ｘ，ｙ）＝（ｘ０，ｙ０）、ｚ０＜ｚ＜ｚ１では（ｘ，ｙ）＝（｛（ｘ１−ｘ０）（ｚ−ｚ０）／（ｚ１−ｚ０）｝＋ｘ０，｛（ｙ１−ｙ０）（ｚ−ｚ０）／（ｚ１−ｚ０）｝＋ｙ０）、ｚ≧ｚ０では（ｘ，ｙ）＝（ｘ１，ｙ１）となる。
【０１１２】
ｚ，ｙを固定したときにｒ２の最小値を与えるｘは、ｒ２をｘで偏微分した値が０となる点で得ることができる。ここで式の簡略化のためにＰ０相対の変数、（Ｘ１，Ｙ１，Ｚ１）＝（ｘ１−ｘ０，ｙ１−ｙ０，ｚ１−ｚ０）、（Ｘ，Ｙ，Ｚ）＝（ｘ−ｘ０，ｙ−ｙ０，ｚ−ｚ０）を導入し、ｒ２をｘで偏微分すると、ｖｅｃ（Ｖ０１）・ｖｅｃ（Ｖ０Ｐ）≦０では∂ｒ２／∂ｘ＝２Ｘ、０＜ｖｅｃ（Ｖ０１）・ｖｅｃ（Ｖ０Ｐ）＜｛ｖｅｃ（Ｖ０１）｝２では∂ｒ２／∂ｘ＝｛２（Ｙ１２＋Ｚ１２）Ｘ−２Ｘ１（Ｙ１Ｙ＋Ｚ１Ｚ）｝／（Ｘ１２＋Ｙ１２＋Ｚ１２）、ｖｅｃ（Ｖ０１）・ｖｅｃ（Ｖ０Ｐ）≧｛ｖｅｃ（Ｖ０１）｝２では∂ｒ２／∂ｘ＝２（Ｘ−Ｘ１）となる。
【０１１３】
これにより、求めるＸは、（Ｙ１Ｙ＋Ｚ１Ｚ）≦０のときＸ＝０、０＜（Ｙ１Ｙ＋Ｚ１Ｚ）＜（Ｙ１２＋Ｚ１２）のときＸ＝Ｘ１（Ｙ１Ｙ＋Ｚ１Ｚ）／（Ｙ１２＋Ｚ１２）、（Ｙ１Ｙ＋Ｚ１Ｚ）≧（Ｙ１２＋Ｚ１２）のときＸ＝Ｘ１となる。
【０１１４】
実際の濃度評価のときに、問題としているｒ２はどの断面をとっても最小となる箇所が一カ所で（区間となる場合もある）、周囲は単調にせり上がっていく性質を持っているので、最小となる点から計算を始めて周囲に計算を進めてｒ２≧Ｒ２となる点で計算を終えるようにすれば、メタボールＭＢの内部を過不足なく計算できる。具体的には、まずｚは（ｚ０−Ｒ）≦ｚ≦（ｚ１＋Ｒ）がとり得る範囲のため、そのそれぞれのｚに対してｒ２が最小となる（ｘ，ｙ）を求める。次に、ｙを周囲に動かしていきｒ２の最小値を与えるｘを求める。その際のｒ２がｒ２≧Ｒ２になれば、ｙを動かすのを止める。そして、それぞれのｙに対してｘを周囲に動かしていき、ｒ２≧Ｒ２となる点まで計算する。ｒ２は展開すれば判るように場合分けのそれぞれについて高々２次のため、ｘが隣接する点での差分は高々ｘの１次となる。従って、差分の差分までとるようにすれば、連続するｘの区間のｒ２の計算ループを加減算だけで組み立てることができる。また、場合分けの分岐となるｖｅｃ（Ｖ０１）・ｖｅｃ（Ｖ０Ｐ）は展開すると高々ｘの１次式のため、これもｘが隣接する点での差分は定数となるので、同様に扱う。場合分けの遷移は、ｖｅｃ（Ｖ０１）・ｖｅｃ（Ｖ０Ｐ）のｘの符号と動かす方向によって、ｖｅｃ（Ｖ０１）・ｖｅｃ（Ｖ０Ｐ）≦０→０＜ｖｅｃ（Ｖ０１）・ｖｅｃ（Ｖ０Ｐ）＜｛ｖｅｃ（Ｖ０１）｝２→ｖｅｃ（Ｖ０１）・ｖｅｃ（Ｖ０Ｐ）≧｛ｖｅｃ（Ｖ０１）｝２、及び、ｖｅｃ（Ｖ０１）・ｖｅｃ（Ｖ０Ｐ）≧｛ｖｅｃ（Ｖ０１）｝２→０＜ｖｅｃ（Ｖ０１）・ｖｅｃ（Ｖ０Ｐ）＜｛ｖｅｃ（Ｖ０１）｝２→ｖｅｃ（Ｖ０１）・ｖｅｃ（Ｖ０Ｐ）≦０、のいずれかに決まるので、場合分けはそれほど増えないことが判る。
【０１１５】
また、図３６（Ｃ）に示すように、メタボールＭＢがＰ０（ｘ０，ｙ０，ｚ０）、Ｐ１（ｘ１，ｙ１，ｚ１）を端点とし、点Ｐ０からの半径Ｒ０、点Ｐ１からの半径Ｒ１で、両端が球状に丸められた円錐台のときには、直線Ｐ０Ｐ１上の点をＰｔ（ｘｔ，ｙｔ，ｚｔ）とすると（ｔ：媒介変数）、点ＰｔはＰｔ＝Ｐ０＋ｖｅｃ（Ｖ０１）ｔと表すことができる。なお、ｖｅｃ（Ｖ０１）≡Ｐ１−Ｐ０である。ここで、任意の点Ｐ（ｘ，ｙ，ｚ）とＰｔとの距離に関する関数Ｒ２を、媒介変数ｔを用いて、Ｒ２＝（Ｐ−Ｐｔ）２／｛（Ｒ１−Ｒ０）ｔ＋Ｒ０｝２の様に考える。これを最小化する媒介変数ｔは、Ｋ≡Ｒ０／（Ｒ１−Ｒ０）、ｖｅｃ（Ｖ０１）≡（Ｐ１−Ｐ０）、ｖｅｃ（Ｖ０Ｐ）≡（Ｐ−Ｐ０）とすると、ｔ＝｛Ｋｖｅｃ（Ｖ０１）＋ｖｅｃ（Ｖ０Ｐ）｝・ｖｅｃ（Ｖ０Ｐ）／｛（Ｋｖｅｃ（Ｖ０１）＋ｖｅｃ（Ｖ０Ｐ）｝・ｖｅｃ（Ｖ０１）となる。
【０１１６】
両端の球に接する円錐の頂点をＰＦ（ｘＦ，ｙＦ，ｚＦ）とすると、簡単な計算により、ＰＦ＝−｛Ｒ０／（Ｒ１−Ｒ０）｝ｖｅｃ（Ｖ０１）＋Ｐ０となることが分かる。ここで、ｖｅｃ（ＶＦ０）≡Ｐ０−ＰＦ，ｖｅｃ（ＶＦＰ）≡Ｐ−ＰＦ等とすると、媒介変数ｔは、ｔ＝｛ｖｅｃ（ＶＦ０）＋ｖｅｃ（Ｖ０Ｐ）｝・ｖｅｃ（Ｖ０Ｐ）／｛ｖｅｃ（ＶＦ０）＋ｖｅｃ（Ｖ０Ｐ）｝・ｖｅｃ（Ｖ０１）＝ｖｅｃ（ＶＦＰ）・ｖｅｃ（Ｖ０Ｐ）／ｖｅｃ（ＶＦＰ）・ｖｅｃ（Ｖ０１）となる。このとき、Ｒ２は、Ｒ２＝（１／Ｒ０２）［｛ｖｅｃ（ＶＦ０）｝２−｛ｖｅｃ（ＶＦＰ）・ｖｅｃ（ＶＦ０）｝２／｛ｖｅｃ（ＶＦＰ）｝２＝｛ｖｅｃ（Ｖ０Ｐ）×ｖｅｃ（Ｖ０１）｝２／（Ｒ１−Ｒ０）２｛ｖｅｃ（ＶＦＰ）｝２となる。なお、「×」は外積を表している。両端が丸められた部分については、ｔ≦０ではＲ２＝｛ｖｅｃ（Ｖ０Ｐ）｝２／Ｒ０２、ｔ≧１ではＲ２＝｛ｖｅｃ（Ｖ１Ｐ）｝２／Ｒ１２となる。
【０１１７】
以上を纏めると、ｔ≦０ではＲ２＝｛ｖｅｃ（Ｖ０Ｐ）｝２／Ｒ０２、０＜ｔ＜１ではＲ２＝｛ｖｅｃ（Ｖ０Ｐ）×ｖｅｃ（Ｖ０１）｝２／（Ｒ１−Ｒ０）２｛ｖｅｃ（ＶＦＰ）｝２、ｔ≧１ではＲ２＝｛ｖｅｃ（Ｖ１Ｐ）｝２／Ｒ１２となる。Ｒ２が定数となる曲面が求める形状となる。
【０１１８】
一般性を失わないので、以下、ｚ１≧ｚ０と仮定すると、ｚを固定したときにｒ２の最小値を与える（ｘ，ｙ）は、Ｒ２をｘ，ｙで偏微分した値が０となる点で得ることができるが、直感的にも明らかなように、ｚ≦ｚ０又はｚ≧ｚ１では、（ｚ−ｚ０）２／Ｒ０２≦（ｚ−ｚ１）２／Ｒ１２のときに（ｘ，ｙ）＝（ｘ０，ｙ０）、（ｚ−ｚ０）２／Ｒ０２＞（ｚ−ｚ１）２／Ｒ１２のときに（ｘ，ｙ）＝（ｘ１，ｙ１）となり、ｚ０＜ｚ＜ｚ１では、（ｘ，ｙ）＝（｛（ｘ１−ｘ０）（ｚ−ｚ０）／（ｚ１−ｚ０）｝＋ｘ０，｛（ｙ１−ｙ０）（ｚ−ｚ０）／（ｚ１−ｚ０）｝＋ｙ０）となる。
【０１１９】
ｚ，ｙを固定したときにＲ２の最小値を与えるｘは、Ｒ２をｘで偏微分した値が０となる点で得ることができるが、計算の詳細は省略するが、ｔ≦０又はｔ≧１では、（Ｙ０Ｐ２＋Ｚ０Ｐ２）／Ｒ０２≦（Ｙ１Ｐ２＋Ｚ１Ｐ２）／Ｒ１２のときにｘ＝ｘ０、（Ｙ０Ｐ２＋Ｚ０Ｐ２）／Ｒ０２＞（Ｙ１Ｐ２＋Ｚ１Ｐ２）／Ｒ１２のときにｘ＝ｘ１となり、０＜ｔ＜１では、ｘ＝｛（ＹＦＰＹＦＰ＋ＺＦＰＺＦＰ）ＸＦ０／（ＹＦＰＹＦ０＋ＺＦＰＺＦ０）｝＋ｘＦとなる。ここで、Ｙ０Ｐ≡ｙ−ｙ０、Ｙ１Ｐ≡ｙ−ｙ１、ＹＦＰ≡ｙ−ｙＦ、ＹＦ０≡ｙ０−ｙＦ等である（Ｚ＊＊についても同様。）。
【０１２０】
実際の濃度評価のときに、問題としているＲ２はどの断面をとっても最小となる場所が一カ所で（区間になる場合もある）周囲は単調にせり上がっていく性質を持っているので、最小となる点から計算を始めて周囲に計算を進めてＲ２≧１となる点で計算を終えるようにすれば、メタボールＭＢの内部を過不足なく計算できる。具体的には、まずｚはｍｉｎ（ｚ０−Ｒ０，ｚ１−Ｒ１）≦ｚ≦ｍａｘ（ｚ０＋Ｒ０，ｚ１＋Ｒ１）がとり得る範囲のため、そのそれぞれのｚに対してＲ２が最小となる（ｘ，ｙ）を求める。次にｙを周囲に動かしていき、Ｒ２の最小値を与えるｘを求める。その際のＲ２がＲ２≧１になれば、ｙを動かすのを止める。そして、それぞれのｙに対してｘを周囲に動かしていき、Ｒ２≧１となる点まで計算する。Ｒ２は展開すれば判るように端球の部分についてはｘの２次であり、ｘが隣接する点での差分は高々ｘの１次になる。従って、差分の差分までとるようにすれば、連続するｘの区間のＲ２の計算ループが加減算だけで組み立てることができる。
【０１２１】
円錐台の部分については、（ｘの高々２次）／（ｘの高々２次）の形なので、分母、分子についてそれぞれ２回差分までとれば、連続するｘの区間のｒ２の計算ループが除算一回以外は加減算だけで組み立てることができる。また、場合分けの目安となる媒介点数ｔであるが、展開すると（ｘの高々２次）／（ｘの高々１次）の形をしている。ｔと０，１との比較をすれば良いだけなので、分母を払って考えれば、分母と分子と０の間の大小比較だけで場合分けができることが判る。従って、分母については、差分、分子については２回差分までとるようにすれば、連続するｘの区間の場合分けの変化については加減算と大小比較だけで組み立てることができる。このように、濃度分布処理サブルーチンでは、仮想枠ＩＢ内に配置されたメタボールの立体形状に従って濃度が演算される。
【０１２２】
ステップ１１８で肯定判断のときは、ステップ１２４で、各ボクセルＶｘの頂点（評価点）での濃度が閾値より上か下かを調べていき、閾値が一定となる点の集合（等濃度面）をポリゴンで表現するためのマーチンキューブ処理を実行する。すなわち、マーチンキューブ処理では、濃度ｈ（ｒ）が一定の値（閾値）となる点の集合（等濃度面）をポリゴンで表現することを考え、この等濃度面を最終的に表現したい（再生成される）メタボールＭＢの形状と定義する。なお、図３５（Ｂ）に示すように、仮想枠ＩＢには、メタボールＭＢで構成されたキャラクタｃ全体が入っている。仮想枠ＩＢの中心は、例えば、キャラクタｃのヘソであっても足元であってもよいが、キャラクタｃの移動に追随して移動し、仮想枠ＩＢの大きさは、キャラクタｃ全体が入れば、キャラクタｃの上下左右の外径に接触している必要はない。
【０１２３】
図１９に示すように、マーチンキューブ処理サブルーチンでは、ステップ７０２で上述したボクセルインデクスを用いて全ボクセルＶｘについて処理が終了したか否かを判断する。すなわち、図３５（Ｂ）に示すように、紙面手前左下のボクセルから調べていき、紙面奥右上のボクセルについて処理が終了したか否かを判断する。
【０１２４】
否定判断のときは、ステップ７０４で、閾値により対象ボクセルの頂点のオン・オフを検出する。すなわち、対象ボクセルとメタボールＭＢとがどのように交差するかを調べるために、対象ボクセルの８つの頂点について、頂点の濃度ｈ（ｒ）が閾値より高い（メタボールＭＢの内側）ときにオンとし、頂点の濃度ｈ（ｒ）が閾値より低い（メタボールＭＢの外側）ときにオフとして検出する。本ステップでは、ボクセルＶｘを順に検出していくので、新たに調べる必要がある頂点は３つだけとなる。上述したように、仮想枠ＩＢの一番外側は濃度が０に設定されているため、たとえ、（１，１，１）のボクセルＶｘを調べるときでも、３つの頂点を調べれば十分である。図３７は、図３５（Ｂ）に示すボクセルＶｘが対象ボクセルのときに、当該ボクセルの頂点等を示したものである。なお、対象ボクセルの各頂点の濃度ｈ（ｒ）は、キャラクタｃの動作等に伴ってフレーム毎に変化し、既に演算済みである（図１８のステップ６１６、６３２）。
【０１２５】
次にステップ７０６では、ポリゴンの頂点を生成する辺を検出する。すなわち、ボクセルとメタボールＭＢとが交差する辺（図３７の点ａ、ｂ、ｃ、ｄを含む辺）を求める。ボクセルには、８つの頂点があるので、各頂点のオン／オフの組み合わせは２８＝２５６通りである。例えば、各頂点に番号を振り、その頂点番号を２の指数部分と決めておいて、オンの頂点分だけ加算したインデクスを考えれば、図３７に示す場合のインデクスは、２１＋２３＋２５＋２７＝１７０となる。インデクスは０から２５５までの値となるので、２５６組みの等濃度面のデータで構成されるデータテーブルが予め用意されている。このデータテーブルには、１組の等濃度面のデータにつき、▲１▼ポリゴン頂点が生成されるボクセルの辺、▲２▼そのポリゴン頂点をどのように結んで等濃度を形成するか、が記録されている。例えば、図３７に則して説明すれば、頂点ＡＰ０−ＡＰ１間を辺０、頂点ＡＰ２−ＡＰ３間を辺１、頂点ＡＰ４−ＡＰ５間を辺２、頂点ＡＰ６−ＡＰ７間を辺３とすると、データテーブルの（インデクス＋１）番目に、上記▲１▼の部分には｛辺０、辺１、辺２、辺３｝の４つが記録されており、上記▲２▼の部分には｛辺０、辺１、辺２｝の３つ及び｛辺１、辺２、辺３｝の３つが記録されている。３点が決まれば、ポリゴン面が生成できるので、｛辺０、辺１、辺２｝で１つの等濃度面ができ、｛辺１、辺２、辺３｝で１つの等濃度面ができる。ただし、この段階では、ポリゴン面を形成する辺は特定されているが、未だ辺上の点ａ、ｂ、ｃ、ｄの位置は特定されていない。
【０１２６】
次にステップ７０８では、ステップ７０６で特定された辺と、対象ボクセルの頂点の濃度ｈ（ｒ）から、対象ボクセルとメタボールＭＢとが交差する点の座標を演算する。例えば、辺０上の点ａの座標について詳述すれば、図３８に示すように、頂点ＡＰ１の濃度値と頂点ＡＰ０の濃度値とを線型に近似して閾値に対応する箇所を点ａの位置とする。なお、頂点ＡＰ０、ＡＰ１等の濃度ｈ（ｒ）はキャラクタｃの動きに伴ってフレーム毎に変化するので、各ボクセルの頂点の濃度ｈ（ｒ）は変動し、図３８の傾きが変わり点ａ等の位置も変動する。このように、ステップ７０８では、点ａ、ｂ、ｃ、ｄの位置を特定し、図３７に示すように、点ａ、ｂ、ｃ及び点ｂ、ｃ、ｄの２つの三角形、すなわち、等濃度面で構成されるポリゴン面を特定して、ステップ７０２へ戻る。ステップ７０２で肯定判断のときは、マーチンキューブ処理サブルーチンを終了し図５のステップ１２６へ進む。
【０１２７】
ステップ１２６では、画像処理部２３にマーチンキューブ処理サブルーチンで取得したポリゴン面のデータを含む描画データを送出する。これにより、画像処理部２３は、ポリゴン面にテクスチャを貼り付け、光源処理等の通常の描画処理を行って、垂直帰線割込周期でテレビモニタ４に画像データを送出する。テレビモニタ上には、融合（又は分離）したメタボールＭＢがオブジェクトとして動的に描画される。
【０１２８】
次にステップ１２８で、モーションカーソルｍｃを１インクリメントすると共に、時間ｔを１インクリメントして、次のステップ１３０において、現在のモーションカーソルｍｃによるフレームがモーションの最終フレームか否かを判断する。否定判断のときは、描画演算処理サブルーチンを終了して図５のステップ１１０へ進み、肯定判断のときは、ステップ１３２でモーションカーソルｍｃを０とし次のモーションを指定して描画演算処理サブルーチンを終了して図５のステップ１１０へ進む。
【０１２９】
ステップ１１０では、ステップ１０６でゲームを終了させるための所定ボタンが押下された否かを判断し、否定判断のときは、ステップ１０４へ戻り、肯定判断のときは、メタボール描画ルーチンを終了する。
【０１３０】
（作用等）
以上のように、本実施形態では、メタボール更新処理で全てのメタボールＭＢが仮想枠ＩＢ内に配置され（ステップ１２０）、濃度分布処理で、与えられたメタボールＭＢの立体形状を表す計算式に従って、メタボールＭＢの基準位置（中心又は中心線）からボクセルＶｘのボクセルインデクスの最小方向及び最大方向に向かってボクセルＶｘの頂点毎に、（ｒ／Ｒ）２が演算される。この際、本実施形態では、まず、２階差分を演算し、この値と前回の１階差分から、１階差分を更新して（ｒ／Ｒ）２を演算している（ステップ６１８、６３４）。このため、従来技術のように、式（２）を用いて全てのＸ、Ｙ、Ｚについて計算すると乗算１２回、加算５回の演算処理となるものを、前回演算した隣接するボクセルＶｘの頂点での情報を利用することで乗算を排除して加算２回で済ませ、（ｒ／Ｒ）２の演算時間を短縮している。すなわち、ステップ５１２、５２６、５５２、６０８、６２４では、式（２）を用いて（ｒ／Ｒ）２を演算するが、ステップ６１８、６３４では、ステップ６１０、６２６で既に１階差分、２階差分を求めているので、２階差分と前回の１階差分から、１階差分を更新して（ｒ／Ｒ）２を演算することができる。
【０１３１】
また、本実施形態では、マーチンキューブ処理で使用するボクセルＶｘの頂点を濃度評価点としたので、隣接するボクセルＶｘの頂点の濃度（ｒ）を連続的に効率よく演算することができる。更に、本実施形態では、（ｒ／Ｒ）２が１となると演算を終えることで（ステップ５１４、５２８等）、メタボールＭＢの外部（濃度０）となる（ｒ／Ｒ）２の演算を終了して演算負荷を軽減している。しかも、本実施形態では、式（３）により濃度ｈ（ｒ）が演算される（ステップ１２２）。式（３）は従来技術の濃度評価式より単純化されておりボクセルＶｘの頂点での濃度演算を高速に行うことができる。
【０１３２】
このため、本実施形態によれば、メタボールの数を増加させることができゲームキャラクタ等の比較的複雑な形状を動的に描画することができる共に、式（３）で得られる等濃度曲線は複数のメタボールを融合させた場合に適度な凹凸を含みゲームキャラクタ等のゴツゴツ感を表現することができるので、曲線美を追求して滑らかな曲線で静的にオブジェクトを描画する場合と比べ、ゲームキャラクタ等の表現に相応しい描画を実現することができる。
【０１３３】
更に、本実施形態では、マーチンキューブ処理で、所定時間毎に、メタボールＭＢを画定するポリゴンの頂点位置をモデルデータ等に基づくことなく０から演算で算出して（ステップ７０８）、メタボールを再生成している。仮想枠ＩＢをボクセルＶｘ単位に分割するマーチンキューブ処理自体は既に知られているものの、本実施形態のように、メタボールＭＢのポリゴン面を計算により動的に再生成する技術は新規なものと考えられる。
【０１３４】
そして、本実施形態では、弾丸ボールＢＢの濃度係数ｍ＿ｆＣｈａｒｇｅを−１としたので（ステップ３６０）、弾丸ボールＢＢを非可視とすることができると共に、弾丸ボールＢＢが命中したノード所属ボールＮＢの弾丸ボールＢＢとの融合部に穴が空いた状態（窪み）を動的に描画することができる（図３５参照）。
【０１３５】
なお、本実施形態では、式（３）による（ｒ／Ｒ）２を演算する例を示したが、本発明はこれに限らず、例えば、式（１）を用いる場合にも適用可能である。また、本実施形態では、濃度を演算する濃度分布処理で楕球の中心を基準位置として濃度評価点までの（ｒ／Ｒ）２を演算する例を示したが、円柱や円錐台の場合のように、メタボールの立体形状に応じて、評価点までの距離を、媒介変数を含む関数等で演算するようにしてもよい。式（１）を用いる場合に、弾丸ボールＢＢを非表示とするには、ｈ（ｒ）＝ｍ＿ｆＣｈａｒｇｅ・（ｒ２／Ｒ２−１）２（９−４ｒ２／Ｒ２）／９とすればよい（ｍ＿ｆＣｈａｒｇｅ＝−１）。
【０１３６】
更に、本実施形態では、式（３）により濃度ｈ（ｒ）を演算するときに、ｚ座標から演算を始め（ステップ５０４）、ｙ座標、ｘ座標の演算を行う例を示したが（図１６〜図１８）、本発明はこれに限定されることなく、例えば、ｘ座標から演算を始めるようにしてもよいことは論を待たない。
【０１３７】
また、本実施形態では、仮想枠ＩＢの一辺当たり１２０個のボクセル数とした例を示したが、仮想枠ＩＢのｘ，ｙ，ｚ方向でボクセル数が異なっていてもよいことは云うまでもない。ボクセル数及びメタボール数はオブジェクトを動的に描画するために、ＣＰＵの処理速度によって変更可能であり、ボクセル数を多くすることで、再生成されるオブジェクトの解像度を高めることができる。
【０１３８】
また、本実施形態では、ステップ２７４、３９４等でノード所属ボールＮＢや滴ボールＤＢの形状変更例を示したが、例えば、ノード所属ボールや滴ボール等のメタボールの速度方向に形状を任意に引き伸ばして、速度方向に直交する方向の形状を縮めるようにすればよい。このようにすることで、メタボールの速度を視覚的にも表現することが可能となる。
【０１３９】
更に、本実施形態では、ノード所属ボールＮＢが地面を這いずる場合に一定速度Ｖとした例を示したが、ノード所属ボールＮＢが地面を這いずるときに、接地ボールＧＢとの間に仮想バネで接続されるようにしてもよい。このようにすれば、バネの力によって速度が変化し（速度は一定とならず）、オイラー法による運動方程式を用いて加速度、位置等を演算することが可能となる。
【０１４０】
また、本実施形態では、弾丸ボールＢＢをノード所属ボールＮＢに命中した後、所定時間経過後に非可視とする例を示したが、例えば、弾丸ボールＢＢの濃度係数ｍ＿ｆＣｈａｒｇｅを常に−１で非可視状態とし、同じ座標位置で同じ大きさのポリゴンモデルによるボールを重ねて表示することで弾丸ボールＢＢを表現してもよく、更に、所定時間経過後にポリゴンモデルによるボールを消去することで、命中したノード所属ボールＮＢに穴があく（窪みができる）状態を表現するようにしてもよい。
【０１４１】
そして、本実施形態では、記録媒体としてＣＤ−ＲＯＭを使用する例で説明したが、ＣＰＵブロック２０のＲＡＭにロード可能なＲＯＭカートリッジや大容量のディスク、マグネットオプティカルディスク等であっても、これらの媒体読取部を備えていれば本発明を適用することができることは論を待たない。
【０１４２】
【発明の効果】
以上説明したように、本発明によれば、基準位置からメタボールの外部に向かってボクセルの頂点までの距離をｘ，ｙ，ｚのいずれかの方向へ連続的に演算するので、前回演算した隣接するボクセルの頂点座標での情報を利用して演算回数を低減させ、演算時間の短縮を図ることができる、という効果を得ることができる。
【図面の簡単な説明】
【図１】家庭用ゲーム装置の接続態様を示す概略斜視図である。
【図２】家庭用ゲーム装置に使用される入力装置の平面図である。
【図３】ゲーム装置本体の概略構成を示すブロック図である。
【図４】実施形態のゲーム装置本体のＣＰＵが実行するメタボール描画ルーチンのフローチャートである。
【図５】メタボール描画ルーチンのステップ１０８の詳細を示す描画演算処理サブルーチンのフローチャートである。
【図６】描画演算処理サブルーチンのステップ１１４の詳細を示す弾丸ボール関連処理サブルーチンのフローチャートである。
【図７】描画演算処理サブルーチンのステップ１１６の詳細を示す爆発関連処理サブルーチンのフローチャートである。
【図８】描画演算処理サブルーチンのステップ１２０の詳細を示すメタボール更新処理サブルーチンのフローチャートである。
【図９】メタボール更新処理サブルーチンのステップ２１４の詳細を示すノード所属ボール処理サブルーチンのフローチャートである。
【図１０】ノード所属ボール処理サブルーチンのステップ２５６の詳細を示すノード座標補正処理サブルーチンのフローチャートである。
【図１１】メタボール更新処理サブルーチンのステップ２１８の詳細を示す接地ボール処理サブルーチンのフローチャートである。
【図１２】メタボール更新処理サブルーチンのステップ２２２の詳細を示す触手ボール処理サブルーチンのフローチャートである。
【図１３】メタボール更新処理サブルーチンのステップ２２６の詳細を示す弾丸ボール処理サブルーチンのフローチャートである。
【図１４】メタボール更新処理サブルーチンのステップ２３０の詳細を示す破片ボール処理サブルーチンのフローチャートである。
【図１５】メタボール更新処理サブルーチンのステップ２３２の詳細を示す滴ボール処理サブルーチンのフローチャートである。
【図１６】描画演算処理サブルーチンのステップ１２２の詳細を示す濃度分布処理サブルーチンのフローチャートである。
【図１７】濃度分布処理サブルーチンのステップ５１６、５３０の詳細を示すｙ処理サブルーチンのフローチャートである。
【図１８】ｙ処理サブルーチンのステップ５５６、５７２の詳細を示すｘ処理サブルーチンのフローチャートである。
【図１９】描画演算処理サブルーチンのステップ１２４の詳細を示すマーチンキューブ処理サブルーチンのフローチャートである。
【図２０】メタボールで描画されるキャラクタのノードを示す説明図であり、（Ａ）はテレビモニタに表示されるキャラクタのノード位置、（Ｂ）はノード番号を示す。
【図２１】キャラクタのノードの階層情報を模式的に示す説明図である。
【図２２】キャラクタのノードに割り当てられるノード所属ボールを模式的に示す説明図である。
【図２３】弾丸ボールがノード所属ボールに命中したときに発生するトルクについて力と半径とを模式的に示す説明図である。
【図２４】弾丸ボールがノード所属ボールに命中したときの状態を模式的に示す説明図であり、（Ａ）は命中範囲、（Ｂ）は破片ボールの発生を示す。
【図２５】グローバル座標でのノードの位置とノード所属ボールの位置とを示す説明図である。
【図２６】ノード所属ボールが地面を這いずる状態を模式的に示す説明図である。
【図２７】接地ボールを示す説明図であり、（Ａ）は小接地ボールと仮想バネとの関係、（Ｂ）は小接地ボールに働く力を示す。
【図２８】グローバル座標での弾丸ボールの命中点を示す説明図である。
【図２９】ベジエ曲線の説明図であり、（Ａ）は４点で構成されるベジエ曲線、（Ｂ）は４点で構成されるベジエ曲線を単純に繋いだ場合、（Ｃ）は４点で構成されるベジエ曲線を滑らかに繋いだ場合を示す。
【図３０】触手ボールの仮想バネを模式的に示し、（Ａ）は仮想バネで繋がれた触手ボール、（Ｂ）は前回の垂直帰線割込時に中間点Ｐ１に作用していた力、（Ｃ）は中間点Ｐ１に現在作用している力を示す。
【図３１】弾丸ボールとノード所属ボールとの関係を示す説明図であり、（Ａ）は弾丸ボールの濃度係数が１のときの状態、（Ｂ）は弾丸ボールの濃度係数が−１のときの状態を示す。
【図３２】滴ボールの自然落下による速度変化及び形状変化を模式的に示し、（Ａ）は空気による摩擦抵抗を受けない場合、（Ｂ）は空気による摩擦抵抗を受ける場合を示す。
【図３３】実施形態で用いられる濃度評価式で濃度係数を１としたときの濃度と距離との関係を示すグラフである。
【図３４】半径１の２つのメタボール球について実施形態で用いられる濃度評価式により濃度を演算したときの等濃度曲線を示し、（Ａ）は等濃度曲線の外観斜視図、（Ｂ）は平面図、（Ｃ）は閾値を０．８としたときの等濃度曲線の平面図である。
【図３５】実施形態で用いられる仮想枠とボクセルとの関係を模式的に示す説明図であり、（Ａ）はボクセルとボクセルインデクスとの関係、（Ｂ）は仮想枠内に配置されたオブジェクトとボクセルとの関係を示す。
【図３６】メタボールが楕球以外の立体形状をとるときの距離演算の説明図であり、（Ａ）は円柱部での任意の点までの距離、（Ｂ）球状に丸められた両端での任意の点までの距離、（Ｃ）は両端が球状に丸められた円錐台を示す。
【図３７】ボクセルの頂点とポリゴン面との関係を示す説明図である。
【図３８】ボクセルの辺を構成する頂点の濃度とボクセルの辺上のポリゴン面の頂点位置との関係を示す説明図である。
【図３９】従来技術の濃度評価式による濃度と距離との関係を示すグラフである。
【図４０】半径１の２つのメタボール球について従来技術の濃度評価式により濃度を演算したときの等濃度曲線を示し、（Ａ）は等濃度曲線の外観斜視図、（Ｂ）は平面図である。
【図４１】等濃度曲線の説明図であり、（Ａ）は２つのメタボール球が融合した状態を模式的に示し、（Ｂ）は閾値が０．５の場合に再生成されるメタボール球の平面図である。
【符号の説明】
１　記録媒体
２０　ＣＰＵブロック（コンピュータ）
ＣＰＵ　（位置演算手段、距離演算手段、演算終了手段）
【図１】
2004062582.tif 000008
【図２】
2004062582.tif 000009
【図３】
2004062582.tif 000010
【図４】
2004062582.tif 000011
【図５】
2004062582.tif 000012
【図６】
2004062582.tif 000013
【図７】
2004062582.tif 000014
【図８】
2004062582.tif 000015
【図９】
2004062582.tif 000016
【図１０】
2004062582.tif 000017
【図１１】
2004062582.tif 000018
【図１２】
2004062582.tif 000019
【図１３】
2004062582.tif 000020
【図１４】
2004062582.tif 000021
【図１５】
2004062582.tif 000022
【図１６】
2004062582.tif 000023
【図１７】
2004062582.tif 000024
【図１８】
2004062582.tif 000025
【図１９】
2004062582.tif 000026
【図２０】
2004062582.tif 000027
【図２１】
2004062582.tif 000028
【図２２】
2004062582.tif 000029
【図２３】
2004062582.tif 000030
【図２４】
2004062582.tif 000031
【図２５】
2004062582.tif 000032
【図２６】
2004062582.tif 000033
【図２７】
2004062582.tif 000034
【図２８】
2004062582.tif 000035
【図２９】
2004062582.tif 000036
【図３０】
2004062582.tif 000037
【図３１】
2004062582.tif 000038
【図３２】
2004062582.tif 000039
【図３３】
2004062582.tif 000040
【図３４】
2004062582.tif 000041
【図３５】
2004062582.tif 000042
【図３６】
2004062582.tif 000043
【図３７】
2004062582.tif 000044
【図３８】
2004062582.tif 000045
【図３９】
2004062582.tif 000046
【図４０】
2004062582.tif 000047
【図４１】
2004062582.tif 000048