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

FPSを作ってみる@wiki

04)

最終更新:2012年04月25日 12:17

slice

- view
管理者のみ編集可

(2012/04/25)

もう,疲れた・・

(2012/04/22)

振り出しに戻る

実装途中で薄々感じてはいたが・・
遠くがもろにギザギザ.ポッピングと相まって哀愁を誘う.
ま,これは波の向きがポリゴンに対して一番不味いからだろうと思い,変えてみた.
今度はまずまず見られる範囲.と思いきや・・・
残念でしたー!テクスチャでごまかせるとか言うレベルじゃない.

何が起きているか?
これは動画じゃないと伝わりにくいかもしれないが,手前のメッシュが細かい部分は左へ
遠くのメッシュが荒い部分は右へ流れている.
扇風機の羽根をビデオカメラで撮影しながら回転数を上げていくとある時点で逆向きに見えたり,
サウンドで言えばデータ化する周波数より高い周波数の音を受けた時に全然違う音に聞こえちゃったりするアレである.

そもそも海面は事前に高さデータを入力する類のハイトフィールドじゃない.
実行時に波の周波数や高さから動的に頂点シェーダで高さを決めているのでこのアルゴリズムは全く合わない.
「えー!今更」という声が聞こえそうだが,紛れもない事実である.
それだけなら別に「じゃあ地形に使えばいいか」となってダメージも少なくて済むのだが
これもまた悪い予感がする.

というのも今回実装したのは地形に合った尺度でポリゴンを構成せずに
単にタイルベースで解像度を切り替えているいわば粗末でシンプルなアルゴリズムなので
なだらかな山の中腹なんかディティールレベルの境界がタイル状に凸凹しそうなのは容易に想像つく.
まぁやってみないと分からんが.

ちなみに最初のスクリーンショットのように波の頂点がギザギザになる現象は主にメッシュ(タイル)の頂点配置のせいで
少し工夫すれば(格子状じゃなくて網目状とか)改善は出来るだろう.が,その場合タイルの構成方法からやり直さねばならない.
八方塞がり.散々だね,今回は.

話が湿っぽいから最後に上手くいった点を無理矢理挙げてみる.
上下左右6方向分のD3Dバッファに見えているタイルをそれぞれ登録して
視錐台を使ってどれとどれを実際に描画するか判断する部分.
それと十数フレームに渡ってD3Dバッファにジオメトリ情報を書き込む部分.
これらは予定通り動作した.

今後どうするかについては
  • 海面
Isometric Gridで構成し視点を中心とした放射状グリッドを使う.
但し前のように円周上に頂点を置くのではなく網目状に散らし
遠くに行くに従って密度を減らしていく.アルゴリズムは何とか考える.
  • 地形
No idea.
一応今のアルゴリズムで表示してみてからでないと何とも.
見るに耐えなかったら多分ROAMかその類を使うんだろうな(他人事)


(2012/04/19)

なんも成果が出てないけど一応報告だけ.
無限平面,というかハイトフィールドを実装中なのだが前回書いた視錐台でタイルが見える範囲だけ
頂点&インデックスバッファに転送して描画するというのが惨敗に終わったので一から書き直している.
何がどう駄目だったかと言えば
「幾らDrawCallを減らす為とはいえメインメモリからD3Dバッファへの転送を毎フレームやっていたのではCPU側が重い」
という事.勿論数フレームに渡って更新するのも試してみたが今度は違和感がありすぎる.
キャラクターは60fpsなのに背景は10fpsとか.
MDシルフィード10面の背景と言えばわかるだろうか.
見た目はちょっと面白いからそのうち動画上げるか.

まぁでも
「DrawCallを極力減らした方が,多少無駄なポリゴンが描画されようと軽い」
というのは分かった.
そもそも視点の向きはFPSの場合特に激しく変化する物だから
視線方向に依存した最適化は無理があった訳だね.

で,今度は視点から一定距離以内のタイルを全てD3Dバッファへ転送する方針で組んでいる.
D3Dバッファを上下左右(本当は上要らないが)の6面 * LODのレベル分用意し
視点の方向に応じて描画するかしないか判断する.
当然前のアルゴリズムより処理するタイル数が多くなるが
そこは10フレーム程度かけて負荷を分散する.
後はちょっと動かしてみない限り何とも言えない・・

というか進んでない主な原因はQtフレームワークに手を出してしまったからな気がする.
プログラミングやっててGUIもロクに出せないようでは格好がつかない.
前々からゲームに関連するツールを作ってみたくてC#を触っていた時期もあったけど結局普段使わなくて忘れた.
QtならC++でクロスプラットフォームだし良いかなと.

(2012/04/12)

少し空いてしまった.
現在,無限平面を”ちゃんと”実現する為の作業中.
前までやってたような視点の周りにテキトーに頂点を配置するのではなく
予め格子状に分割したタイルを視錐台を使って見える範囲だけ距離に応じて簡易化したジオメトリを描画する・・・
(無論これは地形にも使う予定)
で,見栄えのしないスクリーンショットを貼ってみる.
分かり易いようにワイヤーフレーム描画,可視距離も近めに設定してみた.
遠くのタイルはモザイク上に欠け(可視距離限界),手前の方はジオメトリが細かくなっているのがわかるかなと.
.....等と言われてもいまいちピンと来ないと思うのでタイルの境界を緑線で示すとこうなる
分割度が異なるタイル間も巧く繋がっている.
ちなみにこの手法(?)はGame Programming Gems2に載ってるから持ってる人はそっちの方が詳しい.

さて気になる描画負荷であるが
現在の実装ではタイル一枚毎に本体のDrawCallが1回,
隣接タイルの分割度が異なる場合はリンクの描画で更に1回,
更にこれが4方向全てだと最悪のケースでタイル1枚につき5回となる.
タイルの見かけ上の大きさをどうするかにも依るが1画面で60枚程度だとすると最大300回,少なく見積もっても100回程度になるだろうか.

地形だけで100回・・・DrawCall回数がどの程度パフォーマンスに影響するかは環境によりけりとはいえ
以前海面を描画した時にDrawCall1回の1万ポリゴン超(頂点遷移あり)がデバッグビルドの時点で100fps程度出ていた(Radeon HD4770)のに対し
上に挙げたスクリーンショットのような地形(頂点遷移なし)で30fpsを割ってしまう事から考えると
最大でも20回,理想的には5,6回程度に抑えたい.
(あとこれは自分の想像なのであるがDeferred Renderingを用いた場合はForward Rendering時に比べ
レンダーターゲットを複数出力する関係でDrawCall回数の影響が更に大きいのではないか?)
毎フレームか一定フレーム毎に描画対象の頂点データを連結してバッファに格納,DrawCallで一括描画の方が
コピーの負荷考えても軽そうだ.

(2012/04/06)

ううむ

ひとまず反射させてみた・・・のだが.
まあ,ねえ.いいんだけどねぇ.
波が頂点変位のみでしかもおとなし目になってるからかもしれないが
パッと見「これならまだ法線マップだけで行けそうじゃね?」というのは正直思う所である.
遠景だったら以前の奴の方がマシかもとさえ.

これに法線マップ足したら何とかなるんだろうか?もうどうしたらいいかわからん.

わからんっつって立ち止まってても埒があかないので
海面の高さは0固定でハードコーディングしてしまってるのでそれを直すのと
コレ
の修正でもしながら次の一手を考える.(ハーフライフ2の初期バージョンであった気がする.懐かしい)
あと無限平面化.

#追記
そもそも法線マップのみの場合と違って頂点が上下するから反射マップをレンダリングする時に
海面の基準XZ平面でクリップしちゃ駄目っぽいね.
ステンシルでなんとか出来そうだが,もっと簡単にやるなら平面のマージンを取るのか?
大体からして反射と屈折マップを一枚で済ませてる訳で,多少の不具合は気にしてないし.

(2012/04/05)

まあまあ

一応それっぽくはなったが・・・後は無限平面化と映り込みの再現でどうなるかだな.
数値を変えればもっと波を細かくするのは可能.
市販ゲームの動画見てると波しぶきはデカール的なポリゴン切り抜き & 重ね張りなのかな?そんな気がする.

(2012/04/03)

基本に戻って

海もどきが納得行かな過ぎて耐えられないので今度は文献を読みながらちゃんとやる.GPU Gemsの最初のアーティクル.
VTFなんて要らなかったんや.ピクセルシェーダーのそれよりもコストが高いらしいし.
放射状の頂点配置も特に利点が無い気がする.

(2012/04/02)

海(続き)

力量の限界を感じた.これ以上はHDRでないとどうしようもない.
光源の位置が高い時:昼など
光源が低い時:夕方など
空の色がそのまんまなのはツッコミ無しで.
にしても折角VTFを使っているのにでこぼこ感が少ない気がする.
波が複雑なときは高さ遷移を押さえ海面ポリゴンの数を増やさないと破綻するというのもあるが,じゃあ波を穏やかにしてうねらせたらどうなるのっと.

他のハイクオリティな動画を幾つか見て気付いた事を踏まえると
多分HDRをやって,メッシュを思い切り細かくしてハイトマップテクスチャもノイズを適当に加工したのじゃなくてちゃんとしたの用意して,
波が高くなってる所に泡立ってる見た目のテクスチャを適用したら変わるんじゃないかと思うが・・・まぁそこまでは.
海面のメッシュもGems3に載ってた視点から放射状に配置するのではなく普通に格子状でも良さそう.

しかし,ちょっと納得いかないなぁ
とりあえず動的反射を入れたい.
「04)」をウィキ内検索
LINE
シェア
Tweet
添付ファイル
  • height0.jpg
  • height00.jpg
  • ocean2.jpg
  • ocean3.jpg
  • ocean4.jpg
  • ocean5.jpg
  • ocean6.jpg
  • ocean6_0.jpg
  • ocean7_0.jpg
  • ocean7_1.jpg
  • ocean7_2.jpg
  • ocean8_0.jpg
  • ocean8_1.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
もっと見る
最近更新されたページ
  • 2687日前

    menu_L
  • 2687日前

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

    Drawing_digital_13
  • 2687日前

    Drawing_digital_12
  • 2687日前

    トップページ
  • 2892日前

    Drawing_digital_11
  • 2973日前

    Drawing_digital_10
  • 3005日前

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

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

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

    menu_L
  • 2687日前

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

    Drawing_digital_13
  • 2687日前

    Drawing_digital_12
  • 2687日前

    トップページ
  • 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.