3Dなゲームエンジンが作りたい

アバター
lriki
記事: 88
登録日時: 14年前

3Dなゲームエンジンが作りたい

投稿記事 by lriki » 13年前

昨今、MMDをはじめとした3Dコンテンツ作成ツールの充実により
イロイロな資産があふれていますです。

そんなイロイロを活かして簡単に、なんていうか、
3DRPGツクールみたいな感じでゲームが作れたらスバラシイんじゃないだろうか。
そう思い立ってはや1年。

いや、ゲームエンジンなら世界のUnityだろ。MMDモデルをUnityで使えるようにしようっていう
プロジェクトもあるからそこに参加すればいいじゃない。

否。
うにてぃは本格的すぎる。
うにてぃから学ぶべきことは多いが、今や趣味のゲームクリエイターとなった私たちにとって
うにてぃが要求する時間はあまりにも多い。
第一、MMEのシェーダが使えない。まことに遺憾である。

ツクールはジャンル絞ってるけどわかりやすいレベルエディタがついてるとか、
スクリプトを「素材」として組み込める拡張性というかラフな感じというか、
うまく言えないけど何か触ってるだけでわくわくしてくるモノがあると思うんだ。

ということで、MMD+MMEベースな3DRPGツクールを作るんだぜ!!
応援よろしくおねがいします!!




・・・っていう建前で、なんちゃってゲームエンジン作ってます。

てなわけでLat式ミクさん。
120818_1.png
とりえあず表示してるだけですけど、モーションとか物理演算は対応済み。
でもちょっと調整ひつようかも。

それと、MMEのシェーダも使えるよ!
ってことで一番簡単そうな木目シェーダ。
120818_2.png

スクリプトはこんな感じ。1.9以降、ばーんと軽くなったと噂のRubyです。

CODE:

#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
#==============================================================================

class Scene_Map < Scene_Base
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    super
    
    @model = Model.new("MMD/モデル/Lat式ミクVer2.3/Lat式ミクVer2.3_White.pmd")
    @model.shader = Shader.new("MMESample/Wood/Wood.fx")
    
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super

  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------
  def terminate
    super
    
  end
end

#==============================================================================
#
#==============================================================================

あと、何気なく描画周りにマルチコア最適化付き。ゲーム中にON/OFF可能。
メモリ使用量がちょっと増えるけど、FPS300→800くらいに改善。
シングルコアだとむしろ重くなるだけだけどね!



さてと・・・あとはちゃんと続けられるかどうかってところでしょうか。
前のライブラリもあれ以来表に出してないもんなぁ・・・。
や、でもこのなんちゃってエンジンの根っこはそのライブラリだから、
完全に投げちゃってるってわけじゃないんですけどね。

何人かの人に協力してもらって、ちゃんとしたプロジェクトとしてスタートさせた方が
真面目に続けられるのかなぁ・・・。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前

Re: 3Dなゲームエンジンが作りたい

投稿記事 by h2so5 » 13年前

おお~
僕もMMDモデル関係のソフトを作っているので、こういうのは興味がありますね
(描画はDXライブラリに丸投げですけど)

個人的には、 @model.Draw で毎フレーム明示的に描画するのが自然だと思いますが、どうでしょう?

アバター
lriki
記事: 88
登録日時: 14年前

Re: 3Dなゲームエンジンが作りたい

投稿記事 by lriki » 13年前

h2so5 さん、コメントありがとうです。


>個人的には、 @model.Draw で毎フレーム明示的に描画するのが自然だと思いますが、どうでしょう?

最初はそのような感じで実装する予定だったのですが、描画用スレッド実装のためにカットしちゃいました。


というのも、最初 XNA の Game.Draw みたいなコールバックを実装して「描画はこの中だけで行ってください」としようとも思ったのですが、
Ruby の API はスレッドセーフじゃないんですよね。

排他処理するのはそんなに難しくないですけど、それをすると描画中はゲームロジックが動かないわけで、
描画スレッド作った意味がなくなってしまいます。

描画用スレッドを使わない場合は全然問題ないんですけど、
有志の方々が公開しているMMDモデルはどれもゲームで使うには頂点数とかがインフレしているので、
どこかで高速化の工夫をしないとまともにFPSが出なかったりします。


そんなわけで、高速化のための苦肉の策という感じで、明示的な Draw は公開してません。
(そ、その代りZソートとか面倒なことは全部内部でやってるからっ!)

もし「どーーーーしても使いたい!」という方がいれば、リスクを理解したうえで使ってくださいね、っていう感じになるかも。