FaceDOFFocus – キャラの顔に自動でピントを合わせるDOF制御
- Digital100 JPY

FaceDOFFocus は、キャラクターの顔や指定部位を自動で追尾し、Depth Of Field(被写界深度)のフォーカスを常に最適化するコンポーネントです。被写体が動いても自然にフォーカスを合わせ続け、映像や配信に映画的な臨場感を加えます。 ■ 主な機能 - 顔や eye ボーンに自動でピントを合わせる - 距離オフセット・最小/最大フォーカス距離の調整可能 - カメラ背面にある場合は安全な最小距離に切り替え - SmoothDamp によるスムーズなフォーカス移動 - PostProcessVolume の自動探索 ■ 想定利用例 - 歌枠や雑談配信で「顔に自然なフォーカス」が当たる演出 - ダンス・3Dライブでカメラワークに合わせて自動的にピントを調整 - 動画収録で映画的な被写界深度表現をシンプルに実装 ■ 動作環境 - Unity 2021.3.38f1 / C# 8 - Post Processing Stack v2 ■ 注意事項 - URP/HDRP の Volume には非対応です。 - 値を大きく設定しすぎると挙動が不自然になる場合があります。 - 再配布・販売は禁止(改変後も含む)。利用による損害について作者は責任を負いません。 ■ クレジット表記 不要です。表記する場合は「UFirst_fn」としてください。 ■ 使用例動画 (eyeボーン指定) https://www.youtube.com/shorts/TQ4JaqMJKwo ■ アップデート履歴 ◯2025/09/24 概要 目的は「顔(任意ターゲット)に自動でピントを合わせつつ、Post Processing Stack v2 のDepth of Field(DoF)をインスペクターから直接調整可能にする」こと。 V3では“効かない/勝手にオフになる”系のトラブルを避けるための自動化と保険を多数追加。 主な変更点 1) DoFパラメータをインスペクターから直接上書き可能に overrideAperture / aperture、overrideFocalLength / focalLength を追加し、DoFの絞り・焦点距離をスクリプト側から上書きできるように(V1には未実装) overrideKernelSize と互換列挙 KernelSizeCompat を追加。環境差で DepthOfField.KernelSize が無い場合にも反射で安全に設定(V1には未実装) 2) “勝手にオフ問題”への対策と自動化を強化 forceEnableEffect で Volume の enabled/weight=1 や PostProcessLayer の enabled を自動で保証(V1は未対応) カメラに PostProcessLayer が無ければ自動で追加、volumeLayer=~0 を設定(V1は未対応) Depth テクスチャ必須化のため、camera.depthTextureMode |= Depth を自動設定(V1は未対応) 3) DoFエフェクト自体の存在を自動補完 Volume の Profile に DoF が無い場合、createDepthOfFieldIfMissing=true なら自動で追加(V1は「存在すれば使う」だけ) V1は TryGetSettings<DepthOfField> が失敗したら何もせず終了するのみ 4) 更新タイミングの選択と内部構造の整理 applyEveryFrame で「毎フレーム反映」か「有効化時/Start時のみ反映」を選べる(V1は毎フレーム固定) 反映処理を ApplyDOFParams() に集約し、OnEnable/Start/LateUpdate から呼び出す設計に変更(V1は LateUpdate 直書き) 5) フォーカス計算は従来踏襲+微調整 カメラ前方成分の距離を採用、最小/最大距離でクランプ、スムージングも踏襲(V1と同様のロジックを維持) 反映時は overrideState=true を明示して値を書き込み、確実に適用(V1は Override() 呼び出し) 付随する利点 安定性向上: DoFが無効化・未設定でも自動復旧しやすい設計に。 操作性向上: Aperture/FocalLength/KernelSize をインスペクターで直接調整できる。 互換性配慮: KernelSize不在の環境でも反射で安全に設定し、例外やビルドエラーを回避。 導入のしやすさ: PostProcessLayerの自動追加、DepthTextureの自動有効化でセットアップ手順を短縮。 既存版(FaceDOFFocus)との対比(要点) 旧版は「距離計算→focusDistanceに適用」の最小実装。Volume/Layer/DoF存在や深度テクスチャは“ユーザー側できちんと用意する”前提 新版は“現場で起こりがちな抜け・無効化”をコード側で極力吸収し、かつパラメータ編集も一箇所で完結できるようにしたアップグレード