ReactThreeFiberとCodepenで遊ぼう

この記事は、 KENTEM TechBlog アドベントカレンダー2024 20日目、12月20日の記事です。

こんにちは。KENTEMフロントエンドエンジニアのM.Sです。

3Dというのは人間を惹きつけるものがありますよね。

ゲームや映画から、ソフトウェアやWebサイトまで。

Webサイトで商品などをぐるぐる見渡せるエリアがあると、ついぐるぐるしてしまいます。

そこで今回は、普段Reactばかり触っている私でも3Dを扱うことができる、ReactThreeFiberについてご紹介していきたいと思います。

ReactThreeFiberとは?

JavaScriptには、Three.jsという3Dオブジェクトをレンダリングするためのライブラリがあります。

Three.jsはWebGLを利用したJavaScriptベースの3Dレンダリングライブラリです(WebGLの説明は割愛)。

そして、ReactThreeFiberは、Three.jsの機能をReactの簡潔な構文で利用可能にするライブラリです。

r3f.docs.pmnd.rs

インストール

www.npmjs.com

下記コマンドを入力します。

npm install three @react-three/fiber @react-three/drei @types/three

Codepenで動かす場合は、コード上部に下記を追加します。

import React from 'https://esm.sh/react@18.2.0';
import ReactDOM from 'https://esm.sh/react-dom@18.2.0';
import { Canvas,useFrame } from 'https://esm.sh/@react-three/fiber@8.16.1';
import { Box,OrbitControls } from 'https://esm.sh/@react-three/drei@9.105.4';

Codepenの環境構築はこちら↓の記事に非常に助けられました。

CodePenでesm.shでお手軽にReact Three Fiberを使用してみるテスト3 3Dモデルアニメーション表示|siouxcitizen

オブジェクトを表示してみる

ブログ上で動かして欲しかったので今回はCodepenを使って実装しました。

とりあえず静止している立方体を表示してみます。

See the Pen react-three-fiber1 by Shogo Maehata (@shogo61) on CodePen.

OrbitControlsでカメラ操作をしてみる

OrbitControlsを追加するだけでカメラ操作ができるようになります。

ドラッグでカメラ操作できます。

右ドラッグで視点のずらし、ホイールでズームできます。 (Codepen上ではできなさそう。。。)

See the Pen Untitled by Shogo Maehata (@shogo61) on CodePen.

ついでに弊社のロゴも表現してみます。見れば見るほど可愛いですね。

See the Pen react-three-fiber1 by Shogo Maehata (@shogo61) on CodePen.

光を操る

ReactThreeFiber(Three.js)には多くの種類の光が用意されています。

その中でも今回は3つの光をご紹介します。

  • 環境光:<ambientLight />
  • 点光源:<pointLight />
  • 1方向:<spotLight />

1つずつみていきましょう

ambientLight

周囲の光を定義します。

ここまででも使っているのでCodepenは割愛します。

intensityを0にしたらオブジェクトが真っ黒になってしまいます。

上記と同じ青い立方体。真っ黒になってしまう。

pointLight

全方向に光を放つ点光源を定義します。

左側から光が当たっているのがわかるかと思います。

See the Pen Untitled by Shogo Maehata (@shogo61) on CodePen.

spotLight

その名の通りいわゆるスポットライトです。

真上から細い光が当たっているのがわかるかと思います。

See the Pen Untitled by Shogo Maehata (@shogo61) on CodePen.

3Dファイルを読み込む

もちろん外部の3Dファイル(glb,gltf)を読み込むこともできます。

今回はThree.jsのサンプルであるSFチックなヘルメットを読み込んでみました。

See the Pen Untitled by Shogo Maehata (@shogo61) on CodePen.

プロの作品達

公式ドキュメントにはプロ(公式)の渾身の作品達がたくさん掲載されています。

オシャレなサイトからゲームのようなものまであり、ReactやJavaScriptの可能性を感じます。

CodeSandboxですぐに動かせるのでよかったら覗いてみてください!

r3f.docs.pmnd.rs

プロの作品達

KENTEMでは、様々な拠点でエンジニアを大募集しています!
建設×ITにご興味頂いた方は、是非下記のリンクからご応募ください。
recruit.kentem.jp career.kentem.jp