質問するログイン新規登録

Q&A

0回答

149閲覧

Three.jsで複雑な3Dエンブレムに平面UV投影を行う際の問題について

creator.M

総合スコア80

Three.js

Three.jsはWebGLをサポートしているJavaScriptの3D描画用ライブラリです。

0グッド

0クリップ

投稿2026/02/25 09:13

0

0

実現したいこと

Three.jsで複雑な3Dエンブレムにユーザー指定のロゴテクスチャを動的に投影したい

既存のモデリング済み3Dテキストと干渉せず、綺麗に表示させたい

メッシュ名に依存しない安定した処理にしたい

モデルの向きに依存しない正しいUV投影を行いたい

前提

Three.js を使って3Dカスタマイザーを開発しています。

製品のエンブレム部分に、ユーザーがアップロードしたロゴ画像を動的に投影する機能を実装しています。

エンブレムは以下のような構成です:

背景プレート(平面メッシュ)

その上に配置されたモデリング済みの3Dテキスト(複数メッシュ)

現在は、バウンディングボックスを基準にした planar projection を用いて、ランタイムでUVを生成しています。

発生している問題・エラーメッセージ

明確なエラーは出ていませんが、以下の問題が発生しています。

ジオメトリ干渉
元の3Dテキストと投影テクスチャが干渉し、Z-fightingのような「ひび割れ」アーティファクトが発生します。

メッシュ非表示ロジックの不安定さ
投影時に既存テキストメッシュを非表示にしていますが、モデルによって命名規則が統一されておらず、背景プレートまで非表示になることがあります。

投影軸の誤判定
モデルの向きによってX/Y/Z軸の判定がずれ、正面から見えないことがあります。

該当のソースコード

JavaScript

1function applyPlanarUV(mesh) { 2 const box = new THREE.Box3().setFromObject(mesh); 3 const size = new THREE.Vector3(); 4 box.getSize(size); 5 6 const geometry = mesh.geometry; 7 geometry.computeBoundingBox(); 8 9 const position = geometry.attributes.position; 10 const uv = []; 11 12 for (let i = 0; i < position.count; i++) { 13 const x = position.getX(i); 14 const y = position.getY(i); 15 const z = position.getZ(i); 16 17 // Z軸方向から投影している想定 18 uv.push( 19 (x - box.min.x) / size.x, 20 (y - box.min.y) / size.y 21 ); 22 } 23 24 geometry.setAttribute('uv', new THREE.Float32BufferAttribute(uv, 2)); 25 geometry.attributes.uv.needsUpdate = true; 26}

試したこと

polygonOffset を使用してZ-fightingを軽減しようとしました

depthWrite / depthTest の調整を試しました

テキストメッシュを動的に非表示にしました

投影軸を手動で切り替える実装を試しました

しかし、いずれもモデルごとの個別対応が必要になり、汎用的な実装になりません。

補足情報(FW/ツールのバージョンなど)

Three.js r1xx系

GLTFモデルを使用

エンブレムは複数メッシュで構成

ランタイムでUVを再生成してテクスチャを適用

質問:

既存のモデリング済みディテールを含む複雑なエンブレムに対して、動的テクスチャを安定して適用するベストプラクティスはありますでしょうか?

メッシュを非表示にするような壊れやすいロジックに頼らず、投影テクスチャを優先表示させる方法や、より適切なアプローチがあればご教示いただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問