Next.jsは、サーバーサイドレンダリングや静的サイト生成が可能なReactベースのフレームワークで、パフォーマンスの高いウェブサイトを構築するのに適しています。一方、React-Three-FiberはThree.jsをReactのコンポーネントとして使用できるライブラリで、3Dグラフィックスを簡単に実装できます。
この記事では、Next.jsでReact-Three-Fiberを設定する方法を詳しく説明します。さらに、React-Three-Fiberの便利な機能についても触れます。
セットアップ手順
1. Next.jsプロジェクトを作成
まずはNext.jsのプロジェクトを作成します。
npx create-next-app@latest my-threejs-app
cd my-threejs-app
次に、必要なパッケージをインストールします。
npm install @react-three/fiber @react-three/drei three
2. ページを作成
React-Three-Fiberを使うページを作成します。pages/index.js
を編集します。
// pages/index.js
import { Canvas } from '@react-three/fiber';
import { OrbitControls, Box } from '@react-three/drei';
export default function Home() {
return (
<div style={{ height: '100vh' }}>
<Canvas camera={{ position: [0, 0, 5] }}>
{/* ライト */}
<ambientLight intensity={0.5} />
<pointLight position={[10, 10, 10]} />
{/* 3Dオブジェクト */}
<Box>
<meshStandardMaterial attach="material" color="orange" />
</Box>
{/* カメラ操作 */}
<OrbitControls />
</Canvas>
</div>
);
}
上記コードでは、@react-three/drei
の便利な機能を使用し、**カメラの操作(OrbitControls)や立方体の描画(Box)**を行っています。
React-Three-Fiberの便利な機能
React-Three-FiberとNext.jsを組み合わせると、以下のような便利な機能を活用できます。
1. サーバーサイドレンダリング(SSR)との相性
Next.jsの特長であるSSRを活用すれば、SEOに強い3Dサイトが作成可能です。ただし、Three.jsはクライアントサイドでのレンダリングが主なので、以下のようにdynamic
を使ってクライアントサイドでのみレンダリングさせます。
import dynamic from 'next/dynamic';
const ThreeCanvas = dynamic(() => import('../components/ThreeCanvas'), { ssr: false });
export default function Home() {
return <ThreeCanvas />;
}
components/ThreeCanvas.js
にCanvasを分けて記述することで、クライアントサイドで効率的に動作します。
2. インタラクティブな3Dモデル
@react-three/drei
を使えば、GLTF/GLB形式の3Dモデルを簡単に扱えます。
npm install @react-three/drei
以下はモデルを読み込む例です:
import { useGLTF } from '@react-three/drei';
function Model() {
const { scene } = useGLTF('/models/banana.glb');
return <primitive object={scene} scale={0.5} />;
}
このコードで、Blenderなどで作成した3Dモデルをサイトに表示できます。
3. ライトや影のリアリスティックな表現
Three.jsのライト設定を活用して、シーンにリアリズムを追加できます。
<spotLight position={[10, 10, 10]} angle={0.3} />
ライトの種類や配置を工夫することで、視覚的に魅力的なシーンを構築できます。
4. パーティクルやエフェクト
drei
のパーティクルシステムを使って、煙、星空、炎などの表現が可能です。以下は簡単なパーティクルの例です:
import { Points, PointMaterial } from '@react-three/drei';
function Particles() {
const points = Array.from({ length: 1000 }).map(() => [
Math.random() * 10 - 5,
Math.random() * 10 - 5,
Math.random() * 10 - 5,
]);
return (
<Points positions={points}>
<PointMaterial color="white" size={0.1} />
</Points>
);
}
5. カメラ操作
ユーザーが3D空間を自由に動き回れるように、OrbitControls
などを追加します。
<OrbitControls enableZoom={false} />
まとめ
React-Three-Fiberを使うことで、Next.jsで簡単に3Dコンテンツを作成できます。以下のポイントを押さえれば、より効果的なサイト制作が可能です。
dynamic
を活用してSSRとの相性を調整。@react-three/drei
を使って手軽に便利なコンポーネントを利用。- ライトや影でリアリズムを向上。
- インタラクティブな3Dモデルでユーザー体験を強化。
これらの技術を駆使して、3D表現の可能性を広げてみてください!