JP3760347B2 - プログラム、記録媒体、ゲームキャラクタ描画方法及びゲーム装置 - Google Patents
プログラム、記録媒体、ゲームキャラクタ描画方法及びゲーム装置 Download PDFInfo
- Publication number
- JP3760347B2 JP3760347B2 JP2002221845A JP2002221845A JP3760347B2 JP 3760347 B2 JP3760347 B2 JP 3760347B2 JP 2002221845 A JP2002221845 A JP 2002221845A JP 2002221845 A JP2002221845 A JP 2002221845A JP 3760347 B2 JP3760347 B2 JP 3760347B2
- Authority
- JP
- Japan
- Prior art keywords
- metaball
- ball
- node
- game character
- impact
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- A63F13/10—
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/55—Controlling game characters or game objects based on the game progress
- A63F13/57—Simulating properties, behaviour or motion of objects in the game world, e.g. computing tyre load in a car race game
- A63F13/577—Simulating properties, behaviour or motion of objects in the game world, e.g. computing tyre load in a car race game using determination of contact between game characters or objects, e.g. to avoid collision between virtual racing cars
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/45—Controlling the progress of the video game
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/80—Special adaptations for executing a specific game genre or game mode
- A63F13/837—Shooting of targets
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T13/00—Animation
- G06T13/20—3D [Three Dimensional] animation
- G06T13/40—3D [Three Dimensional] animation of characters, e.g. humans, animals or virtual beings
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/60—Methods for processing data by generating or executing the game program
- A63F2300/64—Methods for processing data by generating or executing the game program for computing dynamical parameters of game objects, e.g. motion determination or computation of frictional forces for a virtual car
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/60—Methods for processing data by generating or executing the game program
- A63F2300/64—Methods for processing data by generating or executing the game program for computing dynamical parameters of game objects, e.g. motion determination or computation of frictional forces for a virtual car
- A63F2300/643—Methods for processing data by generating or executing the game program for computing dynamical parameters of game objects, e.g. motion determination or computation of frictional forces for a virtual car by determining the impact between objects, e.g. collision detection
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F2300/00—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
- A63F2300/80—Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game specially adapted for executing a specific type of game
- A63F2300/8076—Shooting
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Processing Or Creating Images (AREA)
- Image Generation (AREA)
Description
【発明の属する技術分野】
本発明はプログラム、記録媒体、ゲームキャラクタ描画方法及びゲーム装置に係り、特に、モーションデータに従ってポリゴンのゲームキャラクタを3次元仮想空間内に動的に描画するプログラム乃至3次元仮想空間内にメタボールをオブジェクトとして動的に描画するプログラム、該プログラムを記録したコンピュータ可読記録媒体、該ゲームキャラクタ描画方法及び該ゲーム装置に関する。
【0002】
【従来の技術】
従来、モーションデータに従ってゲームキャラクタを3次元仮想空間内に動的に描画するゲームが知られている。公知のゲームでは、ポリゴンのゲームキャラクタが、例えば、弾丸等が命中したときのように、外部から衝撃を受けた場合は、予め用意された複数のモーションデータを、衝撃を受けた部分により随時切り換えて、ゲームキャラクタが受けた衝撃の様子を描画している。
【0003】
一方、近年、メタボールを用いて3次元仮想空間内にオブジェクトを静的に描画する技術が開発されている。メタボールは、3次元仮想空間内に形成される立体であり、複数のメタボールが相互に近づくと相互に影響し合いながら融合し、逆に、遠ざかると分離する特性を有している。1997年に米国で出版された書籍「Introduction to Implicit Surfaces」(MORGAN KAUFMANN PUBLISHERS, INC. San Francisco, California発行)の26ページ(1.4.2 Blends)には、下式(1)に示すように、1986年にWyvillらによって開示されたメタボールの濃度を求める計算式が記載されている。式(1)において、h(r)はメタボール内部の濃度、すなわち、メタボールの強さを示す変数、rはメタボールの中心から濃度の評価点までの距離、Rはメタボールの半径を表している。
【0004】
【数1】
【0005】
図39に示すように、式(1)によるメタボールの濃度h(r)は、距離rに対し6次関数の特性を有している。図40(A)に、半径1の2つのメタボール球が一部重なっている場合の式(1)によるメタボール球の内部の濃度分布を示す。重なっている部分の濃度h(r)は、2つのメタボール球の濃度の和となる。なお、図40(A)に示す形状は濃度分布であって、メタボールの形状そのものを表したものではない。図40(B)に、この濃度分布を真上から見たときの等濃度曲線(等濃度となる点を結んだ線)を示す。一番外側の太線がメタボール球の原形であり、内側の細線がメタボールの中心に向かって、閾値(0〜1の値をとり得る)を0.1刻みで大きくした場合の等濃度曲線である。閾値の値を大きくすると2つのメタボール球が分離し、閾値を小さくするとメタボール球が滑らかに融合する(くっつく)ことが分かる。図41(A)に示すように、図40(B)に示した等濃度曲線は、ちょうど2つのメタボール球の中心を通るように切断した断面の濃度分布に等しい。特定の等濃度曲線に対応する濃度値が、上述した閾値となる。指定した閾値で定まる断面での等濃度曲線の形状が、そのまま再生成される2つのメタボール球の形状となる(球なのでどこから見ても同じ形状となる)。なお、図41(B)は、式(1)において、閾値0.5の場合に再生成される2つのメタボール球の融合した形状を示している。
【0006】
なお、本発明に関連する文献としては、Addison Wesley Publishing Co., Inc.から1990年に発行された「Computer Graphics」誌、第488頁から491頁に、James D. Joleyらのベジエ曲線に関する記載があり、1988年4月に発行された「The Visual Computer」誌、第283頁から295頁に、「Dynamic animation:interaction and control」(Jane Wilhelms, Matthew Moore, and Robert Skinner)の「2.2 Numerical integration methods」と題される、オイラー法による運動方程式に関する記載がある。また、(株)照晃堂発行、安居院猛、中嶋正之共著、「コンピュータグラフィックス」の第115頁から第117頁には、3次元行列内に蓄積されたデータから一定の濃度の表面を多角形で近似するマーチンキューブ法についての記載がある。
【0007】
【発明が解決しようとする課題】
しかしながら、従来のモーションデータに従ってゲームキャラクタを3次元仮想空間内に動的に描画する技術では、ゲームキャラクタが受けた衝撃を描画する場合に、複数のモーションデータが用意されているので、コンピュータの演算負荷は軽い反面、データ量が多くなると共に、ゲームキャラクタが受けた衝撃を状況に応じてリアルに表現することは難しい。
【0008】
また、従来のメタボール技術では、3次元仮想空間における静的な立体を滑らかな曲線で表現し曲線美の描画に用いられるため、ゲーム等の動的な描画に利用するには不向きである。すなわち、例えば、複数のメタボールでキャラクタを表現しようとすれば、キャラクタには3次元仮想空間内で動的な動きが生じるので、キャラクタの動作につれてメタボールも動的な処理が必要となるが、従来技術では3次元仮想空間内のキャラクタ等を構成する複数のメタボールの動的処理、高速処理への対応が難しい。従って、メタボールで構成されたキャラクタが受けた衝撃を表現することは困難であった。
【0009】
本発明は上記事案に鑑み、モーションデータに従って描画されるゲームキャラクタが受ける衝撃を動的かつリアルに描画可能なプログラム、該プログラムを記録したコンピュータ可読記録媒体、該ゲームキャラクタ描画方法及び該ゲーム装置を提供することを課題とする。
【0010】
【課題を解決するための手段】
上記課題を解決するために、本発明の第1の態様は、3次元仮想空間内にメタボールをオブジェクトとして動的に描画するプログラムであって、コンピュータを、モーションデータにより前記3次元仮想空間内の座標位置が特定され予め定められた階層構造を有する複数のノードに対し、該各々のノードに所属する少なくとも1のメタボールが外部から衝撃を受けたときに該衝撃点における衝撃量から前記モーションデータの変位量を演算し、該変位量から前記モーションデータの座標位置が補正された前記各々のノードに、所属するメタボールを、ゲームキャラクタを構成するように配置するメタボール配置手段、前記3次元仮想空間内を多数に分割するボクセルの頂点での前記メタボールの内部濃度を演算する濃度演算手段、前記ボクセルの頂点でのメタボールの内部濃度と予め設定された閾値とに基づいてポリゴンの頂点座標を演算してゲームキャラクタを生成するゲームキャラクタ生成手段、前記ゲームキャラクタが外部から衝撃を受けたときに、前記メタボール毎に残存パワーを演算するメタボールパワー演算手段、前記メタボールパワー演算手段により演算された各メタボールの残存パワーが所定値以下かを判断するメタボールパワー判断手段、として機能させ、前記メタボール配置手段は、前記メタボールパワー判断手段が特定のメタボールの残存パワーが所定値以下と判断したときに、該特定のメタボール及び前記階層構造における該特定のメタボールより下位のメタボールを前記ノードから崩落させ自然落下するように配置することを特徴とする。
【0011】
第1の態様では、メタボール配置手段によりモーションデータで3次元仮想空間内の座標位置が特定され予め定められた階層構造を有する複数のノードに対し、該各々のノードに所属する少なくとも1のメタボールが外部から衝撃を受けたときに該衝撃点における衝撃量からモーションデータの変位量が演算され、該変位量からモーションデータの座標位置が補正された各々のノードに、所属するメタボールがゲームキャラクタを構成するように配置され、濃度演算手段により3次元仮想空間内を多数に分割するボクセルの頂点でのメタボールの内部濃度が演算され、ゲームキャラクタ生成手段によりボクセルの頂点でのメタボールの内部濃度と予め設定された閾値とに基づいてポリゴンの頂点座標が演算されてゲームキャラクタが生成される。メタボールパワー演算手段によりゲームキャラクタが外部から衝撃を受けたときに、メタボール毎に残存パワーが演算され、メタボールパワー判断手段によりメタボールパワー演算手段で演算された各メタボールの残存パワーが所定値以下かが判断される。メタボール配置手段は、メタボールパワー判断手段が特定のメタボールの残存パワーが所定値以下と判断したときに、該特定のメタボール及び階層構造における該特定のメタボールより下位のメタボールをノードから崩落させ自然落下するように配置する。本態様によれば、メタボール配置手段により変位量からモーションデータの座標位置が補正された各々のノードに、所属するメタボールがゲームキャラクタを構成するように配置され、濃度演算手段でメタボールの内部濃度が演算され、ゲームキャラクタ生成手段でメタボールのポリゴンの頂点座標が演算されてゲームキャラクタが生成されるので、3次元仮想空間でメタボールを用いたゲームキャラクタが受ける衝撃を動的かつリアルに描画することができると共に、メタボール配置手段により、メタボールパワー判断手段が特定のメタボールの残存パワーが所定値以下と判断したときに、該特定のメタボール及び階層構造における該特定のメタボールより下位のメタボールがノードから崩落し自然落下するように配置されるので、ゲームキャラクタの一部が千切れて落下する状態を表現することができる。
【0013】
また、上記課題を解決するために、本発明の第2の態様は、3次元仮想空間内にメタボールをオブジェクトとして動的に描画するプログラムであって、コンピュータを、モーションデータにより前記3次元仮想空間内の座標位置が特定され予め定められた階層構造を有する複数のノードに対し、該各々のノードに所属する少なくとも1のメタボールが外部から衝撃を受けたときに該衝撃点における衝撃量から前記モーションデータの変位量を演算し、該変位量から前記モーションデータの座標位置が補正された前記各々のノードに、所属するメタボールを、ゲームキャラクタを構成するように配置するメタボール配置手段、前記3次元仮想空間内を多数に分割するボクセルの頂点での前記メタボールの内部濃度を演算する濃度演算手段、前記ボクセルの頂点でのメタボールの内部濃度と予め設定された閾値とに基づいてポリゴンの頂点座標を演算してゲームキャラクタを生成するゲームキャラクタ生成手段、前記ゲームキャラクタが外部から衝撃を受けたときに、前記メタボールの全体の残存パワーを演算するメタボールトータルパワー演算手段、前記メタボールトータルパワー演算手段により演算されたメタボール全体の残存パワーが所定値以下かを判断するメタボールトータルパワー判断手段、として機能させ、前記メタボール配置手段は、前記メタボールトータルパワー判断手段がメタボール全体の残存パワーが所定値以下と判断したときに、前記階層構造における全メタボールを、前記衝撃点に対応するメタボールを爆発の中心として、時間差をもって前記ノードから拡散するように配置することを特徴とする。
【0014】
第2の態様では、メタボール配置手段によりモーションデータで3次元仮想空間内の座標位置が特定され予め定められた階層構造を有する複数のノードに対し、該各々のノードに所属する少なくとも1のメタボールが外部から衝撃を受けたときに該衝撃点における衝撃量からモーションデータの変位量が演算され、該変位量からモーションデータの座標位置が補正された各々のノードに、所属するメタボールがゲームキャラクタを構成するように配置され、濃度演算手段により3次元仮想空間内を多数に分割するボクセルの頂点でのメタボールの内部濃度が演算され、ゲームキャラクタ生成手段によりボクセルの頂点でのメタボールの内部濃度と予め設定された閾値とに基づいてポリゴンの頂点座標が演算されてゲームキャラクタが生成される。メタボールトータルパワー演算手段により、ゲームキャラクタが外部から衝撃を受けたときに、メタボールの全体の残存パワーが演算され、メタボールトータルパワー判断手段によりメタボールトータルパワー演算手段で演算されたメタボール全体の残存パワーが所定値以下かが判断される。メタボール配置手段は、メタボールトータルパワー判断手段がメタボール全体の残存パワーが所定値以下と判断したときに、階層構造における全メタボールを、衝撃点に対応するメタボールを爆発の中心として、時間差をもってノードから拡散するように配置する。本態様によれば、メタボール配置手段により変位量からモーションデータの座標位置が補正された各々のノードに、所属するメタボールがゲームキャラクタを構成するように配置され、濃度演算手段でメタボールの内部濃度が演算され、ゲームキャラクタ生成手段でメタボールのポリゴンの頂点座標が演算されてゲームキャラクタが生成されるので、3次元仮想空間でメタボールを用いたゲームキャラクタが受ける衝撃を動的かつリアルに描画することができると共に、メタボール配置手段により、メタボールトータルパワー判断手段がメタボール全体の残存パワーが所定値以下と判断したときに、階層構造における全メタボールが衝撃点に対応するメタボールを爆発の中心として時間差をもってノードから拡散するように配置されるので、ゲームキャラクタが爆発する状態を表現することができる。
【0015】
第1、第2の態様において、メタボール配置手段は、衝撃量を、衝撃点に働く力とゲームキャラクタの所定位置から衝撃点までの距離との外積として演算するようにしてもよく、衝撃量を、所定位置を中心とする回転角に変換し、該回転角を予め定められたフレーム数で分割して1フレーム当たりの変位量を演算するようにしてもよい。また、回転角に予め最小角及び/又は最大角を定めておき、メタボール配置手段が、変換された回転角が最小角に満たないとき又は最大角を越えるときに、該回転角を最小角又は最大角に補正することが好ましい。更に、メタボール配置手段が、前記少なくとも1のメタボールが衝撃を受けたときに、該衝撃を受けたメタボールが配置されるノードの階層構造における下位のノードについても変位量からモーションデータの座標位置を補正することで、ゲームキャラクタが受ける衝撃をよりリアルに描画することができる。
【0016】
また、第1、第2の態様において、コンピュータを、更に、ゲームキャラクタに衝撃を与える弾丸をメタボールで生成する弾丸ボール生成手段として機能させるようにしてもよく、このとき、更に、弾丸ボールが前記少なくとも1のメタボールに命中したときに、該メタボールの近傍から飛び散るように生成される破片をメタボールで生成する破片ボール生成手段として機能させるようにしてもよい。コンピュータを、更に、ゲームキャラクタの真下に配置され、ゲームキャラクタの移動に伴って地面を這いずる接地ボールをメタボールで生成する接地ボール生成手段として機能させ、接地ボールが複数のメタボールで構成されているようにしてもよい。このとき、接地ボール生成手段は、接地ボールを構成するメタボールがゲームキャラクタの足部のノード又は該足部のノードに配置されたメタボールに仮想バネで接続されているように該接地ボールを構成するメタボールの座標位置を演算することが好ましい。更に、上記第2の態様において、メタボール配置手段が、ノードから拡散したメタボールの拡散前後の体積が略同一となるように全メタボールのスケール情報を変更するようにしてもよい。
【0017】
更に、上記課題を解決するために、本発明の第3の態様は、上記第1又は第2の態様に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体であり、本発明の第4の態様は、3次元仮想空間内にメタボールをオブジェクトとして動的に描画するゲームキャラクタ描画方法であって、所定時間毎に、モーションデータにより前記3次元仮想空間内の座標位置が特定され予め定められた階層構造を有する複数のノードに対し、該各々のノードに所属する少なくとも1のメタボールが外部から衝撃を受けたときに該衝撃点における衝撃量から前記モーションデータの変位量を演算し、該変位量から前記モーションデータの座標位置が補正された前記各々のノードに、所属するメタボールを、ゲームキャラクタを構成するように配置し、前記3次元仮想空間内を多数に分割するボクセルの頂点での前記メタボールの内部濃度を演算し、前記ボクセルの頂点でのメタボールの内部濃度と予め設定された閾値とに基づいてポリゴンの頂点座標を演算してゲームキャラクタを生成する、ステップを含み、前記ゲームキャラクタが外部から衝撃を受けたときに、前記メタボールを配置するステップにおいて、前記メタボール毎に残存パワーを演算し、該演算した各メタボールの残存パワーが所定値以下かを判断し、特定のメタボールの残存パワーが所定値以下と判断したときに、該特定のメタボール及び前記階層構造における該特定のメタボールより下位のメタボールを前記ノードから崩落させ自然落下するように配置することを特徴とし、本発明の第5の態様は、3次元仮想空間内にメタボールをオブジェクトとして動的に描画するゲームキャラクタ描画方法であって、所定時間毎に、モーションデータにより前記3次元仮想空間内の座標位置が特定され予め定められた階層構造を有する複数のノードに対し、該各々のノードに所属する少なくとも1のメタボールが外部から衝撃を受けたときに該衝撃点における衝撃量から前記モーションデータの変位量を演算し、該変位量から前記モーションデータの座標位置が補正された前記各々のノードに、所属するメタボールを、ゲームキャラクタを構成するように配置し、前記3次元仮想空間内を多数に分割するボクセルの頂点での前記メタボールの内部濃度を演算し、前記ボクセルの頂点でのメタボールの内部濃度と予め設定された閾値とに基づいてポリゴンの頂点座標を演算してゲームキャラクタを生成する、ステップを含み、前記ゲームキャラクタが外部から衝撃を受けたときに、前記メタボールを配置するステップにおいて、前記メタボール毎に残存パワーを演算し、該演算した各メタボールの残存パワーが所定値以下かを判断し、特定のメタボールの残存パワーが所定値以下と判断したときに、前記階層構造における全メタボールを、前記衝撃点に対応するメタボールを爆発の中心として、時間差をもって前記ノードから拡散するように配置することを特徴とする。
【0018】
そして、本発明の第6の態様は、3次元仮想空間内にメタボールをオブジェクトとして動的に描画するゲーム装置であって、モーションデータにより前記3次元仮想空間内の座標位置が特定され予め定められた階層構造を有する複数のノードに対し、該各々のノードに所属する少なくとも1のメタボールが外部から衝撃を受けたときに該衝撃点における衝撃量から前記モーションデータの変位量を演算し、該変位量から前記モーションデータの座標位置が補正された前記各々のノードに、所属するメタボールを、ゲームキャラクタを構成するように配置するメタボール配置手段と、前記3次元仮想空間内を多数に分割するボクセルの頂点での前記メタボールの内部濃度を演算する濃度演算手段と、前記ボクセルの頂点でのメタボールの内部濃度と予め設定された閾値とに基づいてポリゴンの頂点座標を演算してゲームキャラクタを生成するゲームキャラクタ生成手段と、前記ゲームキャラクタが外部から衝撃を受けたときに、前記メタボール毎に残存パワーを演算するメタボールパワー演算手段と、前記メタボールパワー演算手段により演算された各メタボールの残存パワーが所定値以下かを判断するメタボールパワー判断手段と、を備え、前記メタボール配置手段は、前記メタボールパワー判断手段が特定のメタボールの残存パワーが所定値以下と判断したときに、該特定のメタボール及び前記階層構造における該特定のメタボールより下位のメタボールを前記ノードから崩落させ自然落下するように配置することを特徴とし、本発明の第7の態様は、3次元仮想空間内にメタボールをオブジェクトとして動的に描画するゲーム装置であって、モーションデータにより前記3次元仮想空間内の座標位置が特定され予め定められた階層構造を有する複数のノードに対し、該各々のノードに所属する少なくとも1のメタボールが外部から衝撃を受けたときに該衝撃点における衝撃量から前記モーションデータの変位量を演算し、該変位量から前記モーションデータの座標位置が補正された前記各々のノードに、所属するメタボールを、ゲームキャラクタを構成するように配置するメタボール配置手段と、前記3次元仮想空間内を多数に分割するボクセルの頂点での前記メタボールの内部濃度を演算する濃度演算手段と、前記ボクセルの頂点でのメタボールの内部濃度と予め設定された閾値とに基づいてポリゴンの頂点座標を演算してゲームキャラクタを生成するゲームキャラクタ生成手段と、前記ゲームキャラクタが外部から衝撃を受けたときに、前記メタボールの全体の残存パワーを演算するメタボールトータルパワー演算手段と、前記メタボールトータルパワー演算手段により演算されたメタボール全体の残存パワーが所定値以下かを判断するメタボールトータルパワー判断手段と、を備え、前記メタボール配置手段は、前記メタボールトータルパワー判断手段がメタボール全体の残存パワーが所定値以下と判断したときに、前記階層構造における全メタボールを、前記階層構造における全メタボールを、前記衝撃点に対応するメタボールを爆発の中心として、時間差をもって前記ノードから拡散するように配置することを特徴とする。
【0019】
【発明の実施の形態】
以下、図面を参照して本発明をビデオゲームに適用した実施の形態について説明する。
【0020】
(構成)
図1に示すように、本実施形態のビデオゲームが実行される家庭用ビデオゲーム装置10は、ゲーム装置本体2に、スピーカ5を内蔵したテレビモニタ4及び入力装置3が接続されている。ゲーム装置本体2は、CD−ROM等の記録媒体1を装着可能な媒体読取部(図3参照)を有している。この媒体読取部に記録媒体を装着することにより記録媒体1に記録されたゲームプログラムやゲームデータが自動的にゲーム装置本体2内の記憶メモリにロードされる。
【0021】
図2に示すように、入力装置3には、ゲームを開始するためのスタートボタン30やゲームキャラクタを操作したり、ゲーム装置本体2からの選択問い合わせ等に応答するための□ボタン31、△ボタン32、○ボタン33、×ボタン34、及び、↑ボタン35、→ボタン36、←ボタン37、↓ボタン38で構成される十字方向ボタンセット等の種々のボタンが配置されている。
【0022】
図3に示すように、ゲーム装置本体2は装置全体の制御を行うCPUブロック20を備えている。CPUブロック20は、ゲーム装置本体2内の各部とのデータ転送を主に制御するSCU(System Control Unit)、中央演算処理装置として高速クロックで作動するCPU、ゲーム装置本体2の基本制御動作が記憶されたROM、CPUのワークエリアとして働くと共に記録媒体1に記録されたゲームプログラム及び種々のデータを一時的に記憶するRAM及びこれらを接続する内部バスで構成されている。
【0023】
SCUには外部バス25が接続されている。外部バス25は、コントローラパッド等の入力装置3からの入力を受信してCPUブロック20へ入力情報を転送する入力受信部21、図示しないサブCPUを備え記録媒体1に記録されたゲームプログラムを読み取りCPUブロック20へ転送するCD−ROMドライブ等の媒体読取部22、グラフック処理を行うCPU及びVRAMを備えCPUブロック20から送出された情報に従ってオブジェクトに対してテクスチャ処理、光源処理等を行い3次元フィールドでの描画処理を施す画像処理部23、並びに、図示しないサブCPUを備え、例えば、バックミュージックや戦闘音等の音響を処理する音響処理部24、に接続されている。また、入力受信部21は入力装置3に、画像処理部23はテレビモニタ4に、音響処理部24はテレビモニタ4に内蔵されたスピーカ5にそれぞれ接続されている。
【0024】
(動作)
次に、フローチャートを参照して、家庭用ビデオゲーム装置10の動作についてCPUブロック20のCPUを主体として説明する。なお、ゲーム装置本体2に電源が投入され、記録媒体1が挿入されると、3次元仮想空間にメタボールで構成されたオブジェクトを動的に描画するためのメタボール描画ルーチンが実行される。
【0025】
図4に示すように、メタボール描画ルーチンでは、まず、ステップ102において、初期設定処理が行われる。この初期設定処理では、キャラクタのフレーム毎のノード(関節)のモーションデータ、ノードの階層データ、キャラクタを構成するメタボール等の形状、大きさ等のオブジェクト情報を含むゲームデータ及びゲームプログラムがRAMにロードされ、時間t及びモーションカーソル(フレームカウンタ)mcをそれぞれ初期値の0とする。
【0026】
次にステップ104において、テレビモニタ4の垂直帰線周期と一致した、1/60秒(16.6ミリ秒)に一度の周期で行われる垂直帰線割込(Vsync)がなされたか否かを判断する。否定判断のときは、次のステップ106において、入力受信部21から転送された入力情報に対する入力処理やゲーム効果音を音響処理部24に合成させるための音響処理等のメイン処理を実行して、ステップ110へ進む。
【0027】
一方、ステップ104で肯定判断のときは、ステップ108において、3次元仮想空間(後述する仮想枠)内にメタボールで構成されたオブジェクトを配置・描画するための描画演算処理サブルーチンが実行される。
【0028】
ここで、本実施形態で描画されるキャラクタを含むオブジェクトの概要について説明する。図20(A)、(B)に示すように、キャラクタcは、人間の関節に相当する複数のノードN1〜N11を有している。図21に示すように、ノードN1〜N11は階層(親子関係)を構成しており、各ノードN間の距離は一定とされている。これらのノードNはテレビモニタ4上では非表示とされる。図22に示すように、ノードNには複数のノード所属ボールNBが割り当てられ(配置され)、後述するように、各ノード所属ボールNBの濃度分布処理やマーチンキューブ処理を経て、テレビモニタ4上に図21(A)に示すようなキャラクタcが表示される。なお、本実施形態でオブジェクトという場合には、3次元仮想空間上に描画されるキャラクタc以外の対象物を含む。すなわち、下表1に示すように、メタボールには複数の種類が存在するが、詳細については後述する。
【0029】
【表1】
【0030】
図5に示すように、描画演算処理サブルーチンでは、ステップ112において、モーションカーソルmcに対応する現フレームでのキャラクタcのノードN1〜N11のモーションデータを取得する。このようなモーションデータは、スケール(Scale)情報、回転(Rotation)情報及び位置(Translation)情報(平行移動情報)で構成され、例えば、中前栄八郎、西田友是共著、株式会社昭晃堂発行、「3次元コンピュータグラフィックス」等に開示されているように、4行4列の行列の計算をフレーム毎に行うことでモーションを表現することができる。
【0031】
次のステップ114では、プレイヤがキャラクタcを攻撃するときに放たれる弾丸ボールBBに関連する処理を行うための弾丸ボール関連処理サブルーチンを実行する。図23に示すように、プレイヤは入力装置3を操作し弾丸ボールBBを発射することでキャラクタcに対する攻撃が可能である。すなわち、図2に示すように、入力装置3の十字方向ボタンセットを操作することでキャラクタcに対してカーソルを合わせ、○ボタン33を押下することで弾丸ボールBBを発射することできる。上述したステップ106のメイン処理では、○ボタン33が押下されたときに、カーソルの位置(弾丸ボールBBの着弾目標座標)を取り込み、弾丸ボールBBが発射された状態を表す弾丸ボール状態フラグbbfl(の状態値)を0から1に変更する。なお、本例では説明を簡単にするために、弾丸ボールBBが1個発射された場合について説明するが、弾丸ボールBBは複数個発射可能である。
【0032】
図6に示すように、弾丸ボール関連処理サブルーチンでは、ステップ142において弾丸ボール状態フラグbbflが1か否かを判断し、否定判断のときは、弾丸ボールBBが未発射のため、弾丸ボール関連処理サブルーチンを終了して図5のステップ116へ進み、肯定判断のときは、次のステップ144で前回の垂直帰線割込時(1/60秒前)の弾丸ボール状態フラグbbflと現在の弾丸ボール状態フラグbbflとを比較することで、弾丸ボール状態フラグbbflが0から1に変更されたか、換言すれば、弾丸ボールBBが今プレイヤにより発射されたか否かを判断する。
【0033】
ステップ144で肯定判断のときは、次のステップ146において、弾丸ボールBBの速度ベクトルVBを演算し、RAMに記憶する。弾丸ボールBBの発射位置座標は予め設定されており、弾丸ボールBBの速度(初速)の大きさ(スカラ値)も予め与えられている。このため、発射位置座標から弾丸ボールBBの着弾目標座標に向かう方向ベクトルを演算し、方向ベクトルに弾丸ボールBBの速度のスカラ値を掛けることによって速度ベクトルVBを求めることができる(図23参照)。ここに、方向ベクトルとは、大きさについて意味を持たない単位ベクトルで、方向だけが意味を持つベクトル(x,y,z)をいい、この場合の方向ベクトル(x,y,z)は、着弾目標座標(x,y,z)から発射位置座標(x,y,z)の差を求め、単位ベクトル化することにより得ることができる。また、ステップ146では、着弾目標座標と発射位置座標との距離を演算してRAMに記憶する。なお、弾丸ボールBBの速度は一定として扱われ、空気の摩擦抵抗による減速については考慮していない。
【0034】
次にステップ148では、弾丸ボールBBの位置を演算しRAMに記憶し、弾丸ボール関連処理サブルーチンを終了して図5のステップ116へ進む。弾丸ボールBBの位置Pは、P0を弾丸ボールBBの発射位置座標P(x,y,z)とすると、P=P0+VB・(1/60)により3次元座標軸x、y、zの各成分毎に求めることができる。
【0035】
一方、ステップ144で否定判断のときは、ステップ150において弾丸ボールBBの現在位置Pを演算してRAMに格納する。弾丸ボールBBの現在位置Pは、Pt−1を前回の垂直割込時の位置、δtを垂直帰線割込の時間(1/60秒)とすると、P=Pt−1+VB・δtを用いて3次元座標軸x、y、zの各成分毎に求めることができる。従って、ステップ150では、弾丸ボールBBの最新位置(x,y,z)を前回の位置に基づいて垂直帰線割込毎に演算してRAMに記憶することとなる。なお、ステップ148及びステップ150で用いた弾丸ボールBBの位置Pの演算式は、弾丸ボールBBの速度ベクトルVBが一定のため(加速度=0)、オイラー法の運動方程式の加速度を含む第3項を削除して表したものである。
【0036】
次いでステップ152では、弾丸ボールBBがノード所属ボールNのいずれかに命中したか否かを判断する。すなわち、現在のフレームでの各ノードNに割り当てられる全ノード所属ボールNBの中心座標Cを演算し(詳細後述)、図24(A)に示すように、弾丸ボールBBの(中心)位置Pが各ノード所属ボールNBの中心座標Cの所定半径d内にあるかを判断する。弾丸ボールBBが複数のノード所属ボールの所定半径d内に入るときは、そのうち最も距離の短いノード所属ボールNBに命中したものとみなす。なお、本例では、キャラクタcの頭を構成するノード所属ボールNBの半径を30〜40としたときに、弾丸ボールBBの半径は20〜30に設定されている(テレビモニタ4に実際に表示されるときには、後述するように、これらの大きさより小さくなる。)。
【0037】
ステップ152で否定判断のときは、次のステップ154において、弾丸ボールBBの位置Pのy成分(垂直方向座標成分)が地面又は地面より下の位置となったか(y≦0)否かを判断し、肯定判断のときは、ステップ158へ進み、否定判断のときは、ステップ156において、現在の弾丸ボールBBの位置Pがステップ146で演算した着弾目標座標と発射位置座標との距離の1.5倍(所定距離)以上の距離となったか否かを判断し、否定判断のときは、弾丸ボール関連処理サブルーチンを終了して図5のステップ116へ進み、肯定判断のときは、次のステップ158において、弾丸ボール状態フラグbbflを1から0とし、弾丸ボール関連処理サブルーチンを終了して図5のステップ116へ進む。従って、弾丸ボールBBがキャラクタcのノード所属ボールNBに命中しない場合に、位置Pが地面(y=0)より下になったとき又は所定距離以上となったときに、弾丸ボール状態フラグbbflを0とする。なお、弾丸ボール状態フラグbbflが0となると、弾丸ボールBBは消滅する。
【0038】
一方、ステップ152で肯定判断のときは、ステップ160で、弾丸ボールBBが命中した特定のノード所属ボールNB及び下位のノード所属ボールNBの命中フラグshflを0から1に変更する。すなわち、全ノード所属ボールNBは命中フラグshflを持っており、通常は命中フラグが0とされている。図22、図23に示すように、例えば、ノードN7に割り当てられるノード所属ボールNBAに弾丸ボールBBが命中したときには、図21に示す階層情報により、ノードN7より下位のノードN8、N9に割り当てられるノード所属ボールNBB、NBCの命中フラグshflも0から1に変更される。なお、実際には、図23に示したノード所属ボールNBA、NBB等はそれぞれ3個程度のノード所属ボールに分割されてノードN7、N8、N9又はこれらのノード間に割り当てられており、図21に示した階層もより複雑となっているが、本実施形態では説明を簡単にするために、ノード所属ボールNBA、NBB等が1個で構成されているものとして説明する。
【0039】
次にステップ162では、図24(B)に示すように、複数個の破片ボールFBを発生させる。ここに、破片ボールFBとは、弾丸ボールBBがノード所属ボールBBに命中したときに飛び散るボールをいい(表1参照)、弾丸ボールBBの速度ベクトルVBの方向に対して命中点H(弾丸ボールBBの中心点)から0度、±30度、±60度となる位置で弾丸ボールBBが命中したノード所属ボールNBの命中点H側の反対側に発生させる。各破片ボールFBは、バラツキを表現するために大きさが異なっており、例えば、平均半径を5とすると、±1程度の半径となるように半径4、6にランダムに設定される。また、ステップ162では、各破片ボールFBの速度ベクトルが演算され、RAMに格納される。各破片ボールFBの速度のバラツキを表すために、バラツキ係数a(0.5≦a≦1)が導入される。例えば、命中点Hから0度で発生する破片ボールFBの速度の場合には、命中前の弾丸ボールBBの方向ベクトルと同じ方向ベクトルに、命中前の弾丸ボールBBの速度ベクトルのスカラ値と0.5≦a≦1の範囲で乱数により取得したバラツキ係数aとを掛けることにより求められる。±30度、±60度で発生する破片ボールの速度ベクトルの場合は、まず、±30度、±60度で発生する破片ボールの方向ベクトルを算出し、この方向ベクトルに、命中前の弾丸ボールBBの速度ベクトルのスカラ値と0.5≦a≦1の範囲で乱数により取得したバラツキ係数aとを掛けることにより求められる。
【0040】
続いてステップ164では、命中した弾丸ボールBBがキャラクタcを構成するノード所属ボールNBに食い込んで停止した状態を表示するために(図31(A)参照)、弾丸ボールBBの速度ベクトルを(0,0,0)とし、ステップ166で、命中したノード所属ボールのパワーnbpから30を減算して、次のステップ168で、命中したノード所属ボールNBのパワーnbpが0未満となったか否かを判断する。すなわち、ステップ102での初期設定処理では、各ノード所属ボールNBにはパワーnbpとして100が与えられており、同じノード所属ボールNBに弾丸ボールBBが4回命中するとそのノード所属ボールNBのパワーnbpは0未満となる。
【0041】
ステップ168で否定判断のときは、弾丸ボール関連処理サブルーチンを終了して図5のステップ116へ進み、肯定判断のときは、次のステップ170において、当該ノード所属ボールNB及び当該ノード所属ボールの下位となるノード所属ボールNBの状態フラグnbflを「崩落」とし、RAMに記憶した後、弾丸ボール関連処理サブルーチンを終了して図5のステップ116へ進む。上述した例に即して更に付言すれば、図22に示すように、ノードN7に割り当てられるノード所属ボールNBAに弾丸ボールBBが命中したときは、ノードN7より下位のノードN8、N9に割り当てられるノード所属ボールNBB、NBCの状態フラグnbflも「通常」から「崩落」に変更される。ここに、「通常」とはノード所属ボールNBが所属するノードNに割り当てられた位置にある状態をいい(図22参照)、「崩落」とはノード所属ボールNB(例えば、NBA、NBB、NBC)が所属するノードN(例えば、N7)に割り当てられた位置から離れて(千切れて)自然落下する状態をいう。
【0042】
図5のステップ116では、キャラクタcを構成する全ノード所属ボールNBの爆発に関連する処理を行うための爆発関連処理サブルーチンを実行する。図7に示すように、爆発関連処理サブルーチンでは、ステップ182で、全ノード所属ボールNBのパワーnbpの総和(Σnbp)を演算し、次のステップ184において、全ノード所属ボールNBのパワーnbpの総和が初期設定処理でのパワーの総和の50%以下か否かを判断する。上述したように、各ノード所属ボールNBの初期設定処理でのパワーnbpは100であり、図22に示すように、ノード所属ボールNBが18個のときは、Σnbpが900以下か否かが判断される。
【0043】
否定判断のときは、キャラクタcは爆発しないものとして、爆発関連処理サブルーチンを終了し図5のステップ118へ進む。一方、肯定判断のときは、ステップ186で全ノード所属ボールNBの状態フラグnbflを「爆発」とし、次のステップ188において、全ノード所属ボールNBの拡散順(拡散開始時間)を演算し、RAMに記憶した後、爆発関連処理サブルーチンを終了して図5のステップ118へ進む。
【0044】
ノード所属ボールNBの状態フラグnbflが「爆発」となると、キャラクタcを構成するノード所属ボールNBは楕球状の破片となって散乱(拡散)する。全ノード所属ボールNBは同時に散乱するようにしても良く又ランダムでも良いが、本実施形態では時間的にばらばらに散乱する。爆発の中心は、図6のステップ152で弾丸ボールBBが命中したノード所属ボールNBとなる。図22に示したノード所属ボールNBAが爆発の中心となる場合には、例えば、ノードN7、N8、N9に割り当てられるノード所属ボールNBA、NBB、NBCの拡散開始時間ts=0(現在)、ノードN7、N10、N11に割り当てられるノード所属ボールNBの拡散開始時間ts=20(現在から20/60秒後)、ノードN7、N6に割り当てられるノード所属ボールNBの拡散開始時間ts=40、ノードN7、N1に割り当てられるノード所属ボールNBの拡散開始時間ts=60、ノードN1、N2、N3に割り当てられるノード所属ボールNBの拡散開始時間ts=80、ノードN1、N4、N5に割り当てられるノード所属ボールNBの拡散開始時間ts=100というように、拡散開始時間tsに時間差を設けて拡散順が設定される。また、拡散開始時の各ノード所属ボールNBの方向及び初速は、爆発により全ノード所属ボールNBが概ね全方向に散乱するように各拡散初速ベクトルV0が予め設定されている。
【0045】
図5のステップ118では、全てのメタボールについて後述するメタボール更新処理及び濃度分布処理が終了したか否かを判断し、否定判断のときは、ステップ120でメタボールのオブジェクト情報を更新(生成)するためのメタボール更新処理サブルーチンを実行する。
【0046】
図8に示すように、メタボール更新処理サブルーチンでは、ステップ212において、処理対象がノード所属ボールNBか否かを判断する。肯定判断のときは、ステップ214で後述するノード所属ボール処理サブルーチンを実行し、否定判断のときは、ステップ216において、処理対象が接地ボールGBか否かを判断する。接地ボールGBとは、キャラクタcの真下に配置されキャラクタcの移動に伴って地面を這いずるボールをいい(表1、図20(A)参照)、テレビモニタ4上ではキャラクタcの真下に配置された水たまりのように表示される。肯定判断のときは、ステップ218で後述する接地ボール処理サブルーチンを実行し、否定判断のときは、ステップ220において、処理対象が触手ボールTBか否かを判断する。触手ボールTBとは、特定のノード所属ボールから突出し細長い触手を構成するボールをいう(表1、図20(A)参照)。肯定判断のときは、ステップ222で後述する触手ボール処理サブルーチンを実行し、否定判断のときは、ステップ224において、処理対象が弾丸ボールBBか否かを判断する。肯定判断のときは、ステップ226で後述する弾丸ボール処理サブルーチンを実行し、否定判断のときは、ステップ228において、処理対象が破片ボールFBか否かを判断する。肯定判断のときは、ステップ230で後述する破片ボール処理サブルーチンを実行し、否定判断のときは、ステップ232で滴ボール処理サブルーチンを実行する。なお、滴ボールとは、特定のノード所属ボールNBから滴り落ちるボールをいう(表1、図20(A)参照)。
【0047】
図9に示すように、ノード所属ボールサブルーチンでは、ステップ252において、処理対象のノード所属ボールNBの状態フラグnbflが通常か否かを判断する。ステップ252での判断が肯定のときは、次のステップ254で、処理対象のノード所属ボールNBの命中フラグshflが1か否かを判断し、否定判断のときはステップ257へ進み、肯定判断のときは、ステップ256において、ステップ112で取得した、処理対象のノード所属ボールNBが所属する(割り当てられる)ノードNのモーションデータを、弾丸ボールBBの衝撃に従って補正するためのノード補正処理サブルーチンを実行する。
【0048】
図10に示すように、ノード座標補正処理サブルーチンでは、ステップ302において、処理対象のノード所属ボールNBの回転角が既に演算されているか否かを判断し、肯定判断のときはステップ308に進み、否定判断のときは、次のステップ304において、弾丸ボールBBが命中した衝撃によるキャラクタcの仰け反りを表すための回転角を演算する。
【0049】
図23に示すように、命中点Hに弾丸ボールBBが命中すると、命中点Hには、(ノードN1から命中点Hに向かうベクトルr)と(力を表すベクトルF)との外積となるトルクTが生ずる。このとき、キャラクタcの仰け反りを表すために、キャラクタcの中心ノードとなるノードN1を中心として回転するものとする。なお、ベクトルFは、便宜上、ステップ146で演算した弾丸ボールBBの速度ベクトルVB(x,y,z)の各成分値をそのまま用いてもよいし、ステップ146で演算した弾丸ボールBBの方向ベクトルに所定のスカラ値を掛けて算出するようにしてもよい。
【0050】
例えば、ベクトルr、ベクトルFの(x,y,z)成分を、それぞれ(0,10,−2)、(9,2,−4)とすると、ノードN1に働くトルクTは、T=(0,10,−2)×(9,2,−4)=(−36,−18,−90)となり、ノードN1を中心とする回転量ARは、{(−36)2+(−18)2+(−90)2}1/2=98.6として求めることができる。回転量AR=98.6をこのまま回転角Aとするには値が大きいので、1/10として算出する。弾丸ボールBBが命中した衝撃によるキャラクタcの仰け反りをゲーム上適切に表現するためには、キャラクタcの仰け反り角度を30度以上とすることが好ましいので、回転角A=30+9.86=39.86(度)として演算する。なお、回転角Aが60(度)を超えるときは、ゲーム上適切に表現するために、回転角Aを最大値の60(度)とする。
【0051】
続いてステップ306では、単位時間(1/60秒)当たりの進み回転角及び戻り回転角を演算してRAMに記憶する。すなわち、上記の例に則して説明すれば、弾丸ボールBBが命中したときのキャラクタcの仰け反りを1フレームで描画すると奇異に感じられるため、10フレームで回転量A=39.86(度)の回転を表し(単位時間当たりの進み回転角Aa=39.86/10=3.986(度))、30フレームで本来の(ステップ112で取得する)ノードNの座標位置に戻す(単位時間当たりの戻り回転角Ar=39.86/30=1.32(度))。また、図21に示す階層情報によりノードN7より下位のノードN8、N9もノードN7と同様に回転する。従って、ステップ306では、これらのノードのうち最初の処理対象となるノードNの進み回転角Aa、戻り回転角Arのみを演算してRAMに記憶する。なお、ステップ302で既に回転角を演算済みかを判断するには、処理対象のノード所属ボールNBの命中フラグshflが1のときに、ステップ306で記憶する(記憶した)RAMの所定領域を参酌すればよい。
【0052】
ステップ308では、現フレームでの回転状態を把握するために、回転角カウンタrotcを1インクリメントし、次のステップ310において、回転角カウンタrotcが10以下か否かを判断する。肯定判断のときは、ステップ312において、ステップ112で取得した処理対象のノードNのモーションデータについてステップ306でRAMに記憶した進み回転角Aa分回転させ、ノード補正処理サブルーチンを終了して図9のステップ257へ進む。このようなモーションデータの補正(ノード補正)は、上述した「3次元コンピュータグラフィックス」等で公知のように、モーションデータを含む行列と回転角を含む行列とを掛けることで演算することができる。一方、否定判断のときは、次のステップ314において、回転角カウンタrotcが40か否かを判断し、否定判断のときは、ステップ316において、ステップ112で取得した処理対象のノードNのモーションデータについてステップ306でRAMに記憶した戻り回転角Ar分回転させ、ノード補正処理サブルーチンを終了して図9のステップ257へ進み、肯定判断のときは、ステップ318において、弾丸ボールBBの衝撃の影響がなくなったものとして、命中フラグshflを1から0とし、ノード補正処理サブルーチンを終了して図9のステップ257へ進む。
【0053】
ステップ257では、所属ノードに処置対象のノード所属ボールNBを配置する(割り当てる)。図25に示すように、例えば、ノードN1に配置されるノード所属ボールNBDを例として説明すると、ノードN1のモーションデータmatN1は、スケール情報(x,y,z)=(1,1,1)、(グローバル)位置情報(x,y,z)=(30,120,0)及び回転情報(x,y,z)=(0,0,0)を含んでおり、現在のフレームでのモーションデータとしてステップ112で取得されている(又はステップ306で補正されている。)。ノードN1に所属するノード所属ボールNBDのスケール情報(x,y,z)=(20,30,20)、ノードN1に対する位置情報(x,y,z)=(0,10,10)は一定で予め定められており、行列matCDで表すことができる。行列matCDは一定なため、例えば、ゲームデータを作成する前に静的なモデルデータを作成して得ることができる。ノード所属ボールNBDは、行列matCDでノードN1に割り当てられる。ノード所属ボールNBDのグローバル座標でのオブジェクト情報は、matNBD=matN1・matCDで演算することができる。すなわち、ノード所属ボールNBDのグローバル座標における中心位置CDは(30,130,10)であり、スケール(大きさ)は(20,30,20)である。なお、図25には、上述したステップ312、316に関連してy軸を中心に回転した場合のmatN1の一例を示しており、スケール情報が(1,1,1)以外となる。また、詳細説明を省略したステップ152での全ノード所属ボールNBの中心座標Cは、本ステップのように4行4列の行列同士を掛けることで、又は、演算負荷を軽減するために、両行列のうちの位置情報のみを加算することで演算することができる。
【0054】
次のステップ258では、処理対象のノード所属ボールNBの大きさを変更する呼吸処理を行う。例えば、ノード所属ボールNBDの大きさが(20,30,20)の場合に、当該ノード所属ボールNBは、1.5倍(30,45,30)までの大きさに垂直帰線周期毎に周期的に変更される。すなわち、垂直帰線周期毎にスケール情報が1.1倍、1.2倍、・・・、1.5倍に変更され、その後、1.4倍、1.3倍、・・・、1.0倍に変更される周期を繰り返す。前回の垂直帰線周期の大きさのデータをRAMに記憶しておくことで、現在のスケール情報の変更データを得ることができる。このような処理により、各ノード所属ボールNBの大きさが変更され、キャラクタcが呼吸している様子を描画することができる。
【0055】
次にステップ260では、処理対象のノード所属ボールNBが滴ボールDBを発生させるノード所属ボールか否かを判断する。図20(A)、(B)に示すように、本例では、ノードN9、N11に割り当てられるノード所属ボールNBが滴ボールDBを発生させるノード所属ボールである。否定判断のときは、ノード所属ボール処理サブルーチンを終了して図5のステップ122へ進み、肯定判断のときは、次のステップ262において、滴ボールフラグdbflが0か否かを判断する。ステップ262で否定判断のときは、ノード所属ボール処理サブルーチンを終了して図5のステップ122へ進む。一方、ステップ262で肯定判断のときは、次のステップ264で滴ボールフラグdbflを0から1に変更し、ノード所属ボール処理サブルーチンを終了して図5のステップ122へ進む。これにより、滴ボールDBが発生する。
【0056】
ステップ252での判断が否定のときは、ステップ266において、処理対象のノード所属ボールNBの状態フラグnbflが「爆発」か否かを判断する。ステップ266での判断が肯定のときは、次のステップ268において、ステップ188で演算した処理対象のノード所属ボールNBの拡散開始時間が経過したか否かを判断し、否定判断のときは、拡散順に至ってないのでノード所属ボール処理サブルーチンを終了して図5のステップ122へ進み、肯定判断のときは、ステップ270で当該ノード所属ボールNBの位置を演算する。上述したように、拡散速度VSは、地面より上にあるときは、VS=VS−1−g・δtで演算するが地面まで来たら止まる。ノード所属ボールNBの位置は、その拡散速度ベクトルVSをオイラー法の運動方程式で求める(Pt=Pt−1+VS−1・δt)。なお、Vs−1は前回の垂直帰線割込時の拡散速度、gは重力加速度、δtは垂直帰線割込時間(1/60秒)、Ptは現在の位置、Pt−1は前回の垂直帰線割込時の位置をそれぞれ表している。
【0057】
次にステップ272において、ステップ270で演算された処理対象のノード所属ボールNBの位置PNのy成分が0又は0より小さいか否かを判断し、否定判断のときは、ステップ274において、処理対象のノード所属ボールNBが楕球状となるように変更する形状変更処理を行う。例えば、処理対象のノード所属ボールNBの拡散開始前のスケール情報が(20,30,20)で、現在の拡散速度VSがx、y、z成分で(3,4,5)とすると、拡散速度VSのx、y、z成分のうち最も絶対値の大きいz成分の数値を利用して、20×30×20=(20+a)×(30+a)×(20+5)を満たすaを算出し(a=−2.5)、ノード所属ボールNBの拡散前の体積と拡散中の体積とが概ね同じとなるように、処理対象のノード所属ボールNBのスケール情報を(20−2.5,30−2.5,20+5)=(18.5,27.5,25)として演算して、ノード所属ボール処理サブルーチンを終了し図5のステップ122へ進む。なお、拡散速度VSが減衰してVS=0となる瞬間に、処理対象のノード所属ボールNBは拡散開始前のスケール情報と同じ(20,30,20)となる。
【0058】
一方、ノード所属ボールNBが自然落下するときに、ステップ270(又は後述するステップ280)で演算したノード所属ボールNBのy成分の速度が3(m/s)とすると、y成分の速度の絶対値に着目して、20×30×20=(20+a)×(30+3)×(20+a)を満たすaを算出し(a=−1)、ノード所属ボールNBの拡散前の体積と自然落下中の体積とが概ね同じとなるように、処理対象のノード所属ボールNBのスケール情報を(20−1,30+3,20−1)=(19,33,19)として演算して(図32(B)参照)、ノード所属ボール処理サブルーチンを終了し図5のステップ122へ進む。なお、この場合に20×30×20=(20×a)×(30×1.1)×(20×a)としてaを演算するようにしてもよい。このとき、30×1.1は30+3と同じ意味となる。
【0059】
このように拡散速度VSに応じて、処理対象のノード所属ボールNBのスケール情報が確定し、ステップ270(又は後述するステップ280)で演算した位置情報と併せて、「爆発」状態のノード所属ボールNBのオブジェクト情報となる行列matNBを得ることができる。
【0060】
一方、ステップ272で否定判断されたときは、ステップ276において、ノード所属ボールNBの状態フラグnbflを「這いずり」とし、RAMに記憶した後、ノード所属ボール処理サブルーチンを終了して図5のステップ122へ進む。ここに、「這いずり」とは、図26に示すように、ノード所属ボールNBが地面に到達した後に、予め設定された一定速度V(スカラ値)でキャラクタcの足部のノードN3又はノードN5向けて地面を這いずり、ノードN3又はノードN5に到達した後、図20(B)に示すように、階層を構成するノードNを経由して本来所属するノードNの位置まで移動することをいう。例えば、図22に示したノード所属ボールNBAの状態フラグnbflが「這いずり」となると、ノード所属ボールNBAは、地面に到達したときの形状でノードN3に向かって地面を這いずり、ノードN3に到達した後、ノードN2、N1を経て所属するノードN7の位置まで移動する。また、ノードN7に対して反対側に配置されたノードN10に所属するノード所属ボールNBの場合には、地面に到達したときの形状でノードN5に向かって地面を這いずり、ノードN5に到達した後、ノードN4、N1、N7を経て所属するノードN10の位置まで移動する。従って、図21に示した階層情報に従ってノード所属ボールNBが割り当てられる左右のノードより地面を這いずるときに到達目標となるノードや経由するノードが異なることになる。
【0061】
ステップ266での判断が否定のときは、ステップ278において、処理対象のノード所属ボールNBの状態フラグnbflが「崩落」か否かを判断する。肯定判断のときは、ステップ280で、処理対象のノード所属ボールNBの位置を演算する。「崩落」では、処理対象のノード所属ボールNBがキャラクタcから千切れ自然落下する状態が描画される。このため、ステップ270で地面より上にあったときの演算と同様に、処理対象のノード所属ボールNBの状態フラグnbflが「崩落」となる直前の(「通常」での)x成分、y成分、z成分をそのまま維持する。なお、次の垂直帰線割込時(1/60秒後)にVt−1として用いられる現在のy成分の速度Vt=−g・δt+Vt−1についても併せて演算しRAMに記憶して、ステップ272に進む。
【0062】
一方、ステップ278で否定判断のとき、すなわち、処理対象のノード所属ボールNBの状態フラグnbflが「這いずり」のときは、ステップ282で、処理対象のノード所属ボールNBの位置を演算する。ノードN3、N5の位置はフレーム毎にモーションデータが変更されるので、処理対象のノード所属ボールNBが地面を這いずる方向は垂直帰線割込毎に異なる。このため、行列matN3(又はmatN5)によりノードN3(又はノードN5)の現在位置(到達目標)と前回の垂直帰線割込時の処理対象のノード所属ボールNBの位置とから方向ベクトルVUを算出し、スカラ値で表される速度Vを掛けることによって速度ベクトルVcr(Vcr=V・VU)を求めRAMに記憶する。処理対象のノード所属ボールNBの(中心)位置Pcrは、Pcr=Pt−1+Vcr・δtで演算することができる。なお、処理対象のノード所属ボールNBが地面を這いずっているときは、テレビモニタ4上での楕球状のノード所属ボールNBの上部半球のみが表示される。また、ノードN3(又はノードN5)に到達した後は、到達目標をノードN2(又はノードN4)、N1と順次変更して、処理対象のノード所属ボールNBの位置が状態フラグnbfl「通常」の位置となるまで、位置が演算される。これにより、「這いずり」状態のノード所属ボールNBのオブジェクト情報となる行列matNBを得ることができる。
【0063】
上述したように、ノード所属ボールNBはノードN3(又はノードN5)に到達すると、ノードN2(又はノードN5)に向かう。換言すれば、ノード所属ボールNBのy成分は0より大きくなる。従って、ステップ284では、ノード所属ボールNBの位置情報のy成分が0より大きいか否かを判断し、否定判断のときは、地面を這いずっている状態を続行するためにノード所属ボール処理サブルーチンを終了して図5のステップ122へ進み、肯定判断のときは、次のステップ286で、処理対象のノード所属ボールNBの「通常」での位置を演算し(図22、図25参照)、ステップ288において、処理対象のノード所属ボールNBの現在の位置がステップ286で演算した「通常」での位置の所定半径内にあるかを判断することで、処理対象のノード所属ボールNBが通常位置に戻ったか否かを判断する。否定判断のときは、ノードN間を這いずっている状態を続行するためにノード所属ボール処理サブルーチンを終了して図5のステップ122へ進む。一方、肯定判断のときは、次のステップ290で、処理対象のノード所属ボールNBの状態フラグnbflを「通常」とすると共に、処理対象のノード所属ボールのパワーnbpを100とし、ノード所属ボール処理サブルーチンを終了して図5のステップ122へ進む。
【0064】
次に、図27(A)を参照して、接地ボールGBについて説明する。接地ボールGBは、地面に配設される(位置情報のy成分が0の)4つの小接地ボールGBa、GBb、GBc、GBdで構成されている。各小接地ボールGBa〜GBdが分離すると接地ボールGBが複数個となり奇異に感じられるため、フレーム毎に各小接地ボールのスケール情報及び位置情報を調整し、1個の接地ボールGBが形成される。このため、小接地ボールGBa〜GBdはノードN3又はノードN5に関連付けられており、仮想バネの概念が導入されている。すなわち、小接地ボールGBa、GBbの中心及びノードN5、小接地ボールGBc、GBdの中心及びノードN3は、それぞれ仮想バネを介して接続されている。また、小接地ボールGBa、GBbの中心間及び小接地ボールGBc、GBdの中心間は、別の仮想バネで接続されている。
【0065】
図11に示すように、接地ボール処理サブルーチンでは、ステップ322において、全ての小接地ボールの処理が終了したか否かを判断し、否定判断のときは、次のステップ324で、対象の小接地ボールの前回の垂直帰線割込時の位置及び対象の小接地ボールが関連付けられたノードNの現在の位置を読み出し、ステップ326において対象の小接地ボールに働く加速度αを演算する。
【0066】
図27(B)に示すように、小接地ボールGBaを例に挙げて説明すると、ノードN5及び小接地ボールGBaの中心間の距離xはステップ324で読み出した位置から求めることができる。仮想バネには、kを予め設定されたバネ定数、ノードN1から受ける加速度をα1とすると、F=−kx=mα1の力Fが作用している。いま、小接地ボールGBaの質量mを1とすると、加速度α1は、α1=−kxとして求めることができる。上述したように、小接地ボールGBa及びGBb間には、別の仮想バネが存在している。この仮想バネによる加速度α2を算出するため、対象の小接地ボールGBaと小接地ボールGBbとの前回の垂直帰線割込時の位置を読み出し、両者間の距離xを求める。加速度α2は、F=−kx=α2(m=1)により算出される。加速度αは加速度α1と加速度α2とを(x,y,z)成分毎に加算することで得ることができる。
【0067】
次いでステップ328では、対象の小接地ボールの速度Vtを、Vt=Vt−1+αδtによりx成分及びz成分について演算しRAMに記憶する。この演算式において、Vt−1は前回の垂直帰線割込時の小接地ボールの速度を表している。なお、接地ボールGBの位置情報のy成分は常に0のため演算する必要はない(Vt=(x,0,z))。
【0068】
次のステップ330では、対象の小接地ボールの前回の垂直帰線割込時のスケール及び速度Vt−1を読み出して、ステップ328で演算した速度Vtから対象の小接地ボールの大きさを演算し現在のスケールとしてRAMに記憶する。例えば、小接地ボールGBaの前回の垂直帰線割込時のスケールが(20,0,30)で速度Vt−1が(10,0,5)のときは、速度Vt−1のx,z成分のうち絶対値の大きいx成分(10)に着目し、小接地ボールGBaの大きさ(面積)を同じに維持するために、20×30=(20+10)×(30−a)から、現在の小接地ボールGBaのz成分のスケールを算出する(a=10)。この演算により、現在の小接地ボールGBaのスケールは(30,0,20)となる。なお、小接地ボールGBaの現在の位置には、前回の垂直帰線割込時の位置が用いられる(後述するステップ332参照)。
【0069】
従って、ステップ324〜330では、ノードN3(又はノードN5)の移動により小接地ボールとの距離が大きくなる場合に、仮想バネによる力Fが大きくなる(小接地ボールGBaの加速度α及び小接地ボールGBaがノードN3(又はノードN5)に追随する速度Vtが大きくなる)結果、加速度αが作用する方向へ小接地ボールのスケールが大きくなるように変更されるので、小接地ボール同士が分離しない傾向を保持することができ、接地ボールGBを1個として描画することができる。
【0070】
次にステップ332では、対象の小接地ボールの最新位置Ptを演算しRAMに記憶して、ステップ322へ戻る。最新位置Ptは、Pt=Pt−1+Vt・δtで演算することができる。なお、Pt−1は前回の垂直帰線割込時の対象の小接地ボールの位置を表している。ステップ322で肯定判断のときは、ノード所属ボール処理サブルーチンを終了し図5のステップ122へ進む。
【0071】
図12に示すように、触手ボール処理サブルーチンでは、ステップ336において、触手ボールTBの基部位置P0を演算する(図20(A)も参照)。触手ボールTBの基部位置P0は、ノード所属ボールNBEの状態フラグnbflが「通常」のときに、特定のノード所属ボールNB(本例では、ノードN7に割り当てられキャラクタcの肩に配置されるノード所属ボールNBE)の中心に位置する(例えば、(50,120,100))。ただし、ノード所属ボールNBEの状態フラグnbflが「爆発」(正確には、拡散開始時以降)、「崩落」、又は「這いずり」(正確には、y=0での這いずり)のときは、触手ボールTBの基部位置P0は、y成分が0の(50,0,100)として接地ボールGBの表面に位置する。触手ボールTBの基部位置P0は、ノード所属ボールNBEの状態フラグnbflが「這いずり」でy=0の間は、垂直帰線割込が繰り返されても、変わることなく維持され、ノード所属ボールNBEの状態フラグnbflが「這いずり」でy>0となると、ノード所属ボールNBEの中心となる。
【0072】
従って、触手ボールTBの基部位置P0は、ノード所属ボールNBEの状態フラグnbflが「通常」以外のときに、ノード所属ボールNBEが「爆発」(拡散開始時以降)、「崩落」又はその後の「這いずり」となると、接地ボールGBに固着するように描画され、「這いずり」でノード所属ボールNBEのy成分が0より大きくなると、ノード所属ボールNBEの中心に固着して本来のノード所属ボールNBEの位置まで戻るように描画される。
【0073】
次のステップ338では、触手ボールTBの先端位置P5を演算する。図20(A)に示すように、触手ボールTBの先端位置P5は、プレイヤキャラクタが存在するときは、当該プレイヤキャラクタを威嚇するように、プレーヤキャラクタの移動に追随するように設定することも可能であるが、本例では、プレイヤキャラクタが存在しない場合を想定して、仮想カメラに向かって触手ボールTBの先端位置P5を移動させることでプレイヤを威嚇する。すなわち、非可視の目標点Pδtが予めモーションデータとして設定されており、前回の垂直帰線割込時の目標点Pδt−1(図29(C)参照)から一定間隔(例えば、(10,10,10))隔てられた位置が触手ボールTBの先端位置P5として演算される。
【0074】
図20(A)に示すように、触手ボールTBは、基部位置P0及び先端位置P5間でベジエ曲線を利用して滑らかな曲線として描画される。図29(A)に示すように、ベジエ曲線は、一般に4点(P0,P1,P2,P3)で形成される。本例では、触手ボールTBをリアルに表現するために、4点を超える中間点が用いられている。この場合に、図29(B)に示すように、4点で形成されるベジエ曲線をそのまま連結すると、点P3が不連続点となる(滑らかでなくなる)。このため、図29(C)に示すように、点P2と点P3との中間に点P2’を存在させて、触手ボールTBを滑らかな曲線で描画している。
【0075】
図30(A)に示すように、触手ボールTBの基部、先端及び中間点は仮想バネで接続されている。今、中間点P1に着目して、現在の中間点P1の位置を演算する場合について詳述すると、図30(B)に示すように、前回の垂直帰線割込時に中間点P1に働いていた力Fδt−1は、Fδt−1=F01+F02によりベクトルで表される。力F01、F02は、前回の垂直帰線割込時に、基部位置P0に接続された仮想バネ及び中間点P2に接続された仮想バネが、それぞれ中間点P1に作用していた力を表している。力F01は、前回の垂直帰線割込時の基部位置P0と前回の垂直帰線割込時の中間点P1の位置との距離をx、仮想バネのバネ定数をk、基部位置P0に接続された仮想バネによる前回の垂直帰線割込時の中間点P1の加速度をα01とすると、F01=−kx=mα01として求めることができる。質量m=1とすると、加速度α01はα01=−kxとなる。同様に、力F02は、F02=−kx=mα02として求めることができる。なお、α02は中間点P2に接続された仮想バネによる前回の垂直帰線割込時の中間点P1の加速度を表している。従って、前回の垂直帰線割込時に中間点Pmに働いていた加速度αt−1は、αt−1=α01+α02で求めることができる。中間点P1は、この加速度αt−1の方向に移動する。このように、前回の垂直帰線割込時の加速度、速度、位置を用いて中間点P1を含む各中間点の演算するのは、基部位置P0から中間点P1、P2、・・・、P4方向、及び、先端位置P5から中間点P4、P3、・・・、P1方向への双方向に、基部位置P0、先端位置P5の位置の変動が1/60秒毎に仮想バネを介して順に隣りの中間点に伝達される様子を描画するためである。
【0076】
ステップ340では、前回の垂直帰線割込時に中間点P1、P2、P2’、P3、P4(以下、これらの中間点を総称するときは中間点Pmという。)に働いていた加速度αt−1、速度Vt−1及び前回の垂直帰線割込時の中間点Pmの位置Pt−1を読み出して、中間点Pmの現在位置Ptを演算する。現在の中間点Ptの位置は、現在の中間点Pmの速度をVt(=Vt−1+αt−1・δt)とすると、Pt=Pt−1+Vt−1・δtで与えられる。
【0077】
次のステップ342では、図30(C)に示すように、中間点Pmの現在位置Ptで働く力Ftから加速度αt及び速度Vtを演算し、現在位置Ptと共にRAMに記憶して、次回の垂直帰線割込時のステップ340での演算に備える。次いでステップ344では、ステップ336、338、340で演算した基部位置P0、先端位置P5、中間点Pmで表されるベジエ曲線を演算し、次のステップ346でベジエ曲線上に触手ボールTBを配置して触手ボール処理サブルーチンを終了し図5のステップ122へ進む。なお、触手ボールTBの太さ(直径)は予め定められており、触手ボールTBに仮想バネの概念を導入したことで、触手ボールTBは伸縮(基部位置P0、先端位置P5、中間点Pm間の距離が変動)することとなる。このため、本例では、触手ボールTBは、触手ボールの伸縮に反比例するように触手ボールTBの基部位置P0、先端位置P5、中間点Pm間で太さが変更される。
【0078】
図13に示すように、弾丸ボール処理サブルーチンでは、弾丸ボールBBの方向ベクトルが0(図6のステップ164参照)か否かを判断し、否定判断のときは、弾丸ボール処理サブルーチンを終了して図5のステップ122へ進み、肯定判断のときは、ステップ354で弾丸ボールカウンタbbcを1インクリメントし、次のステップ356において、弾丸ボールカウンタbbcが180か否かを判断する。なお、弾丸ボールカウンタbbcが180となるのは、弾丸ボール方向ベクトルが0となってから、180×1/60=3(秒)後である。
【0079】
肯定判断のときは、次のステップ358で、ノード所属ボールNBに命中後の弾丸ボールBBの位置を演算する。なお、命中前の弾丸ボールBBの位置は図6のステップ148、150で演算済みである。図32(A)に示すように、弾丸ボールBBは、ノード所属ボールNBに命中すると、方向ベクトルが0となるため、命中点Hを弾丸ボールBBの中心としてノード所属ボールBBに食い込んだ状態で静止するが、命中したノード所属ボールBBは、所属するノードNの位置がフレーム毎に更新されるため、グローバル座標上で移動するので、結果として弾丸ボールBBもグローバル座標上で移動することになる。このため、ステップ358では、ステップ164で命中したノード所属ボールNBの中心を0とした命中点Hの座標系(x,y,z)を予め演算しておき、その座標系(x,y,z)を用いて、図28に示すように、命中したノード所属ボールNBの中心に対する弾丸ボールBBの中心のグローバル座標上での位置(50,10,130)を演算する。なお、図28は、ノード所属ボールNBの中心を0としたときの命中点Hの座標系(x,y,z)を(1,0,0)とした例である。
【0080】
次のステップ360では、後述する、メタボールの外形を演算するときに用いる濃度係数m_fChargeを通常での1から−1に変更し、弾丸ボール処理サブルーチンを終了して図5のステップ122へ進む。なお、濃度係数m_fChargeを−1とすることで、図31(B)に示すように、弾丸ボールBBは非可視となり、命中したノード所属ボールNBの弾丸ボールBBが食い込んでいる箇所が穴が空いた状態で描画される。
【0081】
一方、ステップ356で否定判断のときは、ステップ358と同様に、弾丸ボールBBの位置を演算し、弾丸ボールカウンタbbcが300か否かを判断し、否定判断のときは、弾丸ボール処理サブルーチンを終了して図5のステップ122へ進み、肯定判断のときは、ステップ366で弾丸ボール状態フラグbbflを0とし、弾丸ボール処理サブルーチンを終了して図5のステップ122へ進む。弾丸ボールカウンタbbcが300となるのは、弾丸ボールBBがノード所属ボールNBに命中してから5秒後である。従って、弾丸ボールBBはノード所属ボールNBに命中後3秒間は可視状態で表示され、その後2秒間は非可視状態、すなわち、ノード所属ボールNBに穴が空いた状態で表示される。
【0082】
図14に示すように、破片ボール処理サブルーチンでは、ステップ372で破片ボールカウンタfbcを1インクリメントし、次のステップ374において、fbcが100かを判断する。肯定判断のときは、ステップ380へ進み、否定判断のときは、ステップ376において、破片ボールFBが発生した位置に、ステップ162で演算した破片ボールFBの速度ベクトルと破片ボールカウンタbbcと垂直帰線割込の時間(1/60秒)を掛けた移動距離を加えることで、破片ボールFBの現在位置(x,y,z)を演算する。次にステップ378では、破片ボールFBの位置のy成分が0又は0より小さいか否かを判断し、否定判断のときは、破片ボール処理サブルーチンを終了して図5のステップ122へ進み、肯定判断のときは、破片ボールFBの存在期間(100/60秒)が経過したか、又は、地面に到達したので、処理対象の破片ボールFBを消滅させ、破片ボール処理サブルーチンを終了して図5のステップ122へ進む。なお、本例では、破片ボールFBは滴ボールDBより小さく存在期間も短いため、ノード所属ボールNBの拡散時、崩落時、自然落下時のような、又は、後述する滴ボールの自然落下時のような形状変更処理を欠いている。
【0083】
図15に示すように、滴ボール処理サブルーチンでは、ステップ392で落下速度を補正する。上述したように、滴ボールDBを発生させるノード所属ボールNBが予め設定されており、ノード所属ボールNB上の滴ボールDBを発生させる発生点(x,y,z)も定められている。グローバル座標上では、図28に示した行列で滴ボールDBの発生点が演算可能である。滴ボールDBは自然落下するため、発生時の滴ボールDBの位置のx成分、z成分をそのまま保持し、y成分について滴ボールDBの現在位置を演算すれば、滴ボールDBを描画することができる。滴ボールDBの落下速度(y成分)は、ステップ270の場合と同様に、Vt=−g・δt+Vt−1−C・Vt−1・δtにより演算することができる(図32(A)参照)。滴ボールDBは、自然落下により空気による摩擦抵抗を受ける(Cは摩擦抵抗)。この結果、落下速度Vtの最大値は3.1m/sとなる(図32(B)参照)。
【0084】
続くステップ394では、滴ボールDBのスケール情報(形状)を変更する。滴ボールDBの発生点でのスケール情報を(10,20,10)、ステップ392で演算された現在の落下速度Vtのy成分を3(m/s)とすると、落下速度Vtを利用して10×20×10=(10×a)×(20×1.15)×(10×a)を満たすaの絶対値を算出し(aの絶対値:0.7)、滴ボールDBの落下前の体積と落下中との体積とが概ね同じとなるように、滴ボールDBのスケールを(10×0.7,23,10×0.7)=(7,13,7)として演算する(図32(B)参照)。
【0085】
次いでステップ396では、滴ボールDBの位置を演算する。滴ボールDBの現在位置のy成分は、ステップ270の場合と同様に、PN=Pt−1+VS−1・δtにより演算することができる。次にステップ398では、ステップ396で演算した滴ボールDBの現在位置のy成分PNが0又は0より小さいか否かを判断し、否定判断のときは、滴ボール処理サブルーチンを終了して図5のステップ122へ進む。一方、肯定判断のときは、次のステップ400で滴ボールフラグdbflを0とし、滴ボール処理サブルーチンを終了して図5のステップ122へ進む。これにより、処理対象の滴ボールDBは接地ボールGBに到達して消滅し、次の垂直帰線割込時に滴ボールDBの発生点で新たな滴ボールが発生する(ステップ264)。
【0086】
従って、メタボール更新処理サブルーチンでは、現在のフレームで存在する全メタボールが、原則的にスケール情報、位置情報、回転情報を含むオブジェクト情報(4行4列の行列)により3次元仮想空間(仮想枠)内に原始的に配置される。なお、上述したように、触手ボールTBはベジエ曲線上に配置されるので、4行4列の行列の形式ではないが、ベジエ曲線で特定されるオブジェクト情報により3次元仮想空間内に配置される。
【0087】
図5のステップ122では、3次元仮想空間内に配置されたメタボールの濃度分布を評価点毎に調べる濃度分布処理サブルーチンが実行されるが、濃度分布処理サブルーチンについて触れる前に、本実施形態で用いられるメタボール内部の濃度評価式、評価点及び濃度評価について説明する。
【0088】
本実施形態では、メタボール内部の濃度h(r)を評価する濃度評価式として下式(2)が用いられる。式(2)において、Rはメタボールの半径、rはメタボールの基準位置から評価点までの距離、m_fChargeは1又は−1をとるメタボールの濃度係数を表している。なお、基準位置とは、メタボールの濃度が1となる位置をいい、例えば、楕球の場合にはその中心位置となる。
【0089】
【数2】
【0090】
図33に示すように、式(2)によるメタボールの濃度h(r)は、距離rに対して2次関数の特性を有している。式(2)は、r2/R2<1のときに用いられるメタボール内部の濃度の評価式であり、図33から明らかなように、r2/R2≧1(メタボールの外部)では、濃度h(r)は0となる。
【0091】
式(2)でメタボールの濃度係数m_fChargeが1の場合に、半径1(R=1)の2つのメタボール球が一部重なっている(融合している)状態を考えると、図34(A)に示すように、融合部分に相当する位置に凸部が形成された濃度分布状態となる。図34(B)、(C)に、この濃度分布を真上から見たときの等濃度曲線、閾値が0.8のときの2つのメタボールの融合形状を示す。閾値は、等濃度曲線を指定(特定)するパラメータとして機能する。なお、本実施形態では、メタボール描画ルーチンにおいて閾値を一定値(0.3程度)として用いているため、レンダリング空間にメタボールを再生成すると、メタボールのスケール情報より小さな形状となる。一方、半径1の2つのメタボール球が一部重なっている場合に、一方のメタボール球に濃度係数m_fCharge=−1を与えると、当該一方のメタボールが非可視となる状態が表現されると共に、その周りの濃度が下がり、他方のメタボール球の融合部分に穴が空いた状態を表現することができる(図31(B)参照)。
【0092】
図35(A)に示すように、メタボールMBは、3次元仮想枠IB内に配置される。仮想枠IBは、大きさが(Δx,Δy,Δz)の多数のボクセルVxに仮想的に分割されている。例えば、仮想枠IBの大きさを(150,150,150)、x,y,z方向にそれぞれ120個のボクセルが存在すると、Δx,Δy,Δzは、150/120として求めることができる。各ボクセルVxには、ボクセルを識別するためのボクセルインデクスが付与されている。例えば、グローバル座標(0,0,0)に頂点を有するボクセルVx(図35(A)の紙面手前左下のボクセル)には最小値(1,1,1)のインデクスが付与されており、グローバル座標(150,150,150)に頂点を有するボクセルVx(図35(A)の紙面奥右上のボクセル)には最大値(nxmax,nymax,nzmax)のインデクスが付与されている。各ボクセルVxの頂点(グリッド)が式(2)による評価の対象となる濃度評価点となる。なお、仮想枠IBの一番外側(仮想枠IBを画定する面)での濃度h(r)は0に設定されている。
【0093】
次に、本実施形態でメタボールの形状として多用される楕球を例として、濃度評価について説明する。P0(x0,y0,z0)を楕球の中心、P(x,y,z)を任意の点、X≡x−x0,Y≡y−y0,Z≡z−z0として表した場合に、楕球の形状は下式(3)による(r/R)2が一定となる面で与えられる。
【0094】
【数3】
【0095】
濃度評価では、(r/R)2<1内のすべてのボクセルの頂点に対して、式(2)による濃度h(r)の値を求める必要があり、メタボールでオブジェクトを動的に描画する場合には、濃度h(r)を高速で演算しなければならない。
【0096】
式(3)において、Zを固定したときに、(r/R)2の最小値を与える(X,Y)は、下式(4)に示すように、式(3)をX,Yで偏微分した値を0として求めることができる。また、Z,Yを固定したときに、(r/R)2の最小値を与えるXは、下式(5)に示すように、式(3)をXで偏微分した値を0として求めることができる。
【0097】
【数4】
【0098】
(r/R)2を各ボクセルに対して評価する場合に、まず、zをメタボールの中心のz座標z0からzが大きくなる方向、及び、小さくなる方向に動かしていき、(r/R)2の最小値を与える(x,y)を式(4)で求め、最小値の(r/R)2が1又は1を超えたところでzを動かすのを止める。そのとき、動かすそれぞれのzに対して(r/R)2の最小値を与える点からyが大きくなる方向、及び、小さくなる方向に動かしていき、そのそれぞれのz,yに対して(r/R)2の最小値を与えるxを式(5)で求め、最小値が1を超えたところでyを動かすのを止める。そして、それぞれのz,yに対してxを(r/R)2の最小値を与える点から大きくなる方向、及び、小さくなる方向に動かしていき、式(3)で(r/R)2を次々に評価し、(r/R)2が1を超えたところで評価を終える。この演算は、楕球を表す式(3)のどの断面をとってみても、(r/R)2の値の中央が最小値となり両側が2次曲線のように単調にせり上がっていく性質を利用したものであり、評価の対象となる楕球の内部を過不足なく高速に評価することができる。xについては連続的に変化させて(r/R)2を評価して行くが、(r/R)2は二次式のため、隣接点の差分はxの一次式となる。従って、二階差分までとるようにすれば、一区間の(r/R)2の計算ループが加減算だけで得ることができる。
【0099】
図16に示すように、濃度分布処理サブルーチンでは、ステップ502において、処理対象のメタボールの形状情報を読み出す。メタボールの形状には楕球、円柱(カプセル)、円錐台(カプセル)等があり、形状情報にはデフォルト値を用いることができる。なお、図16の濃度分布処理サブルーチンは、メタボールの形状情報が楕球のときの処理であるが、後述するように、形状情報に応じたメタボールの立体形状を表す計算式により濃度評価が可能である。
【0100】
次にステップ504では、予め設定されたボクセルインデクス(nx,ny,nz)の最小値(1,1,1)及び最大値(nxmax,nymax,nzmax)を読み出して、メタボールの中心のz座標z0からzが小さくなる方向の計算を開始する。まず、z0/Δzの商をボクセルインデクスnz0として余りを切り捨てる。従って、ボクセルVxの頂点の中間がメタボールMBの中心位置となる場合がある。次にステップ506では、nz=nz0としてz方向のボクセルインデクスを設定する。
【0101】
次いでステップ508では、zが小さくなる方向の最初のz座標z=nz・Δz及び(r/R)2が最小値となる(x,y)の座標を演算する。なお、式(5)に従って、x−x0={(de−bf)/(ab−d2)}(z−z0)から、本ステップ(及び後述するステップ522)における定数項c1は−(de−bf)・z0/(ab−d2)+x0となり、y−y0={(df−ae)/(ab−d2)}(z−z0)から、定数項c2は−(df−ae)・z0/(ab−d2)+y0となる。次にステップ510において、nzがnzの最小値(図35(A)参照)の1以上か否かを判断し、否定判断のときはステップ520へ進み、肯定判断のときは、次のステップ512で、このときの(x,y,z)での(r/R)2を式(3)を用いて演算し、ステップ514において、(r/R)2が1以上か否かを判断する。肯定判断のときはステップ520へ進み、否定判断のときは、次のステップ516においてy処理サブルーチンを呼び出す。
【0102】
図17に示すように、y処理サブルーチンでは、ステップ542で現在のy座標からy0/Δyの商をボクセルインデクスny0として余りを切り捨てて、ステップ544で現在のy座標からボクセルインデクスnyをny0として設定し、次のステップ546でyが小さくなる方向の最初のy座標y=ny・Δyを演算する。次にステップ548で(r/R)2が最小値となるxを演算する。なお、上述した式(5)に従って、(x−x0)=−{d(y−y0)+f(z−z0)}/aから、本ステップ(及び後述するステップ564)における定数項c3は(dy0+fz0)/a+x0となる。次にステップ550において、nyがnyの最小値の1以上か否かを判断し、否定判断のときはステップ560へ進み、肯定判断のときは、次のステップ552で、このときの(x,y,z)での(r/R)2を式(3)を用いて演算し、ステップ554において、(r/R)2が1以上か否かを判断する。肯定判断のときはステップ560へ進み、否定判断のときは、次のステップ556においてx処理サブルーチンを呼び出す。
【0103】
図18に示すように、x処理サブルーチンでは、ステップ602で現在のx座標からx0/Δxの商をボクセルインデクスnx0として余りを切り捨てて、ステップ604で現在のx座標からボクセルインデクスnxをnx0として設定すると共に、xが小さくなる方向の最初のx座標x=nx・Δxを演算する。次にステップ606で書き込みポインタを現在の(nx,ny,nz)に合わせ、ステップ608でこのときの(x,y,z)での(r/R)2を演算し、次のステップ610でxがΔx減少した場合の(r/R)2の差分Δ(r/R)2及び2階差分Δ2(r/R)2を演算する。
【0104】
式(3)をXについてみれば、(r/R)2=aX2+2(dY+fZ)X+C(Cは定数)の形で表すことができる。XがΔx減少した場合の差分Δ(r/R)2は、Δ(r/R)2=(r/R)2(X−Δx)−(r/R)2(X)=a(X−Δx)2+2(dY+fZ)(X−Δx)+C−{aX2+2(dY+fZ)X+C}により、Δ(r/R)2={(2a(−Δx)}x+{a(−Δx)+2(dy+fz)}(−Δx)+c4として求めることができる。なお、定数項c4は−2(ax0+dy0+fz0)(−Δx)となる。同様に、xがΔx減少した場合の(r/R)2の2階差分Δ2(r/R)2は2a(−Δx)2となる。
【0105】
次にステップ612において、nxがnxの最小値の1以上か否かを判断し、否定判断のときはステップ620へ進み、肯定判断のときは、次のステップ614で(r/R)2が1より小さいか否かを判断する。否定判断のときはステップ620へ進み、肯定判断のときは、ステップ616で、(nx,ny,nz)のボクセルに対応するRAMの位置に(r/R)2から求めたメタボールの濃度h(r)を書き込んで、次のステップ618で書き込みポインタを1デクリメントしてステップ612へ戻る。このとき、nx=nx−1、(r/R)2=(r/R)2+Δ(r/R)2、Δ(r/R)2=Δ(r/R)2+Δ2(r/R)2として演算が行われる。すなわち、ステップ610で(r/R)2の1階差分、2階差分を求めているので、nxが減少する毎に2階差分と前回の1階差分から、1階差分を更新して(r/R)2を演算することができる。
【0106】
ステップ620では、ボクセルインデクスnxをnx0+1として設定すると共に、xが大きくなる方向の最初のx座標x=nx・Δxを演算し、ステップ622で書き込みポインタを現在の(nx,ny,nz)に合わせ、ステップ624でこのときの(x,y,z)での(r/R)2を式(3)を用いて演算し、次のステップ626で、ステップ610と同様に、xがΔx増加した場合の(r/R)2の差分Δ(r/R)2及び2階差分Δ2(r/R)2を演算する。Δ(r/R)2は2a(Δx)x+{aΔx+2(dy−fz)}Δx+c5、Δ2(r/R)2は2a(Δx)2として求めることができる。なお、定数項c5は−2(ax0+dy0+fz0)Δxとなる。
【0107】
次にステップ628において、nxがnxの最大値nxmax(図35(A)参照)より小さいか否かを判断し、肯定判断のときは、次のステップ630において、(r/R)2が1より小さいか否かを判断する。肯定判断のときは、ステップ632において、(nx,ny,nz)のボクセルに対応するメモリ(RAM)の位置に(r/R)2から求めたメタボールの濃度h(r)を書き込んで、次のステップ634で書き込みポインタを1インクリメントしてステップ628へ戻る。これにより、nx=nx+1、(r/R)2=(r/R)2+Δ(r/R)2、Δ(r/R)2=Δ(r/R)2+Δ2(r/R)2として演算が行われる。すなわち、ステップ626で(r/R)2の1階差分、2階差分を求めているので、nxが増加する毎に2階差分と前回の1階差分から、1階差分を更新して(r/R)2を演算することができる。ステップ628又はステップ630で否定判断のときは、x処理サブルーチンを終了して図17のステップ558(又は、後述するステップ574)へ進む。
【0108】
ステップ558では、nyを1デクリメントして(ny=ny−1)、ステップ550へ戻る。これにより、y、x(ステップ546、548参照)を、それぞれ、y=y−Δy、x=x−(−d/a)Δyとして演算が実行される。
【0109】
ステップ560では、y方向のボクセルインデクスnyをny0+1として設定し、ステップ562でyが大きくなる方向の最初のy座標y=ny・Δyを演算し、次のステップ564において、ステップ548と同様に、(r/R)2が最小値となるxを演算する。
【0110】
次にステップ566において、nyがnyの最大値nymaxより小さいか否かを判断し、肯定判断のときは、ステップ568でこのときの(x,y,z)での(r/R)2を式(3)を用いて演算し、次のステップ570において、(r/R)2が1以上か否かを判断する。否定判断のときは、ステップ572において、上述したx処理サブルーチンを呼び出して実行し、ステップ574でnyを1インクリメントして(ny=ny+1)、ステップ566へ戻る。このとき、y、x(ステップ562、564参照)を、それぞれ、y=y+Δy、x=x+(−d/a)Δyとして演算が実行される。ステップ566で否定判断のとき、又は、ステップ570で肯定判断のときは、y処理サブルーチンを終了して図16のステップ518(又は、後述するステップ532)へ進む。
【0111】
ステップ518では、nzを1デクリメントして(nz=nz−1)、ステップ510へ戻る。これにより、zはΔzデクリメントされ(z=z−Δz)、x、yは、それぞれ、x−{(de−bf)/(ab−d2)}Δz、y−{(df−ae)/(ab−d2)}Δzとして演算が実行される。
【0112】
ステップ520では、z方向のボクセルインデクスnzをnz0+1として設定し、ステップ522でzが大きくなる方向の最初のz座標z=nz・Δz、及び、ステップ508と同様に、(r/R)2が最小値となるx,yの座標を演算する。次にステップ524において、nzがnzの最大値nzmaxより小さいか否かを判断し、肯定判断のときは、ステップ526でこのときの(x,y,z)での(r/R)2を式(3)を用いて演算し、次のステップ528において、(r/R)2が1以上か否かを判断する。否定判断のときは、次のステップ530において、上述したy処理サブルーチンを呼び出して実行し、ステップ532でnzを1インクリメントして(nz=nz+1)、ステップ524へ戻る。このとき、zはΔzインクリメントされ(z=z+Δz)、x、yは、それぞれ、x+{(de−bf)/(ab−d2)}Δz、y+{(df−ae)/(ab−d2)}Δzとして演算が実行される。ステップ524で否定判断のとき、又は、ステップ528で肯定判断のときは、濃度分布処理サブルーチンを終了して図5のステップ118へ進む。
【0113】
上述したように、メタボールMBは、楕球以外に種々の形状を採る。図36(A)に示すように、メタボールMBがP0(x0,y0,z0)、P1(x1,y1,z1)を端点とし両端が半球状に丸められた半径Rの円柱のときには、直線P0P1上の点をPt(xt,yt,zt)とすると(t:媒介変数)、点PtはPt=P0+vec(V01)tと表すことができる。ここで、vec(V01)≡P1−P0であり、vec(V01)はベクトルV01を表している。任意の点P(x,y,z)から直線P0P1に降ろした垂線の足は、t=vec(V01)・vec(V0P)/{vec(V01)}2としたときのPt上の点となる。このとき、直線P0P1からの距離rは、r2=[{vec(V01)}2・{vec(V0P)}2−({vec(V01)・vec(V0P)}2]/{vec(V01)}2となる。ここで、vec(V0P)≡P−P0である。実際には直線でなく線分P0P1が対象なので、媒介変数tがt≦0のときは、r2={vec(V0P)}2、t≧1のときは、r2={vec(V1P)}2となる(図36(B)参照)。従って、基準位置は中心線となる。
【0114】
以上を纏めると、vec(V01)・vec(V0P)≦0(図36(B)のa部)ではr2={vec(V0P)}2、0<vec(V01)・vec(V0P)<{vec(V01)}2(図36(B)のb部)ではr2=[{vec(V01)}2・{vec(V0P)}2−({vec(V01)・vec(V0P)}2]/{vec(V01)}2、vec(V01)・vec(V0P)≧{vec(V01)}2(図36(B)のc部)ではr2={vec(V1P)}2となる。なお、vec(V1P)≡P−P1である。
【0115】
一般性を失わないので、以下、z1≧z0と仮定すると、zを固定したときにr2の最小値を与える(x,y)は、r2をx,yで偏微分した値が0となる点で得ることができるが、直感的にも明らかなように、z≦z0では(x,y)=(x0,y0)、z0<z<z1では(x,y)=({(x1−x0)(z−z0)/(z1−z0)}+x0,{(y1−y0)(z−z0)/(z1−z0)}+y0)、z≧z0では(x,y)=(x1,y1)となる。
【0116】
z,yを固定したときにr2の最小値を与えるxは、r2をxで偏微分した値が0となる点で得ることができる。ここで式の簡略化のためにP0相対の変数、(X1,Y1,Z1)=(x1−x0,y1−y0,z1−z0)、(X,Y,Z)=(x−x0,y−y0,z−z0)を導入し、r2をxで偏微分すると、vec(V01)・vec(V0P)≦0では∂r2/∂x=2X、0<vec(V01)・vec(V0P)<{vec(V01)}2では∂r2/∂x={2(Y1 2+Z1 2)X−2X1(Y1Y+Z1Z)}/(X1 2+Y1 2+Z1 2)、vec(V01)・vec(V0P)≧{vec(V01)}2では∂r2/∂x=2(X−X1)となる。
【0117】
これにより、求めるXは、(Y1Y+Z1Z)≦0のときX=0、0<(Y1Y+Z1Z)<(Y1 2+Z1 2)のときX=X1(Y1Y+Z1Z)/(Y1 2+Z1 2)、(Y1Y+Z1Z)≧(Y1 2+Z1 2)のときX=X1となる。
【0118】
実際の濃度評価のときに、問題としているr2はどの断面をとっても最小となる箇所が一カ所で(区間となる場合もある)、周囲は単調にせり上がっていく性質を持っているので、最小となる点から計算を始めて周囲に計算を進めてr2≧R2となる点で計算を終えるようにすれば、メタボールMBの内部を過不足なく計算できる。具体的には、まずzは(z0−R)≦z≦(z1+R)がとり得る範囲のため、そのそれぞれのzに対してr2が最小となる(x,y)を求める。次に、yを周囲に動かしていきr2の最小値を与えるxを求める。その際のr2がr2≧R2になれば、yを動かすのを止める。そして、それぞれのyに対してxを周囲に動かしていき、r2≧R2となる点まで計算する。r2は展開すれば判るように場合分けのそれぞれについて高々2次のため、xが隣接する点での差分は高々xの1次となる。従って、差分の差分までとるようにすれば、連続するxの区間のr2の計算ループを加減算だけで組み立てることができる。また、場合分けの分岐となるvec(V01)・vec(V0P)は展開すると高々xの1次式のため、これもxが隣接する点での差分は定数となるので、同様に扱う。場合分けの遷移は、vec(V01)・vec(V0P)のxの符号と動かす方向によって、vec(V01)・vec(V0P)≦0→0<vec(V01)・vec(V0P)<{vec(V01)}2→vec(V01)・vec(V0P)≧{vec(V01)}2、及び、vec(V01)・vec(V0P)≧{vec(V01)}2→0<vec(V01)・vec(V0P)<{vec(V01)}2→vec(V01)・vec(V0P)≦0、のいずれかに決まるので、場合分けはそれほど増えないことが判る。
【0119】
また、図36(C)に示すように、メタボールMBがP0(x0,y0,z0)、P1(x1,y1,z1)を端点とし、点P0からの半径R0、点P1からの半径R1で、両端が球状に丸められた円錐台のときには、直線P0P1上の点をPt(xt,yt,zt)とすると(t:媒介変数)、点PtはPt=P0+vec(V01)tと表すことができる。なお、vec(V01)≡P1−P0である。ここで、任意の点P(x,y,z)とPtとの距離に関する関数R2を、媒介変数tを用いて、R2=(P−Pt)2/{(R1−R0)t+R0}2の様に考える。これを最小化する媒介変数tは、K≡R0/(R1−R0)、vec(V01)≡(P1−P0)、vec(V0P)≡(P−P0)とすると、t={Kvec(V01)+vec(V0P)}・vec(V0P)/{(Kvec(V01)+vec(V0P)}・vec(V01)となる。
【0120】
両端の球に接する円錐の頂点をPF(xF,yF,zF)とすると、簡単な計算により、PF=−{R0/(R1−R0)}vec(V01)+P0となることが分かる。ここで、vec(VF0)≡P0−PF,vec(VFP)≡P−PF等とすると、媒介変数tは、t={vec(VF0)+vec(V0P)}・vec(V0P)/{vec(VF0)+vec(V0P)}・vec(V01)=vec(VFP)・vec(V0P)/vec(VFP)・vec(V01)となる。このとき、R2は、R2=(1/R0 2)[{vec(VF0)}2−{vec(VFP)・vec(VF0)}2/{vec(VFP)}2={vec(V0P)×vec(V01)}2/(R1−R0)2{vec(VFP)}2となる。なお、「×」は外積を表している。両端が丸められた部分については、t≦0ではR2={vec(V0P)}2/R0 2、t≧1ではR2={vec(V1P)}2/R1 2となる。
【0121】
以上を纏めると、t≦0ではR2={vec(V0P)}2/R0 2、0<t<1ではR2={vec(V0P)×vec(V01)}2/(R1−R0)2{vec(VFP)}2、t≧1ではR2={vec(V1P)}2/R1 2となる。R2が定数となる曲面が求める形状となる。
【0122】
一般性を失わないので、以下、z1≧z0と仮定すると、zを固定したときにr2の最小値を与える(x,y)は、R2をx,yで偏微分した値が0となる点で得ることができるが、直感的にも明らかなように、z≦z0又はz≧z1では、(z−z0)2/R0 2≦(z−z1)2/R1 2のときに(x,y)=(x0,y0)、(z−z0)2/R0 2>(z−z1)2/R1 2のときに(x,y)=(x1,y1)となり、z0<z<z1では、(x,y)=({(x1−x0)(z−z0)/(z1−z0)}+x0,{(y1−y0)(z−z0)/(z1−z0)}+y0)となる。
【0123】
z,yを固定したときにR2の最小値を与えるxは、R2をxで偏微分した値が0となる点で得ることができるが、計算の詳細は省略するが、t≦0又はt≧1では、(Y0P 2+Z0P 2)/R0 2≦(Y1P 2+Z1P 2)/R1 2のときにx=x0、(Y0P 2+Z0P 2)/R0 2>(Y1P 2+Z1P 2)/R1 2のときにx=x1となり、0<t<1では、x={(YFPYFP+ZFPZFP)XF0/(YFPYF0+ZFPZF0)}+xFとなる。ここで、Y0P≡y−y0、Y1P≡y−y1、YFP≡y−yF、YF0≡y0−yF等である(Z**についても同様。)。
【0124】
実際の濃度評価のときに、問題としているR2はどの断面をとっても最小となる場所が一カ所で(区間になる場合もある)周囲は単調にせり上がっていく性質を持っているので、最小となる点から計算を始めて周囲に計算を進めてR2≧1となる点で計算を終えるようにすれば、メタボールMBの内部を過不足なく計算できる。具体的には、まずzはmin(z0−R0,z1−R1)≦z≦max(z0+R0,z1+R1)がとり得る範囲のため、そのそれぞれのzに対してR2が最小となる(x,y)を求める。次にyを周囲に動かしていき、R2の最小値を与えるxを求める。その際のR2がR2≧1になれば、yを動かすのを止める。そして、それぞれのyに対してxを周囲に動かしていき、R2≧1となる点まで計算する。R2は展開すれば判るように端球の部分についてはxの2次であり、xが隣接する点での差分は高々xの1次になる。従って、差分の差分までとるようにすれば、連続するxの区間のR2の計算ループが加減算だけで組み立てることができる。
【0125】
円錐台の部分については、(xの高々2次)/(xの高々2次)の形なので、分母、分子についてそれぞれ2回差分までとれば、連続するxの区間のr2の計算ループが除算一回以外は加減算だけで組み立てることができる。また、場合分けの目安となる媒介点数tであるが、展開すると(xの高々2次)/(xの高々1次)の形をしている。tと0,1との比較をすれば良いだけなので、分母を払って考えれば、分母と分子と0の間の大小比較だけで場合分けができることが判る。従って、分母については、差分、分子については2回差分までとるようにすれば、連続するxの区間の場合分けの変化については加減算と大小比較だけで組み立てることができる。このように、濃度分布処理サブルーチンでは、仮想枠IB内に配置されたメタボールの立体形状に従って濃度が演算される。
【0126】
ステップ118で肯定判断のときは、ステップ124で、各ボクセルVxの頂点(評価点)での濃度が閾値より上か下かを調べていき、閾値が一定となる点の集合(等濃度面)をポリゴンで表現するためのマーチンキューブ処理を実行する。すなわち、マーチンキューブ処理では、濃度h(r)が一定の値(閾値)となる点の集合(等濃度面)をポリゴンで表現することを考え、この等濃度面を最終的に表現したい(再生成される)メタボールMBの形状と定義する。なお、図35(B)に示すように、仮想枠IBには、メタボールMBで構成されたキャラクタc全体が入っている。仮想枠IBの中心は、例えば、キャラクタcのヘソであっても足元であってもよいが、キャラクタcの移動に追随して移動し、仮想枠IBの大きさは、キャラクタc全体が入れば、キャラクタcの上下左右の外径に接触している必要はない。
【0127】
図19に示すように、マーチンキューブ処理サブルーチンでは、ステップ702で上述したボクセルインデクスを用いて全ボクセルVxについて処理が終了したか否かを判断する。すなわち、図35(B)に示すように、紙面手前左下のボクセルから調べていき、紙面奥右上のボクセルについて処理が終了したか否かを判断する。
【0128】
否定判断のときは、ステップ704で、閾値により対象ボクセルの頂点のオン・オフを検出する。すなわち、対象ボクセルとメタボールMBとがどのように交差するかを調べるために、対象ボクセルの8つの頂点について、頂点の濃度h(r)が閾値より高い(メタボールMBの内側)ときにオンとし、頂点の濃度h(r)が閾値より低い(メタボールMBの外側)ときにオフとして検出する。本ステップでは、ボクセルVxを順に検出していくので、新たに調べる必要がある頂点は3つだけとなる。上述したように、仮想枠IBの一番外側は濃度が0に設定されているため、たとえ、(1,1,1)のボクセルVxを調べるときでも、3つの頂点を調べれば十分である。図37は、図35(B)に示すボクセルVxが対象ボクセルのときに、当該ボクセルの頂点等を示したものである。なお、対象ボクセルの各頂点の濃度h(r)は、キャラクタcの動作等に伴ってフレーム毎に変化し、既に演算済みである(図18のステップ616、632)。
【0129】
次にステップ706では、ポリゴンの頂点を生成する辺を検出する。すなわち、ボクセルとメタボールMBとが交差する辺(図37の点a、b、c、dを含む辺)を求める。ボクセルには、8つの頂点があるので、各頂点のオン/オフの組み合わせは28=256通りである。例えば、各頂点に番号を振り、その頂点番号を2の指数部分と決めておいて、オンの頂点分だけ加算したインデクスを考えれば、図37に示す場合のインデクスは、21+23+25+27=170となる。インデクスは0から255までの値となるので、256組みの等濃度面のデータで構成されるデータテーブルが予め用意されている。このデータテーブルには、1組の等濃度面のデータにつき、▲1▼ポリゴン頂点が生成されるボクセルの辺、▲2▼そのポリゴン頂点をどのように結んで等濃度を形成するか、が記録されている。例えば、図37に則して説明すれば、頂点AP0−AP1間を辺0、頂点AP2−AP3間を辺1、頂点AP4−AP5間を辺2、頂点AP6−AP7間を辺3とすると、データテーブルの(インデクス+1)番目に、上記▲1▼の部分には{辺0、辺1、辺2、辺3}の4つが記録されており、上記▲2▼の部分には{辺0、辺1、辺2}の3つ及び{辺1、辺2、辺3}の3つが記録されている。3点が決まれば、ポリゴン面が生成できるので、{辺0、辺1、辺2}で1つの等濃度面ができ、{辺1、辺2、辺3}で1つの等濃度面ができる。ただし、この段階では、ポリゴン面を形成する辺は特定されているが、未だ辺上の点a、b、c、dの位置は特定されていない。
【0130】
次にステップ708では、ステップ706で特定された辺と、対象ボクセルの頂点の濃度h(r)から、対象ボクセルとメタボールMBとが交差する点の座標を演算する。例えば、辺0上の点aの座標について詳述すれば、図38に示すように、頂点AP1の濃度値と頂点AP0の濃度値とを線型に近似して閾値に対応する箇所を点aの位置とする。なお、頂点AP0、AP1等の濃度h(r)はキャラクタcの動きに伴ってフレーム毎に変化するので、各ボクセルの頂点の濃度h(r)は変動し、図38の傾きが変わり点a等の位置も変動する。このように、ステップ708では、点a、b、c、dの位置を特定し、図37に示すように、点a、b、c及び点b、c、dの2つの三角形、すなわち、等濃度面で構成されるポリゴン面を特定して、ステップ702へ戻る。ステップ702で肯定判断のときは、マーチンキューブ処理サブルーチンを終了し図5のステップ126へ進む。
【0131】
ステップ126では、画像処理部23にマーチンキューブ処理サブルーチンで取得したポリゴン面のデータを含む描画データを送出する。これにより、画像処理部23は、ポリゴン面にテクスチャを貼り付け、光源処理等の通常の描画処理を行って、垂直帰線割込周期でテレビモニタ4に画像データを送出する。テレビモニタ上には、融合(又は分離)したメタボールMBがオブジェクトとして動的に描画される。
【0132】
次にステップ128で、モーションカーソルmcを1インクリメントすると共に、時間tを1インクリメントして、次のステップ130において、現在のモーションカーソルmcによるフレームがモーションの最終フレームか否かを判断する。否定判断のときは、描画演算処理サブルーチンを終了して図5のステップ110へ進み、肯定判断のときは、ステップ132でモーションカーソルmcを0とし次のモーションを指定して描画演算処理サブルーチンを終了して図5のステップ110へ進む。
【0133】
ステップ110では、ステップ106でゲームを終了させるための所定ボタンが押下された否かを判断し、否定判断のときは、ステップ104へ戻り、肯定判断のときは、メタボール描画ルーチンを終了する。
【0134】
(作用等)
以上のように、本実施形態では、弾丸ボール関連処理で弾丸ボールBBがノード所属ボールNBのいずれかに命中したか否かが判断され(ステップ114)、肯定判断のときに、メタボール更新処理で命中点HにおけるトルクTが衝撃量として演算され、1フレーム当たりの回転角、すなわちノードNの1フレーム当たりの変位量の演算を経て(ステップ256)、座標位置が補正されたノードNにノード所属ボールNBが配置される(ステップ257)。そして、濃度分布処理で立体形状を表す計算式に従ってメタボールMBの基準位置からボクセルVxのボクセルインデクスの最小方向及び最大方向に向かってボクセルVxの頂点毎に式(2)により濃度h(r)が演算され(ステップ122)、マーチンキューブ処理でボクセルVxの頂点座標でのメタボールMBの濃度h(r)と予め設定された閾値とに基づいてポリゴンの頂点座標が演算されて(ステップ124)、キャラクタcが生成される。
【0135】
本実施形態によれば、弾丸ボールBBの衝撃により補正されたノードNの座標位置にノード所属ボールNBが割り当てられるので、仮想枠IB内にノード所蔵ボールNBで構成されたキャラクタcが受ける弾丸ボールBBの衝撃の様子を動的かつリアルに描画することができる。その際、弾丸ボールBBが命中したノード所属ボールが所属するノードNの下位のノードも同様に座標位置が補正されるので、下位のノード所属ボールにも衝撃が伝達される様子が描画され、キャラクタcが受ける衝撃を人が受ける衝撃に近似して表現することができる。また、式(2)は従来技術の濃度評価式より単純化されておりボクセルVxの頂点での濃度演算を高速に行うことができる。このため、メタボールの数を増加させることができゲームキャラクタ等の比較的複雑な形状を動的に描画することができる共に、式(2)で得られる等濃度曲線は複数のメタボールを融合させた場合に適度な凹凸を含みゲームキャラクタ等のゴツゴツ感を表現することができるので、曲線美を追求して滑らかな曲線で静的にオブジェクトを描画する場合と比べ、ゲームキャラクタ等の表現に相応しい描画を実現することができる。
【0136】
また、図19に示したように、マーチンキューブ処理では予め設定された閾値と等しいメタボールの等濃度面をポリゴンの頂点として演算するが、その際、メタボールMB自体の変化(その大きさ、位置、数、濃度など)はプログラムによって実行時に動的に制御することが十分可能であり(図5のステップ120、122)、これにより変化するポリゴン情報もまた実行時に動的に0から生成することができる(ステップ704〜708)。このことは、ゲームキャラクタ等の制作工程の効率化と共に、モーフィング技術では表現不能であった爆発や崩落などの変化を表現することを可能とする。従って、本実施形態では、モーフィング技術では実現不能であったポリゴンの位相的な変化を動的に表現することができると共に、ゲームキャラクタの動的表現力を高めることができる。
【0137】
なお、本実施形態では、複数のメタボール(ノード所属ボール)によりキャラクタを構成した例を示したが、本発明はこれに限定されることなく、3次元ポリゴンキャラクタに適用することも可能である。このような態様では、キャラクタが外部から衝撃を受けたときに衝撃点における衝撃量からモーションデータの変位量を演算して、該変位量によりモーションデータを補正してキャラクタを描画すればよい。このようなキャラクタには本例で示した階層構造を有するノードを用いてもよい。また、本実施形態では、ゲームキャラクタを人に近似した例を示したが、本発明はこれに限定されることなく、ノードは動物の関節に対応し、ノード間は動物の骨格に相当するので、ノードにノード所属ボールを配置することによって、任意の動物等をゲームキャラクタとして表現することができることは云うまでもない。
【0138】
また、本実施形態では、接地ボールGBを4つの小接地ボールとした例を示したが、接地ボールGBは1つの小接地ボールで構成されていてもよい。更に、本実施形態では小接地ボールに接続された仮想バネがノードN3、N5に接続されたている例を示したが、当該仮想バネはノードN3、N5に所属するノード所属ボールNBに接続するようにしてもよく、更にまた、小接地ボール間の全てに仮想バネを接続するようにしてもよい。このようにしても、本実施形態と同様に、小接地ボール間の分離を防止することができる。また、本実施形態では、触手ボールをメタボールで構成する例を示したが、3次元ポリゴンモデルによって構成するようにしてもよい。
【0139】
更に、本実施形態では、ノード所属ボールNBの速度、加速度、位置等を演算する場合に計算式を示して例示したが、予め計算式により計算したテーブルを準備しておいてテーブルのデータを按分して速度等を算出するようにしてもよい。
【0140】
また、本実施形態では、ステップ274、394等でノード所属ボールNBや滴ボールDBの形状変更例を示したが、例えば、ノード所属ボールや滴ボール等のメタボールの速度方向に形状を任意に引き伸ばして、速度方向に直交する方向の形状を縮めるようにすればよい。このようにすることで、メタボールの速度を視覚的にも表現することが可能となる。
【0141】
更に、本実施形態では、ノード所属ボールNBが地面を這いずる場合に一定速度Vとした例を示したが、ノード所属ボールNBが地面を這いずるときに、接地ボールGBとの間に仮想バネで接続されるようにしてもよい。このようにすれば、バネの力によって速度が変化し(速度は一定とならず)、オイラー法による運動方程式を用いて加速度、位置等を演算することが可能となる。
【0142】
更にまた、本実施形態では、式(2)により濃度h(r)を演算するときに、z座標から演算を始め(ステップ504)、y座標、x座標の演算を行う例を示したが(図16〜図18)、本発明はこれに限定されることなく、例えば、x座標から演算を始めるようにしてもよいことは論を待たない。
【0143】
また、本実施形態では、弾丸ボールBBをノード所属ボールNBに命中した後、所定時間経過後に非可視とする例を示したが、本発明はこれに限定されず、例えば、弾丸ボールBBの濃度係数m_fChargeを常に−1で非可視状態とし、同じ座標位置で同じ大きさのポリゴンモデルによるボールを重ねて表示することで弾丸ボールBBを表現してもよく、更に、所定時間経過後にポリゴンモデルによるボールを消去することで、命中したノード所属ボールNBに穴があく(窪みができる)状態を表現するようにしてもよい。
【0144】
更に、本実施形態では、仮想枠IBの一辺当たり120個のボクセル数とした例を示したが、仮想枠IBのx,y,z方向でボクセル数が異なっていてもよいことは云うまでもない。ボクセル数及びメタボール数はオブジェクトを動的に描画するために、CPUの処理速度によって変更可能であり、ボクセル数を多くすることで、再生成されるオブジェクトの解像度を高めることができる。
【0145】
更に、本実施形態ではゲームプログラムやゲームデータを記録した記録媒体1を媒体読取部22で読み取ることによりRAMへプログラムを転送するようにしたが、媒体読取部22を備えずROMにゲームプログラムを記憶してこのROMからゲームプログラムやゲームデータを読み出すようにしてもよい。このようにすれば、ゲーム専用機とすることができる。また、本実施形態では、記録媒体としてCD−ROMを使用する例で説明したが、CPUブロック20のRAMにロード可能なROMカートリッジや大容量のディスク、マグネットオプティカルディスク等であっても、これらの媒体読取部を備えていれば本発明を適用することができることは論を待たない。
【0146】
また、本実施形態では、一定間隔で行うため、垂直帰線周期の割込処理内で種々の演算を行う例を示したが、タイマ割込処理内やメイン処理内で行われるようにしてもよい。
【0147】
【発明の効果】
以上説明したように、本発明の第1、第3、第4及び第6の態様によれば、変位量からモーションデータを補正してゲームキャラクタが描画されるので、モーションデータに従って描画されるゲームキャラクタが受ける衝撃を動的かつリアルに描画することができると共に、特定のメタボールの残存パワーが所定値以下と判断されたときに、該特定のメタボール及び階層構造における該特定のメタボールより下位のメタボールがノードから崩落し自然落下するように配置されるので、ゲームキャラクタの一部が千切れて落下する状態を表現することができ、本発明の第2、第3、第5及び第7の態様によれば、変位量からモーションデータを補正してゲームキャラクタが描画されるので、モーションデータに従って描画されるゲームキャラクタが受ける衝撃を動的かつリアルに描画することができると共に、メタボール全体の残存パワーが所定値以下と判断されたときに、階層構造における全メタボールが衝撃点に対応するメタボールを爆発の中心として時間差をもってノードから拡散するように配置されるので、ゲームキャラクタが爆発する状態を表現することができる、という効果を得ることができる。
【図面の簡単な説明】
【図1】家庭用ゲーム装置の接続態様を示す概略斜視図である。
【図2】家庭用ゲーム装置に使用される入力装置の平面図である。
【図3】ゲーム装置本体の概略構成を示すブロック図である。
【図4】実施形態のゲーム装置本体のCPUが実行するメタボール描画ルーチンのフローチャートである。
【図5】メタボール描画ルーチンのステップ108の詳細を示す描画演算処理サブルーチンのフローチャートである。
【図6】描画演算処理サブルーチンのステップ114の詳細を示す弾丸ボール関連処理サブルーチンのフローチャートである。
【図7】描画演算処理サブルーチンのステップ116の詳細を示す爆発関連処理サブルーチンのフローチャートである。
【図8】描画演算処理サブルーチンのステップ120の詳細を示すメタボール更新処理サブルーチンのフローチャートである。
【図9】メタボール更新処理サブルーチンのステップ214の詳細を示すノード所属ボール処理サブルーチンのフローチャートである。
【図10】ノード所属ボール処理サブルーチンのステップ256の詳細を示すノード座標補正処理サブルーチンのフローチャートである。
【図11】メタボール更新処理サブルーチンのステップ218の詳細を示す接地ボール処理サブルーチンのフローチャートである。
【図12】メタボール更新処理サブルーチンのステップ222の詳細を示す触手ボール処理サブルーチンのフローチャートである。
【図13】メタボール更新処理サブルーチンのステップ226の詳細を示す弾丸ボール処理サブルーチンのフローチャートである。
【図14】メタボール更新処理サブルーチンのステップ230の詳細を示す破片ボール処理サブルーチンのフローチャートである。
【図15】メタボール更新処理サブルーチンのステップ232の詳細を示す滴ボール処理サブルーチンのフローチャートである。
【図16】描画演算処理サブルーチンのステップ122の詳細を示す濃度分布処理サブルーチンのフローチャートである。
【図17】濃度分布処理サブルーチンのステップ516、530の詳細を示すy処理サブルーチンのフローチャートである。
【図18】y処理サブルーチンのステップ556、572の詳細を示すx処理サブルーチンのフローチャートである。
【図19】描画演算処理サブルーチンのステップ124の詳細を示すマーチンキューブ処理サブルーチンのフローチャートである。
【図20】メタボールで描画されるキャラクタのノードを示す説明図であり、(A)はテレビモニタに表示されるキャラクタのノード位置、(B)はノード番号を示す。
【図21】キャラクタのノードの階層情報を模式的に示す説明図である。
【図22】キャラクタのノードに割り当てられるノード所属ボールを模式的に示す説明図である。
【図23】弾丸ボールがノード所属ボールに命中したときに発生するトルクについて力と半径とを模式的に示す説明図である。
【図24】弾丸ボールがノード所属ボールに命中したときの状態を模式的に示す説明図であり、(A)は命中範囲、(B)は破片ボールの発生を示す。
【図25】グローバル座標でのノードの位置とノード所属ボールの位置とを示す説明図である。
【図26】ノード所属ボールが地面を這いずる状態を模式的に示す説明図である。
【図27】接地ボールを示す説明図であり、(A)は小接地ボールと仮想バネとの関係、(B)は小接地ボールに働く力を示す。
【図28】グローバル座標での弾丸ボールの命中点を示す説明図である。
【図29】ベジエ曲線の説明図であり、(A)は4点で構成されるベジエ曲線、(B)は4点で構成されるベジエ曲線を単純に繋いだ場合、(C)は4点で構成されるベジエ曲線を滑らかに繋いだ場合を示す。
【図30】触手ボールの仮想バネを模式的に示し、(A)は仮想バネで繋がれた触手ボール、(B)は前回の垂直帰線割込時に中間点P1に作用していた力、(C)は中間点P1に現在作用している力を示す。
【図31】弾丸ボールとノード所属ボールとの関係を示す説明図であり、(A)は弾丸ボールの濃度係数が1のときの状態、(B)は弾丸ボールの濃度係数が−1のときの状態を示す。
【図32】滴ボールの自然落下による速度変化及び形状変化を模式的に示し、(A)は空気による摩擦抵抗を受けない場合、(B)は空気による摩擦抵抗を受ける場合を示す。
【図33】実施形態で用いられる濃度評価式で濃度係数を1としたときの濃度と距離との関係を示すグラフである。
【図34】半径1の2つのメタボール球について実施形態で用いられる濃度評価式により濃度を演算したときの等濃度曲線を示し、(A)は等濃度曲線の外観斜視図、(B)は平面図、(C)は閾値を0.8としたときの等濃度曲線の平面図である。
【図35】実施形態で用いられる仮想枠とボクセルとの関係を模式的に示す説明図であり、(A)はボクセルとボクセルインデクスとの関係、(B)は仮想枠内に配置されたオブジェクトとボクセルとの関係を示す。
【図36】メタボールが楕球以外の立体形状をとるときの距離演算の説明図であり、(A)は円柱部での任意の点までの距離、(B)球状に丸められた両端での任意の点までの距離、(C)は両端が球状に丸められた円錐台を示す。
【図37】ボクセルの頂点とポリゴン面との関係を示す説明図である。
【図38】ボクセルの辺を構成する頂点の濃度とボクセルの辺上のポリゴン面の頂点位置との関係を示す説明図である。
【図39】従来技術の濃度評価式による濃度と距離との関係を示すグラフである。
【図40】半径1の2つのメタボール球について従来技術の濃度評価式により濃度を演算したときの等濃度曲線を示し、(A)は等濃度曲線の外観斜視図、(B)は平面図である。
【図41】等濃度曲線の説明図であり、(A)は2つのメタボール球が融合した状態を模式的に示し、(B)は閾値が0.5の場合に再生成されるメタボール球の平面図である。
【符号の説明】
1 記録媒体
10 家庭用ビデオゲーム装置(ゲーム装置)
20 CPUブロック(コンピュータ)
CPU (メタボール配置手段、濃度演算手段、ゲームキャラクタ生成手段、メタボールパワー演算手段、メタボールパワー判断手段、メタボールトータルパワー演算手段、メタボールトータルパワー判断手段、弾丸ボール生成手段、破片ボール生成手段、接地ボール生成手段)
Claims (16)
- 3次元仮想空間内にメタボールをオブジェクトとして動的に描画するプログラムであって、コンピュータを、
モーションデータにより前記3次元仮想空間内の座標位置が特定され予め定められた階層構造を有する複数のノードに対し、該各々のノードに所属する少なくとも1のメタボールが外部から衝撃を受けたときに該衝撃点における衝撃量から前記モーションデータの変位量を演算し、該変位量から前記モーションデータの座標位置が補正された前記各々のノードに、所属するメタボールを、ゲームキャラクタを構成するように配置するメタボール配置手段、
前記3次元仮想空間内を多数に分割するボクセルの頂点での前記メタボールの内部濃度を演算する濃度演算手段、
前記ボクセルの頂点でのメタボールの内部濃度と予め設定された閾値とに基づいてポリゴンの頂点座標を演算してゲームキャラクタを生成するゲームキャラクタ生成手段、
前記ゲームキャラクタが外部から衝撃を受けたときに、前記メタボール毎に残存パワーを演算するメタボールパワー演算手段、
前記メタボールパワー演算手段により演算された各メタボールの残存パワーが所定値以下かを判断するメタボールパワー判断手段、
として機能させ、前記メタボール配置手段は、前記メタボールパワー判断手段が特定のメタボールの残存パワーが所定値以下と判断したときに、該特定のメタボール及び前記階層構造における該特定のメタボールより下位のメタボールを前記ノードから崩落させ自然落下するように配置することを特徴とするプログラム。 - 3次元仮想空間内にメタボールをオブジェクトとして動的に描画するプログラムであって、コンピュータを、
モーションデータにより前記3次元仮想空間内の座標位置が特定され予め定められた階層構造を有する複数のノードに対し、該各々のノードに所属する少なくとも1のメタボールが外部から衝撃を受けたときに該衝撃点における衝撃量から前記モーションデータの変位量を演算し、該変位量から前記モーションデータの座標位置が補正された前記各々のノードに、所属するメタボールを、ゲームキャラクタを構成するように配置するメタボール配置手段、
前記3次元仮想空間内を多数に分割するボクセルの頂点での前記メタボールの内部濃度を演算する濃度演算手段、
前記ボクセルの頂点でのメタボールの内部濃度と予め設定された閾値とに基づいてポリゴンの頂点座標を演算してゲームキャラクタを生成するゲームキャラクタ生成手段、
前記ゲームキャラクタが外部から衝撃を受けたときに、前記メタボールの全体の残存パワーを演算するメタボールトータルパワー演算手段、
前記メタボールトータルパワー演算手段により演算されたメタボール全体の残存パワーが所定値以下かを判断するメタボールトータルパワー判断手段、
として機能させ、前記メタボール配置手段は、前記メタボールトータルパワー判断手段がメタボール全体の残存パワーが所定値以下と判断したときに、前記階層構造における全メタボールを、前記衝撃点に対応するメタボールを爆発の中心として、時間差をもって前記ノードから拡散するように配置することを特徴とするプログラム。 - 前記メタボール配置手段は、前記衝撃量を、前記衝撃点に働く力と前記ゲームキャラクタの所定位置から前記衝撃点までの距離との外積として演算することを特徴とする請求項1又は請求項2に記載のプログラム。
- 前記メタボール配置手段は、前記衝撃量を、前記所定位置を中心とする回転角に変換し、該回転角を予め定められたフレーム数で分割して1フレーム当たりの変位量を演算することを特徴とする請求項3に記載のプログラム。
- 前記回転角には予め最小角及び/又は最大角が定められており、前記メタボール配置手段は、前記変換された回転角が前記最小角に満たないとき又は前記最大角を越えるときに、該回転角を前記最小角又は最大角に補正することを特徴とする請求項4に記載のプログラム。
- 前記メタボール配置手段は、前記少なくとも1のメタボールが衝撃を受けたときに、該衝撃を受けたメタボールが配置されるノードの前記階層構造における下位のノードについても前記変位量から前記モーションデータの座標位置を補正することを特徴とする請求項1又は請求項2に記載のプログラム。
- コンピュータを、更に、前記ゲームキャラクタに衝撃を与える弾丸をメタボールで生成する弾丸ボール生成手段として機能させることを特徴とする請求項1又は請求項2に記載のプログラム。
- コンピュータを、更に、前記弾丸ボールが前記少なくとも1のメタボールに命中したときに、該メタボールの近傍から飛び散るように生成される破片をメタボールで生成する破片ボール生成手段として機能させることを特徴とする請求項7に記載のプログラム。
- コンピュータを、更に、前記ゲームキャラクタの真下に配置され、前記ゲームキャラクタの移動に伴って地面を這いずる接地ボールをメタボールで生成する接地ボール生成手段として機能させ、前記接地ボールが複数のメタボールで構成されていることを特徴とする請求項1又は請求項2に記載のプログラム。
- 前記接地ボール生成手段は、前記接地ボールを構成するメタボールが前記ゲームキャラクタの足部のノード又は該足部のノードに配置されたメタボールに仮想バネで接続されているように該接地ボールを構成するメタボールの座標位置を演算することを特徴とする請求項9に記載のプログラム。
- 前記メタボール配置手段は、前記ノードから拡散したメタボールの拡散前後の体積が略同一となるように全メタボールのスケール情報を変更することを特徴とする請求項2に記載のプログラム。
- 請求項1乃至請求項11のいずれか1項に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
- 3次元仮想空間内にメタボールをオブジェクトとして動的に描画するゲームキャラクタ描画方法であって、所定時間毎に、
モーションデータにより前記3次元仮想空間内の座標位置が特定され予め定められた階層構造を有する複数のノードに対し、該各々のノードに所属する少なくとも1のメタボールが外部から衝撃を受けたときに該衝撃点における衝撃量から前記モーションデータの変位量を演算し、該変位量から前記モーションデータの座標位置が補正された前記各々のノードに、所属するメタボールを、ゲームキャラクタを構成するように配置し、
前記3次元仮想空間内を多数に分割するボクセルの頂点での前記メタボールの内部濃度を演算し、
前記ボクセルの頂点でのメタボールの内部濃度と予め設定された閾値とに基づいてポリゴンの頂点座標を演算してゲームキャラクタを生成する、
ステップを含み、前記ゲームキャラクタが外部から衝撃を受けたときに、前記メタボールを配置するステップにおいて、前記メタボール毎に残存パワーを演算し、該演算した各メタボールの残存パワーが所定値以下かを判断し、特定のメタボールの残存パワーが所定値以下と判断したときに、該特定のメタボール及び前記階層構造における該特定のメタボールより下位のメタボールを前記ノードから崩落させ自然落下するように配置することを特徴とするゲームキャラクタ描画方法。 - 3次元仮想空間内にメタボールをオブジェクトとして動的に描画するゲームキャラクタ描画方法であって、所定時間毎に、
モーションデータにより前記3次元仮想空間内の座標位置が特定され予め定められた階層構造を有する複数のノードに対し、該各々のノードに所属する少なくとも1のメタボールが外部から衝撃を受けたときに該衝撃点における衝撃量から前記モーションデータの変位量を演算し、該変位量から前記モーションデータの座標位置が補正された前記各々のノードに、所属するメタボールを、ゲームキャラクタを構成するように配置し、
前記3次元仮想空間内を多数に分割するボクセルの頂点での前記メタボールの内部濃度を演算し、
前記ボクセルの頂点でのメタボールの内部濃度と予め設定された閾値とに基づいてポリゴンの頂点座標を演算してゲームキャラクタを生成する、
ステップを含み、前記ゲームキャラクタが外部から衝撃を受けたときに、前記メタボールを配置するステップにおいて、前記メタボールの全体の残存パワーを演算し、該演算したメタボール全体の残存パワーが所定値以下かを判断し、メタボール全体の残存パワーが所定値以下と判断したときに、前記階層構造における全メタボールを、前記衝撃点に対応するメタボールを爆発の中心として、時間差をもって前記ノードから拡散するように配置することを特徴とするゲームキャラクタ描画方法。 - 3次元仮想空間内にメタボールをオブジェクトとして動的に描画するゲーム装置であって、
モーションデータにより前記3次元仮想空間内の座標位置が特定され予め定められた階層構造を有する複数のノードに対し、該各々のノードに所属する少なくとも1のメタボールが外部から衝撃を受けたときに該衝撃点における衝撃量から前記モーションデータの変位量を演算し、該変位量から前記モーションデータの座標位置が補正された前記各々のノードに、所属するメタボールを、ゲームキャラクタを構成するように配置するメタボール配置手段と、
前記3次元仮想空間内を多数に分割するボクセルの頂点での前記メタボールの内部濃度を演算する濃度演算手段と、
前記ボクセルの頂点でのメタボールの内部濃度と予め設定された閾値とに基づいてポリゴンの頂点座標を演算してゲームキャラクタを生成するゲームキャラクタ生成手段と、
前記ゲームキャラクタが外部から衝撃を受けたときに、前記メタボール毎に残存パワーを演算するメタボールパワー演算手段と、
前記メタボールパワー演算手段により演算された各メタボールの残存パワーが所定値以下かを判断するメタボールパワー判断手段と、
を備え、前記メタボール配置手段は、前記メタボールパワー判断手段が特定のメタボールの残存パワーが所定値以下と判断したときに、該特定のメタボール及び前記階層構造における該特定のメタボールより下位のメタボールを前記ノードから崩落させ自然落下するように配置することを特徴とするゲーム装置。 - 3次元仮想空間内にメタボールをオブジェクトとして動的に描画するゲーム装置であって、
モーションデータにより前記3次元仮想空間内の座標位置が特定され予め定められた階層構造を有する複数のノードに対し、該各々のノードに所属する少なくとも1のメタボールが外部から衝撃を受けたときに該衝撃点における衝撃量から前記モーションデータの変位量を演算し、該変位量から前記モーションデータの座標位置が補正された前記各々のノードに、所属するメタボールを、ゲームキャラクタを構成するように配置するメタボール配置手段と、
前記3次元仮想空間内を多数に分割するボクセルの頂点での前記メタボールの内部濃度を演算する濃度演算手段と、
前記ボクセルの頂点でのメタボールの内部濃度と予め設定された閾値とに基づいてポリゴンの頂点座標を演算してゲームキャラクタを生成するゲームキャラクタ生成手段と、
前記ゲームキャラクタが外部から衝撃を受けたときに、前記メタボールの全体の残存パワーを演算するメタボールトータルパワー演算手段と、
前記メタボールトータルパワー演算手段により演算されたメタボール全体の残存パワーが所定値以下かを判断するメタボールトータルパワー判断手段と、
を備え、前記メタボール配置手段は、前記メタボールトータルパワー判断手段がメタボール全体の残存パワーが所定値以下と判断したときに、前記階層構造における全メタボールを、前記衝撃点に対応するメタボールを爆発の中心として、時間差をもって前記ノードから拡散するように配置することを特徴とするゲーム装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002221845A JP3760347B2 (ja) | 2002-07-30 | 2002-07-30 | プログラム、記録媒体、ゲームキャラクタ描画方法及びゲーム装置 |
US10/324,838 US7104890B2 (en) | 2002-07-30 | 2002-12-20 | Program, recording medium, game character rendering method, and game apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002221845A JP3760347B2 (ja) | 2002-07-30 | 2002-07-30 | プログラム、記録媒体、ゲームキャラクタ描画方法及びゲーム装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004062666A JP2004062666A (ja) | 2004-02-26 |
JP3760347B2 true JP3760347B2 (ja) | 2006-03-29 |
Family
ID=31184879
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002221845A Expired - Fee Related JP3760347B2 (ja) | 2002-07-30 | 2002-07-30 | プログラム、記録媒体、ゲームキャラクタ描画方法及びゲーム装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US7104890B2 (ja) |
JP (1) | JP3760347B2 (ja) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8352400B2 (en) | 1991-12-23 | 2013-01-08 | Hoffberg Steven M | Adaptive pattern recognition based controller apparatus and method and human-factored interface therefore |
US7904187B2 (en) | 1999-02-01 | 2011-03-08 | Hoffberg Steven M | Internet appliance system and method |
JP4585298B2 (ja) * | 2004-12-09 | 2010-11-24 | 穣 高山 | 描画方法及びその装置 |
US20060233098A1 (en) * | 2005-04-14 | 2006-10-19 | Mcardle James M | Method for detecting object collisions in a computer-based game |
JP2006296734A (ja) * | 2005-04-20 | 2006-11-02 | Namco Bandai Games Inc | プログラム、情報記憶媒体およびゲームシステム |
JP4740644B2 (ja) | 2005-05-11 | 2011-08-03 | 任天堂株式会社 | 画像処理プログラムおよび画像処理装置 |
US20060262119A1 (en) * | 2005-05-20 | 2006-11-23 | Michael Isner | Transfer of motion between animated characters |
JP4660357B2 (ja) * | 2005-11-18 | 2011-03-30 | 任天堂株式会社 | 画像処理プログラムおよび画像処理装置 |
JP4675855B2 (ja) * | 2006-07-25 | 2011-04-27 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理装置、ユーザインタフェース方法及びプログラム |
US8094156B2 (en) * | 2006-07-31 | 2012-01-10 | Autodesk Inc. | Rigless retargeting for character animation |
US7859538B2 (en) * | 2006-07-31 | 2010-12-28 | Autodesk, Inc | Converting deformation data for a mesh to animation data for a skeleton, skinning and shading in a runtime computer graphics animation engine |
JP2008079748A (ja) * | 2006-09-27 | 2008-04-10 | Taito Corp | 映像音声出力装置、映像音声出力方法、映像音声出力プログラム |
KR101288970B1 (ko) * | 2006-11-28 | 2013-07-24 | 삼성전자주식회사 | 렌더링 장치 및 방법 |
US7988555B2 (en) * | 2007-07-27 | 2011-08-02 | Empire Of Sports Developments Ltd. | Method and device for controlling a motion-sequence within a simulated game or sports event |
JP4971908B2 (ja) | 2007-08-24 | 2012-07-11 | 任天堂株式会社 | 情報処理プログラムおよび情報処理装置 |
US8577084B2 (en) | 2009-01-30 | 2013-11-05 | Microsoft Corporation | Visual target tracking |
US8588465B2 (en) | 2009-01-30 | 2013-11-19 | Microsoft Corporation | Visual target tracking |
US7996793B2 (en) | 2009-01-30 | 2011-08-09 | Microsoft Corporation | Gesture recognizer system architecture |
US8565477B2 (en) * | 2009-01-30 | 2013-10-22 | Microsoft Corporation | Visual target tracking |
US8577085B2 (en) | 2009-01-30 | 2013-11-05 | Microsoft Corporation | Visual target tracking |
US8267781B2 (en) | 2009-01-30 | 2012-09-18 | Microsoft Corporation | Visual target tracking |
US20100199231A1 (en) | 2009-01-30 | 2010-08-05 | Microsoft Corporation | Predictive determination |
US8682028B2 (en) | 2009-01-30 | 2014-03-25 | Microsoft Corporation | Visual target tracking |
US8565476B2 (en) * | 2009-01-30 | 2013-10-22 | Microsoft Corporation | Visual target tracking |
JP5234809B2 (ja) * | 2009-06-24 | 2013-07-10 | 任天堂株式会社 | 情報処理プログラムおよび情報処理装置 |
KR101021356B1 (ko) * | 2009-08-05 | 2011-03-14 | 주식회사 엔씨소프트 | 게임 캐릭터의 움직임 제어장치 및 그 방법 |
JP5308475B2 (ja) * | 2011-05-13 | 2013-10-09 | 株式会社バンダイナムコゲームス | プログラム、情報記憶媒体およびゲーム装置 |
JP5552469B2 (ja) * | 2011-09-27 | 2014-07-16 | 株式会社コナミデジタルエンタテインメント | ゲーム装置、及びプログラム |
JP7233399B2 (ja) * | 2020-06-23 | 2023-03-06 | 任天堂株式会社 | ゲームプログラム、ゲーム装置、ゲームシステム、およびゲーム処理方法 |
CN113440859B (zh) * | 2021-07-04 | 2023-05-16 | 王禹豪 | 游戏物品数值生成与检测方法、装置及存储介质 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5898793A (en) * | 1993-04-13 | 1999-04-27 | Karron; Daniel | System and method for surface rendering of internal structures within the interior of a solid object |
US5542036A (en) * | 1994-07-05 | 1996-07-30 | General Electric Company | Implicit modeling of swept volumes and swept surfaces |
JP4053627B2 (ja) | 1996-04-25 | 2008-02-27 | 松下電器産業株式会社 | 通信型コンピュータグラフィックスアニメーション方法 |
BR9702282A (pt) * | 1996-06-05 | 1999-07-20 | Sega Enterprises Kk | Processamento de imagem para um jogo |
US5933150A (en) * | 1996-08-06 | 1999-08-03 | Interval Research Corporation | System for image manipulation and animation using embedded constraint graphics |
US6137492A (en) * | 1997-04-03 | 2000-10-24 | Microsoft Corporation | Method and system for adaptive refinement of progressive meshes |
US6084593A (en) * | 1998-05-14 | 2000-07-04 | Mitsubishi Electric Information Technology Center America, Inc. | Surface net smoothing for surface representation from binary sampled data |
JP4278072B2 (ja) | 1999-06-17 | 2009-06-10 | 株式会社バンダイナムコゲームス | 画像生成システム及び情報記憶媒体 |
JP4301469B2 (ja) | 1999-08-02 | 2009-07-22 | 株式会社バンダイナムコゲームス | 画像生成システム及び情報記憶媒体 |
JP3822776B2 (ja) * | 2000-03-29 | 2006-09-20 | 株式会社バンダイナムコゲームス | ゲーム装置、及び情報記憶媒体 |
US6961459B2 (en) * | 2000-09-12 | 2005-11-01 | Sony Corporation | Three-dimensional data processing device, three-dimensional data processing method, and program providing medium |
US6741246B2 (en) * | 2001-03-16 | 2004-05-25 | Mitsubishi Electric Research Laboratories, Inc. | Hierarchical control point editing of adaptively sampled distance fields |
JP3527489B2 (ja) * | 2001-08-03 | 2004-05-17 | 株式会社ソニー・コンピュータエンタテインメント | 描画処理方法及び装置、描画処理プログラムを記録した記録媒体、描画処理プログラム |
US6746401B2 (en) * | 2002-05-06 | 2004-06-08 | Scimed Life Systems, Inc. | Tissue ablation visualization |
-
2002
- 2002-07-30 JP JP2002221845A patent/JP3760347B2/ja not_active Expired - Fee Related
- 2002-12-20 US US10/324,838 patent/US7104890B2/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JP2004062666A (ja) | 2004-02-26 |
US7104890B2 (en) | 2006-09-12 |
US20040023717A1 (en) | 2004-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3760347B2 (ja) | プログラム、記録媒体、ゲームキャラクタ描画方法及びゲーム装置 | |
JP3696216B2 (ja) | 3次元ビデオゲーム装置、3次元ビデオゲームにおける仮想カメラの制御方法、並びにプログラム及び記録媒体 | |
KR100517856B1 (ko) | 게임용 화상 처리 장치 | |
JPH10247252A (ja) | 衝突判定処理装置 | |
JP4794343B2 (ja) | 画像生成システム、プログラム及び情報記憶媒体 | |
JP2007300974A (ja) | プログラム、情報記憶媒体及び画像生成システム | |
JP2008504596A (ja) | ゲーム画面を更新するためのオブジェクトをローディングするイメージリソースローディングシステム及びイメージリソースローディング方法 | |
EP1505546B1 (en) | Method for drawing a three-dimensional image by modeling a second object connected to a first object | |
JPH10334275A (ja) | 仮想現実方法及び装置並びに記憶媒体 | |
JP2001273517A (ja) | ゲームシステム及びゲーム用プログラムを記録したコンピュータ読み取り可能な記録媒体 | |
EP1085470A2 (en) | Method of creating a dynamic image, storage medium and program executing apparatus | |
JP2008113762A (ja) | ゲームプログラムおよびゲーム装置 | |
KR100281837B1 (ko) | 화상 처리 장치 및 이를 구비한 게임 장치 | |
EP1085472A2 (en) | Method of creating image frames, storage medium and apparatus for executing program | |
JP3790990B2 (ja) | プログラム、記録媒体、メタボール描画方法及びゲーム装置 | |
JP3766974B2 (ja) | プログラム及び記録媒体 | |
JP3757396B2 (ja) | プログラム、記録媒体、ポリゴン面演算方法及びゲーム装置 | |
US6894688B2 (en) | Program, recording medium, rendering method and rendering apparatus | |
JP2001204957A (ja) | ゲームシステム及び情報記憶媒体 | |
JP2000268193A (ja) | 画像作成装置、画像作成方法、画像作成プログラムが記録された可読記録媒体およびビデオゲーム装置 | |
JP2003006675A (ja) | 画像表示制御方法及びその装置、並びに画像表示制御方法が記録された記録媒体及びゲーム機 | |
JP6945699B2 (ja) | プログラム及びゲーム装置 | |
JP2002216165A (ja) | 画像生成システム、プログラム及び情報記憶媒体 | |
JP4753147B2 (ja) | 画像処理装置及びプログラム | |
JP2017143991A (ja) | プログラム及びゲーム装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050802 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050915 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20051220 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20051222 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120120 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20150120 Year of fee payment: 9 |
|
LAPS | Cancellation because of no payment of annual fees |