地図/探索/経路探索

コストを意図で塗る — 影響マップ

地面の重みは地形の都合で決まる。コストは「意図」でも塗れる。敵がいる場所ほど通りたくない、味方の陣地ほど安心して通れる。そういう判断を場として持つのが影響マップ。

影響マップ(influence map)。盤上の各セルにユニットの影響の合計を割り当てた場。各ユニットが周りに影響を撒き、距離で減衰させる。よく使われる減衰は 1/d²(距離の二乗に反比例)で、近いほど強く、遠いほどなだらかに薄れる。陣営ごとに符号を分けて足すと、値の正負がどちらの勢力圏かを表し、ゼロを跨ぐ線が二勢力の前線になる。RTS の AI が「どこが危険か」「どこが手薄か」を読むのに使う定番(Tozour, 2001)。

一体のユニットが周りに strength / d² の影響を撒く。各セルで、そのセルからユニットまでの距離の二乗を測り、影響を足す。距離の二乗に soften を足してゼロ割りを避けつつ、近くを丸める。値を明るさに写すと、ユニットを中心に明るい山ができ、遠いほど暗く沈む。ユニットは速度を持って漂い、壁にぶつかると向きを反転して画面に留まる。

明るい山がユニットの位置に張りつき、壁で跳ね返るたびに山ごと移動する。1/d² なのでユニットのすぐ近くだけ急に明るく、少し離れると一気になだらかになる。soften を大きくすると山の頂が低く広くなり、小さくすると針のように尖る。

ユニットを増やして陣営ごとに符号を分ける。偶数番を +1、奇数番を -1 として、影響を符号つきで足し合わせる。合計の正負が、そのセルがどちらの勢力圏かを表す。隣のセルと符号が変わる境目だけを暗く塗ると、二つの勢力の前線が線になって浮かぶ。

味方の塊と敵の塊がそれぞれ明るく盛り上がり、そのあいだを暗い線が縫う。v * r < 0 は、いまのセルと右隣で符号が逆という判定で、積が負になるのは正と負を跨ぐときだけ。下隣との積も同じく見て、どちらかで符号が反転していれば前線として暗く塗る。ユニットが動くと勢力圏が伸び縮みし、前線がそれに合わせてうねる。陣営の数を偏らせると、多い側の勢力圏が前線を押し込む。

この符号つきの場をそのまま A スターのコストに足し込むと、経路の性格が連続的に変わる。敵の影響が濃いマスのコストを上げれば、最短だけど危ない道より、少し遠回りでも安全な道を選ぶ。係数を上げれば臆病に、下げれば突撃寄りに。最短経路の問題が「どう動きたいか」の問題に変わる。影響マップを A スターのコストへ合流させる実装は未踏。