Sora 3 企画書(たたき台)

Sora 3 企画書(たたき台)

企画名:Sora 3 — AI Movie Studio

コンセプト
「プロンプトを書く」から「作品を監督する」へ。
文章・画像・音声・絵コンテを入力すると、AIが映像制作工程を統合して一本の作品へ仕上げる次世代映像制作プラットフォーム。

ターゲット
個人クリエイター、YouTuber、アニメ・ゲーム制作者、映像制作会社、広告制作、インディー映画制作者。

主要機能

  • 長尺動画生成:数秒単位ではなく、シーンをつないで数分〜長編作品を制作
  • キャラクター固定:顔・服・体格・声などをシーンをまたいで維持
  • AI絵コンテ:文章からカット割りを自動作成
  • カメラ演出:パン、ドリー、ズーム、手持ち、ドローンなどを指定
  • セリフ・音声・効果音・BGMを映像と同時生成
  • 動画の一部分だけ再生成
  • キャラクター、背景、アイテムを個別アセットとして保存
  • 「監督AI」が脚本から最適な演出を提案

最大の差別化

従来:
プロンプト → 動画

Sora 3:
脚本 → 絵コンテ → キャラクター → 撮影 → 音声 → 編集 → 完成映像

つまり、**動画生成AIではなく「AI映像制作環境」**として設計する。

利用例

「田舎町を舞台にした90年代風青春アニメ。主人公の少女が夕暮れの駅で幼なじみを待っている」

と入力すると、キャラクターデザイン → 背景 → 絵コンテ → カメラワーク → セリフ → BGM → 映像まで自動生成。

キャッチコピー

「想像した物語を、そのまま映画に。」

アンリアルエンジン6の新機能

大きな新要素はこのあたりです。

  • Verseが本格的なゲームプログラミング言語になる
    • UE6ではゲームプレイのプログラミングモデルをVerseへ移行。
    • PythonやC#に近い感覚を意識した言語です。
    • C++とも連携します。
    • 将来的には巨大なオンラインゲームを複数サーバーへ自動分散する構想まであります。
  • Scene Graphという新しいゲームプレイフレームワーク
    • Verseベースでゼロから設計。
    • オブジェクトやゲーム機能を「再利用できるコンポーネント」として扱いやすくする方向。
    • EpicはこれをUE6の新しいゲーム制作基盤にしようとしています。
  • UE5とUEFNが統合される
    • これがかなり大きいです。
    • UE5のAAAゲーム制作能力+Fortnite/UEFNで培ったライブゲーム開発環境を、1つのUnreal Engine 6にまとめます。
    • 普通のPC/PS5/Xbox向けゲームとして出すことも、Fortnite向けに出すことも、自前のオンライン環境に出すことも想定されています。
  • AI開発支援がエンジン側に入る
    • MCP(Model Context Protocol)対応。
    • EpicはClaude、Geminiなどとの統合を明言しています。
    • コード生成だけではなく、制作パイプラインそのものをAIで効率化する方向です。
    ここは今Codexをゲーム開発に使う感覚にかなり近い方向性ですね。将来的には「UEエディタ+AIエージェント」が普通になる可能性があります。
  • ゲーム間でコンテンツやコードを持ち運べる方向へ
    • glTFやUSDなどのオープン標準を重視。
    • コンテンツ・コード・ゲーム内経済などを、ゲームやエンジンをまたいで相互運用できる仕組みを目指しています。

そして気になるBlueprintですが、ここはかなり重要です。

UE6初期版ではActorとBlueprintは残ります。

いきなりBlueprintが消えるわけではありません。ただしEpicは、Scene Graph+Verseが十分成熟した段階で、Actor/Blueprintを最終的には非推奨にする計画を明言しています。その際は既存プロジェクトを新方式へ移す変換ツールも用意する方針です。

なので今Blueprintを勉強していることが無駄になるわけではありません。UE5プロジェクトについてもEpicはUE6へ「ハードな断絶を強制しない」方針です。

リリース予定

UE6 Early Access:2027年末予定

その後、

正式版:Early Accessから12〜18か月後

なので、順調なら正式版は2028年末〜2029年前半あたりになります。現在のUE5.8は「予定上最後のUE5メジャーリリース」で、必要なら5.9を出す可能性も残されています。

Epic公式「Unreal Engine 6への道」

ゲーム開発という観点では、UE5:Blueprint中心 → UE6:Verse+Scene Graph+AI支援中心という移行が一番大きそうです。特に一人開発ではAI統合の部分がかなり面白いところです。

フルダイブVR

VR
│
├─ 1. フルダイブVR
│ │
│ ├─ 定義・目標
│ │ ├─ 人工世界内で行動と感覚の循環を成立
│ │ ├─ 現実の身体運動への依存を減らす
│ │ └─ 0/1ではなく段階的に実現
│ │
│ ├─ 必要な基本機能
│ │ ├─ ① 動作意図を取得する
│ │ ├─ ② アバター/仮想世界を動かす
│ │ ├─ ③ 感覚を身体へフィードバックする
│ │ └─ ④ 現実由来の不要な感覚を抑える
│ │
│ └─ 実現段階
│ ├─ 現在のVR
│ ├─ Motion-Less VR
│ ├─ ハーフ/クォータダイブ
│ └─ 完全フルダイブ
│
├─ 2. 入力技術 ── 人間 → VR
│ │
│ ├─ BMI / BCI
│ │ ├─ Brain-machine Interface
│ │ ├─ 脳波センサー
│ │ ├─ 脳波によるゲーム操作
│ │ ├─ 医療BMI
│ │ └─ Neurable
│ │
│ ├─ Motion-Less VR
│ │ └─ 動作意図の取得
│ │
│ └─ 従来方式
│ └─ フルボディトラッキング
│
├─ 3. 感覚出力 ── VR → 人間
│ │
│ ├─ 視覚
│ ├─ 聴覚
│ ├─ 触覚
│ │ ├─ テスラスーツ
│ │ └─ 「触原色」/舘研究室
│ ├─ 運動感覚
│ │ └─ Motion-Less VR
│ ├─ 味覚
│ │ ├─ VRの味覚
│ │ └─ VRで食べられる食べ物
│ └─ 前庭感覚・身体感覚
│
├─ 4. 仮想身体
│ │
│ ├─ アバター
│ ├─ VRM
│ ├─ VRMより高度なアバター
│ ├─ Live2D → 3DCG
│ ├─ AIによる3DCG化
│ └─ 身体図式
│
├─ 5. 仮想世界
│ │
│ ├─ Unity
│ ├─ 3DCG
│ ├─ AIによる自動生成・配置
│ ├─ Google Earth
│ │ ├─ 地球データ
│ │ └─ 地球規模の仮想世界
│ └─ AI
│ ├─ アセット生成
│ ├─ 自動読み込み
│ └─ 自動配置
│
├─ 6. フルダイブVRの用途
│ │
│ ├─ フルダイブMMO
│ ├─ ゲーム
│ ├─ Vtuber
│ │ └─ フルダイブMMO内でアイドル活動
│ ├─ アート
│ ├─ 教育
│ │ ├─ フルダイブ型授業
│ │ └─ AIとの語学学習
│ └─ オンラインコミュニケーション
│
├─ 7. 社会・安全
│ │
│ ├─ 法律
│ ├─ VR社会のルール
│ ├─ 長時間利用
│ └─ VR酔い
│
├─ 8. 研究機関・研究
│ │
│ ├─ 人工世界実装研究室(AWIL)
│ │ ├─ Motion-Less VR
│ │ ├─ 運動意図
│ │ ├─ 運動感覚
│ │ └─ VR酔い
│ │
│ ├─ 舘研究室
│ │ └─ 触覚・テレイグジスタンス
│ │
│ └─ フルダイブ型VR授業研究
│
├─ 9. 資料・論文・URL
│ │
│ ├─ AWIL
│ ├─ PROTRUDE 2021
│ ├─ KDDI Research
│ ├─ NHK BMI
│ ├─ UploadVR / Neurable
│ ├─ 4Gamer
│ └─ 論文
│
└─ 10. 遠未来アイデア【フルダイブと分離】
│
├─ 不老不死
├─ DNA情報
├─ 量子テレポート
├─ 空飛ぶ車
├─ 自動運転
└─ 生殖関連アイデア

文字数カウントサイト

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>文字数カウント</title>

  <style>
    * {
      box-sizing: border-box;
    }

    body {
      margin: 0;
      min-height: 100vh;
      font-family: Arial, "Hiragino Kaku Gothic ProN", "Yu Gothic", sans-serif;
      background: #f4f6f8;
      color: #222;
      display: flex;
      justify-content: center;
      align-items: center;
      padding: 30px;
    }

    .container {
      width: 100%;
      max-width: 900px;
      background: white;
      padding: 30px;
      border-radius: 16px;
      box-shadow: 0 8px 30px rgba(0, 0, 0, 0.08);
    }

    h1 {
      margin-top: 0;
      text-align: center;
    }

    textarea {
      width: 100%;
      height: 350px;
      resize: vertical;
      padding: 18px;
      font-size: 16px;
      line-height: 1.7;
      border: 1px solid #ccc;
      border-radius: 10px;
      outline: none;
    }

    textarea:focus {
      border-color: #555;
    }

    .counts {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
      gap: 12px;
      margin-top: 20px;
    }

    .count-box {
      background: #f7f7f7;
      padding: 18px;
      border-radius: 10px;
      text-align: center;
    }

    .count-box strong {
      display: block;
      font-size: 28px;
      margin-top: 5px;
    }

    .buttons {
      margin-top: 20px;
      display: flex;
      gap: 10px;
      justify-content: center;
      flex-wrap: wrap;
    }

    button {
      border: none;
      padding: 12px 22px;
      border-radius: 8px;
      cursor: pointer;
      font-size: 15px;
      background: #222;
      color: white;
    }

    button:hover {
      opacity: 0.8;
    }
  </style>
</head>

<body>

<div class="container">

  <h1>文字数カウント</h1>

  <textarea
    id="text"
    placeholder="ここに文章を入力してください"
  ></textarea>

  <div class="counts">

    <div class="count-box">
      文字数
      <strong id="characterCount">0</strong>
    </div>

    <div class="count-box">
      空白を除く
      <strong id="noSpaceCount">0</strong>
    </div>

    <div class="count-box">
      行数
      <strong id="lineCount">0</strong>
    </div>

  </div>

  <div class="buttons">

    <button id="copyButton">
      コピー
    </button>

    <button id="clearButton">
      すべて削除
    </button>

  </div>

</div>

<script>

const textArea = document.getElementById("text");

const characterCount =
document.getElementById("characterCount");

const noSpaceCount =
document.getElementById("noSpaceCount");

const lineCount =
document.getElementById("lineCount");

const copyButton =
document.getElementById("copyButton");

const clearButton =
document.getElementById("clearButton");


function countText() {

  const text = textArea.value;

  // 全文字数
  characterCount.textContent = text.length;

  // 空白・改行を除いた文字数
  noSpaceCount.textContent =
    text.replace(/\s/g, "").length;

  // 行数
  if (text.length === 0) {

    lineCount.textContent = 0;

  } else {

    lineCount.textContent =
      text.split("\n").length;

  }

}


textArea.addEventListener(
  "input",
  countText
);


copyButton.addEventListener(
  "click",
  async () => {

    await navigator.clipboard.writeText(
      textArea.value
    );

    copyButton.textContent =
      "コピーしました";

    setTimeout(() => {

      copyButton.textContent =
        "コピー";

    }, 1500);

  }
);


clearButton.addEventListener(
  "click",
  () => {

    textArea.value = "";

    countText();

    textArea.focus();

  }
);


</script>

</body>
</html>