mcpField
P
premium-3d-website

premium-3d-website

github.com/sickn33デザイン・UI48.7k57 回インストール今日更新
リポジトリ

premium-3d-website について

Premium 3D Websiteは、WebGLを使ったインタラクティブな3Dサイトを開発する人向けのスキルです。シェーダー効果、ポストプロセス、物理とモーション、アセット読み込み、モバイルなどでの性能調整を扱います。

主な機能

  1. 01WebGLのシーンとレンダーループを構築
  2. 02GLSLシェーダーとポストプロセスを追加
  3. 03インタラクティブな物理効果と動きを実装
  4. 043Dアセットを最適化して読み込み
  5. 05デバイス性能に合わせて描画を調整

活用シーン

  1. 013Dを軸にしたクリエイティブサイトの構築
  2. 02Three.jsやR3Fでシェーダーやブルームを追加
  3. 03オブジェクトのインタラクティブな反応を作成
  4. 04モバイルでの読み込みと性能を改善

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill premium-3d-website

インストール後、Claude Code で/premium-3d-websiteを入力して読み込まれたか確認します。

詳細

プレミアムな3Dウェブサイト

概要

このスキルでは、プレミアムでハイエンドな3Dウェブサイトを開発するためのアーキテクチャガイドラインとコードパターンを提供します。高いパフォーマンスを維持しながら、高度なWebGLビジュアルエフェクト、カスタムシェーダーパイプライン、インタラクティブな物理演算要素、没入感のあるページ遷移を実装したい開発者を対象としています。

このスキルを使う場面

  • 3D要素を取り入れたプレミアムなウェブサイトや、受賞を目指すクリエイティブなウェブサイトを設計するときに使用します。
  • Three.js、React Three Fiber(R3F)、またはSplineをカスタムシェーダー(GLSL)と組み合わせて導入するときに使用します。
  • ブルーム、被写界深度、カスタムフィルムグレインなどのポストプロセスエフェクトを実装するときに使用します。
  • インタラクティブなプリローダーと、高パフォーマンスなアセット読み込み戦略を設計するときに使用します。
  • 複雑な3Dシーンをモバイル対応させ、パフォーマンスを最適化するときに使用します。

仕組み

ステップ 1: レンダーループとシーンアーキテクチャを確立する

適切なリサイズ処理とパフォーマンスを考慮したピクセル比を備えた、堅牢なWebGLコンテキストを設定することが重要です。高DPI画面でピクセルを過剰にレンダリングしないよう、ピクセル比の上限は2に設定します。

ステップ 2: シェーダーエフェクトとポストプロセスを実装する

ポストプロセスパイプライン(EffectComposer または @react-three/postprocessing を使用)を組み込み、ブルーム、色収差、被写界深度、フィルムグレインを追加します。ドローコールを最小限に抑えるため、パス数を少なくし、カスタムフラグメントシェーダーを組み合わせます。

ステップ 3: インタラクティブな物理演算とモーションを統合する

物理演算フレームワーク(Cannon.jsやRapierなど)またはプロシージャルなスプリングアニメーションを利用し、マウスのホバー、ドラッグ、クリック入力に3Dオブジェクトが自然な反応を返すようにします。

ステップ 4: アセットパイプラインとプリローダー

3Dモデルを最適化し(Draco圧縮を使用)、カスタムローディングマネージャーで読み込みます。バックグラウンドで大容量アセットを取得している間、ユーザーを楽しませるインタラクティブなプリローダーを表示します。

例

例 1: React Three Fiber(R3F)でのカスタムポストプロセス
import { Canvas } from '@react-three/fiber';
import { EffectComposer, Bloom, DepthOfField, Vignette } from '@react-three/postprocessing';

export default function PremiumComposer() {
  return (
    <Canvas dpr={[1, 2]} gl={{ powerPreference: "high-performance", antialias: false }}>
      <ambientLight intensity={0.5} />
      <mesh>
        <boxGeometry />
        <meshStandardMaterial emissive="orange" emissiveIntensity={2.0} />
      </mesh>
      
      <EffectComposer disableNormalPass>
        <DepthOfField focusDistance={0} focalLength={0.02} bokehScale={2} height={480} />
        <Bloom luminanceThreshold={0.3} luminanceSmoothing={0.9} height={300} />
        <Vignette eskil={false} offset={0.1} darkness={1.1} />
      </EffectComposer>
    </Canvas>
  );
}
例 2: 液体/波のエフェクトを実現するカスタムGLSLシェーダーマテリアル
import * as THREE from 'three';

const CustomWavyMaterial = new THREE.ShaderMaterial({
  vertexShader: `
    varying vec2 vUv;
    uniform float uTime;
    void main() {
      vUv = uv;
      vec3 pos = position;
      pos.z += sin(pos.x * 5.0 + uTime) * 0.1;
      pos.z += cos(pos.y * 5.0 + uTime) * 0.1;
      gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);
    }
  `,
  fragmentShader: `
    varying vec2 vUv;
    uniform float uTime;
    uniform vec3 uColor;
    void main() {
      float pulse = 0.5 + 0.5 * sin(uTime + vUv.x * 10.0);
      gl_FragColor = vec4(uColor * pulse, 1.0);
    }
  `,
  uniforms: {
    uTime: { value: 0.0 },
    uColor: { value: new THREE.Color('#3b82f6') }
  }
});

このマテリアルのフラグメントには、メッシュ、十分に細分化されたジオメトリ、そして uniforms.uTime.value を更新するアニメーションループが必要です。マテリアル単体ではアニメーションしません。動きを減らす設定を尊重し、キーボード/タッチ操作に加えて、WebGLが利用できない場合やエラーが発生した場合に使用できる代替手段を用意してください。代表的なローエンドデバイスでプロファイルを実施し、画面外のレンダリングを一時停止して、所有するGPUリソースを解放し、アセット/パス数を制限してください。DPR=2と圧縮は初期設定の目安であり、最適な設定とは限りません。小さなアセットでは、圧縮による節約よりもデコーダーやダウンロードのコストが上回る場合があります。

ベストプラクティス

  • ✅ dpr={[1, 2]} を設定し、デバイスピクセル比の上限を2にします。
  • ✅ レンダラー/コンポーザーのアンチエイリアスを慎重に選び、出力とパフォーマンスを測定します。ポストプロセスを使うだけで、レンダラーのアンチエイリアスが不適切になるわけではありません。
  • ✅ 動的ライトやリアルタイムシャドウの代わりに、Blenderなどの3Dソフトウェアを使ってアンビエントオクルージョン、ライティング、シャドウをテクスチャにベイクします。
  • ✅ 複数の同一メッシュを含むシーンでは、インスタンスレンダリング(THREE.InstancedMesh またはR3Fの <Instances>)を使用します。
  • ❌ 非圧縮のGLTF/OBJモデルは使用しないでください。DracoまたはMeshoptでモデルを圧縮してください。
  • ❌ パフォーマンスへの負荷が大きいため、モバイルやローエンドデバイスではリアルタイムシャドウマップ(THREE.DirectionalLightShadow など)を使用しないでください。

制限事項

  • このスキルは、環境固有の検証、テスト、専門家によるレビューに代わるものではありません。
  • 必要な入力、権限、安全上の境界が不明な場合は、作業を止めて確認してください。
  • 複雑なシェーダー計算や高度な物理シミュレーションの制約については、さまざまなデバイスのチップセットで手動テストが必要です。

セキュリティと安全に関する注意事項

  • 外部の3DモデルURL(GLTFLoader で読み込むもの)が、信頼できる安全なCDN(HTTPS)でホストされていることを確認してください。
  • アセットの最適化に、任意の未検証シェルスクリプトを実行したり、バージョンを固定していないNPMパッケージを使用したりしないでください。

よくある問題

  • 問題:モバイル端末や高 DPI(Retina)画面で、深刻な遅延やフレームレートの低下が発生します。 解決策:ピクセル比を 2 に制限し(renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2)))、使用していないポストプロセスパスを無効にします。
  • 問題:初期化中の読み込みに時間がかかり、画面が白くなります。 解決策:ローディングマネージャー(THREE.LoadingManager)を使用し、ユーザーの関心を保てる、レスポンシブで操作可能なプリローダーを表示します。

関連スキル

  • @3d-web-experience - WebGL、Three.js、Spline の基本概念。
  • @scroll-experience - スクロールコントローラーと 3D アニメーションの統合。
  • @performance-optimizer - コード実行全般のパフォーマンス調整。

コメント