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

テクスチャスケーリング処理をglTFおよびOBJ処理にも導入する #631

Merged
merged 4 commits into from
Sep 1, 2024

Conversation

TadaTeruki
Copy link
Contributor

@TadaTeruki TadaTeruki commented Aug 30, 2024

Close #626

What I did(変更内容)

  • objやglTFにおけるテクスチャのスケーリング対応・オプションの追加

Notes(連絡事項)

Copy link

coderabbitai bot commented Aug 30, 2024

Walkthrough

この変更は、テクスチャ解像度の制御を強化するために、GltfSinkProviderおよびObjSinkProviderに新しいパラメータlimit_texture_resolutionを追加しました。また、CesiumTilesSinkProviderでは、UV座標からピクセル座標への変換を行う関数を削除し、新しいテクスチャダウンサンプルスケール計算機能を導入しました。これにより、テクスチャ処理の効率が向上します。

Changes

ファイル 変更の概要
nusamai/src/sink/cesiumtiles/mod.rs uv_to_pixel_coords関数を削除し、get_texture_downsample_scale_of_polygon関数を使用するように変更。
nusamai/src/sink/gltf/mod.rs GltfSinkProviderlimit_texture_resolutionパラメータを追加し、GltfSinkにこのパラメータを渡すように変更。
nusamai/src/sink/obj/mod.rs ObjSinkProviderlimit_texture_resolutionパラメータを追加し、ObjSinkにこのパラメータを渡すように変更。
nusamai/src/sink/mod.rs 新しいモジュールtexture_resolutionを追加。
nusamai/src/sink/texture_resolution.rs テクスチャ解像度を管理する機能を追加し、get_texture_downsample_scale_of_polygon関数を実装。

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant GltfSinkProvider
    participant GltfSink
    participant ObjSinkProvider
    participant ObjSink
    participant TextureResolution

    User->>GltfSinkProvider: Create with params
    GltfSinkProvider->>GltfSink: Pass limit_texture_resolution
    GltfSink->>TextureResolution: Calculate downsample scale

    User->>ObjSinkProvider: Create with params
    ObjSinkProvider->>ObjSink: Pass limit_texture_resolution
    ObjSink->>TextureResolution: Calculate downsample scale
Loading

Assessment against linked issues

Objective Addressed Explanation
テクスチャスケーリング処理をglTFおよびOBJ処理に導入する (#626)
高解像度のテクスチャアトラス生成の抑制 (#626)

Poem

🐰
うさぎは跳ねる、嬉しいニュース、
テクスチャが軽く、心も弾む。
限界を設けて、すっきりと、
美しい世界が広がるよ!
みんなで楽しむ、素晴らしい景色!
🌼


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 using 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.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

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 changed the title Feature/generic texture scaling テクスチャスケーリング処理をglTFおよびOBJ処理にも導入する Aug 30, 2024
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 c7b484b and 090df4a.

Files selected for processing (5)
  • nusamai/src/sink/cesiumtiles/mod.rs (2 hunks)
  • nusamai/src/sink/gltf/mod.rs (4 hunks)
  • nusamai/src/sink/mod.rs (1 hunks)
  • nusamai/src/sink/obj/mod.rs (5 hunks)
  • nusamai/src/sink/texture_resolution.rs (1 hunks)
Additional comments not posted (15)
nusamai/src/sink/texture_resolution.rs (2)

1-2: テクスチャ解像度の制限に関する定数の追加

頂点間の距離(メートル)に基づいてテクスチャ解像度を制限するための定数MAX_TEXTURE_PIXELS_PER_METERが追加されました。この定数はテクスチャのピクセル密度を制御するために使用されます。


17-53: ポリゴンのテクスチャダウンサンプルスケールを計算する関数の追加

この関数は、ポリゴンの頂点データとテクスチャサイズに基づいてテクスチャのダウンサンプルスケールを計算します。limit_texture_resolutionパラメータを使用して、テクスチャ解像度の制限が有効かどうかを判断し、適切なスケールを返します。この関数はテクスチャの効率的な処理に寄与します。

nusamai/src/sink/mod.rs (1)

16-16: 新しいモジュールtexture_resolutionの追加

テクスチャ解像度を管理または処理する機能を拡張するために、texture_resolutionモジュールが新たに追加されました。このモジュールの追加は、テクスチャの取り扱いを改善することを目的としています。

nusamai/src/sink/gltf/mod.rs (5)

39-40: テクスチャ解像度の制御関数のインポート

get_texture_downsample_scale_of_polygon関数をsuper::texture_resolutionモジュールからインポートしています。この関数はテクスチャのダウンサンプルスケールを計算するために使用され、GltfSinkの機能を強化します。


76-84: 新しいパラメータlimit_texture_resolutionの定義

GltfSinkProviderparametersメソッドにlimit_texture_resolutionパラメータが追加されました。このパラメータはテクスチャ解像度を制限するために使用され、オプショナルです。パラメータの説明には「距離(メートル)あたりのテクスチャの解像度を制限する」と記載されています。


104-111: GltfSink構造体のインスタンス作成時にlimit_texture_resolutionパラメータを使用

createメソッド内でlimit_texture_resolutionパラメータの値を取得し、GltfSink構造体のインスタンス作成時にこの値を渡しています。これにより、テクスチャ解像度の制限機能がGltfSinkに組み込まれます。


119-119: GltfSink構造体に新しいフィールドlimit_texture_resolutionの追加

GltfSink構造体にlimit_texture_resolutionフィールドが新たに追加されました。このフィールドはオプションのブール型で、テクスチャ解像度の制限を管理します。


469-474: テクスチャのダウンサンプルスケールを計算するロジックの更新

get_texture_downsample_scale_of_polygon関数を使用して、テクスチャのダウンサンプルスケールを計算し、その結果をdownsample_scale変数に格納しています。この計算は、オリジナルの頂点とテクスチャサイズに基づいて行われ、limit_texture_resolutionパラメータが影響を与えます。

nusamai/src/sink/cesiumtiles/mod.rs (3)

49-49: 新しい関数のインポートを確認してください。

get_texture_downsample_scale_of_polygon 関数が super::texture_resolution モジュールから正しくインポートされています。

この変更は承認されました。


Line range hint 93-102: 新しいパラメータの追加を確認してください。

limit_texture_resolution パラメータが追加され、テクスチャの解像度を制限するオプションが提供されています。これはPRの目的に沿っています。

この変更は承認されました。


534-538: テクスチャ解像度の制限の統合を確認してください。

get_texture_downsample_scale_of_polygon 関数が新しい limit_texture_resolution パラメータを使用してテクスチャのダウンサンプルスケールを計算しています。この統合が正しく機能しているか確認することをお勧めします。

nusamai/src/sink/obj/mod.rs (4)

46-46: 新しい関数のインポートを確認してください。

get_texture_downsample_scale_of_polygon 関数が super::texture_resolution モジュールから正しくインポートされています。

この変更は承認されました。


93-102: 新しいパラメータの追加を確認してください。

limit_texture_resolution パラメータが追加され、テクスチャの解像度を制限するオプションが提供されています。これはPRの目的に沿っています。

この変更は承認されました。


121-130: テクスチャ解像度の制限の統合を確認してください。

create メソッドが新しい limit_texture_resolution パラメータを取得し、ObjSink 構造体に渡しています。この統合が正しく機能しているか確認することをお勧めします。


504-510: テクスチャ解像度の制限の統合を確認してください。

get_texture_downsample_scale_of_polygon 関数が新しい limit_texture_resolution パラメータを使用してテクスチャのダウンサンプルスケールを計算しています。この統合が正しく機能しているか確認することをお勧めします。

Verification successful

テクスチャ解像度の制限の統合が正しく機能しています。

get_texture_downsample_scale_of_polygon 関数は、limit_texture_resolution パラメータを使用して、テクスチャのダウンサンプルスケールを適切に調整しています。この統合は正しく機能しています。

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# テクスチャ解像度の制限が正しく機能しているかのテストコードを実行します。
echo "テストコードをここに記述してください。"

Length of output: 258


Script:

#!/bin/bash
# Search for the implementation of the `get_texture_downsample_scale_of_polygon` function
ast-grep --lang rust --pattern 'fn get_texture_downsample_scale_of_polygon($_, $_, $_) { $$$ }'

Length of output: 97


Script:

#!/bin/bash
# Use ripgrep to search for the definition of the `get_texture_downsample_scale_of_polygon` function
rg 'fn get_texture_downsample_scale_of_polygon' -A 10

Length of output: 914


Script:

#!/bin/bash
# Extract more lines from the `get_texture_downsample_scale_of_polygon` function to understand its implementation
rg 'fn get_texture_downsample_scale_of_polygon' -A 30

Length of output: 2440


Script:

#!/bin/bash
# Extract more lines from the `get_texture_downsample_scale_of_polygon` function to capture the complete logic
rg 'fn get_texture_downsample_scale_of_polygon' -A 50

Length of output: 2829

Comment on lines +4 to +15
// 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座標からピクセル座標への変換関数の追加

この関数はUV座標をピクセル座標に変換します。ただし、atlas-packer/src/texture.rsに同等の機能が存在するため、コードの重複に注意が必要です。可能であれば、重複を避けるために共通のライブラリやモジュールを使用することを検討してください。

コードの重複を解消するためのリファクタリングを提案します。

-// WARN: This function has an equivalent in `atlas-packer/src/texture.rs`.
+// TODO: Consider refactoring to use a common library for UV to pixel coordinate conversion.
Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// 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()
}
// TODO: Consider refactoring to use a common library for UV to pixel coordinate conversion.
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

codecov bot commented Aug 30, 2024

Codecov Report

Attention: Patch coverage is 13.68421% with 82 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
nusamai/src/sink/texture_resolution.rs 0.00% 46 Missing ⚠️
nusamai/src/sink/obj/mod.rs 0.00% 23 Missing ⚠️
nusamai/src/sink/gltf/mod.rs 61.90% 8 Missing ⚠️
nusamai/src/sink/cesiumtiles/mod.rs 0.00% 5 Missing ⚠️
Additional details and impacted files
Components Coverage Δ
GUI ∅ <ø> (∅)
Backend 74.45% <13.68%> (-0.24%) ⬇️
Libraries 89.82% <ø> (ø)

📢 Thoughts on this report? Let us know!

@TadaTeruki TadaTeruki marked this pull request as ready for review August 30, 2024 09:43
@@ -13,6 +13,7 @@ pub mod obj;
pub mod ply;
pub mod serde;
pub mod shapefile;
mod texture_resolution;
Copy link
Collaborator

Choose a reason for hiding this comment

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

nits: Sinkか、そうではないモジュールか、でコメントを入れておいた方がいいかもですね。

@@ -0,0 +1,53 @@
/// Limits the texture resolution based on the distance (meters) between the vertices of a polygon.
const MAX_TEXTURE_PIXELS_PER_METER: f64 = 30.0;
Copy link
Collaborator

Choose a reason for hiding this comment

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

imo: よければテストを作成していただけると大変ありがたいです!

Copy link
Collaborator

Choose a reason for hiding this comment

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

モジュール内に書き込むテストで十分です。

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!
軽微なコメントをしています!

@nokonoko1203 nokonoko1203 merged commit 7e77d88 into main Sep 1, 2024
7 of 8 checks passed
@nokonoko1203 nokonoko1203 deleted the feature/generic-texture-scaling branch September 1, 2024 23:44
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.

atlas: テクスチャスケーリング処理をglTFおよびOBJ処理にも導入する
2 participants