Skip to content

✨ パーティクルとアニメーションの間引き (Minecraft 26.3) ​

バニラの Minecraft では、地下の溶岩の雫、洞窟のパーティクル、ポータル粒子、松明などが厚い石壁の背後で何百ものクアッドを生成し、GPUに無駄に送信されています。同時に、プレイヤーがシングルプレイで一時停止中やメニュー画面を開いている最中でも、アニメーション付きブロックテクスチャアトラスは常にフレームデータをGPUにアップロードし続けます。

Camera Culling は、高速なパーティクル視線チェックとアトラスアップロード抑制メカニズムを導入しています。


📋 パーティクルとアニメーションカリング基本情報 ​

項目設定値
パーティクル対象SingleQuadParticle.extract(QuadParticleRenderState, Camera, float)
アニメーション対象TextureAtlas.cycleAnimationFrames()
近接安全マージンカメラ周囲 4.0 メートル ($16.0\text{m}^2$)
最大パーティクル距離64.0 メートル ($4096.0\text{m}^2$)
アトラス一時停止トリガーシングルプレイ一時停止中 または 有効なワールド/プレイヤー不在時

🌪️ パーティクル遮蔽パイプライン ​

text
(X, Y, Z) にパーティクル発生
        │
        ▼
[1] 距離 <= 4m? ──────────────► レンダリング (近接安全バブル)
        │ いいえ
        ▼
[2] 距離 > 64m? ──────────────► カリング (遠距離カットオフ)
        │ いいえ
        ▼
[3] 固体ブロック内部? ────────► カリング (ブロック内閉塞)
        │ いいえ
        ▼
[4] 視覚クリップレイキャスト遮蔽?
        ├── はい ─────────────► カリング (遮蔽)
        └── いいえ ───────────► レンダリング (可視)
  1. 近接安全バブル (4.0m): カメラから4メートル以内で発生したパーティクル(ポーションの渦、ダッシュの砂煙、攻撃スウィープなど)は、$< 0.0001\mu\text{s}$ の極小コストで無条件に描画されます。
  2. 遠距離カットオフ (64.0m): 64メートル以遠で発生したパーティクルはGPUのフィルレート負荷軽減のため自動的に間引かれます。
  3. 固体ブロック内閉塞: パーティクル座標 BlockPos.containing(x, y, z) が isSolidRender() == true である場合、即座に破棄されます。
  4. 視覚クリップレイキャスト: カメラからパーティクル位置へ ClipContext.Block.VISUAL のレイを照射します。遮蔽ブロックが $> 0.35\text{m}$ の余裕をもって視線を遮っている場合、レンダリングをスキップします。

🎬 ブロック・テクスチャアトラスのアニメーション一時停止 ​

テクスチャアトラスのアニメーション(シーランタン、水・溶岩の流動、プリズマリン、炎、コンパス、時計など)はフレームの更新にGPU帯域幅を消費します。

Camera Culling は TextureAtlasMixin 内で AnimationCullingHelper.shouldPauseAtlasAnimation() をチェックします:

  • シングルプレイが一時停止中(mc.isPaused() == true)の場合、アトラスのアップロードを完全に停止します。
  • タイトル画面、モーダルメニュー表示中、またはワールドから切断されている場合、バックグラウンドでのテクスチャサイクルを停止します。

🔗 関連ページ ​

Official documentation & web portal for Dasik Igaijinn mods.