US2S1L17——透视投影变换
US2S1L17——透视投影变换
透视投影变换
获取透视投影的摄像机重要参数
Near:近裁剪面离摄像机的距离
Far:远裁剪面离摄像机的距离
FOV(Field of View):决定视锥开口角度
Aspect:屏幕宽高比
近裁剪面
近裁剪面高=2×Near×tan(FOV2)近裁剪面高 = 2 \times Near \times \tan(\frac{FOV}{2})近裁剪面高=2×Near×tan(2FOV)
近裁剪面宽=Aspect×近裁剪面高=Aspect×2×Near×tan(FOV2)近裁剪面宽 = Aspect \times 近裁剪面高 = Aspect \times 2 \times Near \times \tan(\frac{FOV}{2})近裁剪面宽=Aspect×近裁剪面高=Aspect×2×Near×tan(2FOV)
远裁剪面
远裁剪面高=2×Far×tan(FOV2)远裁剪面高 = 2 \times Far \times \tan(\frac{FOV}{2})远裁剪面高=2×Far×tan(2FOV)
远裁 ...
US2S1L16——正交投影变换
US2S1L16——正交投影变换
正交投影变换
获取正交投影的摄像机重要参数
Size:视锥体竖直向上高度的一半
Near:近裁剪面离摄像机的距离
Far:远裁剪面离摄像机的距离
Aspect:屏幕宽高比
远近裁剪面的高 = 2⋅Size2 \cdot Size2⋅Size
远近裁剪面的宽 = 2⋅Aspect⋅Size2 \cdot Aspect \cdot Size2⋅Aspect⋅Size
正交投影变换到裁剪空间的矩阵:
将视锥体中心位移到观察空间原点中心
将长方体视锥体的x,y,zx,y,zx,y,z坐标范围映射到(-1,1)长宽高为2的正方体中
得到了最终的变换矩阵:
(1Aspect×Size00001Size0000−2Far−Near−Near+FarFar−Near0001)\begin{pmatrix}
\frac{1}{Aspect \times Size} & 0 & 0 & 0 \\
0 & \frac{1}{Size} & 0 & 0 \\
0 & 0 & -\fra ...
US2S1L14——齐次裁剪空间
US2S1L14——齐次裁剪空间
视锥体
在渲染管线中,顶点、法线等相关模型数据会经过以下的空间变换(详见:US2S1L10——坐标空间的变换)
模型空间 → 世界空间 → 观察空间 → 裁剪空间 → 屏幕空间
通过之前的学习,我们已经可以将相关数据在 模型空间 → 世界空间 → 观察空间 之间进行变换
我们知道观察空间也被称为摄像机空间,此时获取到的顶点等数据都是基于摄像机空间中的数据表达,
而摄像机中有一个非常重要的概念,就是视锥体。
摄像机的视锥体是在三维空间中表示摄像机可见区域的虚拟体积,它类似一个六面体的形状,根据摄像机的属性和投影方式而定。
视锥体定义了摄像机在场景中能够看到的物体区域,超出这个区域的物体将在渲染时被裁减掉,从而提高渲染性能。
透视投影摄像机(视锥体形似金字塔,一般3D游戏使用)
透视投影摄像机(视锥体形似立方体,一般横板2D游戏使用)
视锥体主要包含几种重要部分:
远近裁剪平面
左、右、上、下裁剪平面
透视投影中,视锥体类似一个金字塔形状,远裁剪面比近裁剪面大,所以产生透视效果,也就是近大远小
正交投影中,视锥体类似于长方体 ...
US2S1L13——观察空间变换
US2S1L13——观察空间变换
知识回顾
在渲染管线中,顶点、法线等相关模型数据会经过以下的空间变换
模型空间 → 世界空间 → 观察空间 → 裁剪空间 → 屏幕空间
上节课学习的模型空间变换主要指的就是
模型空间 → 世界空间 的变换,我们称之为 模型空间变换
坐标空间变换规则一般有两种
方式一:通用的坐标空间变换规则(存在缩放时,轴向单位向量*缩放因子)
方式二:认为一开始模型坐标空间和世界坐标空间重合,模型发生缩放、旋转、平移变换时,模型空间下的点和向量也应该发生相同的变换
观察空间的意义
观察空间就是摄像机的模型空间,它决定了渲染的视角和视野
观察空间(view space) 也被成为 摄像机空间(camera space)
观察空间可以认为是一个特殊的模型空间,这里的模型指的是场景中的摄像机,
摄像机可以认为是一个非常特殊的模型,它不可见,但是它可以决定我们在屏幕上看到的内容,
因此我们将摄像机的模型空间单独提出来讨论和学习,并将它称为观察空间。
观察空间的主要意义是摄像机决定了渲染的视角和视野
注:这里的图标和线是Scene窗口的标记,实际游 ...
US2S1L12——模型空间变换
US2S1L12——模型空间变换
模型空间变换
模型空间的意义
模型空间的主要意义是方便我们建模,模型的顶点等数据都是基于模型空间表达的。
模型空间变换指什么
将模型空间中的点或向量通过矩阵乘法计算,变换为相对于世界坐标空间下数据
如何进行模型空间变换
方法一:
认为一开始模型坐标空间和世界坐标空间重合,模型发生缩放、旋转、平移变换时
模型空间下的点和向量也应该发生相同的变换
方法二:
用上节课学习的坐标变换规则进行计算,如果存在缩放,直接用轴向单位向量乘以对应轴缩放因子
模型空间的意义
模型空间(model space)也被称为对象空间(object space)或局部空间(local space)
它一般指3D模型的局部坐标系,每个模型都有自己独立的坐标空间,
模型空间的主要意义是方便我们建模,模型的顶点等数据都是基于模型空间表达的。
注意:在Unity中当模型移动或旋转时,模型空间坐标系也会随着变换,因为此时的模型坐标空间是世界坐标空间的子空间
模型空间中的注意事项
在模型空间中,我们一般会有 上、下、左、右、前、后 六种方向概念
Unity使用的是左 ...
U4S4L22——常见问题总结
U4S4L22——常见问题总结
用多包策略还是大包策略?
AB包太多(太小)的问题
每个包都会有内存开销,如果加载过多的包可能会带来更多的内存消耗
并发下载的问题,如果包小而多,意味着下载包时可能需要更多的时间
目录文件会因为过多的包而变大,因为它要记录更多的包信息
复用资源的可能性更大,比如多个包使用同样一个资源,但是该资源不是寻址资源,那么在每个包中都会有该资源
AB包太少(太大)的问题
过大的包如果下载失败,下次会重新下载,因为使用UnityWebRequest下载包时不会恢复失败的下载
比如100MB的包,下了50MB,玩家中断下载了,下次又得重新下
能单独加载,但是不能单独卸载,更大的包意味着包中有更多资源,比如加载了1个大包中100个资源
但是现在用完了99个,还剩一个再用,即使99都卸载了,
但是由于引用计数这个大包也不会卸载,就会造成内存的浪费
所以没有最好的策略,只有根据自己的项目需求合理安排分组打包
要根据资源的使用情况来合理设置资源分组,在分组时权衡好各方面的问题
哪种压缩方式更好?
AB包的压缩方式:不压缩、LZ4、LZMA
一般情况LZ4 ...
U4S4L21——构建布局报告
U4S4L21——构建布局报告
构建布局报告
构建布局报告提供了有关可寻址资源的构建打包的详细信息和统计信息,包括
AB包的描述
每个资源和AB包的大小
解析作为依赖项隐式包含在AB包中的不可寻址资源
AB包的依赖关系
我们可以通过查看报告文件获取这些信息
如何查看构建布局报告
启用调试构建布局功能
Edit > Preferences > Addressables
启用Debug Build Layout
只要我们构建打包可寻址资源后,就可以在Library/com.unity.addressables/文件夹中找到buildlayout.txt文件
构建布局报告的内容
内容中主要包含:
Summary:摘要信息(包括AB包数量、大小等等)
Group 包名:每组相关信息(哪些资源,几个包,包大小等等)
BuiltIn Bundles:依赖相关信息
U4S4L20——分析窗口
U4S4L20——分析窗口
分析窗口
分析窗口是一种收集项目可寻址布局信息的工具,它是一种信息工具,可以让我们对可寻址文件布局做出更明智的决定
分析窗口对于我们来说也很有用,当我们打包后,我们可以通过分析窗口工具
分析AB包中的资源分布是否合理,根据分析结果自己处理一些潜在问题
打开分析窗口
Window > Asset Management > Addressables > Analyze
Addressabeles Groups > Window > Analyze
使用分析窗口
上方的三个按钮
Analyze Selected Rules:分析选定的规则,在下方选择一个规则后,点击该选项,分析规则就会出现内容
Clear Selected Rules:清除选定规则
Fix Selected Rules:修复选定规则,对于Fixable Rules:可修复的规则,点击该按钮可以自动修复问题
下方的内容
Analyze Rules:分析规则
Fixable Rules:可修复的规则(提供了分析和 ...
U4S4L19——事件查看窗口
U4S4L19——事件查看窗口
事件查看窗口
使用可寻址事件查看窗口可以监视可寻址资源的资源内存管理,该窗口:
显示应用程序何时加载和卸载资源
显示所有可寻址系统操作的引用计数
显示应用程序帧率和分配的内存总量近似图
我们可以通过它来检查可寻址资源对性能的影响,并检查没有释放的资源
事件查看窗口对于我们来说很有用,我们可以通过它来排查内存泄露相关的信息
比如场景中对象都被移除了,但是事件查看窗口中还有AB引用相关的信息,那证明存在内存泄露
可以排查加载和释放是否没有配对使用
打开事件查看窗口
注意:使用事件查看窗口的前提要打开AddressablesAssetSettings配置文件中的事件发送开关
Window > Asset Management > Addressables > Event Viewer
Addressabeles Groups > Window > Event Viewer
事件查看窗口使用
注意:在使用事件查看窗口前,如果使用的是真实打包模式来测试,事件查看窗口可能是不生效的,则必须要重新打包一 ...
U4S4L18——引用计数规则
U4S4L18——引用计数规则
引用计数规则
当我们通过加载使用可寻址资源时,Addressables会在内部帮助我们进行引用计数
使用资源时,引用计数+1
释放资源时,引用计数-1
当可寻址资源的引用为0时,就可以卸载它了
为了避免内存泄露(不需要使用的内容残留在内存中不释放),我们要保证**加载资源和卸载资源是配对使用的**
注意:释放的资源不一定立即从内存中卸载,在卸载资源所属的AB包之前,不会释放资源使用的内存
(比如自己(某个资源)所在的AB包被别人(另一个资源)使用时,这时AB包不会被卸载,所以自己(某个资源)还在内存中)
我们可以使用 Resources.UnloadUnusedAssets 卸载资源(建议在切换场景时调用)
AB包也有自己的引用计数(Addressables把它也视为可寻址资源)
从AB包中加载资源时,引用计数+1
从AB包中卸载资源时,引用计数-1
当AB包引用计数为0时,意味着不再使用了,这时会从内存中卸载
总结:Addressables内部会通过引用计数帮助我们管理内存,我们只需要保证 加载和卸载资源配对使用 即可
举例说明引用计数
我们创 ...