相対論的ゲームを
作る
尾田欣也(大阪大学)
with
中山大樹(大阪大学)
picture	from	web
相対論が見たい!
相対論が見たい!
Outline
1. なにがみえるか。	
2. 相対性理論10分間ダイジェスト。	
3. ゲームへの実装。
https://en.wikipedia.org/wiki/Aberration_of_light
サーチライト効果(光行差)
https://en.wikipedia.org/wiki/Aberration_of_light
サーチライト効果(光行差)
後退効果(自称)
✦ 加速する⽅向にものが遠ざかっていきました
ね?	
✴ その反対向きは近づいてくるようにみえる。	
✦ 後退効果は真に相対論的な効果。	
✴ ⼀⽅光⾏差(前⾴)は光速が有限というだけで起きる。
✴ 背景における効果は既に⾒た。
ドップラー効果
✦ 遠ざかるものは⾚く、近づくものは⻘く。
http://www.actele.co.jp/knowledge/image/KNO_15.jpg
✴ 背景における効果は既に⾒た。
ドップラー効果
✦ 遠ざかるものは⾚く、近づくものは⻘く。
http://www.actele.co.jp/knowledge/image/KNO_15.jpg
時間の遅れ(浦島効果)
時間の遅れ(浦島効果)
ここまでのまとめ
✦ サーチライト効果(光⾏差)	
✦ 後退効果(ローレンツ収縮)	
✦ ドップラー効果	
✦ 時間の遅れ
Outline
1. なにがみえるか。	
2. 相対性理論10分間ダイジェスト。	
3. ゲームへの実装。
注: 特殊 vs 一般
✦ このトークで取り扱うのは特殊相対論。	
✴ これは⾼校の数学で理解できる。	
✦ 重⼒を時空の歪みとして	→	⼀般相対論。	
✴ これはリーマン幾何学という⼤学の数学が必要。	
✴ ゲームに取り⼊れるにはまだ計算器の速さが⾜りない?	
✤ リアルタイムでレイ・トレーシングをやるぐらいのかんじ。
回転不変性
✦ どの向きにみても物理法則は変わらない。	
✴ なのでぐりんぐりん回せるわけです。
回転不変性
✦ どの向きにみても物理法則は変わらない。	
✴ なのでぐりんぐりん回せるわけです。
回転不変性を式で(眺めるだけ)
http://akita-nct.jp/yamamoto/lecture/2007/p1/2nd/html/node7.html
回転不変性を式で(眺めるだけ)
✦ 原点まわりの回転:	⾏列による⼀次変換
2
4
x
y
z
3
5 !
2
4
x0
y0
z0
3
5 =
2
4
Rxx Rxy Rxz
Ryx Ryy Ryz
Rzx Rzy Rzz
3
5
2
4
x
y
z
3
5
~x ! ~x0
= R~x
✦ 回転=原点からの距離を変えない⼀次変換
http://akita-nct.jp/yamamoto/lecture/2007/p1/2nd/html/node7.html
~x02
= ~x2
! RT
R = 1
等速直線運動系へ
✦ ガリレイ・ブースト:	
✴ xʼ	系からみると	x	系は速度	v	で動いている。
x
y
z
z0
y0
x0~v
~x ! ~x0
= ~x + ~vt
~x ! ~x0
= ~x + ~vt

t
~x
!

t0
~x
=

t 0
~v 1

t
~x
2
6
6
4
t
x
y
z
3
7
7
5 !
2
6
6
4
t0
x0
y0
z0
3
7
7
5 =
2
6
6
4
t 0 0 0
vx 1 0 0
vy 0 1 0
vz 0 0 1
3
7
7
5
2
6
6
4
t
x
y
z
3
7
7
5
時空でガリレイ・ブースト
✦ 時空でみると回転と似た⼀次変換。
光速度不変
✦ 回転=原点からの距離を不変にする空間座標の⼀次変換。	
✦ 光の速さ	c	を不変にする時空の⼀次変換は?	
✦ なんでそんなことを考えるのか?(余談なので⾶ばす)	
✴ 電磁気学は回転不変だけどガリレイ・ブーストで不変ではない。	
✴ パンがなければお菓⼦を⾷べればいいじゃない:	
✤ ガリレイ・ブーストをある極限として含むようなもっとリッチな変換で不変にしとけば?	
✴ 理論を拡張するときの定跡:	どんな量を不変にしたいかを考える。	
✤ 光速度	c	を不変にしてみよう。
速度 c の光の球面波
✦ t=0	に原点を出た光の球⾯波の波⾯:
https://en.wikipedia.org/wiki/Wave_equation
x2
+ y2
+ z2
= (ct)
2
速度 c の光の球面波
✦ t=0	に原点を出た光の球⾯波の波⾯:
https://en.wikipedia.org/wiki/Wave_equation
x2
+ y2
+ z2
= (ct)
2
ローレンツ変換(眺めるだけ)
✦ この量を不変にする⼀次変換が、ローレンツ変換:
x2
+ y2
+ z2
= (ct)
2
2
6
6
4
ct
x
y
z
3
7
7
5 !
2
6
6
4
ct0
x0
y0
z0
3
7
7
5 =
2
6
6
4
⇤tt ⇤tx ⇤ty ⇤tz
⇤xt ⇤xx ⇤xy ⇤xz
⇤yt ⇤yx ⇤yy ⇤yz
⇤zt ⇤zx ⇤zy ⇤zz
3
7
7
5
2
6
6
4
ct
x
y
z
3
7
7
5
(ct0
)
2
+ ~x02
= (ct)
2
+ ~x2
! ⇤T
⌘ ⇤ = ⌘
特殊相対論まとめ
✦ 光速度不変を仮定。	
✦ 球⾯波の形を不変に	
✴ →	ローレンツ変換。	
✴ →	たしかにガリレイ・ブースト(等速直線運動系への)を含む。
Outline
1. なにがみえるか。	
2. 相対性理論10分間ダイジェスト。	
3. ゲームへの実装。
従前のゲームにおける時間発展
従前のゲームにおける時間発展
✦ 時刻	t	で物体の位置	x、速度	v	を覚えてる。	
✴ 画⾯には位置	x	で表⽰されている。	
✦ プログラム⼀回しの経過時間	Δt	後、位置を	x	+	v	Δt	に更新。	
✴ プログラムっぽく書くと、x		+=		v	Δt	
✴ この新しい位置	x	+	v	Δt	を画⾯に表⽰する。	
✦ 速度	v	は?	
✴ 安直:	その都度の⼊⼒がそのまま速度に。	
✴ 物理エンジン:	加速度	a	を与え	v	+	a	Δt	に更新。	
✦ これの繰り返し。
どこを変更して相対論化するか?
有限の光速度と光円錐
✦ 光円錐はローレンツ不変量:	
✴ (ct)
2
	=	x
2
+y
2
+z
2
。	
✦ すべての者は、	
✴ 過去光円錐(PLC)と他の世界線との
交点を⾒る。	
✴ 過去光円錐(PLC)より過去側からの
み影響を受けうる。	
✴ 未来光円錐(FLC)より未来側にのみ
影響を及ぼせる。
⾃然単位系	(c=1)	で	
光は常に45°の傾きで進む
Idea
★同時刻⾯ではなく、プレイヤーの過去光円錐で時空をスライス。	
✦ →有限の光速	
✴ 敵もまた、敵の過去光円錐で世界を⾒る。	
✦ →因果律	
★ゲーム時間はプレイヤーの固有時に同期。	
✦ →時間の遅れ	
★各瞬間にプレイヤーの静⽌系で世界を描画する。	
✦ →ローレンツ後退(収縮)
ローレンツ後退(収縮)
★加速してから(描画の
ための)静⽌系に移る。
✴ 進⾏⽅向の物体はより
速く近づくように。	
★近づく棒はむしろ奥⾏
⽅向に伸びて⾒える。
遠ざかる棒を観測
近づく棒を観測
x1
t
図 6 時空 D = 2 次元の場合の棒の世界面 (黄色) 。世界面上の筋は棒の構成粒子
ドップラー効果?★波数ベクトルのローレンツ変換の式⾃体は簡単に書ける。が、	
★⾊=RGB	3つの数。	
✴ 元の光のスペクトルの情報より絶望的に少ない。	
★与えられた画像のドップラー効果はテキトーにしか導⼊できない。
400 450 500 550 600 650 700
Wavelength (nm)
Normalizedconeresponse(linearenergy)
S M L
photoreceptor proteinWikipedia:	Color	vision http://www.handprint.com/HP/WCL/color1.html
ドップラー
★というわけでこちらもテキトーに導⼊。
10000 20000 30000 40000
50
100
150
200
250
温度	[K]
RGB値
★⾊ごとに温度を決め、光的な4次元ベクトルの時間成分に
突っ込んでローレンツ変換。
まとめ
1. なにがみえるか。	
2. 10分で相対性理論を知る。	
3. ゲームへの実装。
まとめ
1. なにがみえるか。	
2. 10分で相対性理論を知る。	
3. ゲームへの実装。
✦ Mac/Win	でゲームできます。

「そげぶ+相対論」で検索!	
✦ 中⼭くんが4⽉から就職。→プログラマ募集中!!
Thank you!
Picture	from	web.
backup
相対論的スケール
✦ ゲームの舞台としては太陽系
が程良い。	
✴ 光速近くで移動するプレイヤー:	
✤ 固有時はローレンツ因⼦で割られる。	
✤ 左記よりもっと短い時間として知覚される。	
✦ もっと計算機が速くなったら
舞台は⽇常3Dで、マトリック
ス(映画)⾵に光速が遅いよ
うな場合も⾯⽩いかもしれな
い。
40光分
7光時
Figure	from	web.
加速度の変換
★共変速度	un	で⾛っている物体が、⾃分の静
⽌系で	αn	の加速をした場合:
α0
n = 0
物体 On の共変速度が un だったとする。具体的には S は
evoluti
4.2 節と
_foliation
イヤーの静止系 Sp である。このとき、入力 αn = 0, ⃗αn に対す
n·⃗αn
⃗un) , ⃗αn は
αn = L(−⃗un)αn =
γ(⃗un) ⃗uT
n
⃗un Id + (γ(⃗un) − 1) ˆun ˆuT
n
0
⃗αn
=
⃗un · ⃗αn
⃗αn + (γ(⃗un) − 1) ˆun · ⃗αn ˆun
、
つまりは
時間発展
xp =
0
⃗0
−→
0
⃗0
up =
1
⃗0
−→
1
⃗0
αp =
0
⃗αp
(246)
(基準系でのプレイヤー位置)
X0
p −→ X0
p + γ ⃗Up ∆s
⃗Xp −→ ⃗Xp + ⃗Up ∆s
⃗Up −→ ⃗Up + ⃗Ap ∆s (247)
(共動系での他物体の位置)
xn =
− |⃗xn|
⃗xn
−→ x′
n := L(⃗αp∆s)
− |⃗xn|
⃗xn
+
γ(⃗un)
⃗un
∆τn −
∆s
⃗0
−→
− ⃗x′
n
⃗x′
n
un =
∗
⃗un
−→ u′
n := L(⃗αp∆s)
γ(⃗un + ⃗αn∆τn)
⃗un + ⃗αn∆τn
−→
γ(⃗u′
n)
⃗u′
n
αn =
∗∗
⃗αn
(248) x_nu_nTransforma
(共動系での全世界線)
Wn =
x0
n(a)
⃗xn(a)
A
a=1
−→ L(⃗αp∆s)
x0
n(a)
⃗xn(a)
−
∆s
⃗0
A
a=1
(249) worldline_evolus
(基準系での全世界線)
W基
n =
X0
n(a)
⃗Xn(a)
A
a=1
−→
X0
n(a)
⃗Xn(a)
A
a=1
(250) worldline_ref_fr
ローレンツ「収縮」?
★近づく棒はむしろ奥⾏⽅向に伸びて⾒える。
遠ざかる棒を観測
近づく棒を観測
x1
t
加速すると遠ざかる?
★等加速度運動のときの⾒かけの位置と速度:
と思って自然単位系から光速 c を復活させる
ξ(s) = eas/c
ξ0 −
2c2
a
sinh2 as
2c
、
ξ′
(s) = ceas/c
1 +
aξ0
c2
− eas/c
。
を大きな数と思って展開すると、おなじみ
結果をすべてを式 (253)に入れ、定数ベクトル ˆxn の係数を読みとると
dξ
ds
=
− sinh(as)
cosh(as) − sinh(as)
+ aξ、 (268)
初期条件 ξ(0) = ξ0 の下で解くと
ξ(s) = eas
ξ0 −
2
a
sinh2 as
2
。 (269) exact_xi_of_s
ていたプレイヤーが、他の静止した物体に向かって等加速度運動をすると
する、近似のない厳密な式が得られた。見かけの速度(見かけの距離の増
ξ′
(s) = eas
(1 + aξ0 − eas
) (270) apparent_velocity_for_constant_acceleration
元と思って自然単位系から光速 c を復活させると、見かけの位置および速
ξ(s) = eas/c
ξ0 −
2c2
a
sinh2 as
2c
、 (271) NNU_exact_xi_of_s
ξ′
(s) = ceas/c
1 +
aξ0
c2
− eas/c
。 (272) NNU_apparent_velocity_for_constant_accelerat
を大きな数と思って展開すると、おなじみの非相対論極限、すなわち
度運動の式が得られる:
ξ(s) = ξ0 −
a
2
s2
+ O c−1
、 (273) NR_exact_xi_of_s
ξ′
(s) = −as + O c−1
。 (274) NR_apparent_velocity_for_constant_accelerati
★さまざまな極限:
きの、見かけの距離に対する、近似のない厳密な式が得られた。見かけの速度(見かけの距離の増
加率)は
ξ′
(s) = eas
(1 + aξ0 − eas
) (270) apparent
となる。
ちなみに s を時間の次元と思って自然単位系から光速 c を復活させると、見かけの位置および速
度は
ξ(s) = eas/c
ξ0 −
2c2
a
sinh2 as
2c
、 (271) NNU_exac
ξ′
(s) = ceas/c
1 +
aξ0
c2
− eas/c
。 (272) NNU_appa
である。形式的に c = 1 を大きな数と思って展開すると、おなじみの非相対論極限、すなわち
ニュートン力学の等加速度運動の式が得られる:
ξ(s) = ξ0 −
a
2
s2
+ O c−1
、 (273) NR_exact
ξ′
(s) = −as + O c−1
。 (274) NR_appar
この節の以下の議論では自然単位系から c を戻して考えてみよう。
式 (
exact_xi_of_s
269)を、プレイヤーの経過時間 s が十分小さい: s ≪ c/a と思って展開すると、当初の疑問
どおり、見かけの距離は時間とともにどんどん離れてゆくことが分かる:
ξ(s) = ξ0 + ξ0
as
c
+ O
as
c
2
。 (275)
一方見かけの速度 (
apparent_velocity_for_constant_acceleration
270)は、
加率)は
ξ′
(s) = eas
(1 + aξ0 − eas
) (270) app
となる。
ちなみに s を時間の次元と思って自然単位系から光速 c を復活させると、見かけの位置および速
度は
ξ(s) = eas/c
ξ0 −
2c2
a
sinh2 as
2c
、 (271) NNU
ξ′
(s) = ceas/c
1 +
aξ0
c2
− eas/c
。 (272) NNU
である。形式的に c = 1 を大きな数と思って展開すると、おなじみの非相対論極限、すなわち
ニュートン力学の等加速度運動の式が得られる:
ξ(s) = ξ0 −
a
2
s2
+ O c−1
、 (273) NR_
ξ′
(s) = −as + O c−1
。 (274) NR_
この節の以下の議論では自然単位系から c を戻して考えてみよう。
式 (
exact_xi_of_s
269)を、プレイヤーの経過時間 s が十分小さい: s ≪ c/a と思って展開すると、当初の疑問
どおり、見かけの距離は時間とともにどんどん離れてゆくことが分かる:
ξ(s) = ξ0 + ξ0
as
c
+ O
as
c
2
。 (275)
一方見かけの速度 (
apparent_velocity_for_constant_acceleration
270)は、
ξ′
(s) = c
aξ0
c2
− 1 −
aξ0
c2
as
c
+ O
as
c
2
(276)
背景の貼り付け
U のとき、プレイヤーの共動系における(原点から十分遠くの)座
)Ξ を
ξ =
⎡
⎢
⎢
⎣
−r
r sin θ cos φ
r sin θ sin φ
r cos θ
⎤
⎥
⎥
⎦ (382) star_position_in_player
イヤーにとって (θ, φ) 方向から来る光が、テクスチャ座標の (U, V )
ある (θ, φ) を与えると、(プレイヤーの静止系での)対応する星の位
frame
はここでは固定せず単に非常に大きなある距離とする。この位置は、
Ξ = L(−⃗U) ξ (383) Xi_vs_xi
のようにして決まった (X, Y, Z) から、背景系での方角 (Θ, Φ) が
的に対応するテクスチャ座標 (U, V ) が (
UV_in_background_frame
381)で決まる。このとき、
らである。したがって r は計算に便利なように好きに取ってよい。
まとめる。プレイヤーの静止系でプレイヤーを包み込む球面を背景として考え、
スチャを貼る。この球面を構成するポリゴンの各頂点の位置ベクトルを ⃗r = (x,
リゴンの各頂点は、プレイヤーの共動系での(一定の半径の)球面上に固定され、
るとする。(視線の方向を変えるには必要に応じてさらにカメラの方を回す。)頂点
景系での位置 (T, X, Y, Z) は
⎡
⎢
⎢
⎣
T
X
Y
Z
⎤
⎥
⎥
⎦ = L(−⃗U)
⎡
⎢
⎢
⎣
− x2 + y2 + z2
x
y
z
⎤
⎥
⎥
⎦
で求まり、ここから
*137 OpenGL では Umax = Vmax = 1 (というか (U, V ) のことを (S, T) と書くので結局 Sma
取っている。
99
U =
Umax
2π
arctan
Y
X
、 V = Vmax 1 −
1
π
arctan
√
X2 + Y 2
Z
、
するテクスチャ座標である。(逆正接関数としては Python では math モジ
y, x) := arctan y
x を用いるのがよいだろう。)
過去光円錐
• 相対論において何かが見えるとはどういう事か?

• 自機に見えるのは過去光円錐上の点である!

• ∵ 時空点 (t, x) の過去光円錐はそこに到達する光の軌跡全体。

• 敵機の世界線と自機の過去光円錐の交点ξが表示さるべき点。

• 光円錐はローレンツ不変に決まるので

どんな座標系で見ても、交点は存在する。

• ただし敵機(の世界線の端点)が自機に対して

空間的な(あるいは未来の)位置にあれば。

• 自機の静止系 x’でみた交点ξ’が

画面に表示されるべき敵機の位置。

• ローレンツ収縮も取り入れられる!
過去光円錐を見る、とは
• 例えば光速のビームで射たれたら
固有時
• 固有時は世界線毎に定義されている。

• n番目の物体:

• 基準系で速度を持った物体

の固有時は、基準時間より

ゆっくり流れる。
dτn
2
= dt2
− d

xn
2
= dt2
(1−

vn
2
)
=
dt2
γn
2
< dt2
反変速度
• 相空間上の点を表すのに、vではなくローレンツ反変な

速度 u を用いると便利:

• 注: 時間成分は独立でない。

• uの空間成分と v は1対1対応。
un = γn

vn =

vn
1−

vn
2
,

vn =

un
γn
=

un
1+

un
2
.
€
un
µ
( )≡
dxn
µ
dτn





 = γn,

un( ),
where γn = 1+

un
2
.
0 ≤

v < ∞
1≤ γ < ∞
0 ≤

u < ∞
相対論的時間発展
• 基本的に入力(xμ,ui,αi)→微少時間後の出力(xμ, ui)

1. 前と同様、計算機時刻を基準時と同期するやり方:

• 「時間の遅れ」は、与えられた入力に対する位置・速度の変更
しにくさの因子 (1+u2)−1/2 として表される。

2. 計算機時刻 ts を固有時と同期するやり方:
tn (ts + dts ) = tn (ts )+ 1+

un
2
dts

xn (ts + dts ) =

xn (ts )+

undts

un (ts + dts ) =

un (ts )+

αndts
€

xn (t + dt) =

xn +

un
1+

un
2
dt

un (t + dt) =

un +

αn
1+

un
2
dt
時間の遅れ
• 後者の計算機時間を各機の固有時と同期するやり方では:

• (ある計算機時刻で)同基準時刻にいたプレイヤーは、

次のステップで別の基準時刻に移動する。

• すべてのプレイヤーが「時間の遅れ」を体感できる。

• 因果律の破れはないものの

追い越してしまう場合がある。

• 未来側に行ったプレイヤーは

止めておくか。
まとめと展望(昔の)
• そろそろ相対論的ゲームを作るべき時期である。

• 因果律を破らぬためには光円錐が重要。

• ローレンツ収縮は問題なく取り入れられる。

• 固有時で時間発展させると時間の遅れも取り入れられる
が、追い越し問題あり。(未来側を止めるか。)

• 言わなかった事 (応質問)

• 勝手な u の静止系への変換を具体的に求めた。(new?)

• ロケット推進も導入可。

• ドップラー効果も導入可。

• 1 player なら過去光円錐でfoliateすれば時間の遅れ無問題。
静止系への変換の具体形
ロケットの原理
• 相対論的運動量保存則

• ロケットの静止系で入力が与えられるとすると、

相対論的ゲームを作る

Editor's Notes

  • #3 ・地球・月・太陽・銀河中心。