MMORPGに関する疑問

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
史上最悪のデスペナ
記事: 521
登録日時: 14年前

MMORPGに関する疑問

#1

投稿記事 by 史上最悪のデスペナ » 14年前

連続投稿失礼します
MMORPGでキャラメイクに関することなのですが、あれの原理を教えてください

私の予想は髪形や種族などのモデルデータや目などのテクスチャデータが全部クライアント側にあり、
それらの組み合わせで全キャラを表示していると思います。

問題は、それらが全部ひとつのモデルデータになっていればキャラの動きだけを考えればいいだけですが、
ばらばらだと、例えば目ひとつとっても前後左右回転というキャラの動きだけでなく、
モーションもキャラとの相対位置を維持し続けなければならないため非常に大変だと思います

そこらへんはどうやっているのでしょうか?
ゲームはC++とDirectXを普通は使ってると思うのでこちらで質問させていただきました

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: MMORPGに関する疑問

#2

投稿記事 by softya(ソフト屋) » 14年前

テクスチャデータや装備している装備の情報を番号管理すれば、その情報だけ最初に送っておけばそのキャラは表示できますよね。
あとは、今のモーションとか向きとかの情報など最低限の情報を送るだけで同じ状態を共有できると思いますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: MMORPGに関する疑問

#3

投稿記事 by ISLe » 14年前

史上最悪のデスペナ さんが書きました:問題は、それらが全部ひとつのモデルデータになっていればキャラの動きだけを考えればいいだけですが、
ばらばらだと、例えば目ひとつとっても前後左右回転というキャラの動きだけでなく、
モーションもキャラとの相対位置を維持し続けなければならないため非常に大変だと思います
基本モデルに不可視のダミーオブジェクトを仕込んでおいて、アニメーションを合成したあと、オブジェクトの変換行列を取得して、パーツの描画に利用するという手法はどうでしょう。

モデルデータを動的に書き換えてしまうという手もありますね。

テクスチャは枚数を抑えるために動的に書き変える手法が主だと思います。

史上最悪のデスペナ
記事: 521
登録日時: 14年前

Re: MMORPGに関する疑問

#4

投稿記事 by 史上最悪のデスペナ » 14年前

ん~・・・・・説明が難しいですね・・・・・softya(ソフト屋) さんのおっしゃることは予想はしていたのですが、
えっと、MMORPGにおいて、ゲームサーバーの役割はほぼ、アイテム管理、ダメージ判定、キャラ情報(位置、装備など)発送だけで、
マップ表示、キャラ移動はクライアント側が行っています。
プログラムにも限度があり、実際の数字は全く知りませんが、例えばループ部分で数十行であれば時間差が気になりませんが
そこに何万行と書かれたループがあるとしたら一回ループするだけで1秒たつってこともありえるでしょう。
したがって、ゲーム開発側としては極力そういうことをなくしたいはずです
関数を多く使用すればするほどいちいち呼び出さなければならないので重くなります

つまり、
キャラ移動させる
→テクスチャ移動させる
→装備移動させる
→キャラ角度・モーションに応じてテクスチャ移動
→キャラ角度・モーションに応じて装備移動

なんてのを自キャラだけでなく視界範囲内すべてのモデルに行っていたらかなり重くなると思われます
そこらへんをどう解決してるのか、もしくは杞憂なのかを教えてください

史上最悪のデスペナ
記事: 521
登録日時: 14年前

Re: MMORPGに関する疑問

#5

投稿記事 by 史上最悪のデスペナ » 14年前

ISLeさん
モデルデータ動的書き換え・・・・ですか
ちょっと調べてみます。わからなかったらまた教えてください

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: MMORPGに関する疑問

#6

投稿記事 by softya(ソフト屋) » 14年前

・テクスチャ移動させる
・装備移動させる
ってのが意味がわかりませんが、モデルに貼り付けるテクスチャ情報はゲームを通して一回情報を書き開ければ済みます。
装備は、指定のモデルのボーンの先とかに接合すればモーションに合わせて勝手に所定位置に表示されます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: MMORPGに関する疑問

#7

投稿記事 by ISLe » 14年前

装備のモデルデータを10個や20個追加で処理してもほとんど速度に影響ないと思いますよ。
装備一個に何十万ポリゴンとか使われてたらアレですが、ボトルネックになるのはそういうところではないので。

テクスチャはモデルのローカル座標なので移動しないですし、モデルも移動するのではなく新しい位置に描画するだけですしね。

史上最悪のデスペナ
記事: 521
登録日時: 14年前

Re: MMORPGに関する疑問

#8

投稿記事 by 史上最悪のデスペナ » 14年前

えっと、もしかしたら(たぶんそう)基本的なことがわかってないのかもしれません、私が。
私にとって3Dモデルというのは、モデリングソフト(私はメタセコイアです)を使いモデリングし、
ついでに髪の毛を作ったり、テクスチャを貼り付けるもので、モデルデータに髪の毛の種類は一種類のみ、目のテクスチャは一種類のみ
バイナリデータ(っていうんですか?)に書き込まれて保存されているという認識です。
そうなると、クライアントが髪の毛の種類を変更したりすることが出来ないのではないかと思ったわけです。

動的書き換えについてはまだ調べていませんが、なんとなくイメージ的には
たとえば皮膚の色を変更する場合、モデルデータ上の皮膚色が書き込まれてる部分を別の色を指定するコードで書き換えてしまう
というものを想像しています。

でも、かりに上記の考えが正しい場合、
データが16進数であらわされているとして
たとえば髪の毛Aというデータが 16 A3 5c とし、
髪の毛Bというデータが 11 DD 59 E6 という風にデータが多くなってしまった場合、書き換えたら次に書かれてる別のデータの一部が書き換えられてしまうように思うのですがどうなんでしょう?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: MMORPGに関する疑問

#9

投稿記事 by softya(ソフト屋) » 14年前

モデルとテクスチャが一体になっているメタセコイアのファイルだとしてもメモリに読み込まれた後はモデルとテクスチャは別に管理されています。
DXライブラリとかでも、MV1SetTextureGraphHandle()でテクスチャを差し替えることが可能です。
つまり、ファイルを書き換えるのではなくメモリ上の情報を書き換えるのです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

史上最悪のデスペナ
記事: 521
登録日時: 14年前

Re: MMORPGに関する疑問

#10

投稿記事 by 史上最悪のデスペナ » 14年前

ふむふむ、なるほど。
>メモリに読み込まれた後はモデルとテクスチャは別に管理されています
ここを知りませんでした
とりあえず疑問は解決です。ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る