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

FPSを作ってみる@wiki

07)

最終更新:2012年07月30日 19:55

Bot(ページ名リンク)

- view
管理者のみ編集可

(2012/07/30)

BTS

前々から気になっていたシリーズ.BTS(bug tracking system)だかITS(issue tracking system)とはなんぞや?
一言で言えばバグや要望の案件(の内容や状態)をチケットとして管理するシステム.
ぶっちゃけBTSを1人で使っても殆ど意味無さそうだが将来誰か加わった時や加わる時の為とか
いちいちwikiを更新せずとも進んでいる雰囲気を醸し出せるかもしれないとの目論見でちょっと調べていた.
今の所タスクや仕様等はメモ帳に書き留めているだけなので時々新旧のエントリが混乱したりする.その辺もマシになればと.

BTS自体の説明は他に譲るとして
一口にBTSといっても純粋にバグ管理だけの物からプロジェクト管理までカバーした物,有料無料が存在する訳で
自分の場合はバグ管理にちょっと使ってみたい程度なので勿論無料,機能もバグ管理オンリーの
なるべくシンプルなシステムを選びたい.
具体的にはBugzilla, Redmine, Mantis, Trac.. ASP系ならSimpleBugTrackerやubicast projectsなどが候補に挙がった.

と.ここまで書いておいてアレだがコードホスティングサービスのGitHubやBitbucketにも
簡易なBTSらしき物がついていたのでコレでいいやという結果に.
ApacheにインストールするタイプのBTSもそのうち挑戦したいな.


それはそれとして.
ゲームの方はキャラクタモデルのジョイントに従って手足を動かす処理を組み込んでいた.所謂スキンメッシュ.
まぁ数年前の動画でやってたから特に目新しい事は無し,詰まった箇所は大半が単なる記述ミス(コンパイルエラー)である.
バグらしいバグと言えばシェーダーへの配列変数の設定を勘違いしていて全てSetValueで済ませようとしていた.
あれ?これで動かないんなら動画の時も動かなかったのでは?と思ったがアレは2世代前(3代目.現在5代目)のエンジンだった.
4代目が日の目を見たのはTwitterクライアントくらいか・・

(2012/07/26)

ゲームエンジンの作業に若干飽きてしまったのと前々から思ってたのと
Linuxに最近触ってないからMakefileの書き方とか忘れかけてる!やばい.との事で
GitHubにTLSFアロケータの出来かけをアップしてみた.メモリ効率と速度は非常にアレだが.コメントも日本語でしか書いてないし・・
一応オープンソースなのでコンパイラがvisualC++オンリーでは懐が狭いと思い,gcc用にインラインアセンブラ等修正.
テンプレート関連でvisualC++だと問題ない記述がgccだとエラーになる部分もあったりして幾らか手直しした.
具体的には
template <class T>
struct Base {
  Base(T t) {}
};
template <class B>
struct Someone : Base<B> {
  Someone(B b): Base(b) {}
};
のようなコードをgccでコンパイルしようとするとBaseのテンプレート引数がねぇよ!と怒られてしまう.
visualC++では単にBaseと書いた場合は暗黙にBase<B>のことを指すのだが.

(2012/07/23)

さりげにweb拍手のカウントが増えてる.
特に大規模な更新したわけでも無いがなんか,あったんだろうか.
只のカウンタとはいえモチベーションの維持に少なからず役立つからいいっちゃあいいんだけど.

基礎固めその11: モデル読み込み

文字通り.フォーマットはデータを目視で確認 & 手入力し易いJsonである(ちなみにその前はXMLだった).
ただやっぱり数千頂点,ポリゴンあるモデルの読み込みで1秒程度かかってしまうからリリース時には
バイナリにする必要がありそう.まぁその辺ゲームできてから悩めばいい話なので・・
バンプマップに対応する際に頂点座標とUVから従法線を計算する必要が生ずるのだが
これをモデルデータに含めるかモデルを読み込んでから計算するかで迷った.
即ち速度とデータサイズのどちらを重視するか.
とりあえず開発中だしぶっちゃけどっちでもいいって事でモデル読み込んでからにした.

さて.モデル読み込みまで来たんだからそろそろデモが出せて然るべきなのだが
前に考えてた描画の仕組みじゃDeferredRenderingをしようとした時に上手くいかない事が判明して設計し直している・・

それが終わったら
モデル1つ表示のバンプマップ,セルフシャドウ無し,光源は1つで一発出してみようか.

(2012/07/18)

う~む.コンテナによってメモリ領域を分ける必要性が・・・・?という至極真っ当な疑問が払拭できず
「そもそもゲーム(機)でのSTLの是非」についてなんかも調べながら2時間程考えた.
いっそグローバルなnewを置き換えれば一番簡単かつ見方によっては美しい実装だろう.
しかしゲーム機でもないのにそれをするのは依然として抵抗がある.

まず型でアロケータを分けるのは自分で言っておいて難だが意味がわからないのでボツ.
分けるとしたらフラグメントを避ける目的か.
すなわちずっと確保しておくメモリとそうでないメモリを区別する位なら面倒じゃないし複数種類のコンテナで同じアロケータを使い回せる.
ざっと思いついた所では・・
  • 長くとも1フレーム以内に解放される可変バッファ(関数内で計算結果を一時的に保存するなど)
  • 数秒から数十秒(弾丸やパーティクル)
  • 数分以上(モデルやサウンドなど)
こんなとこか.まぁ3種類でも無駄に多く感じるから上の2つは纏めてしまおう.

長々書いておいてアレだがPCで動かす分には普通のnew/deleteで全く問題ないと思う.だからこれは殆ど趣味みたいなもん.
いずれは非PCで動かすゲームを書いてみたいからその練習.

(2012/07/17)

自前のアロケータ(というかTLSF)を用意したは良い物の実際使ってる場所が
やはり自前のリソースマネージャと明示的に配列を確保してる一部のクラスに留まっていて
普通にstd::vectorなんかはデフォルトアロケータ,つまり::operator newであり
非常に中途半端臭がしてたので対策を考える.

といってもnewをオーバーロードとかはしない.組み込みでもない限り後々面倒だろうから.
要するにメモリの動的確保をするのは主にSTLのコンテナなのだから
そこで使うアロケータを用意しようと.
以前にちょっと調べたこともあったが注意事項など読んでいる内に
「なんだか小難しいからデフォルトを使おう」という話になってたか.

改めて調べると実装自体は既にあるテンプレをコピーしてきて数カ所書き換えるだけであった.
注意事項というのは単に「staticなメンバ変数を持ってはいけない」という物.
何でかというと自分でも完全に理解してないがどうやらC++の規格として
「アロケータは同じ型なら交換できなければならない」というのがあるらしい.
内部に変数なんぞもってたら確保した時と違うアロケータで解放したら不具合起こりそうだ.

あともう一つ.
STL アロケータ とググッて一番に出てくるページなんかではstd::vectorはともかくstd::mapやstd::listは
”ユーザーが自分で用意したアロケータが使われるとは限らないから結局デフォルトが~”とか書いてあるが
これは少々不正確ではないか.
確かにmapやlistはデータ本体の他に前後のノードへのポインタを持つ必要があるのでコンテナの型のアロケータはそのまま使われないと思う.
じゃあ代わりに何で確保するのかという問題になるが仮にここで”勝手に”標準のnewなんて使ってたらアロケータの意味が全くない.
ググッて出てきた他のページを読めばわかるがtemplate <class U> rebind;という構造体がアロケータ内部に定義される事になっていて
その内部型であるrebind<U>::otherがUのアロケータを示す事で他の型のメモリを確保する仕様のようだ.

ま,そんな訳でメモリプールを分けたいと思ったら型で区別するしか無さそうである.
だがC++のtypedefは単なる別名定義に過ぎない.
うっかり頂点インデックスで使うunsigned shortを置き換えようものならプログラムの他の箇所で暴発するのは想像に難くない・・
要するに型が違えばいいのだから最悪
template <class T, class ID>
struct MyInt {
  T value;

  MyInt() {}
  MyInt(T v): value(v) {}
  MyInt& operator = (T v) { value=v; return *this; }
  bool operator == const (T v) { return value==v; }
  operator T() const { return value; }
  ...あと色々定義
};
struct _VIndex {}; // 区別用にユニークな型を定義
typedef MyInt<int, _VIndex> VIndex; // 頂点インデックス
とかでいいか?

あとは簡単なメタプログラミングで型を渡したら対応するアロケータクラスのポインタを返すグローバル関数を定義しておけば,どうだろうか

(2012/07/14)

やっぱり,一人でイチから作るなんて無理があったのかねぇ・・
正直言って完成させる自信ない.

基礎固めその10: レンダリング & アップデート機構

とりあえず動かさなければという事で単純にタスクの優先度でソートしシーン上のオブジェクトをアップデート(毎フレームの処理)
するUpdatorクラスを実装.
描画に関しても同じく優先度ソートで.
一応,後からクラスを実装すればマップの同じ部屋に居る敵だけ更新なども出来る筈.実際やってみないと説得力無いが.
非頂点バッファのポリゴンや同じテクスチャのオブジェクトは纏めて描画する等の部分は移植がメイン.

ま,そんなこんなで四角ポリゴンにテクスチャを張り付けてカーソルキーで移動
スペース押す毎に四角ポリゴンが生成され,優先度でソートされ,描画・・・
といったスクリプトなんぞ書いて動かしていたが
流石にこれで喜ぶ年ではないなぁ.
そりゃ前と比べたら内部はかなりスッキリしてるけれど.拡張性も含め.

次の課題は当たり判定をどうするか.
前までは何となくアップデートフェーズ,描画フェーズ,コリジョンフェーズと分けて処理していたのだが
別に明確にアップデートと分けなくても良いような(実際アップデートの時にコリジョン関数呼びまくってた)
けど当たり判定は一気にやってしまってアップデートの時に結果を各オブジェクトで参照しつつ分岐・・・っていうのも
その都度関数呼ぶよりシンプルでわかりやすいし・・(続く)

(2012/07/10)

後日とか言っておきながら平気で1週間過ぎる訳で.
えっと,このように(?)毎度毎度間隔が空いてしまう原因は
「キリが良い所まで進んだら進捗を書こう」とするからであって動画も然りなのである.
自問自答するようだが「キリの良い所」なんて無いのにね.完成したらか?
否,自分のことだからそれでも細かなアラが気になって仕方ないだろう.

御託はここまで.とりあえず書く.

基礎固めその9: デバイスロスト対応

今までDirect3Dを触っていた癖にずっと放置していたデバイスロストにやっとこさ対応.
何のリソースを確保し直すのか等を調査してリソースマネージャにデバイスロストを通知すれば
予め登録しておいた「ロスト対応が必要なリソース」が順に処理を行うようにした.
これ自体は配列にポインタ登録して呼び出すだけなんでどうって事ないのだが
少し迷ったのがテクスチャにD3DPOOL_MANAGEDフラグを指定しておけばドライバが復帰処理をしてくれる点.
頼ろうか,どうしようか・・

しかしよくよく考えてみたらD3DPOOL_MANAGEDに出来ないRenderTargetはどのみち自前でやらなきゃいけないし
ちょいとググればドライバの復帰処理というのも単にシステムメモリに1つコピーを取っておいて書き戻してるだけっぽいのだ.
つまりメモリを余計に食う.
「ファイルから読む静的テクスチャ」なんかはまたファイルから読めばいいし,軽いプロシージャル生成ならまた走らせればいい.
フルスクリーン状態から最小化して数秒の復帰時間がかかった所で誰も文句を言わないだろうとの判断で
どうしても直前の内容を復元しないと困る場合のみMANAGEDを指定する方針にした.
(でもやりすぎるとsourceエンジンみたいになっちゃうんだろうか)


後はカメラ,頂点・インデックスバッファ,当たり判定,姿勢管理 などのクラスを地道に移植しているのと
オブジェクト間メッセージ通信の部分を煮詰めたりしている.
アップデートと描画の管理については幾分纏まって来たから行けるか・・・?

これらとは別に描画アルゴリズムの調査も少々.
具体的には屋外シーンで使うシャドウマップ(LiSPSMやカスケード手法)
水面下コースティクスなど <= 海面描画に未だに満足してない

(2012/07/04)

さて5月にも書いたが,何かあったわけじゃないけど今月から更に気を引き締めて行こうか・・
とりあえず来月までTwitterを自粛する.

まず結構前に書いた動画の件.
ある程度新エンジンが出来てきたらわざわざ古いソースをいじってまで動画を撮るのが億劫になってしまったので
「モデル表示&視点操作するだけのデモ」で代えさせて貰う.
今思えば海面描画が一段落した時点で動画にすべきだった.

次にQtで作ってみたTwitterクライアントのGitHub公開.
これはソースに少し修正を加えた後,なるべく早くする.具体的にはユーザーの情報を管理する部分が未完成で
現状はどんなにユーザー情報が参照されなくなっても解放されずメモリを食い尽くす一方である.
ゲームエンジンで使っているメモリアロケータとリソースマネージャを組み込めば何とかなるだろうか・・
とはいえ高々1人数キロバイト程度
ことメモリが潤沢な今日では例えスマフォだろうが(恐らく512mbとか積んでるんだろう)
問題になるとは思えない関係で長年放置されてきたのだった.

前にちょっとweb関連を勉強したときの名残であるスクショギャラリー (Media -> Gallery -> ShotGallery).
配信の時にガイジンから
  • 「毎回PHPでスクショのディレクトリを走査する」んでなくてキャッシュした方がいいよ
  • 画像読み込み完了待ちはポーリングじゃなくてjQueryの.load()を使った方が(略
と突っ込みが入った.
後者はともかく前者は毎日サイトに100人程度アクセスが来るようになったら考える.
アクセス頻度高くないのに最適化をするモチベーションは,ちょっと・・
途中まで作ってあるアンケートや投票フォームとかも気が向いたらという事で.

ゲームの進捗についてはまた後日

「07)」をウィキ内検索
LINE
シェア
Tweet
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.