Skip to main content

🎥 摄像机设计深度指南

本文档深入拆解 Unity Camera 的核心参数及 Cinemachine 的调优细节。 目标是帮助你理解每一个滑块背后的光学原理心理学影响,而不仅仅是“复制最佳设置”。

1. FOV (视场角) 终极解析

FOV (Field of View) 是摄像机参数中最重要、也最容易被误解的一个。

1.1 FOV 到底是什么?

想象你的眼睛(或镜头)是一个圆锥体的顶点。FOV 就是这个圆锥体张开的角度。
  • Unity 的 FOV: 默认指的是 Vertical FOV (垂直视场角)
    • 注意: 很多 FPS 游戏(如 CS:GO, Overwatch)说的是 Horizontal FOV (水平视场角)。
    • 换算: 在 16:9 屏幕下,60° 的垂直 FOV 大约等于 90° 的水平 FOV。

1.2 长焦 vs 广角:视觉心理学

FOV 的值决定了画面的透视畸变 (Perspective Distortion) 程度。
FOV (Vertical)镜头类型视觉感受适用场景心理暗示
10° - 30°长焦 (Telephoto)扁平、无畸变、距离感被压缩狙击开镜、卡牌展示、UI特写冷静、客观、观察者
40° - 55°标准 (Standard)接近人眼单眼舒适区,自然ARPG、MOBA、塔防俯视角舒适、中立、掌控全局
60° - 80°广角 (Wide)边缘拉伸、速度感强、距离感夸张FPS、赛车、动作游戏近战紧张、快速、身临其境
90°+超广角 (Fish-eye)严重畸变,鱼眼效果恐怖游戏、极速穿梭疯狂、失控、非人视角

1.3 为什么上帝视角推荐 40°-50°?

  • 如果用 20° (过小): 地面像一张纸贴在屏幕上,角色像纸片人,没有立体的“站立感”。
  • 如果用 80° (过大): 屏幕边缘的塔和怪物会歪斜得很厉害(透视拉伸),玩家难以判断具体的攻击距离。
  • 结论: 45° 是黄金平衡点。既保留了透视带来的立体感,又保证了战场的几何准确性。

2. 投影模式:透视 vs 正交

2.1 正交 (Orthographic)

  • 原理: 所有的光线平行。物体无论远近,在屏幕上一样大。
  • 优点: 像素完美 (Pixel Perfect),永远不会有透视变形。
  • 缺点: 没有纵深感 (Depth)。你看不到墙壁的侧面,很难表现高低差。
  • 适用: 纯 2D 游戏、纪念碑谷风格的解谜。

2.2 透视 (Perspective) - 本作推荐

  • 原理: 近大远小。
  • 优势:
    • 视差 (Parallax): 当镜头移动时,近处的柱子移动快,远处的地板移动慢。这种相对运动瞬间建立了“世界是 3D 的”感觉。
    • 高度感: 能够一眼看出 Boss 比玩家高大威猛。

3. 裁剪平面 (Clipping Planes)

很多新手会随意设置 Near=0.01, Far=5000。这是错误的!

3.1 深度缓冲精度 (Z-Buffer Precision)

GPU 用有限的位数 (通常 24-bit) 来记录物体的深度。这个精度分布是非线性的,绝大部分精度集中在 Near Plane 附近。
  • 如果 Near 设得太小 (e.g., 0.01): 99% 的深度精度被浪费在眼前 1米 的范围内。远处的物体会因为精度不足而闪烁 (Z-fighting),比如地砖和地毯重叠处疯狂闪动。
  • 如果 Far 设得太大 (e.g., 10000): 同样会稀释精度,且增加 Culling (剔除) 计算压力。

3.2 推荐设置

  • Near: 0.3 (不要小于 0.1,除非你是做显微镜模拟器)。
  • Far: 100 - 200 (俯视角游戏能看多远?没必要渲染几公里外的山)。

4. Cinemachine 基础调优:跟随与瞄准

Cinemachine 是 Unity 官方的神级插件,用它来代替手写 Camera.main.transform.position = player.position + offset

4.1 Body: Transposer (位移跟随)

决定摄像机如何跟随目标移动。
  • Follow Offset: 摄像机相对于主角的固定位置 (e.g., (0, 10, -10)).
  • Damping (阻尼) - 手感的核心
    • 这就好比摄像机和主角之间连了一根皮筋。
    • X/Z Damping (0.5): 主角跑动时,摄像机带有惯性地平滑追过去。数值越大,滞后感越强,越“肉”。
    • Y Damping (2.0): 关键点! 主角跳跃时,如果你不希望摄像机跟着剧烈上下颠簸,就把 Y 轴阻尼设大。这样主角跳,镜头基本不动,只有主角爬高台时镜头才慢慢跟上去。

4.2 Aim: Composer (旋转瞄准)

决定摄像机看向哪里。俯视角通常不需要 LookAt,但在特写时需要。
  • Lookahead Time (预判时间): 高级参数。
    • 原理: 根据目标当前的速度向量,让相机“看向未来”。
    • 设置: 设为 0.1 - 0.3
    • 效果: 当玩家向右跑时,相机会自动稍稍向右偏转,让屏幕右侧(前方)留出更多视野。这符合人类“走路看路”的本能。
  • Lookahead Smoothing: 必须配合 Time 使用,防止预判过于抖动。设为 10 左右。
  • Dead Zone (死区): 屏幕中心的一个矩形区域。如果目标在这个区域内移动,摄像机纹丝不动
    • 作用: 防止主角轻微晃动导致画面不停微调,造成晕眩。
  • Soft Zone (软区): 死区之外的区域。目标进入这里,摄像机开始缓慢旋转追赶。

5. Cinemachine 进阶组件:解决常见痛点

5.1 限制边界 (Extensions -> CinemachineConfiner)

痛点: 相机跟着主角走到地图边缘,结果拍到了地图外面的虚空(Skybox),甚至拍到了未渲染的背面。
  • 用法:
    1. 在场景里建一个空的 GameObject,挂一个 Collider (Box 或 Polygon)。
    2. 勾选 Is Trigger
    3. 调整 Collider 大小,包围住摄像机允许活动的范围(注意是摄像机的范围,不是主角的范围)。
    4. 在虚拟相机上添加 Extension: CinemachineConfiner
    5. 把 Collider 拖进去。
  • Damping: 设为 0.5。当相机撞墙时,会像弹簧一样柔和地停住,而不是硬邦邦地卡住。

5.2 多目标聚焦 (Target Group)

痛点: 刷怪了,或者双人联机,相机怎么同时拍到两个人?
  • 用法:
    1. 创建一个空物体,挂载 CinemachineTargetGroup 脚本。
    2. 把 Player 1, Player 2 (或者 Player 和 Boss) 拖进 Targets 列表。
    3. Radius (半径): 设置每个目标的“势力范围”。
    4. Weight (权重): 如果想让相机更偏向主角,把主角权重设为 2,Boss 设为 1。
    5. 将虚拟相机的 Follow/LookAt 目标设置为这个 TargetGroup 物体。
    6. 关键: 只有配合 Body: Framing TransposerGroup Framing Mode 才能实现自动拉远拉近。如果是普通的 Transposer,它只会盯着中心点不动。

6. 镜头切换与导演意识 (Blending)

如何在“战斗视角”和“处决特写”之间平滑切换?

6.1 虚拟相机优先级 (Priority)

  • 场景里可以放 10 个虚拟相机。
  • 规则: Cinemachine Brain 永远只渲染 Priority 最高Active 的那个相机。
  • 实战:
    • Cam_Main (Priority: 10) - 常驻。
    • Cam_Finisher (Priority: 20) - 禁用状态。
    • 当触发处决时,代码启用 Cam_Finisher。Brain 会自动检测到它优先级更高,开始切换。

6.2 混合设置 (Cinemachine Brain)

挂在 MainCamera 上的脚本。
  • Default Blend: Ease In Out (2秒)。
  • Custom Blends: 可以为特定相机对定义不同的切换方式。
    • Main -> Finisher: Ease In (0.2秒) —— 快速切入特写,强调冲击力。
    • Finisher -> Main: Ease Out (1.5秒) —— 处决完后,缓慢拉回上帝视角,让玩家看清战场局势。

7. 镜头特效实战 (Screen Shake & Impulse)

不仅要视觉,还要体感

7.1 噪点晃动 (Noise)

  • 给 Cinemachine Virtual Camera 添加 Basic Multi Channel Perlin
  • Profile: 6D Shake (剧烈) 或 Handheld Normal (模拟手持呼吸感)。
  • 用法: 平时设为 0。当进入“狂暴模式”或“低血量”时,通过代码动态增加 Amplitude Gain,创造不安感。

7.2 脉冲震动 (Impulse)

  • 原理: 独立的震动事件,不影响主摄像机轨迹。
  • 打击感公式:
    • 方向: 震动方向应与攻击方向一致 (e.g., 向右挥剑,屏幕向右猛挫一下)。
    • 衰减: 使用 Exponential Decay (指数衰减),震动瞬间最强,然后迅速归零。不要用正弦波来回晃。

8. 总结:合格的俯视角相机参数表

参数推荐值理由
ProjectionPerspective立体感、视差
FOV (Vertical)45°几何畸变与透视感的完美平衡
Position Offset(0, 12, -9)约 55° 俯视,兼顾战场与角色细节
Near Clip0.3保证 Z-Buffer 精度,防止闪烁
Far Clip150性能优化,足够覆盖视距
BodyTransposer最适合固定角度俯视
Damping (X/Z)0.4灵敏跟随,轻微惯性
Damping (Y)1.5过滤掉跳跃/地形起伏带来的颠簸
Lookahead Time0.15动态预判玩家前进方向
ConfinerEnabled必须加,防止看到地图边缘穿帮