以下、本発明の好ましい実施の形態として、本発明に係るプログラムをゲームソフトに適用した場合について、添付図面を参照して具体的に説明する。以下の説明では、家庭用ゲーム装置(以下、「ゲーム装置」とする。)において、アクションゲームを進行している場合を例として説明する。
本実施形態に係るアクションゲームは、三次元仮想ゲーム空間上でプレイヤキャラクタを敵キャラクタと戦わせ、プレイヤキャラクタが敵キャラクタを倒すことにより進行する。また、このアクションゲームには、プレイヤキャラクタを編集する機能が設けられている。プレイヤは、編集機能を用いてプレイヤキャラクタを好みの形状に変更することができる。
編集機能では、プレイヤキャラクタの基準となるキャラクタ(以下では、「基準キャラクタ」とする。)の腕や脚、胴体などの各パーツの形状(長さ、太さなど)を変更したり、基準キャラクタの顔を構成する目や鼻などの各パーツの形状および配置位置を変更したりすることができ、編集後の基準キャラクタを自分のプレイヤキャラクタとしてゲームで使用することができる。例えば、腕のパーツでは、肩から肘までの上腕部分と肘から手首までの前腕部分とを、それぞれ個別に長くしたり短くしたり、太くしたり細くしたりすることができる。本実施形態においては、左右の上腕部分で同じ変更がなされ、左右の前腕部分で同じ変更がなされるようにしている。なお、左右それぞれ個別に形状を変更できるようにしても構わない。なお、編集機能の詳細については後述する。
図1は、編集機能を用いて腕または胴体の長さを変更されたプレイヤキャラクタを説明するための図である。
中央に示されているのが、編集前の基準となる基準キャラクタSである。プレイヤキャラクタP1は基準キャラクタSの腕(上腕および前腕とも)の長さを長くしたものであり、プレイヤキャラクタP2は基準キャラクタSの腕(上腕および前腕とも)の長さを短くしたものである。また、プレイヤキャラクタP3は基準キャラクタSの胴体の長さを長くしたものであり、プレイヤキャラクタP4は基準キャラクタSの胴体の長さを短くしたものである。
プレイヤは、編集後のプレイヤキャラクタを自分のプレイヤキャラクタとしてゲームを行う。プレイヤキャラクタの動作には、予め設定されている基準キャラクタSの動作のためのモーションデータが用いられる。ただし、体格が基準キャラクタSとは異なるプレイヤキャラクタに対して、例えば両手で剣を振り下ろすモーションデータをそのまま用いると不自然な映像となるので、プレイヤキャラクタの体格に応じた所定の処理を行っている。
具体的には、まず、基準キャラクタSが両手を広げて直立した姿勢(以下では、「標準姿勢」とする。図1参照)をとったときの腰関節から左手首までの距離(以下では、「関節間距離」とする。)に対するプレイヤキャラクタの関節間距離の比率(以下では、「体格比率」とする。)を算出しておく。例えば両手で剣を振り下ろす動作を行う場合、プレイヤキャラクタの腰関節と剣の位置との距離が基準キャラクタSの腰関節と剣の位置との距離に体格比率を乗算した距離となるように、剣の位置を設定する。すなわち、プレイヤキャラクタが使用している剣の位置を、体格比率に応じて、プレイヤキャラクタに近づけたり離したりする。当該「剣の位置」が本発明の「第2キャラクタに関する部位以外の所定の位置」および「目標点の位置」に対応するものであり、当該「腰関節」が本発明の「第2キャラクタの連結構造の基準となる部位」に対応するものである。そして、剣の位置に合わせて、プレイヤキャラクタの両手の位置を調整する。これにより、プレイヤキャラクタの体格に合わせた自然な動作となる。なお、モーションデータを用いた具体的な動作の再生方法については後述する。
例えば、図1に示す基準キャラクタSの関節間距離(同図では実線矢印の長さで示している。)は1.0であり、プレイヤキャラクタP1の関節間距離は1.3なので、プレイヤキャラクタP1の体格比率は1.3である。したがって、プレイヤキャラクタP1の腰関節と剣の位置との距離は、基準キャラクタSの腰関節と剣の位置との距離の1.3倍となる。また、プレイヤキャラクタP2の関節間距離は0.7なので、プレイヤキャラクタP2の体格比率は0.7である。したがって、プレイヤキャラクタP2の腰関節と剣の位置との距離は、基準キャラクタSの腰関節と剣の位置との距離の0.7倍となる。同様に、関節間距離が1.6であるプレイヤキャラクタP3の腰関節と剣の位置との距離は、基準キャラクタSの腰関節と剣の位置との距離の1.6倍となり、関節間距離が0.8であるプレイヤキャラクタP4の腰関節と剣の位置との距離は、基準キャラクタSの腰関節と剣の位置との距離の0.8倍となる。
図2は、基準キャラクタSおよびプレイヤキャラクタP1、P2がそれぞれ両手で剣を振り下ろしている動作の1コマの画像を示している。
プレイヤキャラクタP1の腰関節と剣の位置との距離(同図では実線矢印の長さで示している。)が基準キャラクタSの腰関節と剣の位置との距離の1.3倍となり、プレイヤキャラクタP1は基準キャラクタSの場合より腰関節から離れた位置で剣を構えている。また、プレイヤキャラクタP2の腰関節と剣の位置との距離が基準キャラクタSの腰関節と剣の位置との距離の0.7倍となり、プレイヤキャラクタP2は基準キャラクタSの場合より腰関節に近い位置で剣を構えている。同図に示すように、プレイヤキャラクタP1およびP2も、それぞれの体格に合った自然な画像となっている。
以下に、本実施形態のハード構成について説明する。
図3は、本実施形態に係るゲーム装置を示す構成図である。ゲーム装置1は、本体11および操作コントローラ12を備えている。操作コントローラ12は短距離無線通信によって本体11に接続されている。本体11には、モニタ13が専用のケーブルによって接続される。また、本体11には、ゲームプログラムやゲームデータが記録されているディスク14が装着され、また、必要に応じてゲームデータを保存するためのメモリカード15も装着される。
本体11は、制御部111、描画処理部112、音声処理部113、ディスクドライブユニット114、メモリカード接続ユニット115、I/Oインターフェース部116、通信処理部117、および信号送受信部118を備えている。制御部111には、描画処理部112、音声処理部113、I/Oインターフェース部116、および通信処理部117が接続されている。また、I/Oインターフェース部116には、ディスクドライブユニット114、メモリカード接続ユニット115、信号送受信部118、およびモニタ13が接続されている。
ゲーム装置1では、上記アクションゲームのソフトウェアが記録されたディスク14がディスクドライブユニット114に装着され、このディスクドライブユニット114からディスク14内のゲームプログラムおよびゲームデータが制御部111内のRAM111c(後述)に読み込まれる。読み込まれたゲームプログラムがCPU111a(後述)によって実行されることにより、プレイヤはゲーム内容を楽しむことができる。プレイヤは、操作コントローラ12(後述)を操作することによりプレイヤキャラクタを操作し、ゲームを進行させることができる。また、プレイヤは、編集画面で、操作コントローラ12を操作することにより、プレイヤキャラクタの編集を行うことができる。なお、プレイヤキャラクタの編集機能の詳細については後述する。
ディスク14内のゲームデータには、基準キャラクタSや敵キャラクタなどのキャラクタデータ(画像データ含む)、武器などのアイテムデータ(画像データ含む)、モーションデータ、背景などの画像データ、効果音などの音声データ、および、ゲーム進行や描画の際に参照される各種テーブルなどが含まれる。
制御部111は、本体11の全体動作を制御するマイクロコンピュータを有している。マイクロコンピュータは、CPU111a、ROM111b、およびRAM111cなどからなり、各部は、それぞれバスラインで接続されている。
CPU111aは、ディスクドライブユニット114によってディスク14からRAM111cに読み込まれるゲームプログラムを実行することより、ゲーム進行を統括的に制御する。より具体的には、操作コントローラ12からプレイヤが操作することによる操作信号が信号送受信部118を介して入力されると、CPU111aは、ゲームプログラムにしたがってその操作信号に対する所定のゲーム進行処理を行う。CPU111aは、その処理結果をモニタ13に例えば三次元空間を表現する二次元画像(以下、「ゲーム画像」という)によって表示するとともに、モニタ13のスピーカ13a(後述)から効果音などを出力する。
ROM111bには、ディスクローディング機能などのゲーム装置1の基本的な機能やディスク14に記録されたゲームプログラムおよびゲームデータを読み出す手順などを示す基本プログラムが記憶されている。CPU111aは、ディスクドライブユニット114にディスク14が装着されると、ROM111bの基本プログラムにしたがってディスクドライブユニット114を動作させ、ディスク14からゲームプログラムおよびゲームデータをRAM111cに読み込み、ゲーム開始状態に設定する。
RAM111cは、ディスクドライブユニット114によってディスク14から読み込まれたゲームプログラムやゲームデータが格納されるエリアと、CPU111aがゲームプログラムを実行するためのワークエリアとを提供するものである。
上記ゲームプログラムは、複数のプログラムが組み合わされて構成されており、例えばモニタ13に表示されているプレイヤキャラクタの動作を操作コントローラ12からのプレイヤの操作信号に基づいて制御するゲーム進行プログラムやモニタ13に表示すべきゲーム画像を制御するグラフィック制御プログラムなどによって構成されている。また、本実施形態において、RAM111cは、ディスク14から読み込んだ基準キャラクタデータ、武器データ、基準キャラクタモーションデータ(図6、図8、図11参照)などを記憶し、これらのデータから作成されたプレイヤキャラクタデータ、プレイヤキャラクタ武器データ、およびスケルトンデータ(図9、図10、および図13参照)などを記憶する。
CPU111aは、操作コントローラ12からのプレイヤの操作信号に基づき、必要に応じてディスク14からゲームプログラムや画像データなどをRAM111cに読み込み、これらのデータを処理したりゲームプログラムを実行したりすることにより、モニタ13に表示すべきゲーム画像の内容を決定する。
描画処理部112は、描画処理に必要な各種の演算処理を行うものである。CPU111aは、例えば、1/60秒毎に、描画処理部112に描画指令を出力する。このとき、CPU111aは、モニタ13に表示すべき画像を決定し、その画像の描画に必要なキャラクタデータ、アイテムデータ、背景などの画像データ、モーションデータおよび光源データなどをRAM111cから読み出して描画処理部112に供給する。また、CPU111aは、各キャラクタの位置データや、操作コントローラ12から入力される操作信号を描画処理部112に供給する。
描画処理部112は、CPU111aからの描画命令に基づいて画像データなどを用いて、描画に必要なデータ(各オブジェクトおよび背景の位置関係、モニタ13の画面上における各オブジェクトを構成するポリゴンの座標、各ポリゴンに対応するテクスチャ、並びに各ポリゴンの反射特性などのデータ)の演算などを行い、その演算結果に基づいて描画処理部112内のVRAM(図示せず)に1コマ(1フレーム)のゲーム画像のデータを作成する。作成されたゲーム画像のデータは、例えば1/60秒毎に映像信号としてモニタ13に出力され、モニタ13に映像として表示される。
音声処理部113は、効果音などの音声を発生させる処理に必要な各種の演算処理を行うものである。CPU111aは、モニタ13のスピーカ13aから出力すべき効果音若しくはBGMの音響内容を決定すると、音声処理部113に音声指令を出力する。音声処理部113は、CPU111aからの音声指令に基づき、RAM111cから効果音もしくはBGMの音声データを読み出し、所定の加工処理とD/A変換処理とを施した後、スピーカ13aに出力する。
ディスクドライブユニット114は、CPU111aからのローディング指令(ローディングすべきゲームプログラムとゲームデータを指定した読出指令)に基づき、ディスク14に記録されたゲームプログラムやゲームデータを読み出すものである。
メモリカード接続ユニット115は、ゲーム進行に関する情報をメモリカード15に書き込んだり、読み出したりするためのユニットである。CPU111aは、ゲーム進行中やゲーム終了時にプレイヤから「データのセーブ」が指令されると、メモリカード接続ユニット115を介してメモリカード15に、ゲーム進行に関する情報(この情報には、例えば、編集機能で作成されたプレイヤキャラクタデータ(図9参照)や、獲得したポイントやアイテムなどの各種の特典などの情報が含まれる。)を記憶する。また、メモリカード15に記憶されたゲーム進行に関する情報は、ゲーム開始前にRAM111cに読み出される。
I/Oインターフェース部116は、ディスクドライブユニット114やメモリカード接続ユニット115によって読み出されたゲームプログラムやゲームデータ、および信号送受信部118が受信した操作コントローラ12からの操作信号を制御部111に伝送したり、制御部111、描画処理部112や音声処理部113からの映像信号や音声信号などをモニタ13やスピーカ13aに伝送したりするものである。
通信処理部117は、ネットワーク回線2を介して他のゲーム装置1と通信を行う場合に、データの送信および受信を行うための制御を行うものである。通信処理部117は、操作コントローラ12から入力される操作信号やCPU111aから出力される信号をネットワーク回線2を介して他のゲーム装置1に送信し、ネットワーク回線2を介して他のゲーム装置1から送信される信号を受信してCPU111aに入力する。
信号送受信部118は、操作コントローラ12から短距離無線通信により送信される信号を受信する。操作コントローラ12からの信号には、操作コントローラ12に設けられた操作ボタンの操作情報の他に、操作コントローラ12に設けられた各種センサ(図示しない)による検出データが含まれる。CPU111aはこの操作コントローラ12から送信される信号によりゲームを進行させることができる。また、信号送受信部118は、操作コントローラ12に各種信号(例えば、操作コントローラ12の振動部(図示しない)を振動させたり、発光部(図示しない)を発光させたり、音声出力部から音声を出力させたりするための信号など)を送信する。
操作コントローラ12は、プレイヤキャラクタを動作させたり、ゲームに関する各種の設定を行ったりするために、プレイヤによって操作されるものである。プレイヤによって操作コントローラ12が操作されると、その操作信号が制御部111に伝送され、モニタ13に表示されたプレイヤキャラクタが所定の動作を行う。所定の動作としては、例えば、走る、しゃがむ、ジャンプするなどの移動動作や武器を使用して相手を攻撃する攻撃動作がある。操作コントローラ12は、自身の電源のオン状態とオフ状態とを切り替えるための電源ボタン、ゲームを開始させたりポーズメニューを開いたりするためのスタートボタン、デモをスキップしたりメニューを選択するためのセレクトボタン、および、プレイヤキャラクタの各動作やカメラ視点の移動操作のための操作ボタンなど(押圧して操作される操作ボタンと傾けることで操作される操作スティックとが含まれる。)を備えている。
モニタ13は、本体11から送られてきた映像信号に応じてゲーム進行状態を示す表示画面を映し出したり、本体11から送られてきた音声信号に応じてスピーカ13aから効果音などの音声を出力させたりするための装置である。モニタ13は、映像信号や音声信号を入力するための外部入力端子を備えた、例えばテレビジョン受像機によって構成されている。
ディスク14は、例えばDVD−ROMまたはCD−ROMなどの光ディスクである。ディスク14には、ゲームプログラムやそのゲームプログラムの実行に必要な種々のデータや画像データが記録されている。メモリカード15は、例えばフラッシュメモリなどのデータの書き換えが可能な不揮発性の記録媒体である。RAM111cのワークエリアの記録は、ゲーム装置本体11の電源を切ると消滅してしまうことから、メモリカード15は、RAM111cのワークエリアの記録のうち消滅させずに残しておくべきゲーム進行に関する情報(例えば、プレイヤキャラクタデータなど)を記録する。
ゲーム装置1は、ネットワークアダプタ16を介して、インターネット回線などのネットワーク回線2に接続することができる。この場合、ネットワーク回線2を介して、複数のゲーム装置1間でゲームを行うこともできる(いわゆる「オンラインゲーム」)。本実施形態では、ゲーム装置1単独で行うゲームについて説明しているが、このようなオンラインゲームでも本発明を適用することができる。
次に、キャラクタの編集処理について、図4〜図10を参照して説明する。
上述したように、本実施形態に係るアクションゲームには、プレイヤキャラクタを編集する機能が設けられている。編集機能には、プレイヤキャラクタの体のパーツ(腕や脚、胴体など)の形状を変更する機能や、プレイヤキャラクタの顔のパーツ(目や鼻など)の形状や配置を変更する機能などがある。以下では、プレイヤキャラクタの体のパーツの編集処理について説明する。なお、顔のパーツの編集処理については、説明を省略する。
図4および図5は、キャラクタのスケルトンモデルを説明するための図である。図4は、キャラクタが標準姿勢を取っているときの各関節のリンク構造を示す図である。図5は、各関節の親子関係の階層構造を示す図である。本実施形態ではプレイヤキャラクタが人のキャラクタなのでスケルトンモデルは人のスケルトンモデルであり、図4および図5はそれぞれ一般的な人のスケルトンモデルのリンク構造および階層構造を示している。
図4において、a〜qが記載されている丸は各関節を示し、wが記載されている丸は武器を示している。なお、各関節a〜qの名称は図5と共通しており、図4においては各名称の記載を省略している。なお、以下の記載でも、各関節a〜qの名称を省略して、例えば、「関節a」とのみ記載する場合がある。各関節間の接続は実線で示されており、例えば、右肩eと右肘fとが接続されていることを示している。腰関節aはスケルトンモデルの基点(連結構造の基準となる部位)となるものであり、本実施形態においては、武器wが腰関節aに接続されている。本実施形態では、この基点(腰関節a)に接続された武器wの位置を変化させる手法について説明する。また、腰関節aと左手首kとの距離(同図に示す実線矢印の長さ)Lが「関節間距離」を示している。なお、各関節とリンク構造はこれに限定されるものではない。関節を省略してより単純な構造としてもよいし、関節を増やしてより複雑な構造としてもよい。また、基点は腰関節aに限定されるわけではなく、胴関節b、首cや左肩iとしてもよいし、各関節とは別の点を設定してもよい。ただし、基点は、体幹などのキャラクタの左右に偏らない点、例えば、中心軸(首c、胴関節b、腰関節aを結ぶ直線)に位置する点が望ましい。
図5において、上位にある関節が下位にある関節の親であり、下位にある関節は上位にある関節の子である。例えば、右鎖骨dは、右肩eの親であり、胴関節bの子である。各関節の位置は、親である関節の位置を基準に設定される。腰関節a(基点)は1番上位の関節であり、腰関節aの位置はローカル座標系の原点を基準に設定される。なお、ローカル座標系は、キャラクタ(例えば、プレイヤキャラクタや敵キャラクタなどの、CPU111aによって動きが制御されているキャラクタ)毎に設定されている座標系であって、キャラクタの動きや姿勢を管理するために設けられている。また、本実施形態では、武器wは腰関節a(基点)の子とされており、武器wの位置は腰関節aの位置を基準に設定される。
プレイヤキャラクタの体のパーツの編集処理は、基準キャラクタのキャラクタデータからプレイヤが使用するプレイヤキャラクタのキャラクタデータを新たに生成したり、生成されたプレイヤキャラクタのキャラクタデータを変更したりすることで行われる。なお、以下では、新たにプレイヤキャラクタのキャラクタデータを生成する場合について説明する。
図6は基準キャラクタデータの一例を説明するための図である。
基準キャラクタデータは基準キャラクタのキャラクタデータであり、プレイヤが編集機能を用いてプレイヤキャラクタを編集するための元のキャラクタデータである。基準キャラクタデータは、ディスク14にゲームデータとして記録されており、ディスクドライブユニット114によって読み出されて、RAM111cに格納される。
図6に示すように、基準キャラクタデータはモデルデータと画像データなどを含んでいる。モデルデータは関節データと関節間距離を含んでいる。関節データは関節a〜q毎のポジションデータとリンクデータとを含んでいる。ポジションデータはキャラクタが標準姿勢を取っているときの各関節の位置データであり、リンクデータは親である関節を特定するためのデータである。例えば、同図においては、関節bのポジションデータは(Xb,Yb,Zb)となっており、リンクデータは親関節である関節aを示す「a」となっている。
関節aは基点であって親である関節がないので、リンクデータを有しない。関節aのポジションデータは、ローカル座標系における位置座標で示されている。本実施形態では、標準姿勢における関節aがローカル座標系の原点の真上(Y軸上)に設定されているので、Xa=Za=0である(図7参照)。関節b〜qのポジションデータは、ローカル座標系における、親である関節の位置を基準とした相対位置を示すデータである。
図7は、ポジションデータを説明するための図であり、ローカル座標系上の関節a、関節b、および関節hの位置座標を示すものである。
関節hのポジションデータ(Xh,Yh,Zh)は、親の関節である関節b(図5参照)の位置座標B(XB,YB,ZB)を基準とした相対位置を示している。したがって、関節hの位置座標Hは、H(XB+Xh,YB+Yh,ZB+Zh)となる。なお、関節bの親の関節である関節a(基点)の位置座標Aは関節aのポジションデータなのでA(Xa,Ya,Za)であり、関節bのポジションデータが(Xb,Yb,Zb)なので、位置座標B(XB,YB,ZB)は(Xa+Xb,Ya+Yb,Za+Zb)となる。したがって、位置座標Hは、H(Xa+Xb+Xh,Ya+Yb+Yh,Za+Zb+Zh)となる。
なお、各関節のポジションデータは、親である関節の位置を基準とした相対位置で表す場合に限られない。例えば、ローカル座標系の位置座標としてもよいし、親関節との距離情報であってもよい。
関節間距離は、関節a(基点)から関節kまでの距離を示している。関節間距離は、関節b,h,i,j、kの各ポジションデータから算出されて、予め設定されている。関節b,h,i,j、kの各ポジションデータをそれぞれ(Xb,Yb,Zb),(Xh,Yh,Zh),(Xi,Yi,Zi),(Xj,Yj,Zj),(Xk,Yk,Zk)とすると、関節間距離は下記(1)式で算出することができる。なお、関節間距離は、関節のポジションデータと下記(1)式とから算出できるので、基準キャラクタデータに含めていなくてもよく、必要の都度算出するようにしてもよい。
L=√{(Xb+Xh+Xi+Xj+Xk)2+(Yb+Yh+Yi+Yj+Yk)2
+(Zb+Zh+Zi+Zj+Zk)2}
・・・・・ (1)
画像データは、キャラクタを構成する各パーツのポリゴンデータおよびテクスチャデータなどを含んでいる。
図8は武器データの一例を説明するための図である。
武器データは、プレイヤキャラクタや敵キャラクタなどが使用する武器のデータである。武器データは、ディスク14にゲームデータとして記録されており、ディスクドライブユニット114によって読み出されて、RAM111cに格納される。
図8に示すように、武器データはキャラクタが使用可能な武器毎に設定されており、モデルデータと画像データなどとを含んでいる。モデルデータは、ポジションデータ、リンクデータ、および基準添え位置などを含んでいる。ポジションデータはキャラクタが標準姿勢を取っているときの武器の所定の部分(例えば、剣の持ち手部分の中心位置など)の位置データであり、基準キャラクタデータの関節b〜qのポジションデータと同様に、ローカル座標系における、親である関節の位置を基準とした相対位置を示すデータである。リンクデータは、親である関節を特定するためのデータである。
例えば、同図において、武器1はプレイヤキャラクタが両手で扱う大型の剣であって、基点からの距離をプレイヤキャラクタの体格比率に応じた距離とするように配置される武器であり、リンクデータが親関節である関節a(基点)を示す「a」になっている。また、プレイヤキャラクタが両手で扱うので、プレイヤキャラクタの右手が添えられる位置を示す基準右手添え位置と、左手が添えられる位置を示す基準左手添え位置とが設定されている。これらの位置は、ローカル座標系における、武器の位置を基準とした相対位置を示すデータである。また、同図において、武器2はプレイヤキャラクタが右手に持って扱う小型の剣であって、リンクデータが関節a(基点)を示す「a」になっている。武器2も、基点からの距離をプレイヤキャラクタの体格比率に応じた距離とするように配置される。武器2は右手に持って扱う武器なので、基準右手添え位置のみが設定されており、基準左手添え位置は設定されていない。なお、本実施形態ではプレイヤキャラクタが左右対称としているので左手首に基づく体格比率をそのまま用いることができるが、プレイヤキャラクタが左右対称でない場合は、右手首に基づく体格比率を別途算出する必要がある。
画像データは、各武器を構成するポリゴンデータおよびテクスチャデータなどを含んでいる。
図9は、プレイヤキャラクタデータの一例を説明するための図である。
プレイヤキャラクタデータは、プレイヤキャラクタのキャラクタデータであり、プレイヤが編集機能を用いて基準キャラクタデータを編集することで作成される。作成されたプレイヤキャラクタデータは、例えばメモリカード15などに記録される。プレイヤが同じプレイヤキャラクタを使用してゲームを行う場合(新たに編集機能を用いてプレイヤキャラクタを作成しない場合)は、メモリカード15に記録されているプレイヤキャラクタデータをRAM111cに読み込んで使用する。
プレイヤキャラクタデータは、モデルデータおよび画像データなどを含んでいる。プレイヤキャラクタデータのモデルデータは、基準キャラクタデータのモデルデータをコピーしたものが最初に記録され、プレイヤによるプレイヤキャラクタの編集に応じて変更される。
モデルデータの各関節のポジションデータはプレイヤによる編集作業によって変更される。例えば、同図においては、関節aのポジションデータは編集によって(Xa’,Ya’,Za’)に変更されている。また、関節間距離は、編集後の関節b,h,i,j、kの各ポジションデータから算出されて設定される。編集後の関節b,h,i,j、kの各ポジションデータをそれぞれ(Xb’,Yb’,Zb’),(Xh’,Yh’,Zh’),(Xi’,Yi’,Zi’),(Xj’,Yj’,Zj’),(Xk’,Yk’,Zk’)とすると、関節間距離は下記(2)式で算出することができる。なお、基準キャラクタの関節間距離と区別するために、プレイヤキャラクタの関節間距離はL’で表している。なお、関節間距離は、関節のポジションデータと下記(2)式とから算出できるので、プレイヤキャラクタデータに含めていなくてもよく、必要の都度算出するようにしてもよい。
L’=√{(Xb’+Xh’+Xi’+Xj’+Xk’)2
+(Yb’+Yh’+Yi’+Yj’+Yk’)2
+(Zb’+Zh’+Zi’+Zj’+Zk’)2}
・・・・・ (2)
プレイヤは、初めてゲームを行うときなどに自分のプレイヤキャラクタを作成するために、編集画面でプレイヤキャラクタの編集を行う。編集画面は、メインメニューで「プレイヤキャラクタの編集」を選択することで開始される。編集画面において、プレイヤは編集するパーツを選択する。選択できるパーツは、例えば、左上腕、左前腕、右上腕、右前腕、左大腿、左下腿、右大腿、右下腿、腹、胸などがある。なお、選択できるパーツはこれらに限られない。本実施形態では、編集画面上に表示されている基準キャラクタの各パーツにカーソルを合わせて所定のボタンを押圧することで、プレイヤはパーツを選択することができる。選択されたパーツは、選択されたことが判るように点滅表示され、編集のためのマーカが表示される。なお、パーツの選択方法はこれに限られず、番号や文字列でパーツを指定して選択するようにしてもよい。
次に、プレイヤは、選択したパーツの長さ(長くするか短くするか)およびその太さ(太くするか細くするか)などを調整する。本実施形態では、選択したパーツに表示されているマーカを移動させることで、当該パーツの長さおよび太さを調整する。なお、選択したパーツの調整方法はこれに限られず、直接数字を入力することで調整するようにしてもよい。また、本実施形態では、プレイヤキャラクタが左右対称となるように、編集したパーツに対応するパーツ(例えば、右上腕を編集した場合は左上腕)にも同じ編集が自動的に行われる。なお、これに限られず、左右別々に編集できるようにしてもよい。
プレイヤによってプレイヤキャラクタのパーツの長さの編集が行われた場合、プレイヤキャラクタデータの所定の関節のポジションデータが変更される。例えば、右上腕の長さを変更した場合、プレイヤキャラクタの右肘の位置が変化するので、関節f(右肘)のポジションデータが変更される。なお、右肘に対する右手首の相対位置は変化しないので、関節g(右手首)のポジションデータは変更されない。また、プレイヤキャラクタを左右対称とするために、左上腕の長さも自動的に変更されて左肘の位置も変化するので、関節j(左肘)のポジションデータも変更される。関節jのポジションデータが変化するので、関節間距離L’も変更される。なお、プレイヤキャラクタのパーツの太さの編集が行われた場合、プレイヤキャラクタデータの各関節のポジションデータおよび関節間距離は変更されない。
画像データは、基準キャラクタの画像データをコピーしたものが最初に記録され、プレイヤによるプレイヤキャラクタの編集に応じて変更される。例えば、編集されたパーツを構成するポリゴンの各頂点の座標は、当該パーツの編集内容に応じて変更される。なお、編集時には画像データを変更せず、編集内容の情報をプレイヤキャラクタデータとして記録しておき、画像生成時に当該編集内容の情報に基づいて画像データを変更して用いるようにしてもよい。
図10はプレイヤキャラクタ武器データの一例を説明するための図である。
プレイヤキャラクタ武器データは、プレイヤキャラクタが使用している武器のデータであり、武器データ(図8参照)のうちプレイヤキャラクタが使用する武器(例えば武器1)のデータをコピーして設定される。プレイヤキャラクタ武器データのポジションデータは、プレイヤが編集機能を用いてプレイヤキャラクタデータを編集することで変更される。例えば、同図において、武器wのポジションデータ(Xw,Yw,Zw)はキャラクタの腕部や胴体部に関係する部位の編集に応じて(Xw’,Yw’,Zw’)に変更されている。本実施形態では、リンクデータが「a」である(腰関節a(基点)の子とされている)武器wは、基点からの距離が基準キャラクタの基点と武器の位置との距離に体格比率を乗算した距離となるように配置される。基準キャラクタの関節間距離(図6参照)がLで、プレイヤキャラクタの関節間距離(図9参照)がL’の場合、プレイヤキャラクタの体格比率はL’/Lとなる。したがって、武器1のポジションデータが(Xw1,Yw1,Zw1)なので(図8参照)、Xw’=Xw1・L’/L、Yw’=Yw1・L’/L、Zw’=Zw1・L’/Lとなっている。
作成されたプレイヤキャラクタ武器データは、プレイヤキャラクタデータと共に、例えばメモリカード15などに記録される。プレイヤが同じプレイヤキャラクタを使用してゲームを行う場合(新たに編集機能を用いてプレイヤキャラクタを作成しない場合)は、メモリカード15に記録されているプレイヤキャラクタ武器データをRAM111cに読み込んで使用する。なお、プレイヤキャラクタ武器データを記録することなく、プレイヤキャラクタデータ(図9参照)と武器データ(図8参照)とから演算によりその都度プレイヤキャラクタ武器データを生成するようにしてもよい。
なお、本実施形態では武器もキャラクタのリンク構造の一部である例を説明しているが、武器の大きさや位置をプレイヤが直接編集することができないようにしている。武器の編集機能では、武器の色の変更や装飾品の追加および削除のみの編集を可能としている。
次に、モーションデータを用いたプレイヤキャラクタの動作の再生方法について、図11〜図13を参照して説明する。
プレイヤキャラクタの動作の再生は、プレイヤキャラクタデータ(図9参照)と基準キャラクタのモーションデータ(図11参照)とを用いて行われる。すなわち、プレイヤキャラクタデータと基準キャラクタのモーションデータに基づいて、プレイヤキャラクタの各関節の位置データを算出したスケルトンデータをフレーム毎に生成する。スケルトンデータに応じてプレイヤキャラクタデータの各パーツを三次元仮想ゲーム空間上に配置する。これをフレーム毎に行うことでプレイヤキャラクタに所定の動作を行わせる。このとき、本実施形態では、動作が不自然な映像とならないように、スケルトンデータに補正を行っている(後述)。
図11は、基準キャラクタモーションデータの一例を説明するための図である。
基準キャラクタモーションデータは、基準キャラクタのモーションデータであり、基準キャラクタの各動作を再生するためのデータである。基準キャラクタモーションデータは、プレイヤキャラクタのモーションデータとしても用いられる。基準キャラクタモーションデータは、動作(モーション)毎に設定されており、フレーム毎の各関節の位置データまたは各関節の回転角度を示すデータを含んでいる。関節a(基点)のデータには、ローカル座標系における位置座標であるポジションデータと、ローカル座標系における関節aの回転角度を示すローテーションデータとが含まれている。また、関節b〜qのデータには、ローカル座標系における各関節の回転角度を示すローテーションデータが含まれている。基準キャラクタモーションデータの各関節のローテーションデータと、プレイヤキャラクタデータ(図9参照)の各関節のポジションデータとから、各関節のローカル座標系における位置を算出することができる。このようにして関節の位置と回転角度から順に子の関節の位置を算出していく方法は、フォワードキネマティクス技術として周知なので、詳細な説明を省略する。
同図に示すモーション1は両手で剣を振り下ろすモーションなので、モーションデータに武器wのモーションデータも含まれている。武器wのモーションデータには、ポジションデータとローテーションデータとが含まれている。武器wのポジションデータは、武器wの所定の部分(例えば、剣の持ち手部分の中心位置など)の位置を特定するためのデータであり、ローカル座標系における、親である関節aの位置を基準とした相対位置を示すデータである。武器wのローテーションデータは、武器wの姿勢を特定するためのデータであり、例えば、ローカル座標系における剣の刀身の回転角度を示すデータである。本実施形態では、武器wのポジションデータに体格比率を乗算することで、武器wの位置の変更(調整)を行っている。
なお、基準キャラクタモーションデータがすべてのフレームのデータを備えていなくてもよく、キーフレームのデータのみを備えておいて、線形補間やスプライン補間などで間のフレームのデータを補間するようにしてもよい。
図12は、ゲーム装置1の例えば制御部111で行われる、プレイヤキャラクタのモーション再生のためのスケルトンデータを生成するための処理(以下では、「スケルトンデータ生成処理」とする。)を説明するためのフローチャートである。
スケルトンデータ生成処理は、フレーム毎に実施される。まず、実行される動作に対応するモーションデータの該当するフレームのデータ(例えば、図11に示すモーション1のフレーム1の処理の場合、ポジションデータα1、ローテーションデータa1、ローテーションデータb1〜q1、ポジションデータβ1、およびローテーションデータw1)と、プレイヤキャラクタデータ(図9参照)およびプレイヤ武器データ(図10参照)とが、CPU111aによってRAM111cから読み出されて、描画処理部112に入力される(S1)。
次に、入力されたデータから補正前スケルトンデータが生成される(S2)。本実施形態では、スケルトンデータの補正を行うので、ステップS2で生成される補正前のスケルトンデータを「補正前スケルトンデータ」としている。
図13は、補正前スケルトンデータの一例を説明するための図である。
補正前スケルトンデータは、各関節および武器の位置データおよび回転角度を示すデータを含んでいる。関節a(基点)のデータには、ポジションデータとローテーションデータとが含まれている。関節aのポジションデータは、ローカル座標系における関節aの位置座標であり、基準キャラクタモーションデータの関節aのポジションデータと、基準キャラクタの脚の長さ(大腿と下腿を合わせた長さ)に対するプレイヤキャラクタの脚の長さの比率Tとから算出される。具体的には、基準キャラクタモーションデータの関節aのポジションデータの各座標成分に比率Tを乗算したものが、補正前スケルトンデータの関節aのポジションデータの各座標成分となる。なお、比率Tは、体格比率と同様に、標準姿勢をとった基準キャラクタおよびプレイヤキャラクタの脚の長さから算出されるが、詳細は省略する。補正前スケルトンデータの関節aのローテーションデータは、基準キャラクタモーションデータの関節aのローテーションデータを用いる。
例えば、図11に示すモーション1のフレーム1の処理の場合、補正前スケルトンデータの関節aのポジションデータは、ポジションデータα1が(Xα1,Yα1,Zα1)の
場合、(Xα1・T,Yα1・T,Zα1・T)となる。また、補正前スケルトンデータの
関節aのローテーションデータは、ローテーションデータa1となる。
関節b〜qのデータには、ポジションデータ、ローテーションデータ、およびリンクデータが含まれている。関節b〜qのポジションデータは、ローカル座標系における、親である関節の位置を基準とした相対位置を示すデータであり、プレイヤキャラクタデータの関節b〜qのポジションデータと基準キャラクタモーションデータの関節a〜qのローテーションデータとからフォワードキネマティクス技術を用いて算出される。補正前スケルトンデータの関節b〜qのローテーションデータおよびリンクデータは、それぞれ、基準キャラクタモーションデータの関節b〜qのローテーションデータおよびプレイヤキャラクタデータの関節b〜qのリンクデータを用いる。
武器wのデータには、ポジションデータ、ローテーションデータ、およびリンクデータが含まれている。武器wのポジションデータは、ローカル座標系における、親である関節の位置を基準とした相対位置を示すデータであり、基準キャラクタモーションデータの武器wのポジションデータとプレイヤキャラクタの体格比率とから算出される。例えば、プレイヤキャラクタの腕が長くなるように編集されている場合、武器wの位置が基準キャラクタの場合と同じであると、プレイヤキャラクタが両手で武器を持ったときの動作が窮屈で不自然なものとなる(図16のプレイヤキャラクタP1参照)。したがって、武器wの位置がプレイヤキャラクタの体格に応じた自然な位置となるように、プレイヤキャラクタの体格比率を基準キャラクタモーションデータの武器wのポジションデータに乗算して、補正前スケルトンデータの武器wのポジションデータを算出する。補正前スケルトンデータの武器wのローテーションデータおよびリンクデータは、それぞれ、基準キャラクタモーションデータの武器wのローテーションデータおよびプレイヤキャラクタ武器データのリンクデータを用いる。
例えば、図11に示すモーション1のフレーム1の処理の場合、補正前スケルトンデータの武器wのポジションデータは、ポジションデータβ1が(Xβ1,Yβ1,Zβ1)で
あり、プレイヤキャラクタの体格比率がL’/Lの場合、(Xβ1・L’/L,Yβ1・L’/L,Zβ1・L’/L)となる。また、補正前スケルトンデータの武器wのローテーションデータはローテーションデータw1となり、リンクデータは「a」となる。なお、この時点では、武器wの位置が体格比率に応じて変更されているが、プレイヤキャラクタの手が武器wの所定の位置に添えられていない。ステップS2に続くステップS3で、プレイヤキャラクタの手が武器wの所定の位置に添えられるように、スケルトンデータの補正が行われる。
図12に戻って、ステップS2で生成された補正前スケルトンデータに補正処理が行われる(S3)。当該補正処理は、プレイヤキャラクタの両手の位置を予め定められた添え位置に位置させるための処理であり、いわゆるインバースキネマティクスと呼ばれる方法を用いている。インバースキネマティクスは、ある関節(先端部分)の位置(例えば、手の位置)を定め、その位置を実現するために各関節の回転角度を自動的に計算して決定するものである。本実施形態では、プレイヤキャラクタ武器データ(図10参照)の基準右手添え位置および基準左手添え位置を、それぞれプレイヤキャラクタの右手および左手の位置とし、インバースキネマティクスによって、関節dおよび関節h(鎖骨)、関節eおよび関節i(肩)、関節fおよび関節j(肘)、関節gおよび関節k(手首)の回転角度を計算し、これらの関節のローテーションデータを補正する。また、これらの関節のポジションデータも、補正後のローテーションデータに応じて補正される。以下では、補正後のスケルトンデータを「補正後スケルトンデータ」とする。
なお、プレイヤキャラクタ武器データの基準右手添え位置および基準左手添え位置とは異なる位置にプレイヤキャラクタの手を添えた動作を行わせる場合には、モーションデータに右手添え位置および左手添え位置を設定しておき、基準添え位置ではない添え位置に手を添えるようにすればよい。なお、武器データ(図8参照)やプレイヤキャラクタ武器データ(図10参照)に基準右手添え位置および基準左手添え位置を設定せず、基準キャラクタモーションデータのモーション毎に右手添え位置および左手添え位置を設定するようにしてもよい。
次に、補正後スケルトンデータの座標変換が行われ(S4)、スケルトンデータ生成処理は終了される。当該座標変換は、ローカル座標系の位置データおよび回転角度データをワールド座標系の位置データおよび回転角度データに変換するものである。これにより、ローカル座標系におけるデータである補正後スケルトンデータが、ワールド座標系のデータに変換される。なお、ワールド座標系は、三次元仮想ゲーム空間上に設定された固定の座標系であり、三次元仮想ゲーム空間上での位置や向きを表すために用いられる。ステップS4の座標変換では、プレイヤキャラクタの「現在位置データ」および「現在向きデータ」が用いられる。
「現在位置データ」および「現在向きデータ」は、それぞれ、ワールド座標系におけるプレイヤキャラクタの位置および向き(正確には、プレイヤキャラクタに設定されているローカル座標系の原点の位置およびローカル座標系の向き)を示すデータであり、RAM111cに記録されている。「現在位置データ」および「現在向きデータ」は、プレイヤキャラクタが三次元仮想ゲーム空間上を移動することで更新される。例えば、プレイヤキャラクタが走って移動する場合、「現在位置データ」および「現在向きデータ」に基づくローカル座標系を基準として走るモーションが実行される。当該走るモーションが終了したとき(最後のフレームが処理されたとき)のプレイヤキャラクタのワールド座標系における位置および向きに基づいて、「現在位置データ」および「現在向きデータ」が更新される。プレイヤキャラクタが走って移動している間、走るモーションの実行と「現在位置データ」および「現在向きデータ」の更新とが繰り返される。
描画処理部112は、最終的に、ワールド座標系のデータに変換された補正後スケルトンデータと、ワールド座標系のデータに変換された画像データなどを用いて、ゲーム画像のデータを作成する。フレーム毎に作成されたゲーム画像のデータが、映像信号としてモニタ13に出力されて、プレイヤキャラクタの動作の映像がモニタ13に表示される。
本実施形態によると、基準キャラクタモーションデータの武器wのポジションデータをプレイヤキャラクタの体格比率に応じて変化させたものが、スケルトンデータに用いられる。したがって、プレイヤキャラクタの体格に応じた自然な位置に武器を配置することができる。さらに、本実施形態によると、プレイヤキャラクタの両手が武器の所定の位置に配置されるように、スケルトンデータが補正される。したがって、プレイヤキャラクタの両手を武器の所定の位置に配置することができる。これにより、基準キャラクタとは体格の異なるプレイヤキャラクタに、共通の基準キャラクタモーションデータを用いた場合でも、プレイヤキャラクタの動作が不自然な映像となることを抑制することができる。
なお、上記実施形態では、標準姿勢における腰関節a(基点)と左手首kとの距離を関節間距離とする場合について説明したが、これに限られない。例えば、関節間距離を、基点と左肘や左肩との距離としてもよいし、基点と右手首や右肘、右肩との距離としてもよい。また、基点からの距離に限定されず、基点とは異なる関節(例えば胴関節bや首cなど)からの距離としてもよい。また、右手首から左手首までの距離などとしてもよい。また、関節間の距離に限定されず、例えば、胸部の中心から上腕の中心までの距離や右手先から左手先までの距離としてもよい。また、標準姿勢はキャラクタが両手を広げて直立した姿勢に限定されない。例えば、両手を下に伸ばした直立姿勢や両手を上に伸ばした直立姿勢などであってもよい。なお、関節間距離を例えば左肩から左肘までの距離などにした場合は、姿勢に関係なく一定の距離になるので、標準姿勢をとるまでもない。
上記実施形態では、基準キャラクタモーションデータの武器のポジションデータに体格比率を乗算することでプレイヤキャラクタの武器のポジションデータを算出し、これによりプレイヤキャラクタの腰関節と武器の位置との距離を基準キャラクタの腰関節と武器の位置との距離に体格比率を乗算したものとしているが、これに限られない。他の方法でプレイヤキャラクタの腰関節と武器の位置との距離を体格比率に応じたものとしてもよい。また、体格比率を乗算することに限られず、他の計算方法としてもよい。例えば、体格比率に所定の調整値を乗算した値を乗算するようにしてもよいし、所定の演算式に基づいて腰関節と武器の位置との距離を算出するようにしてもよい。
上記実施形態では、編集機能によって編集されたプレイヤキャラクタに基準キャラクタのモーションデータを用いる場合について説明したが、これに限られない。例えば、予め用意された体格の異なるキャラクタ(プレイヤキャラクタ、敵キャラクタ、その他のキャラクタを含む。)に共通のモーションデータを用いる場合にも、本発明を適用することができる。なお、完全にリンク構造が一致するキャラクタ同士であることに限定されず、基準キャラクタのリンク構造の一部と同一のリンク構造を有するキャラクタに基準キャラクタのモーションデータを用いる場合でも、本発明を適用することができる場合がある。例えば、両手のリンク構造が同一であれば、片足のキャラクタや頭のないキャラクタ、羽根や尻尾があるキャラクタであっても、剣を両手で振り下ろす基準キャラクタのモーションデータを用いることができ、この場合にも本発明を適用することができる。つまり、共通のモーションデータを用いることができる場合に、本発明を適用することができる。
上記実施形態では、基準キャラクタおよびプレイヤキャラクタが人のキャラクタである場合について説明したが、これに限られない。基準キャラクタおよび基準キャラクタのモーションデータを用いるキャラクタが人以外のキャラクタ(例えば、ロボットやモンスター、動物、その他の生物など)であっても、本発明を適用することができる。また、二足歩行のキャラクタに限定されず、四足歩行のキャラクタや、空を飛ぶキャラクタなどであっても、本発明を適用することができる。つまり、リンク構造が人のキャラクタのリンク構造とは異なるキャラクタであっても、少なくとも一部のリンク構造が同一であり共通のモーションデータを用いることができる場合に、本発明を適用することができる。
上記実施形態では、プレイヤキャラクタが両手で剣を振り下ろす場合について説明したが、これに限られず、片手で剣を扱う場合にも本発明を適用することができる。また、剣以外の武器(例えば、槍やハンマーなど)をキャラクタが扱う場合や、武器以外のアイテム(例えば、傘、杖、バット、ゴルフクラブ、ボールなど)をキャラクタが扱う場合などにも、本発明を適用することができる。また、キャラクタが他のキャラクタを扱う場合(例えば、投げ飛ばしたり、首を絞めたり、握手をしたりする場合)などにも、本発明を適用することができる。
また、アイテムやキャラクタなどのオブジェクトを扱う場合に限られず、キャラクタが両手を合わせる場合(例えば、合掌したり、拍手をする場合)などにも、本発明を適用することができる。この場合は、基準キャラクタモーションデータ(図11参照)に武器wのポジションデータを設定する代わりに、基準キャラクタの両手を合わせるための目標点のポジションデータを設定する。すなわち、当該目標点のローカル座標系における、親である関節aの位置を基準とした相対位置を示すデータをポジションデータとして設定しておき、当該目標点の位置をプレイヤキャラクタの体格比率に応じて変化させ、プレイヤキャラクタの両手を当該目標点に応じた位置に合わせる補正を行う。これにより、プレイヤキャラクタの体格に応じた自然な位置で、プレイヤキャラクタの両手を合わせることができる。この場合、「目標点の位置」が本発明の「表示キャラクタに関する部位以外の所定の位置」に対応するものである。
また、キャラクタが手で扱う場合に限られず、キャラクタが足でオブジェクトを扱う場合(例えば、サッカーのドリブルや敵を蹴り飛ばす場合)などにも、本発明を適用することができる。この場合は、関節間距離を基点と足首との距離などとして体格比率を算出して用い、補正処理(図12ステップS3参照)においては、関節lおよび関節o(股関節)、関節mおよび関節p(膝)、関節nおよび関節q(足首)のローテーションデータをインバースキネマティクスによって補正すればよい。
上記実施形態では、プレイヤキャラクタが左右対称の場合について説明したが、これに限られず、プレイヤキャラクタが左右非対称の場合にも本発明を適用することができる。ただし、プレイヤキャラクタが左右非対称の場合に両手で剣を振り下ろす動作などを行った場合、不自然な映像となる場合がある。したがって、プレイヤキャラクタが片手で剣を振り下ろす動作などに限定して、本発明を適用すべきである。例えば、剣を振り下ろす方の手首と基点との距離から算出された体格比率を用いて本発明を適用すれば、プレイヤキャラクタが片手で剣を振り下ろす動作を自然な映像とすることができる。
上記実施形態では、アクションゲームを例に説明したが、これに限られない。例えば、スポーツゲーム、RPG(ロールプレイングゲーム)、シューティングゲーム、格闘ゲーム、アドベンチャーゲームなどの様々なジャンルのゲームにおいても、本発明を適用することができる。また、本発明は、複数のプレイヤの操作するキャラクタ若しくはCPUの制御するキャラクタがチームを組んで協同して敵キャラクタと対戦するようなゲームや、敵キャラクタとしての他のプレイヤの操作するキャラクタと対戦するようなゲームにも適用することができる。
上記実施形態では、家庭用ゲーム装置でゲームを実施する場合について説明したが、これに限られない。本発明は、例えば、アーケードゲーム装置、携帯型ゲーム装置、および、ゲームソフトが搭載されているパーソナルコンピュータなどでゲームを実施する場合にも適用することができる。
上記実施形態では、本発明をゲームプログラムに適用した場合について説明したが、ゲーム以外のプログラムに適用してもよい。本発明は、モーションデータに基づいてキャラクタなどの動作を表示するあらゆるプログラムに適用することができる。
本発明に係るプログラム、および、当該プログラムを実行するゲーム装置は、上述した実施形態に限定されるものではない。本発明に係るプログラム、および、当該プログラムを実行するゲーム装置の具体的な構成は、種々に設計変更自在である。