LoginSignup
5
2

More than 5 years have passed since last update.

DirtyFlag

Last updated at Posted at 2017-03-07
1 / 18

Game Programming Pattern 17のメモ


アジェンダ

  • DirtyFlagとは?
  • 利用場面
  • 注意点

Dirty Flagとは

  • Dirty Bit ともいう
  • 対象データか見極めるための実装パターン


Q. 海賊船の位置管理問題

structure_480.png


相対変換情報
- 位置変換処理の利便性で必要
- (船移動で見張り台移動)

絶対変換情報
- 各Objectの世界座標を決定する
- 画面描画する際に必要


位置表現の親子階層

舟 (p,r,s)
└─ 見張り台 (p,r,s)
   └─ 船員 (p,r,s)
      └─ オーム (p,r,s)

p: position(x,y,z)
r: rotation(x,y,z)
s: scale(x,y,z)


オームの絶対変換情報は?

  • 親の相対変換情報から求められる
船(p,r,s) x 見張り台(p,r,s) x 船員(p,r,s) x オウム(p,r,s)

1frameで全て動く状況を考える

  • 船移動 => 計算
  • 見張り台移動 => 計算
  • 船員移動 => 計算
  • オウム移動 => 計算

絶対変換情報の更新対象

移動元 更新対象
船,見張り台,船員,オウム
見張り台 見張り台,船員,オウム
船員 船員,オウム
オウム オウム

無駄な計算

  • オウム: +3回
  • 船員: +2回
  • 見張り台: +1回

解決策

  • 計算を遅延する
  • DirtyFlag (1bit) を各objectに割当
  • DirtyFlag:True => 絶対変換が古い
  • DirtyFlag:False => 絶対変換は最新

無駄のない計算

  • DirtyFlagが立っている物体を親から順に計算
  • 計算後にDirtyFlagを下げる
- 船,見張り台,船員,オウム移動
  - 船計算
    - 見張り台計算
      - 船員計算
        - オウム計算

利用場面


Angular
- サーバー送信必要か?をチェック

物理エンジン
- 物体が動いているかどうか?をチェック

GUIエディタ
- 一定時間ごとに編集済みか?をチェック

Unidux
- 状態が変わったかどうか?チェック


注意点


CPUコスト
- 計算遅延をしすぎると重くなるケースもある

メモリコスト
- メモリコスト >> CPUコスト の場合は利用しないほうがいい

DirtyFlag粒度
- 粒度でチェック時のオーバーヘッドが変わる
- 処理時間、送信量、bitサイズなど

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2