鏡を回して灯台へ光を届けるパズル「灯路」をCodexで作りました。描画方式を変える効果を確かめるため、線分スプライトと接続メッシュを同じ盤面で比べました。
結果は単純ではありませんでした。メッシュはWebでの更新処理が遅くなりました。 それでも採用したのは、曲がり角や交差の明るさを揃えられたからです。
85 → 2
光のRenderer数
画面全体のdraw数とは別
56 → 55
画面全体のdraw呼び出し
表示中のChromeで測定
16.7ms
両方式のフレーム中央値
fps向上は確認していない
計測対象は初公開版v1です
この記事の29辺・518配置・描画時間は、初公開版の盤面で測った結果です。公開ゲームのv1.1では難易度の指摘を受けて4〜12面を作り直しました。現在の盤面の数値としては扱いません。改良理由と検査結果も公開しています。
線分ごとの加算描画では、接続部分が明るくなる
最初は光路をセル間の辺に分け、各辺へ太い光と細い芯を置きました。セルの中心には小さな光点を足しています。加算合成なので、重なる場所は明るくなります。
実装は扱いやすかったものの、同じ光なのに、つなぎ目だけ粒のように目立つ状態でした。

セル中心を1回だけ描くメッシュを作った
新しい方式では、セル中心の小さな四角を1回だけ描きます。隣のセルへ伸びる長方形は、その四角の境界で止めました。辺と中心の面積が重ならないため、交差にも同じ考え方を使えます。
- 1
経路の辺を重複排除する
同じ2セルをつなぐ辺は、往復しても1本として扱う。 - 2
中心と辺の領域を分ける
辺の両端を半幅ずつ短くし、使用するセルの中心に四角を1つ置く。 - 3
太い光と細い芯を別のメッシュにする
2層の幅・色・透明度を線分方式と揃えて比較する。
終端には半幅ぶんの四角いキャップが付き、旧方式の光点はなくなります。単に同じ絵を少ないオブジェクトで描いた変更ではありません。 接続部分の絵も変えています。

Editorで短くなった更新時間が、Webでは増えた
最終面の同じ配置を、同じカメラと解像度で比較しました。Webでは線分→メッシュ→メッシュ→線分→線分→メッシュの順に実行。各回、新しいブラウザプロファイルで起動し、HTTPキャッシュも無効にしています。
| 計測対象 | 線分スプライト | 接続メッシュ |
|---|---|---|
| Editor・更新中央値 | 0.053625ms | 0.040765ms |
| Web・PCの更新中央値 | 0.030ms | 0.125ms |
| Web・スマホ幅の更新中央値 | 0.030ms | 0.120ms |
| Web・画面全体のdraw呼び出し | 56回 | 55回 |
| Web・フレーム中央値 | 16.7ms | 16.7ms |
更新処理は30回ウォームアップ後、20回の平均を50組記録しました。Editorは各方式1試行、Webは各3試行の中央値です。Webの描画は表示中の6秒間を計測し、全試行のフレームP95は16.8msでした。
測った範囲
更新時間はCPU側のRefresh処理で、GPUの完了時間ではありません。フレーム間隔は描画呼び出しがあったrAFの間隔です。スマホ幅も同じ開発PC上の結果で、スマホ実機の性能ではありません。
Renderer数だけを見ると大きく減っています。しかし、実際のdraw呼び出しは1回減っただけでした。Webで更新時間が増えた内訳までは切り分けていないため、メッシュの転送だけが原因だとは断定できません。
比較が成立するまでに、3か所直した
最終面を測るつもりで第1面を測っていた
- 症状
- 最初の計測結果は6辺しかなかった。
- 原因
- 計測用セーブを「12面解放・すべて未クリア」にしたため、整合性検査で初期状態へ戻っていた。
- 対処
- 解放条件を満たす記録に直し、測定スクリプトでも辺数が29であることを検査した。6辺の結果は比較に使っていない。
同じ色を指定してもメッシュだけ淡くなった
- 症状
- 最初の比較画像で、メッシュの光が旧方式より淡く見えた。
- 原因
- 線形色空間でSpriteRendererの色とメッシュ頂点色の変換を揃えていなかった。
- 対処
- メッシュ用の色を生成時に線形へ変換し、同じ盤面の画像を撮り直した。
光路計算のP95まで0msになった
- 症状
- Webで1回ずつ測ると、短い処理が0msになった。
- 原因
- 処理時間が計時の分解能に届かなかった。
- 対処
- 全518配置をそれぞれ100回ずつ計算し、配置ごとの1回平均を記録した。合計51,800回。平均値の分布であることを明記した。
接続の見た目を優先し、操作時の小さな負荷を受け入れた
接続メッシュのWeb更新時間は、バッチ平均のP95でも最大0.325msでした。この処理は鏡の操作時にだけ走ります。待機中は光路を再計算せず、1,000回の回転とUndoに対して評価も1,000回であることを確認しています。
今回は「速くなったから」ではなく、光が均一につながる見た目を理由に採用した。
検査では上下左右の接続15通りについて、辺の隙間と面積の重なりを確認しました。ゲーム全体のUnityテストは74件。PCとスマホ幅で、通常設定と音なし・動き少なめの設定の全12面を通しています。
同じ変更でも、Editorの数字だけでWebの結果を予想できませんでした。今後もRenderer数、実際の描画命令、更新時間、画面の見た目を分けて判断するための比較として、この記録を残します。
光路計算から試したい場合は、反射・分岐・循環の作り方とC#サンプルへ進めます。