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

FPSを作ってみる@wiki

07)

最終更新:2015年07月20日 00:11

slice

- view
管理者のみ編集可

(2015/07/19)

今回はプログラムがメインで絵は全く進展なし。珍しい。

ゲーム

ライブラリばかり整備してないでいい加減、ゲーム作ってみようかという事で
少し前から上から視点の全方位シューティングっぽいものを組んでいるんだが
ふと、どの位動くのかなと思ってそれぞれ独立に動く火花パーティクルを出してみたら
150個程度出した所で60fpsを維持できなくなった。

これが多いか少ないかはゲームに依るところだが、デバッグビルドとはいえちょっと遅すぎでは?という。
今までパフォーマンス関係の調整はなるべく後回しにして来たものの、流石に遅すぎて気になった…
初代Xboxクラスの性能でもこの程度は余裕だろうと。

さっそく先日作ったプロファイラで調べてみるとオブジェクトのアップデート処理(位置計算)と描画処理にそれぞれ8ms程度かかっている。
これだけで既に16msなので仮に他で何も処理を行わなくても60fpsは厳しい計算。遅すぎる。
(本当にやるならパーティクルはそれ専用にマネージャを作ると思うがそれはともかく)

結論から言うと原因は主に2つで、1つ目はゲームスレッドと描画スレッド間で共用する変数の同期ミス。
描画スレッドが共用変数をロックしたまま描画を始めてしまい、描画の間はゲームスレッドが無駄に待たされていた。
これではスレッドを分けた意味が全くない。
という訳でアップデート処理に8msかかってるのは殆ど待たされた分で
パーティクルの移動処理自体は1ms行くかどうかだった。

もう一つは、new/deleteの呼び過ぎ。
ゲームスレッドは描画すべきリソースやOpenGL APIコマンドをTokenという形にして一旦バッファに置き、
それを描画スレッドが読み取って順に処理する形にしてある。
1つのTokenはテクスチャをシェーダーの何番にセットする、頂点バッファをセットするなどごくシンプルな処理を担い、
これらをいくつか繋げてスプライトやポリゴンが描画される。
で、コードを書いてる時に面倒だったのでこれら1つ1つを全部動的にメモリ確保していた。
するとどうなるか。

スプライト一枚にしてもざっと思いつくだけで頂点バッファ、インデックスバッファ、テクスチャ、頂点フォーマット、
アルファブレンドやブレンド関数の指定、シェーダーのセット、シェーダー変数のセット、そして描画コール…
とりあえずざっくり考えて10Tokenとすると150枚描画したら1500Tokenで、
毎フレーム1500回も確保、解放するのは幾らC++とはいえちょっとやり過ぎ。
纏めるか使いまわすかしなければ。

という訳で、いきなりバッファ一本にするのも大変なので
ひとまず描画コール1つにつき一本の配列バッファにまでは纏めてみた。
結果は8ms -> 6ms程度の高速化。労力の割に思ったほど行かないなーと思ったが
実は4ms程がプロファイル文字列描画で使う頂点の計算などに費やされていて
今回そこはノータッチなのでそれを加味するとまずまずといったところだろうか。

ま、そんな感じです…

(2015/07/15)

絵

主に練習。もふもふ毛並みの塗り方やオリキャラを幾つか模索してみたりとか。
ま、そうでなくとも特にアテもなく落書きするのは楽しい事に気付いた。
特に胸から上だけのバストアップ構図を塗りまでやらずに線画だけというのは
要は顔周辺と一部手だけなのでどんどん行ける。
無論、背景や全身像もやらないとガッツリ描く時に困るのはわかるが…

ゲーム

自作ライブラリResonantであるが、
今までテストコードと称してシェーダーコードやその他画像等のリソースを全く同梱してなくって
ライブラリを試そうという人が居てもほぼ不可能であり、
いわばテスト詐欺になってしまっているなぁという。
かれこれ1年くらい前から認識はしていたものの。
まぁ出来たとこでねぇとか、リソースの著作権関係が面倒くさいのもあって放置していた。

それを、この度重い腰を上げて公開に乗り切った。
Resonant/resourceがそれである。
といっても実際やった事といえば
フォントはIPAGothicを使っていて、これはライセンス文章ファイルを同梱しただけだし
画像数点は全て自前のに差し替え、音楽も海外のパブリックドメインのとこから持ってきた。
一応入手元のURLも明記しておいた。

実行時はプログラムが置いてある場所にresourceディレクトリをコピーし、
引数として resource/pathlistを与えれば動くはず。
ってこれもReadmeとかに書いておくべきだったか。

(2015/07/10)

絶賛放置中になってしまった…
にも関わらず絵だけ着々とアップされていて、もういっそゲーム制作という看板を外した方が
色々とスッキリするんじゃないか。
な〜んて思ったが、それにしちゃぁ量が足りないし
お絵かきブログにつきもののオリキャラも居ない。中途半端過ぎて困る。
オリキャラは幾つか考えてあるものの、画力がどうかな〜という感じで何時になるかわからん。

絵

とりあえずドラゴンが朝起こしてくれれば気持ちよく起きられるよねって事で描いた。
一応、ドラゴンはオリジナルだけどキャラという程でもない。
彼(女?)には申し訳ないが。
とりあえずうなじ良いですよね。うなじ。

いつもアニメ塗りもいいなぁと思いつつ、
なんかしっくり来なくて結局水彩ツールの塗りで誤魔化してしまうクセがあるので
今回は背景を水彩、手前のキャラクターその他は絶対にアニメ塗りと決めてかかった。
カーテンの皺を描いてる時に死にそうになったのと、
左の時計は今でこそそれなりに満足だが、ほんとに最後の最後までイメージ通りに塗れなくて絶望してた。
窓の外の背景はまぁ、手間とクオリティと自分のスキル的にこんなもんかなぁって感じで。
空の色は夏っぽくて結構好きですね。

プログラム

う〜んと、まぁ一言で言えばゲームをゲームとして動かす際の
シーン遷移やオブジェクトのステート管理周辺がバグバグだったので直してた。

当たり判定に関しては2Dの凸形状でない凹ポリゴンを凸ポリゴンに分割するルーチンの実装。
これはシンプルで遅いアルゴリズムでやれば大して難しくないのだが
何を思ったか速い方に挑戦してしまった為、無駄に時間を食った。
そして「そもそもあまり使わないのでは」という事実から目をそらした。
ランダムマップ生成なら凸を組み合わせて作るだろうし。ユーザーがエディタでマップを編集する時くらいしか思いつかん。
でもそれだったら事前に計算しておける訳だし遅いアルゴリズムで良かったよね?みたいな。

ぶっちゃけ3Dの凹 -> 凸分割の方が有用なのだが、こちらはこれといったアルゴリズムが存在しておらず
要はBSPで地道にやってねという雰囲気。ぐだぐだ。

あとゲームのエフェクトで付き物のフレームバッファやレンダーバッファの切り替えとかをテストしたりとか。
レンダリングという部分だけで見れば前の描画結果を重ねてるだけで今更どうという事もないけれど
内部的には単なるデモとは違う。少なくとも自分にとっては。
「07)」をウィキ内検索
LINE
シェア
Tweet
添付ファイル
  • blur.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.