Skip to content

Art-1: アートスタイルガイド

ビジュアルイメージ(コンセプトアート)

完成イメージの簡易ビジュアル。詳細は Art-Concept: コンセプトアート を参照。

FF7 LOW-POLY × VOXEL × SYNTHWAVE

コンセプト

「FF7ローポリキャラ × Minecraft Dungeonsマップ × シンセウェーブ」

キャラクターはFF7のワールドマップキャラのようなPS1ローポリデフォルメ造形。 マップ・環境はMinecraft Dungeonsのようなボクセル(ブロック基調)世界。 そこにシンセウェーブのネオンカラーとグリッチエフェクトが乗る。 レトロな懐かしさと、最新UXの爽快感が融合した体験。

世界観の二層構造

重要: キャラと環境でスタイルを分ける

キャラクター(プレイヤー/敵)環境(マップ/ロビー/ダンジョン) は 別系統のビジュアル言語で構成する。

スタイル参考備考
キャラクター層FF7ローポリデフォルメFF7 ワールドマップ3頭身、関節なし、フラットシェーディング
環境層Minecraft Dungeons風ボクセルMinecraft Dungeonsブロック基調、タイル組み立て、InstancedMesh多用

統一要素(両層で共通):

  • フラットシェーディング
  • ネオンカラーアクセント
  • ローポリゴン(軽量優先)
  • カメラはトップダウン斜め(Minecraft Dungeons寄り)

参考作品

要素参考リンク(出典)
キャラ造形Final Fantasy VII (1997) ワールドマップキャラFF Wiki
マップ・環境ボクセルMinecraft Dungeons公式サイト
カメラ・物量Minecraft Dungeons公式サイト
ローポリ美学Tunic公式サイト
サイバーパンクネオンHyper Light Drifter公式サイト
物量アクションVampire SurvivorsSteam

視覚的ルール

ジオメトリスタイル

キャラクター層(FF7ローポリ):

  • 3頭身デフォルメ、パーツは箱型で組み立て
  • スキンメッシュ不使用、手続き的アニメーション
  • 頂点カラー中心、顔のみ小テクスチャ

環境層(Minecraft Dungeonsボクセル):

  • 1x1x1 のブロック(キューブ)を基本単位としたタイル構成
  • 壁・床・柱・プロップは全てブロックの組み合わせ
  • InstancedMesh でブロックを大量配置(DrawCall節約)
  • ブロック単位の破壊表現も可能

ポリゴン数指針(Vibe Jam 2026 の軽量要件を満たす):

オブジェクト目標ポリゴン数備考
プレイヤーキャラ150〜250FF7ワールドマップキャラ程度
通常敵50〜150大量出現のため最小限
エリート敵200〜400
ボス500〜1,000画面映え重視
ロビーオブジェクトブロック単位InstancedMeshで1DrawCall
ダンジョン部屋1部屋あたり200〜500ブロック同じブロックを複製

シェーディング

フラットシェーディング + 頂点カラー/テクスチャ混合

- Three.js: MeshBasicMaterial + vertexColors or MeshLambertMaterial (軽量)
- 陰影: フラット(面ごとに色が固定)で PS1 風の"カクカク感"を演出
- 環境光: シーン全体を薄く照らす(色はシーン依存)
- ポイントライト: ネオン看板・武器光・攻撃エフェクトに限定

テクスチャ戦略(軽量化)

軽量化の核: テクスチャアトラス + 頂点カラー

低ポリゴンの強みを活かすため、テクスチャは最小限に抑える。

アセット種別テクスチャ手法サイズ目安
キャラ・敵頂点カラー中心 + 顔/目のみ小テクスチャ32x32 〜 64x64
環境タイル1枚のテクスチャアトラス(全テーマ統合)256x256 〜 512x512
エフェクト手続き的生成(パーティクル+グラデーション)テクスチャ不要
UISVG/CSS(テクスチャ外で対応)

合計テクスチャサイズ目標: 500KB 以下(初回ロード2MB制約内)

色彩原則

ダークベース × ネオンアクセント

背景トーン: #1a0b2e 〜 #2d1b4e(深紫)
プレイヤー:  明るいネオン色(シアン/ピンク/黄/緑/紫)
敵:         属性別のネオン色(ネオン=ピンク / データ=シアン / グリッチ=赤)
アクセント: 純白のグロウ、黒い輪郭線

詳細は Art-2: カラースクリプト を参照。

カメラ設計

トップダウン斜め(Minecraft Dungeons寄り)

パラメータ備考
角度水平から 55度下向き真俯瞰すぎず、キャラの表情が少し見える
距離キャラから 15〜18 units画面に20〜30体収まる
カメラタイプPerspectiveCamera(FOV 50)遠近感を少し出してレトロ感を強化
追従方式プレイヤーを中心に滑らかに追従damping 0.1
回転なし(固定角度)実装単純、プレイヤーの方向感覚保持
     📷 カメラ(55度下向き、追従)



    ┌─────▽─────┐
    │           │
    │  プレイヤー │  ← 画面中央を追従
    │     ★     │
    │           │
    │  ← 敵 →   │  ← 20-30体が画面内に見える
    └───────────┘

Three.js実装メモ

  • PerspectiveCamera を使用(Orthographicではない。レトロ感のため遠近を少し残す)
  • カメラは親Object3Dに乗せてプレイヤー位置を追従させる
  • 回転はしないため camera.rotation は初期化後に固定

ムード & トーン

基本トーン: ダーク × ポップ

  • 重苦しくない: ダーク背景だが、ネオンカラーで華やか
  • 懐かしい: PS1時代のローポリ感が郷愁を誘う
  • 爽快: 大量の敵がAoEでパァッと弾け飛ぶ気持ちよさ
  • サイバー: ネオン、グリッチ、データストリームで未来感

シーン別ムード

シーンムードキーワード
ロビー落ち着き・安心夕暮れ、スタジオジブリ風の和らぎ
通常ダンジョン活気・爽快ネオン街の繁華街、アーケード
ボス戦緊張・高揚赤色警告、画面揺れ、暗雲
カットインスタイリッシュ鋭角スプリット、タイポグラフィ
脱出ポータル解放・達成シアンの光、浮遊感

パフォーマンス制約

Vibe Jam 2026 要件「ロード画面なし、重いDLなし、即プレイ」に準拠。

ロードサイズ予算(初回ロード 2MB 以下の内訳)

カテゴリ予算備考
Three.js コア~600KB (gzip)モジュラーインポート、examples最小限
ポストプロセス~150KBUnrealBloomPass のみv1、他は v2+
ゲームロジック~300KBVite tree-shaking
テクスチャ(初回)~300KB顔・アトラス・UIのみ
フォント/UI~100KBシステムフォント優先、カスタムは最小
マージン~550KB予備
合計< 2MBgzip 圧縮後

遅延ロード戦略

初回2MB達成の鍵: コアだけ先に、残りは後から

ロードタイミング内容
初回(ロビー表示前)Three.js、ロビー基本ジオメトリ、プレイヤーモデル、UIコア
ロビー表示後(バックグラウンド)ダンジョンタイルアトラス、敵モデル、音声
ダンジョン突入時該当テーマの環境テクスチャ、カットイン演出アセット
ボス出現時ボスモデル・専用エフェクト

ポストプロセス方針

v1 は以下を採用。他は v2 以降に段階導入。

エフェクトv1v2+備考
UnrealBloomPassネオン発光の核。必須
ChromaticAberrationデスクトップのみモバイルは無効(軽量化)
FilmPass(ノイズ・スキャンライン)v1では不採用(予算外)

ランタイム性能目標

項目目標値実装方針
初回ロードサイズ< 2MB上記予算 + 遅延ロード
描画DrawCall< 100InstancedMesh、マテリアル統合
FPS (PC)60
FPS (モバイル)30+LOD、パーティクル削減、ChromaticAberration無効
同時敵数30〜50体InstancedMesh、オブジェクトプール
ポリゴン総数< 100k(画面内)LOD、frustum culling

v1 スコープの制限

v1 では実装しない(v2以降)

モバイル 30fps 維持のため、v1では以下を除外:

  • ブロック単位の破壊表現(演出として一部のみ残す: ボス戦のアリーナ崩壊など)
  • FilmPass(ノイズ・スキャンライン)
  • 動的ライティングの多用(ポイントライトは最大 4つ)

実装方針サマリー(Three.js)

typescript
// 基本セットアップ
- PerspectiveCamera (FOV 50, 55度下向き, 15-18 units離れ)
- Scene背景: 深紫グラデーション
- 環境光: AmbientLight (色はシーン依存, 強度0.5)
- ポイントライト: ネオン発光部に配置(PointLight, 減衰強め)

// ジオメトリ
- キャラ・: BufferGeometry + フラットシェーディング + 頂点カラー
- 環境: InstancedMesh でタイル複製
- エフェクト: Points + BufferGeometry でパーティクル

// マテリアル
- MeshLambertMaterial (軽量、影響ライティング少)
- MeshBasicMaterial (ネオン発光部、ライティング無視)
- 頂点カラーベース、テクスチャは必要最小限

// ポストプロセス
- EffectComposer + UnrealBloomPass (ネオン発光強調)
- ChromaticAberration (軽いPS1グリッチ感)
- FilmPass (ノイズ/スキャンラインは任意)

デザイン禁則事項

以下は世界観を壊すため避ける:

  • ❌ 写実的なテクスチャ(PBRマテリアル等)
  • ❌ 滑らかなスキンメッシュアニメーション(手足が曲線的に曲がる)
  • ❌ ダーク一辺倒の陰鬱な配色
  • ❌ リアルな血・グロ表現
  • ❌ 複雑なUIパネル(シンプルなネオンフレームで統一)

次のステップ