atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
FPSを作ってみる@wiki
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
FPSを作ってみる@wiki
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
FPSを作ってみる@wiki
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • FPSを作ってみる@wiki
  • 進捗状況(2012
  • 08)

FPSを作ってみる@wiki

08)

最終更新:2012年08月30日 21:56

slice

- view
管理者のみ編集可

(2012/08/30)

矢継ぎ早に

また前のぐだぐだペースは嫌なので次々と更新をしていく.本当は昨日か一昨日が目標だったけどまぁ,遅れた物は仕方ない.
今回新たに加わったのはトップにも書いた通りノードの視覚化と操作,それとライトのちょっとした効率化.

アニメーションがまだなのでモデルにちゃんと関節入ってるかイマイチ実感できないというのもあり
とりあえずユーザーが関節をクリックで選択し,キー入力でX,Y,Z軸それぞれで回転できるようにしてみた.
ただ,一度に1つの軸でしか回転できないので自分の思い通りの回転は難しい.

ライトの効率化については
まずライトを覆う球を描画し,Zバッファでカリング「されなかった」部分をステンシルバッファに記憶させる.
その後ステンシルバッファをマスクに使っていつも通りピクセルシェーダでライティング.
実はこれ,デバッグビルドで動作させると何かのオーバーヘッドなのか速度が半減したのでヤバイと思ったものの
リリースビルドでは割と順当な速度で動いてくれたので安心した.
現状複雑なライティングをしていないので画面全域とライトを全く映さないの2ケースでしか違いを実感できないが・・

次の目標は
  • ライトの更なる効率化
   ステンシルに加えスクリーン座標で更新すべき2D領域を限定
  • 文字列を途中で色変更
   前のソースでは出来ていたのだが何故だか動かん・・
  • サンプルのスキンメッシュを用意
   現時点で描画出来てたりするがモデルを用意するのがダルかった
割と小粒なタスクだ.目標は明日か明後日.


(2012/08/26)

苦節○年

やっとこれからゲーム作るぞという雰囲気のデモを公開できた.
背景はちゃんとテクスチャとUV座標をセットしようとしたけど,たかがデモなのに面倒すぎて中止.

幾つか既知の問題点があったものの全てを修正していては埒があかないという事もありここで一旦公開とした.
例えば以下のような物である.
  • ライトを120個程度出すと落ちる(メモリアロケータの設定が不味い)
  • 「モデルを開く」ダイアログのデフォルトパスがマイドキュメントになっている
  • 必要もないのにシェーダー3.0でコンパイルしている(実際は2.0で十分)

それと自分以外のPCではロクに動作確認してないので
この環境で動いたor動かなかった,dllが無いと言われたなどあれば
トップぺージに報告してくれれると有り難い.

これから上記の修正とtwitterクライアント公開の準備に入る事にする・・
いや,関節をグリグリ動かす所まではできているしそっちが先かもしれない.

#追記
とりあえず上の3つは修正した.ライトも512個までは確認.それ以上はマシンスペックとメモリの許す限り出せると思う.

(2012/08/22)

リリースビルドが通れば・・

あれから更にエクスポータをいじった。
一つの頂点が複数の法線やUV座標を持っているケースにおいて「その組み合わせの分だけ」別々の頂点として出力、
それに合わせインデックスも改修するように変更。
こうすると例えば一つの頂点が3つの法線と3つのUV値を持っている場合、3*3で9つ生成される事になり
モデルによっては爆発的に頂点数が増える事が予測されるが
  • 使われてない組み合わせをチェックする気力が無い
  • そもそもモデルの作りが不味いのでは?
とも思ったのでこれで一段落。
3ds maxの謎な法線格納方式のお陰で余計に時間食ってしまったなぁ・・・
ポインタをやりくりして無理にメンバ領域を読んでるから非常にアレだ(でも他に取得方法がわからなかった)

で、現在関節ありのメッシュとスキンメッシュをバンプマップ有りで描画して
スクリプトからノードにアクセスする事で角度を変え、関節を曲げるくらいはできている。あと一応DeferredRendering。
文字列、HUD用矩形の描画クラスは前代エンジンからの移植。
ちなみにモーションはまだできてない。モデルエクスポータをあれだけいじったので前のソースがすんなり動くとは思えない。

モーションはまたひと悶着ありそうだから放っておいて、
ここで一旦デモを出したいのだがリリースビルドが通って動くかどうか。
というかメモリアロケータからしてリリースビルドバージョンが安定しないのでその時点で駄目っぽい。

(2012/08/12)

モデル出力

結局エクスポータを書き直した.結果は以下の通り.
追加より消した行が多いという・・でも機能は変わってない.スマートにしようと思うと必然的に行数は少なくなる.
変えた所と言えばバイナリ出力する事も見据えて例えば頂点で
{"position": "0 0 0", "normal": "0 1 0", "uv": "0 0"}
とベクトルをスペース区切りの文字列で表現していた所を
{"position": [0,0,0], "normal": [0,1,0], "uv": [0,0]}
と,配列で出力するようにしたくらい.
他には3ds maxは右手座標系で上がZ軸,奥がY軸になっていたのでD3Dっぽく扱いたいと思い
単純にYとZを交換,それに伴い面を反転.ノードの変換行列も逆行列などかませつじつまを合わせたとか.
材質情報は別途Jsonファイルに定義しファイルパスを指定するっていうのは前回書いた通り.

前は座標変換をよく分かってなくてまずXを反転しその後Y軸やZ軸で回転を加え何とか合わせて誤魔化していた.
この誤魔化しはモデル表示という目的は達成できたものの
あくまでモデルルートのノードに対しての変換で
IKをしようとなるとゲーム中の座標系(左手系)ではそのまま計算出来ず一旦モデル座標系にしてX軸も反転,回転も逆に・・等と非常に面倒だったのである.
ライブラリに頼れば数学なんて大して必要じゃないさーと高をくくってると
ちょっと突っ込んだ事しようとした時にボロが出る典型.

(2012/08/08)

データの受け渡しは基本Jsonで

モデルに付加するゲーム変数をどうやってエンジンに渡そうか考えていた.
当方3ds maxを使っていてモデルはちょっとした自作エクスポータでJson形式としてエンジンへ渡しているのだが
(Jsonはデバッグに便利な為.リリース段階でバイナリ表現にする予定)
一緒に変数を埋め込んでしまうと複数のオブジェクトで同じ設定をしたい時に面倒だ.
なので別途記述したJsonファイルパスをセットする方針とした.
Luaをデータ記述言語として使えば更に柔軟な動作が可能となるがC++から読みたい場合に少々骨だし,それはやりすぎな気がするので却下.

ライブラリ化は早い内に

ついでに今まで座標系の変換を含めテキトーに作っていたモデルエクスポータをちゃんと作ろうという事で
じゃあ出力に使うJsonクラスなんかも新しいバージョンを流用したいよなと思ったまではいいが
新しいバージョンのエンジンは1プロジェクトに全て突っ込んでしまっていてさあ困った.怠慢と言われても仕方ない.

ここで迷うのが静的(lib)にするか動的(dll)にするかであるが
メモリアロケータ等の何百回も呼ばれるルーチンはデバッグビルドだと動作速度が遅すぎてゲーム本体のテストがままならない為
ゲーム本体とアロケータでビルドオプションを分けられるdllにしようかと.
テンプレートクラスのアロケータをいじる度にゲームまでコンパイルし直しも億劫であるし.
(ランタイムライブラリを使わなければ静的でも出来るのかもしれない.しかし少なくとも今の自分には無理)

で,ふと「dllのクラスはバイナリ単位の互換性がない」という,前にどっかのwebページで見た文言が浮かんだ.
いやもう少し正確に言えば異なるコンパイラで同じクラスをコンパイルしたとしても絶対に同じ変数レイアウトになるとは限らない.とかなんとか.
同じコンパイラでコンパイルしないと使えないdllって奴は激しく微妙だし,バグの温床になる.

ここで確かめるのは手間だから遠慮しておくが考えてみればC++の規格でSTLコンテナのデータレイアウトまでは規定してなかったような.
そんなわけで文字列変換とかの単体関数とアロケータはインタフェースを通しdllへ,それ以外のベクトルクラスとかはlibへという
なんだかよく分からない構成になってしまった.

以上が前回からの主な進捗.他は諸処の細かいバグ取り,コメント書きに終始.

戯言

そういやこっちのプログラムがデバッグビルドでもリリースでも使えるライブラリもあるよなぁと
丁度手元にあった3ds max SDKのヘッダを見てたらやはり標準ライブラリは使っていない様子だ.
ところで3ds maxのプラグインを作る際に使う補助ライブラリではクラスをガンガンにエクスポートしている.こりゃ一体?
幾つかファイルを読み進めて察するに
  • クラスのサイズを4バイト境界に合わせる
  • 仮想継承や多重継承は避け代わりにインタフェースを使う
  • テンプレートクラス,というか標準コンテナをメンバに含まない
この辺りを守れば普通にクラスをdllからエクスポート出来そうな予感.
勿論テンプレートクラスは予め実際に使う型で実体化しておく.

と,ここまで書いたら
なんだ結局自分のライブラリは全部dllで行けたんじゃないか?
ライブラリに疎いのがモロバレだな・・

「08)」をウィキ内検索
LINE
シェア
Tweet
添付ファイル
  • git0.jpg
  • skin0.jpg
  • skin1.jpg
FPSを作ってみる@wiki
記事メニュー
  • トップページ
  • 参考資料ブックマーク等
  • Tips

Media

  • 頂き物
Screen shot
  • FPS_page1
  • FPS_page2
  • FPS_page3
  • Other_page1
Drawing
  • Drawing(analog)
  • Drawing(digital)
  • Drawing(digital) 2
  • Drawing(digital) 3
  • Drawing(digital) 4
  • Drawing(digital) 5
  • Drawing(digital) 6
  • Drawing(digital) 7
  • Drawing(digital) 8
  • Drawing(digital) 9
  • Drawing(digital) 10
  • Drawing(digital) 11
  • Drawing(digital) 12
  • Drawing(digital) 13
Movie
  • movies-list

Old Contents

  • トップページ(old)
  • メモ書き
  • 力仕事UP場
  • ゲームシステムとか
  • バグ・動作報告
  • program(twilve)

Progress log

  • (2018/03)
  • (2017/04)
  • (2017/03)
  • (2016/10)
  • (2016/09)
  • (2016/08)
  • (2016/07)
  • (2016/06)
  • (2016/05)
  • (2016/04)
  • (2016/03)
  • (2016/02)
  • (2016/01)
  • (2015/12)
  • (2015/11)
  • (2015/10)
  • (2015/09)
  • (2015/08)
  • (2015/07)
  • (2015/06)
  • (2015/05)
  • (2015/04)
  • (2015/03)
  • (2015/02)
  • (2015/01)
  • (2014/12)
  • (2014/11)
  • (2014/10)
  • (2014/09)
  • (2014/08)
  • (2014/07)
  • (2014/06)
  • (2014/05)
  • (2014/04)
  • (2014/03)
  • (2014/02)
  • (2014/01)
  • (2013/12)
  • (2013/11)
  • (2013/10)
  • (2013/09)
  • (2013/08)
  • (2013/07)
  • (2013/06)
  • (2013/05)
  • (2013/04)
  • (2013/03)
  • (2013/02)
  • (2013/01)
  • (2012/12)
  • (2012/11)
  • (2012/10)
  • (2012/09)
  • (2012/08)
  • (2012/07)
  • (2012/06)
  • (2012/05)
  • (2012/04)
  • (2012/03)
  • (2012/02)
  • (2012/01)
  • (2011/12)
  • (2011/11)
  • (2011/10)
  • (2011/09)
  • (2011/08)
  • (2011/07)
  • (2011/06)
  • (2011/05)
  • (2011/04)
  • (2011/03)
  • (2011/02)
  • (2011/01)
  • (2010/12)
  • (2010/11)
  • (2010/10)
  • (2010/09)
  • (2010/08)
  • (2010/07)
  • (2010/06)
  • (2010/05)
  • (2010/04)
  • (2010/03)
  • (2010/02)
  • (2010/01)
  • (2009/12)
  • (2009/11)
  • (2009/10)
  • (2009/09)
  • (2009/08)
  • (2009/07)
  • (2009/06)
  • (2009/05)
  • (2009/04)
  • (2009/03)
  • (2009/02)
  • (2009/01)
  • (2008/12)
  • (2008/11)
  • (2008/10)
  • (2008/09)
  • (2008/08)
  • (2008/07)
  • (2008/06)
  • (2008/05)
  • (2008/04)



記事メニュー2

Update Log

取得中です。
人気記事ランキング
  1. Drawing_analog
もっと見る
最近更新されたページ
  • 2686日前

    menu_L
  • 2686日前

    進捗状況(2018/03)
  • 2686日前

    Drawing_digital_13
  • 2686日前

    Drawing_digital_12
  • 2686日前

    トップページ
  • 2892日前

    Drawing_digital_11
  • 2973日前

    Drawing_digital_10
  • 3005日前

    進捗状況(2017/04)
  • 3046日前

    進捗状況(2017/03)
  • 3097日前

    頂き物
もっと見る
人気記事ランキング
  1. Drawing_analog
もっと見る
最近更新されたページ
  • 2686日前

    menu_L
  • 2686日前

    進捗状況(2018/03)
  • 2686日前

    Drawing_digital_13
  • 2686日前

    Drawing_digital_12
  • 2686日前

    トップページ
  • 2892日前

    Drawing_digital_11
  • 2973日前

    Drawing_digital_10
  • 3005日前

    進捗状況(2017/04)
  • 3046日前

    進捗状況(2017/03)
  • 3097日前

    頂き物
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. MadTown GTA (Beta) まとめウィキ
  2. AviUtl2のWiki
  3. R.E.P.O. 日本語解説Wiki
  4. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  5. シュガードール情報まとめウィキ
  6. ソードランページ @ 非公式wiki
  7. ドラゴンボール Sparking! ZERO 攻略Wiki
  8. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  9. 星飼いの詩@ ウィキ
  10. Dark War Survival攻略
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. 検索してはいけない言葉 @ ウィキ
  6. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  7. 発車メロディーwiki
  8. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  9. オレカバトル アプリ版 @ ウィキ
  10. SDガンダム ジージェネレーションジェネシス 攻略Wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 過去の行動&発言まとめ - 鹿乃つの氏 周辺注意喚起@ウィキ
  2. マイティーストライクフリーダムガンダム - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  3. 魚拓まとめ - 鹿乃つの氏 周辺注意喚起@ウィキ
  4. 参加者一覧 - ストグラ まとめ @ウィキ
  5. 1103環境(遊戯王) - アニヲタWiki(仮)
  6. 前作からの変更点 - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  7. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  8. コレクター・ユイ - アニヲタWiki(仮)
  9. サーヴァント/一覧/クラス別 - Fate/Grand Order @wiki 【FGO】
  10. 画像倉庫 - 鹿乃つの氏 周辺注意喚起@ウィキ
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.