Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

テクスチャのスケーリング (#586) #623

Merged
merged 2 commits into from
Aug 28, 2024

Conversation

TadaTeruki
Copy link
Contributor

@TadaTeruki TadaTeruki commented Aug 28, 2024

Close #586

What I did(変更内容)

各ポリゴンについて、一定の距離に対するテクスチャのピクセルの数を制限し、制限を超える場合はテクスチャをスケーリングします。

(文章が長くなるので、距離ごとのピクセル数 = PD とします)

具体的な処理を述べると

  • 各ポリゴンに対して、構成するvertexの(x,y,z,u,v)から、各辺のユークリッド空間上の距離とテクスチャ上の距離(ピクセル数)を割り出します。その後、各辺ごとのPD(=ピクセル数/ユークリッド距離)の最小値を割り出し、これをポリゴン全体のPDとしています。
  • PDの制限値としてMaxPDを設けます (例えばMaxPD=6のときは、許容するPDの最大値が6となります) 。
  • MaxPD/PDを求めます。これが1を下回る場合(=テクスチャの解像度が過剰である場合)は、テクスチャのdownsampleの倍率に適用されます。

Notes(連絡事項)

  • uv座標をテクスチャのピクセルの座標に変える処理 (uv_to_pixel_coords)を追加しているのですが、atlas-packer側の実装と重複しています。ここは仕様が頻りに変わる処理ではなく、atlas-packer側の実装を変更してまでDRYを貫く必要性はないと感じているため、ここでは一旦重複した状態のままでコミットしています。
  • 現状MaxPDの具体的な数値は、外部からの入力でなく、定数MAX_PIXEL_PER_DISTANCEとして宣言しています(=15.0)。

Copy link

coderabbitai bot commented Aug 28, 2024

Walkthrough

この変更は、nusamai/src/sink/cesiumtiles/mod.rsにおいて、テクスチャ座標のダウンサンプリング計算を改善するために、ピクセル座標を導入する新しい関数や定数を追加します。具体的には、UV座標をピクセル座標に変換するuv_to_pixel_coords関数が追加され、ダウンサンプリングスケールの計算が更新されます。

Changes

ファイルパス 変更内容
nusamai/src/sink/cesiumtiles/mod.rs 新しい定数MAX_PIXEL_PER_DISTANCEの追加、uv_to_pixel_coords関数の追加、apply_downsample_factor関数の引数の変更

Assessment against linked issues

Objective Addressed Explanation
実世界での大きさに合わせたテクスチャのスケーリング (#586)
地物の相対的な大きさを考慮した低解像度化 (#586) 具体的な実装が不明確です。

🐰 うさぎが跳ねる、ピクセルの舞、
テクスチャが広がる、視界の中、
すべての座標、正確に整え、
美しい世界、今ここにある。 🌍✨


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share
Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai generate interesting stats about this repository and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (invoked as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@TadaTeruki TadaTeruki marked this pull request as ready for review August 28, 2024 11:42
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between aeae4eb and 96ba5aa.

Files selected for processing (1)
  • nusamai/src/sink/cesiumtiles/mod.rs (3 hunks)
Additional comments not posted (3)
nusamai/src/sink/cesiumtiles/mod.rs (3)

49-50: 定数 MAX_PIXEL_PER_DISTANCE の追加について

この定数はテクスチャのピクセル密度を制限するために使用されます。コード内での使用方法とその値が適切かどうかを確認してください。

この変更は承認されます。


520-567: テクスチャのダウンサンプリング計算について

このコードブロックでは、各頂点のUV座標からピクセル座標を計算し、それを使用してユークリッド距離とテクスチャ距離を比較しています。計算された pixel_per_distance を使用して、テクスチャのダウンサンプリング比を決定しています。このロジックはPRの目的に合致しており、実装も適切ですが、パフォーマンスの観点から最適化の余地があるかもしれません。

この変更は承認されますが、パフォーマンスの最適化を検討してください。


733-740: 関数 apply_downsample_factor の変更について

この関数はズームレベルに基づいてダウンサンプリングの係数を計算し、新たに追加された downsample_scale パラメータを使用して最終的なダウンサンプリング係数を決定します。この変更はテクスチャの解像度を適切に管理するために重要です。

この変更は承認されます。

Comment on lines +51 to +62
// WARN: This function has an equivalent in `atlas-packer/src/texture.rs`.
fn uv_to_pixel_coords(uv_coords: &[(f64, f64)], width: u32, height: u32) -> Vec<(u32, u32)> {
uv_coords
.iter()
.map(|(u, v)| {
(
(u.clamp(0.0, 1.0) * width as f64).min(width as f64 - 1.0) as u32,
((1.0 - v.clamp(0.0, 1.0)) * height as f64).min(height as f64 - 1.0) as u32,
)
})
.collect()
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

関数 uv_to_pixel_coords の重複について

この関数はUV座標をピクセル座標に変換する機能を提供しますが、atlas-packer に同様の機能が存在しているとの警告があります。この重複が意図的である場合は問題ありませんが、将来的にメンテナンスの負担を減らすために一元化を検討することをお勧めします。

重複するコードの削減を検討してください。

Copy link

codecov bot commented Aug 28, 2024

Codecov Report

Attention: Patch coverage is 0% with 55 lines in your changes missing coverage. Please review.

Files Patch % Lines
nusamai/src/sink/cesiumtiles/mod.rs 0.00% 55 Missing ⚠️
Additional details and impacted files
Components Coverage Δ
GUI ∅ <ø> (∅)
Backend 74.63% <0.00%> (-0.43%) ⬇️
Libraries 89.82% <ø> (ø)

📢 Thoughts on this report? Let us know!

const MAX_PIXEL_PER_DISTANCE: f64 = 15.0;

// WARN: This function has an equivalent in `atlas-packer/src/texture.rs`.
fn uv_to_pixel_coords(uv_coords: &[(f64, f64)], width: u32, height: u32) -> Vec<(u32, u32)> {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

atlas-packer側の実装を変更してまでDRYを貫く必要性はないと感じているため、ここでは一旦重複した状態のままでコミットしています

良いと思います!

@@ -46,6 +46,21 @@ use crate::{
};
use utils::calculate_normal;

const MAX_PIXEL_PER_DISTANCE: f64 = 15.0;

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

30くらいに設定しないと、何が記載されている看板か不明なレベルまで解像度が落ちてしまったので、暫定的に30にしました。
より良い数値は見つけていきましょう!

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 96ba5aa and 55f67fc.

Files selected for processing (1)
  • nusamai/src/sink/cesiumtiles/mod.rs (3 hunks)
Files skipped from review as they are similar to previous changes (1)
  • nusamai/src/sink/cesiumtiles/mod.rs

Copy link
Collaborator

@nokonoko1203 nokonoko1203 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@TadaTeruki LGTM!
このPRに限らない問題は発生していると思うので、別に切り出しました!
#625

@nokonoko1203 nokonoko1203 enabled auto-merge (squash) August 28, 2024 15:50
@nokonoko1203 nokonoko1203 merged commit 864125e into main Aug 28, 2024
7 of 8 checks passed
@nokonoko1203 nokonoko1203 deleted the feature/atlas-texture-scaling branch August 28, 2024 15:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3dtiles: 実世界での大きさに合わせたテクスチャのスケーリング
2 participants