🦔
初心者が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