🦔
初心者がBlenderとThree.jsで3Dロゴ表示するまでにやったこと
はじめに
「Blenderで作成した3DモデルをWeb上に表示したい」
その思いから始まった実践記録です
最終的には Three.js + GLTFLoader を使って、Blenderから出力した .glb ファイルを読み込み、Webブラウザ上でマウス操作可能な3Dロゴを表示できるようになりました
目標
- Blenderで3Dロゴを作成
 - 
.glb形式でエクスポート - Three.js + HTMLで表示
 
使用技術・環境
- Blender 4.x(3Dモデル作成)
 - Three.js(WebGL)
 - GLTFLoader / OrbitControls(Three.js公式アドオン)
 - HTML / CSS / ESModules
 - VSCode + Live Server
 
ステップ1:Blenderでロゴ作成
手順
- 
Shift + A→ 「テキスト」を追加 - 
Tabキーで編集モード → 任意の文字列に変更(例:"Logo") - 
「テキストプロパティ」 → 「ジオメトリ」 →
押し出しに厚みを設定(例:0.2) - 
右クリック→ 「変換」→「メッシュ」へ変換 - 
テキストを選択 →
Tabキーで「編集モード」に入る - 
Aキーで全選択 →Pキー → 「ルーズパーツ」で文字ごとに分離👉 これで「L」「o」「g」「o」それぞれが独立したMeshになります
 - 
Tabキーでオブジェクトモードに戻る - 
各文字オブジェクトを個別に選択し、「マテリアルプロパティ」から色を設定
 
マテリアルの設定方法
- 右側の「赤い丸アイコン(マテリアル)」をクリック
 - 「新規」ボタンでマテリアルを作成
 - 「ベースカラー」をクリックして色を変更
 - 他のオブジェクトにも同様に別のマテリアルを設定
 
ステップ2:glb形式にエクスポート
エクスポート手順
- 対象オブジェクトを選択
 ファイル > エクスポート > glTF 2.0 (.glb/.gltf)- 以下を設定:
- フォーマット:
glTF Binary (.glb) - 「選択オブジェクトのみ」
 - 「+Y前方」
 
 - フォーマット:
 - 
hws-logo.glbとして保存 
ステップ3:Three.jsでWeb表示
フォルダ構成
LOGO-SPIN/
├── index.html            # Webページ本体
├── hws-logo.glb          # Blenderから出力した3Dモデル
└── js/
├── three.module.js      # Three.js本体
├── GLTFLoader.js        # GLB読み込みモジュール
└── OrbitControls.js     # マウス操作用モジュール
HTMLファイルを作成(index.html)
- 
<script type="module">を使ってESMモジュールとしてThree.jsを利用 - ローカルの各JSファイルを相対パスで読み込み
 - Three.jsでScene/Camera/Renderer/Lightを構築し、GLTFLoaderでロゴモデルを読み込み
 - 
OrbitControlsでマウスによる回転やズーム操作を実装 
トラブルと解決策
🔴 問題1:CDN読み込みでモジュールエラー
- 
GLTFLoader.jsやOrbitControls.jsがimport { ... } from 'three'と書かれており、ブラウザが相対パスでないため読み込めずエラー - 解決:ローカルにすべてのJSを配置し、相対パスで読み込むことでエラー解消
 
🔴 問題2:three.core.jsが404エラー
- 
three.module.jsが内部でthree/core.jsを参照していたが存在せず - 
解決:ESM互換の 
three.module.jsを正しく取得したバージョンを使用し直す 
🔴 問題3:モデル表示されない
- 
GLTFLoader.load()でファイルパスが間違っていた or 読み込み後のscale/position未調整 - 解決:modelのscale・rotation・positionを明示的に設定し、中心に配置
 
🔴 問題4:ロゴの中心がズレる
- ロゴがシーンの原点から外れている
 - 
解決:
Box3で中心を取得 →model.position.sub(center)で補正 
🔴 問題5:カメラが遠すぎて見えない
- Three.jsのカメラ距離が合っておらず、モデルが豆粒のようにしか見えない
 - 解決:モデルのサイズに応じてカメラ距離を自動計算して調整
 
学び・気づき
- Blender側で色を設定したマテリアルは、GLB形式でエクスポートすればThree.jsでもそのまま反映される
 - モジュール形式で読み込む場合、相対パス or importmapの明示が必須
 - モデル中心を取る処理や、カメラ距離の自動調整処理は関数化しておくと再利用しやすい
 - CDNではなくローカルで動かすと依存関係の解決が簡単になる
 
まとめ
- Blenderでロゴを作成してGLBに変換し、Three.jsで読み込み表示する流れを通して、3DコンテンツのWeb実装の基礎を習得
 - 多くのエラーはパス・中心座標・カメラ距離に起因しており、それぞれのポイントを押さえておけばスムーズに実装可能
 - 今後はインタラクション(ホバー時の色変化・クリック時のアニメーションなど)に発展可能
 
次回
- 文字を1文字ずつ分離させ、パズルのようなことができるようにしてみる
 - つくる3Dモデルのレベルを上げてみる(車、景色など)
 
Discussion