Topics

當年我嘗試實現我的 3D 表達夢想(WebGL)時——一段關於使用 Three.js 和 Blender 的摸索經歷

  • column

過去,當我瀏覽各種網站時,我總是被第一眼看到的動態物體和具有深度感的動畫所吸引,不禁發出“哇!”的驚嘆。那時我就想,“我也想做出這樣的東西!”Three.js或者Blender我曾經嘗試過。

我當初懷著無比的敬佩之情加入Liberlogic,但最終…最近我主要從事一些更紮實的實施工作,例如建立業務應用程式和Headless CMS(笑)。我並不是想貶低他們什麼的!

現在我們已經進入第四年了,我回想起當時我對「動態網路」的渴望。WebGL我想簡單介紹週邊地區的基本情況。

什麼是WebGL?

什麼是WebGL?用於在網站上顯示 3D 圖形的技術它適用於所有主流瀏覽器,包括 Chrome、Firefox 和 Safari。

很久以前,像 Flash Player 這樣的插件很常見,但它們有難以在智慧型手機上運行的問題。

在這方面,WebGL 得到了原生支持,所以接下來開創移動時代3D表達先河的技術也可以說…

我真的試過了

使用 Three.js 在瀏覽器中顯示 3D 內容

Three.js使用 JavaScript一個無商標限制的函式庫,讓您可以輕鬆建立 3D 內容。

首先,就 WebGL 概念而言,你需要渲染器、場景和攝影機。

Renderer 是 Three.js 中的主要物件。SceneCamera相機視錐體Renderer3D 內Scene該部件將以 2D 圖像的形式渲染(繪製)在畫布上。

WebGL概念,渲染器、場景和攝影機之間的關係
const scene = new THREE.Scene();

const camera = new THREE.PerspectiveCamera(
  1000, // 視野角
  window.innerWidth / window.innerHeight, // 側面
  75, // 近く
  1000 // 遠い
);
camera.position.set(0, 0, 400);

//マウスで制御
const controls = new OrbitControls(camera, document.body);

//html側の<canvas id="myCanvas"></canvas>を取得
const renderer = new THREE.WebGLRenderer({
  canvas: document.querySelector("#myCanvas"),
  antialias: true,
});

//setSize()メソッドでサイズを設定
renderer.setSize(window.innerWidth, window.innerHeight);
//背景色も変更可能
renderer.setClearColor("#000")

//htmlの<canvas id="myCanvas"></canvas>へ流し込み
document.body.appendChild(renderer.domElement);

3D立方體部件是使用稱為網格的顯示物件建立的。要建立網格,您需要準備幾何體(形狀)和材質(材質)。

//幾何體(立方體)

const geometry = new THREE.BoxGeometry(100, 100, 100)

//材質(顏色)

const material = new THREE.MeshNormalMaterial

const box = new THREE.Mesh(geometry, material);

//加入場景

scene.add(box);

//光源

const light = new THREE.DirectionalLight(0xffffff, 1);

光.position.set(1, 1, 1);

//加入場景

scene.add(light);

最後,加入動畫效果。

這次我將省略周圍粒子的實作!

function animate() {
  requestAnimationFrame(animate);

  box.rotation.x += 0.005;
  box.rotation.y += 0.005;
  renderer.render(scene, camera);
}

animate()

當您使用設定好的攝影機、幾何、材質和燈光渲染場景時,它將在瀏覽器中繪製出來。

查看視訊文字稿(日文)

00:00 (直方体のジオメトリが3Dレンダリングされてブラウザに表示されている)

使用 Blender 建立 3D 模型

混合器免費、開源、整合的軟體,涵蓋整個 3D 製作流程,包括 3D 建模、動畫、渲染、遊戲開發和影片編輯。單靠Blender無法創建WebGL網站。

Blender 使用與 Three.js 相同的概念,使用網格物件創建形狀,使用材質添加顏色和紋理,使用燈光調整光線照射和投射陰影的方式,並調整相機位置和方向以執行渲染。

透過調整面、線和點來塑造網格物件。
使用材質節點添加顏色和紋理。

你可以透過組合節點來創造逼真的紋理,例如漸層、金屬效果和發光效果。

參考:https://www.youtube.com/watch?v=DsNZzUZPhw4

使用 Three.js 在瀏覽器中顯示用 Blender 建立的 3D 模型。

將 Blender 中建立的 3D 模型匯出為 .glb 文件,並將其整合到 Three.js 中。

OrbitControlsGLTFLoaderDRACOLoader從 Three.js 庫中匯入每個函數。

OrbitControls是一個用於透過滑鼠控制相機的實用程序,GLTFLoaderDRACOLoader分別是用於以 GLTF 格式及其壓縮版本 DRACO 格式載入 3D 模型的實用程式。

模擬的蘋果現在顯示在瀏覽器中了!

但是,當我使用 Three.js 在瀏覽器中顯示用 Blender 建立的模型時,渲染環境和材質相容性的差異根據材質的不同,顏色和紋理看起來會有所不同,因此您可能需要進行一些調整才能達到您想要的效果。

查看視訊文字稿(日文)

00:00 (Blenderで作成したりんごのモデリングをThree.jsでブラウザ表示した様子)

我的日常工作涉及 CMS 整合和業務應用程式的前端設計/構建,因此我自己的工作中很少接觸到 3D 表現形式。

但是當我這樣玩的時候,我又一次意識到這真的很有趣。

那時候行動網路或許正是因為他對過去的崇敬,他自然而然地被現代科技所吸引。

今天又是 Next 和 Nuxt!

以另一種形式重返該網站行動網路我一定能成功。 🚀

撰稿人

我使用 JavaScript、React 和 Next.js 進行前端開發,專注於標記語言。看到自己參與開發的網站成功上線,我感到非常開心!我的嗜好是彈吉他。我喜歡寫程式碼,也喜歡演奏程式碼!

Hiratchi

前端工程師 / 2022年入職

看看這位員工的文章

我們以可靠的團隊結構和快速的回​​應能力而自豪。

在 Liberogic,我們經驗豐富的員工積極推動專案進展,這也是我們受到客戶高度評價的原因。
我們確保專案經理和主管得到合理分配,以確保整個專案的順利進行。 我們避免因全額承諾而導致不必要的成本增加,並將資源分配給合適的人員和合適的職位,並以快速掌握工作內容、創建和提交預算而聞名。

請注意,我們不積極參與SES式的現場工作。

我們支援幾乎所有主流的專案管理和聊天工具,包括 Slack、Teams、Redmine、Backlog、Asana、Jira、Notion、Google Workspace、Zoom 和 Webex。

如果您有任何與網路相關的問題,請與我們聯絡。

案例研究