godai-kaihatsu / gondwana

https://gondwana.godai.co.jp/
2 stars 0 forks source link

絵として目に見える地図タイルの境界がタイル単位で repeat しているので clamp に修正しタイル境界が視覚的に正常に接続されて見えるようにしたい #19

Closed usagi closed 6 years ago

usagi commented 6 years ago

地形地図タイルには #3 により 4.0.0.9 からエッジ補間について標準設定を LinearEstimation から置き換えて導入となる Adjacent が導入される。同様の補間機能を絵として目に見える地図タイルにも提供したい。

但し、現在の実装では地図タイルは内部データを画素の連続、画素を RGBA の uint8 で保持しているため NaN のような無効値を直接は扱えないから、実装には何らかのオーバーヘッドを伴うため、実装方式について将来的にも問題とならないような対応を検討する必要がある。

usagi commented 6 years ago

image

image

usagi commented 6 years ago

image

usagi commented 6 years ago

normalの影響な気がする。

usagi commented 6 years ago

normal の強制再計算あり:

image

なし(現行動作):

image

usagi commented 6 years ago

法線の強制再計算あり:

image

なし:

image

usagi commented 6 years ago

絵から推量される問題点:

  1. 上下左右、何れも 0.5px 外側までテクスチャーをマップしている( UV マップの修正で対応可能かもしれない)
  2. テクスチャーが repeat になっている( UV マップの修正で綺麗に収まればこちらは変更する必要はないが、場合によっては CLAMP_TO_EDGE 的な挙動を設定してやった方がよいかもしれない)
  3. 法線の再計算は標高データに Adjacent 補間を追加した際に法線の再計算の必要性を考慮していないため、補間後のエッジの法線が不正なままとなっている可能性がある。これは光源と面の位置によっては強調されたり、されなかったりする事があり、発生する場所としない場所がある可能性がある。

これらに加えて、ヘテロLODレベル間のテクスチャーマッピングまたは Adjacent 対応した法線計算にも考慮しないとならないかもしれない。

usagi commented 6 years ago

G3 と違い区画ごとにメッシュを分割しているため 0.5 px 調整してもタイル単位で左上は併せられるが、標高を Adjacent 補間している場合は右下方向に 1px 相当の Adjacent 補間がテクスチャーについても必要となる。素直に実装してもそこそこ遅くなるので、標高の Adjacent 補間と併せて効率化した実装の工夫を検討したい。

image

usagi commented 6 years ago

実用的な分解能で地図を見るレベルでは気にならないので、さしあたり Adjacent 補間ではなく線形補間してあげるだけでも実用には十分かもしれない。

image

usagi commented 6 years ago

そもそも地図絵のテクスチャーは "pixel" の中心がずれているわけではないので 0.5 px シフトすると不正確な表現になる。正解は外縁部をクランプして 0.5 px 分のみを引き伸ばす、である。

usagi commented 6 years ago

テクスチャーのエッジを CLAMP してテクスチャー境界が絵としてつながらない問題は解消した。

image

usagi commented 6 years ago

↑の対応後も境界で色の違いやズレがあるように見える事がある。こちらが恐らくエッジ部分の法線に起因する問題。

image

usagi commented 6 years ago

実用的な分解能では問題ないので今のところこの件はここまでの調整でよいことにしよう。より詳細に何かがユーザーニーズから問題視されるか、些細な見た目にも困る問題に具体的に遭遇したらより精密に制御を試みる事にする。

image

usagi commented 6 years ago

この調整は 4.0.0.10 に含める。