Unity的Camera类——视觉掌控与深度解析(下)

前言

欢迎阅读本篇博客,这章我们将深入探讨 Unity 游戏引擎中 Camera 类的委托和枚举。摄像机在游戏开发中扮演着关键角色,它不仅定义了玩家视角的窗口,还影响着游戏的视觉表达和整体体验。理解和正确使用 Camera 类的枚举和委托,可以极大地提升你的游戏视觉效果和性能表现。


Camera的委托:

Camera.CameraCallback:

Camera.CameraCallback

Unity 中的一个委托类型,它用于定义一系列与摄像机相关的事件的签名。这些事件是上一章有说到的 onPreCull、onPreRender 和 onPostRender。当摄像机即将裁剪、渲染或完成渲染时,会触发这些事件。

 
定义:

public delegate void CameraCallback(Camera cam);

这个委托类型接受一个 Camera 类型的参数。这意味着,任何要作为这些事件处理函数的方法都必须接受一个 Camera 类型的参数。

要使用 CameraCallback,你首先需要定义一个符合这个委托签名的方法,然后将这个方法添加到对应的摄像机事件上。

示例:
如果你想在每次摄像机渲染后执行一些操作,你可以将方法添加到 Camera.onPostRender 事件上。

void OnPostRender(Camera cam)
{// 这里是在摄像机渲染完成后要执行的代码
}
void OnEnable()
{Camera.onPostRender += OnPostRender;
}
void OnDisable()
{Camera.onPostRender -= OnPostRender;
}

在这个例子中,OnPostRender 方法就是一个符合 CameraCallback 委托签名的方法。
同样的方式可以用于 Camera.onPreCull 和 Camera.onPreRender 事件,只需将方法添加到这些事件即可,可以参照上一章节的Camera事件示例。


Camera的枚举

Camera.FieldOfViewAxis:
Camera.GateFitMode:
Camera.MonoOrStereoscopicEye:
Camera.RenderRequestMode:
Camera.RenderRequestOutputSpace:
Camera.StereoscopicEye:

Camera.FieldOfViewAxis

用于确定摄像机的视场(Field of View, FOV)是围绕哪个轴进行调整。在 Unity 中,这通常涉及两个选项:Vertical和Horizontal

  1. Vertical (垂直轴): 当视场基于垂直轴时,无论屏幕的宽高比如何变化,摄像机视场的垂直部分保持不变。这是最常用的设置,特别是在需要保持垂直视角一致性的场景中,比如第一人称或第三人称射击游戏。
  2. Horizontal (水平轴): 当视场基于水平轴时,摄像机视场的水平部分保持不变,而垂直视场会根据屏幕的宽高比进行调整。这种设置在宽屏显示器上特别有用,因为它可以在不裁剪水平视野的情况下适应不同的屏幕尺寸。

Camera.GateFitMode

这个枚举控制摄像机视野如何适应画幅尺寸的变化,尤其重要于影视制作中的画幅比例适配

  1. Vertical: 垂直适配。在此模式下,摄像机的垂直视野保持不变,而水平视野根据画幅比例变化而自动调整。这常用于确保特定的垂直视觉元素不受画幅比例变化的影响。
  2. Horizontal: 水平适配。与垂直适配相反,此模式保持水平视野不变,垂直视野随画幅比例变化而调整。适用于水平视角更为重要的场景。
  3. Fill: 填充模式。摄像机的视野会扩展以填充整个画幅,但这可能导致画幅边缘的部分图像被裁剪。
  4. Overscan: 保留图像的全部内容。摄像机的视野会进一步扩展以确保画幅内的每个部分都被覆盖,可能会捕捉到通常不可见的场景部分。
  5. None: 摄像机不进行任何画幅适配。这意味着摄像机视野依赖于传感器尺寸,无视画幅比例。

Camera.MonoOrStereoscopicEye

用于区分渲染单眼(Mono)和双眼(Stereoscopic)视图的设置。这对于虚拟现实(VR)和增强现实(AR)应用尤其重要。

  1. Left: 左眼。用于立体视觉渲染的左眼视图。
  2. Right: 右眼。用于立体视觉渲染的右眼视图。
  3. Mono: 单眼。标准的2D视觉渲染,不涉及立体视觉效果。

Camera.RenderRequestMode

与摄像机的渲染请求相关,允许开发者在高级渲染场景中进行更细致的控制,如在后期处理、图像分析或高级渲染技术中

  1. None: 默认值,表示没有特定的渲染请求模式。
  2. ObjectId: 输出一个对象的 InstanceID 缓冲区。这通常用于识别渲染场景中的特定对象。
  3. Depth: 输出深度值。这对于实现深度相关的效果,如景深、阴影等,非常有用。
  4. VertexNormal: 输出插值后的顶点法线。这对于实现某些类型的光照效果很重要。
  5. WorldPosition: 输出世界坐标位置缓冲区。这可以用于计算对象在世界空间中的位置。
  6. EntityId: 输出一个实体ID。这通常用于实现复杂的渲染效果,需要跟踪特定实体。
  7. BaseColor: 输出材质的基色(Albedo/Base Color)。这对于提取或修改对象的主要颜色非常有用。
  8. SpecularColor: 返回材质的镜面反射颜色缓冲区。用于实现高级的光照效果。
  9. Metallic: 输出材质的金属度值。这对于实现金属材质的渲染效果非常重要。
  10. Emission: 输出材质的发光值。用于渲染自发光材质。
  11. Normal: 输出每像素的法线。这对于实现复杂的光照和表面效果至关重要。
  12. Smoothness: 返回材质的光滑度缓冲区。这对于实现高质量的反射和光泽效果非常有用。
  13. Occlusion: 返回材质的环境遮蔽(Ambient Occlusion)缓冲区。这对于增强场景的深度感和细节非常重要。
  14. DiffuseColor: 输出材质的漫反射颜色。这对于分析或修改对象的漫反射颜色非常有用。

Camera.RenderRequestOutputSpace

这个枚举定义了渲染请求的输出空间,即渲染请求的数据将以哪种形式输出

  1. ScreenSpace: 渲染请求将在屏幕空间中渲染,从摄像机的视角出发。这意味着输出将是基于摄像机视角和屏幕坐标系统的。
  2. UV0 - UV8: 这些值表示渲染请求将输出在被渲染网格的特定UV空间中。UV空间是用于映射纹理到3D模型的坐标系统,每个UV值(从UV0到UV8)代表模型上不同的纹理坐标集。这使得开发者可以对模型上特定的纹理坐标进行高级渲染操作。
    UV0: 输出在UV0空间中。
    UV1: 输出在UV1空间中。
    UV2: 输出在UV3空间中。
    (剩余的同理)

这些选项允许开发者在不同的坐标系统中进行渲染操作,为渲染过程提供了更多的灵活性和控制。例如,选择屏幕空间可以用于实现与屏幕坐标相关的效果,如屏幕空间反射(Screen Space Reflections)。而选择UV空间可以用于实现复杂的纹理效果,如纹理映射、纹理变换等。这为在Unity中实现高级图形处理和自定义渲染技术提供了强大的工具。


Camera.StereoscopicEye

这个枚举用于指定立体视觉渲染中的眼睛类型

  1. Left: 左眼。用于生成立体视觉中的左眼图像。
  2. Right: 右眼。用于生成立体视觉中的右眼图像。

希望这篇博客能够帮助你更好地理解 Unity 的 Camera 类。
在下一篇文章,我们会继续深度解析Camera的实例对象,上面说到的枚举用法也会在之后的章节中使用。如有任何疑问或想要进一步讨论,欢迎在评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/619898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【mmseg】‘SegDataPreProcessor is not in the model registry问题解决

问题描述: 在使用mmseg的模型进行推理导出为torchscript时出错: KeyError: "class EncoderDecoder in mmseg/models/segmentors/encoder_decoder.py: SegDataPreProcessor is not in the model registry. Please check whether the value of SegDat…

数据结构——排序算法之快速排序

个人主页:日刷百题 系列专栏:〖C/C小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 🌎欢迎各位→点赞👍收藏⭐️留言📝 ​ ​ 前言: 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法。 基本思想&…

设计模式-工厂方法模式

一 设计模式-工厂方法模式 工厂方法模式(Factory Method Pattern)是一种常用的类创建型设计模式,它属于对象的创建型模式,主要用来封装对象的创建过程。在该模式中,一个抽象工厂定义了一个接口用于创建产品对象&#x…

C++ 具名要求-全库范围的概念 - (Swappable) - (ValueSwappable)

此页面中列出的具名要求,是 C 标准的规范性文本中使用的具名要求,用于定义标准库的期待。 某些具名要求在 C20 中正在以概念语言特性进行形式化。在那之前,确保以满足这些要求的模板实参实例化标准库模板是程序员的重担。若不这么做&#xf…

opencv-4.8.0编译及使用

1 编译 opencv的编译总体来说比较简单,但必须记住一点:opencv的版本必须和opencv_contrib的版本保持一致。例如opencv使用4.8.0,opencv_contrib也必须使用4.8.0。 进入opencv和opencv_contrib的github页面后,默认看到的是git分支&…

NAS搭建NextCloud集成OnlyOffice

1、安装NextCloud(如果总是中断就换个镜像源) 2、创建容器 如果需要穿透选HOST 端口必须80 读写必须开 3、启动容器并配置,看图。 启动看日志,等启动完成再访问。首次启动大约5-10分钟左右。 成功后,我们正常进行安装…

学习selenium+python使用 XPath 表达式来实现找到目标元素时智能封装等待,执行测试代码启动Chrome浏览器后,地址栏只显示data;

背景 学习使用 XPath 表达式来实现找到目标元素时智能封装等待执行测试代码启动Chrome浏览器后,地址栏只显示data; 代码如下 import unittest from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from …

6.2 声音编辑工具GoldWave5简介(5)

6.2.4录制声音 利用Windows自带的“录音机”录制声音时,只能录制最大时长为1分钟的声音,而利用GoldWave5,可以录制时长长达277小时以上的声音,而且,录制完成后,还可以很方便地对声音进行处理、转换等操作。…

由jar包冲突导致的logback日志不输出

最近接手一个厂商移交的项目,发现后管子系统不打印日志。 项目使用的logback 本地断点调试发现logback-classic jar冲突导致 打出的war中没有 相关的jar 解决方法: 去除pom 文件中多余的 logback-classic 应用,只保留最新版本的。 重新打…

记录用python封装的第一个小程序

前言 我要封装的是前段时间复现的一个视频融合拼接的程序,现在我打算将他封装成exe程序,我在这里只记录一下我封装的过程,使用的是pyinstaller,具体的封装知识我就不多说了,可以参考我另一篇博客:将Python…

NLP技术在搜索推荐场景中的应用

NLP技术在搜索推荐中的应用非常广泛,例如在搜索广告的CTR预估模型中,NLP技术可以从语义角度提取一些对CTR预测有效的信息;在搜索场景中,也经常需要使用NLP技术确定展现的物料与搜索query的相关性,过滤掉相关性较差的物…

HashMap 为什么线程不安全?

如果你现在需要准备面试,可以关注我的公众号:”Tom聊架构“,回复暗号:”578“,领取一份我整理的50W字面试宝典,可以帮助你提高80%的面试通过率,价值很高!! JDK1.7 及之前…

函数指针和回调函数 以及指针函数

函数指针(Function Pointer): 定义: 函数指针是指向函数的指针,它存储了函数的地址。函数的二制制代码存放在内存四区中的代码段,函数的地址它在内存中的开始地址。如果把函数的地址作为参数,就…

力扣2182.构造限制重复的字符串

思路:先记录每个字符的出现次数,构建一个新字符串,从尾取字符,每取一个该字符个数-1,若该字符已经取到有repeatLimit个,则递归取次大的字符,并对应字符个数-1,若没有次大字符了&…

Elasticsearch基础篇(七):分片大小修改和路由分配规则

Elasticsearch基础篇(七):分片大小修改和路由分配规则1. 分片1.1 主分片(Primary Shard)1.2 副本分片(Replica Shard)1.3 分片路由(Routing Shard) 2. 分片分配的基本策略3. 分片写入验证3.1 数…

2024年前端最新面试题-vue3(持续更新中)

文章目录 前言正文什么是 MVVC什么是 MVVM什么是 SPA什么是SFC为什么 data 选项是一个函数Vue 组件通讯(传值)有哪些方式Vue 的生命周期方法有哪些如何理解 Vue 的单项数据流如何理解 Vue 的双向数据绑定Vue3的响应式原理是什么介绍一下 Vue 的虚拟 DOM介…

设计模式-- 3.适配器模式

适配器模式 将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 角色和职责 请求者(client):客户端角色,需要使用适配器的对象,不需要关心适配器内部的实现,…

IEEE论文LaTeX模板解析(十一)| 尾页栏目均衡(Last Page Column Equalization)

本文收录于专栏:IEEE论文LaTeX模板解析,本专栏将会围绕IEEE论文LaTeX模板解析持续更新。欢迎点赞收藏关注! 文章目录 IEEE 在最后一页平衡了各栏的长度。这种平衡是粗略的,因为参考文献或 IEEE 传记条目通常不会断开,…

Origin 或 Referer 的关系和区别

Origin 或 Referer 的关系和区别 Origin 和 Referer 都可以服务端用来做来源验证,来防止 csrf 攻击,都是浏览器自动带在请求头的但是,可以通过 Referrer Policy 来禁止请求携带 referer,【请求头增加字段 Referrer-Policy: no-ref…

TF-IDF(词频-逆文档频率)

文章目录 高频词只能说明词汇在评论中出现的频率高,但并不能说明这个词汇的重要性。利用关键词提取可以弥补这一不足,关键词提取是一种自动化的文本处理技术,它可以从一篇文章中自动抽取出最能代表文章主题和内容的若干个词语或短语。通常情况…