ページ 1 / 1
MMORPGに関する疑問
Posted: 2011年8月04日(木) 21:03
by 史上最悪のデスペナ
連続投稿失礼します
MMORPGでキャラメイクに関することなのですが、あれの原理を教えてください
私の予想は髪形や種族などのモデルデータや目などのテクスチャデータが全部クライアント側にあり、
それらの組み合わせで全キャラを表示していると思います。
問題は、それらが全部ひとつのモデルデータになっていればキャラの動きだけを考えればいいだけですが、
ばらばらだと、例えば目ひとつとっても前後左右回転というキャラの動きだけでなく、
モーションもキャラとの相対位置を維持し続けなければならないため非常に大変だと思います
そこらへんはどうやっているのでしょうか?
ゲームはC++とDirectXを普通は使ってると思うのでこちらで質問させていただきました
Re: MMORPGに関する疑問
Posted: 2011年8月04日(木) 21:38
by softya(ソフト屋)
テクスチャデータや装備している装備の情報を番号管理すれば、その情報だけ最初に送っておけばそのキャラは表示できますよね。
あとは、今のモーションとか向きとかの情報など最低限の情報を送るだけで同じ状態を共有できると思いますが。
Re: MMORPGに関する疑問
Posted: 2011年8月04日(木) 22:25
by ISLe
史上最悪のデスペナ さんが書きました:問題は、それらが全部ひとつのモデルデータになっていればキャラの動きだけを考えればいいだけですが、
ばらばらだと、例えば目ひとつとっても前後左右回転というキャラの動きだけでなく、
モーションもキャラとの相対位置を維持し続けなければならないため非常に大変だと思います
基本モデルに不可視のダミーオブジェクトを仕込んでおいて、アニメーションを合成したあと、オブジェクトの変換行列を取得して、パーツの描画に利用するという手法はどうでしょう。
モデルデータを動的に書き換えてしまうという手もありますね。
テクスチャは枚数を抑えるために動的に書き変える手法が主だと思います。
Re: MMORPGに関する疑問
Posted: 2011年8月04日(木) 22:34
by 史上最悪のデスペナ
ん~・・・・・説明が難しいですね・・・・・softya(ソフト屋) さんのおっしゃることは予想はしていたのですが、
えっと、MMORPGにおいて、ゲームサーバーの役割はほぼ、アイテム管理、ダメージ判定、キャラ情報(位置、装備など)発送だけで、
マップ表示、キャラ移動はクライアント側が行っています。
プログラムにも限度があり、実際の数字は全く知りませんが、例えばループ部分で数十行であれば時間差が気になりませんが
そこに何万行と書かれたループがあるとしたら一回ループするだけで1秒たつってこともありえるでしょう。
したがって、ゲーム開発側としては極力そういうことをなくしたいはずです
関数を多く使用すればするほどいちいち呼び出さなければならないので重くなります
つまり、
キャラ移動させる
→テクスチャ移動させる
→装備移動させる
→キャラ角度・モーションに応じてテクスチャ移動
→キャラ角度・モーションに応じて装備移動
なんてのを自キャラだけでなく視界範囲内すべてのモデルに行っていたらかなり重くなると思われます
そこらへんをどう解決してるのか、もしくは杞憂なのかを教えてください
Re: MMORPGに関する疑問
Posted: 2011年8月04日(木) 22:35
by 史上最悪のデスペナ
ISLeさん
モデルデータ動的書き換え・・・・ですか
ちょっと調べてみます。わからなかったらまた教えてください
Re: MMORPGに関する疑問
Posted: 2011年8月04日(木) 22:40
by softya(ソフト屋)
・テクスチャ移動させる
・装備移動させる
ってのが意味がわかりませんが、モデルに貼り付けるテクスチャ情報はゲームを通して一回情報を書き開ければ済みます。
装備は、指定のモデルのボーンの先とかに接合すればモーションに合わせて勝手に所定位置に表示されます。
Re: MMORPGに関する疑問
Posted: 2011年8月04日(木) 23:33
by ISLe
装備のモデルデータを10個や20個追加で処理してもほとんど速度に影響ないと思いますよ。
装備一個に何十万ポリゴンとか使われてたらアレですが、ボトルネックになるのはそういうところではないので。
テクスチャはモデルのローカル座標なので移動しないですし、モデルも移動するのではなく新しい位置に描画するだけですしね。
Re: MMORPGに関する疑問
Posted: 2011年8月05日(金) 10:01
by 史上最悪のデスペナ
えっと、もしかしたら(たぶんそう)基本的なことがわかってないのかもしれません、私が。
私にとって3Dモデルというのは、モデリングソフト(私はメタセコイアです)を使いモデリングし、
ついでに髪の毛を作ったり、テクスチャを貼り付けるもので、モデルデータに髪の毛の種類は一種類のみ、目のテクスチャは一種類のみ
バイナリデータ(っていうんですか?)に書き込まれて保存されているという認識です。
そうなると、クライアントが髪の毛の種類を変更したりすることが出来ないのではないかと思ったわけです。
動的書き換えについてはまだ調べていませんが、なんとなくイメージ的には
たとえば皮膚の色を変更する場合、モデルデータ上の皮膚色が書き込まれてる部分を別の色を指定するコードで書き換えてしまう
というものを想像しています。
でも、かりに上記の考えが正しい場合、
データが16進数であらわされているとして
たとえば髪の毛Aというデータが 16 A3 5c とし、
髪の毛Bというデータが 11 DD 59 E6 という風にデータが多くなってしまった場合、書き換えたら次に書かれてる別のデータの一部が書き換えられてしまうように思うのですがどうなんでしょう?
Re: MMORPGに関する疑問
Posted: 2011年8月05日(金) 11:10
by softya(ソフト屋)
モデルとテクスチャが一体になっているメタセコイアのファイルだとしてもメモリに読み込まれた後はモデルとテクスチャは別に管理されています。
DXライブラリとかでも、MV1SetTextureGraphHandle()でテクスチャを差し替えることが可能です。
つまり、ファイルを書き換えるのではなくメモリ上の情報を書き換えるのです。
Re: MMORPGに関する疑問
Posted: 2011年8月05日(金) 11:37
by 史上最悪のデスペナ
ふむふむ、なるほど。
>メモリに読み込まれた後はモデルとテクスチャは別に管理されています
ここを知りませんでした
とりあえず疑問は解決です。ありがとうございました