STL标准库
一、通用容器操作以下操作基本适用于所有容器
size ()的返回值为 size_type 类型,比如 string. size ()返回值为 string:: size_type 类型,值得一提的是 string[x]的下标 x 也为 string:: size_type 类型。
容器定义和初始化
将一个容器初始化为另一个容器的拷贝将一个容器初始化为另一个容器的拷贝的方法有两种:
直接拷贝整个容器(两容器类型及元素类型必须相同)
拷贝迭代器指定的元素范围(不要求类型相同,只要能进行类型转换即可,我们称之为相容)123456789//每个容器有三个元素,用给定的初始化器进行初始化list<string> authors = {"Milton" , "Shakespeare", "Austen"};vector<const char*> articles= { "a", "an", "the" };/ ...
Latex语法
LaTeX 中文手册 (1024th.github.io)
0 常见插入公式$\LaTeX$ 的数学公式有两种:行中公式和行间公式。行中公式放在文中与其它文字混编,独立公式单独成行。
行中公式:$ function $$function$
行间公式:$$ function $$$$function$$
功能符号{ }:单个模块{\rm d} 和\mathrm{d}等价:将括号内的字母由数学斜体变为正体\textstyle:让公式以行内公式格式显示\displaystyle:让公式以行间公式的格式排版,可以防止压扁\stackrel:多行极限\tag{1}:放在公式末尾,给公式编号
1 函数、符号及特殊字符标准函数指数
\exp_a b = a^b, \exp b = e^b, 10^m
${\displaystyle \exp _{a}b=a^{b},\exp b=e^{b},10^{m}}$
对数
\ln c, \lg d = \log e, \log_{10} ...
Unity GUI
九宫格 UI 理论相对屏幕位置 ScreenPos:widgetPos. x = ScreenPos + widgetCenterPos + offsetPos;
控件中心点位置 widgetCenterPos:cw 是控件自身的宽度ch 是控件自身的高度
最后通过操作偏移位置 offset 来摆放 UI
GUI1 原理及作用IMGUI (Immediate Mode Graphical User Interface)即时模式图形化交互界面IMGUI 在 Unity 中一般简称为 GUI,它是一个代码驱动的 UI 系统
作用:
作为程序员的调试工具,创建游戏内调试工具
为脚本组件创建自定义检视面板
创建新的编辑器窗口和工具以拓展 Unity 本身(一般用作内置游戏工具)
用于进行 Unity 内置编辑器,调试工具编辑工具等等相关开发,不适合用它为玩家制作 UI 功能
GUI 的工作原理:在继承 MonoBehaviour 的脚本中的特殊函数里,调用 GUI 提供的方法,类似生命周期函数。
1234private void OnGUI(){ }
...
全局光照GI
全局光照是增强真实感的重要部分, 因此也是十分复杂的一部分.
从下图中我们会发现, 没有任何一处是全黑的看不见东西的, 比如书本的下方, 蜡烛内部等. 也就是光线 bounce 了很多次才到达我们的眼里, 在 GAMES101 中我们在布林冯模型中, 假设 ambient 项, 认为来自四面八方的间接光照都是相同的, 且最后的 shading 和 normal 是无关的, 这样得到的结果是十分不真实的。图中的全局光照就不能这么假设了, 大家可以看到书本下方各位置的亮度不同, 还可以看到一些焦散等从金属球反射出的间接光, 他们之间是不一样的, 如果还做 Ambient 项项那种假设从而只提升了一点亮度是无法得到图中的结果的.
在实时渲染中, 全局光照是比直接光照多一次光线弹射的间接光照
如图中, 光线弹射两次, 先打到红色的墙壁上, 在达到 box 面上, 最后被 camera/eye 看到, 这就是在 rtr 中要解决的所谓的 “全局光照”.
我们希望他:①简单 -> 实现起来不麻烦②快速 -> 因为全局光照非常难算
实时 GI(图像空间)为什么说是图像空间:因 ...
深度法线纹理
深度平台差异裁剪空间深度值裁剪空间坐标(也称为投影后空间坐标)在 Direct3D 类和 OpenGL 类平台之间有所不同:
Direct3D :裁剪空间深度 Z值为 $[1,0]$。
OpenGL:裁剪空间深度 Z 值为 $[-1, 1]$。
在着色器代码内,可使用内置宏 UNITY_NEAR_CLIP_VALUE 来获取基于平台的近平面值。UNITY_NEAR_CLIP_VALUE 定义为近剪裁平面的值。 Direct3D 为 1.0,OpenGL 为–1.0
在脚本代码内,使用 GL.GetGPUProjectionMatrix 将 Unity 的坐标系(遵循 OpenGL 类约定)转换为 Direct3D 类坐标(如果这是平台所期望的)。
深度 (Z) 方向
[!hint] 现代平台 :使用了 [[06 深度测试#^9bb785|Reversed direction技术]],相比传统平台翻转了 Z 值DirectX 11,DirectX12,PS4,Xbox One,和 Metal:
裁剪空间的 Z 值范围是 $[near,0]$(near 表示近平面距离,在远 ...
【图形系统03】光照模型
[!tip] 约定约定L 光照方向N 法线方向V 视角/相机观察方向T 切线方向H 半角向量
这些向量为世界空间下的向量且是单位向量
着色 shading
[!NOTE] RTR4 中关于术语 “着色”(Shading),“着色器”(Shader)及相关的词汇的解释遵循公认的计算机图形学用法,在本书中,术语 “着色”(Shading),“着色器”(Shader)及相关的词汇用于指两个不同但相关的概念:
着色(Shading):是计算机生成的视觉外观(例如,“着色模型 Shading Model”,“ 着色方程 Shading Equation”,“卡通着色 Toon Shading”)
着色器(Shader):是渲染系统的可编程组件(例如 “顶点着色器 Vertex Shader”,“着色语言 Shading Language”)。
定义shading 指的是根据材质属性(如漫反射属性等)、光源信息(如光源方向、辐照度等),使用一个等式去计算沿某个观察方向的出射度的过程。笼统地说是将材质应用到对象的过程这个等式称为光照模型(Lighting Mode)
着色方式 s ...
【图形系统05】模板测试
1 理解 Stencil Buffer引例stencil 是印刷工业中的版面模子,模子上抠出需要的图案,然后将模子盖在要被印刷的材质上,对洞涂或喷绘颜色。
如果将屏幕上所有像素想象成一串连续的 0 组成的矩形,那么 stencil buffer 的作用就是将某些 0 变为 1,2,3 … 255,在每个 pass 中可以决定只渲染某个特定 stencil 值的像素并抛弃对其他非该值像素的操作,就像一块模板一样扣住了所有像素,并只对当前 stencil 值的洞洞进行喷绘。
左图为颜色缓冲区中的一张图,在模板缓冲区中我们会给这张图的每一个片元分配一个 0-255 的数字(8 位,默认为 0)
中、右图可以看到,我们修改了一些 0 为 1,通过自定义的一些准则,如输出模板缓冲区中 1 对应的片元的颜色;0 的不输出,最后通过模板测试的结果就如右图所示。
模板测试效果举例
①传送门效果:可以看到左边传送门内的景象正是右侧的场景
②Minions 讲解的一些效果,例如 3D 卡牌效果、侦探镜效果等
大佬链接:https://www.patreon.com/posts/14832618
...
【图形系统01】渲染管线
[!NOTE]本文是对 RTR4 和龙书渲染管线部分内容的总结
1 概述关于Pipleline当我们谈到管线时,我们指的是一个由多个阶段组成的过程,每个阶段都完成任务的一部分。在现实世界中,流水线的概念在许多不同的领域中都有应用,比如工厂的生产线和快餐厅的厨房等。
管线的各个阶段都是平行的,这意味着各个阶段依次依赖于上一个阶段的输出。理想情况下,将一个非管道系统划分为 n 个流水线阶段可以提供 n 倍的加速。这种性能提升是使用流水线的主要原因。
例如,一系列人可以快速准备大量的三明治,其中一个人负责准备面包,另一个人添加肉,另一个人添加浇头。每个人将结果传递给排队的下一个人,立即开始制作下一个三明治。如果每个人完成任务需要 20 秒,那么每 20 秒可以制作三个三明治。
管线的速度取决于管线中最慢阶段的速度,最慢的阶段被称为**瓶颈 (bottleneck)**。此时,其他的阶段会等待瓶颈的工作完成,称其他阶段此时处于 starved 状态。因此,优化管线中最慢的阶段可以提高整个管线的性能。
混乱的翻译
[!NOTE] Pipeline 的翻译Pipleline 也叫流水线,图形渲 ...
【图形系统06】深度测试
总结
Unity 中的渲染顺序:
按 shader 指定的渲染队列顺序:Background—>Geometry (默认队列)—>AlphaTest—>Transparent—>Overlay
不透明物体队列内的渲染顺序:从前往后
透明物体队列内的渲染顺序:从后往前
Unity 中的默认条件:
ZWrite:On
Z-Test:LessEqual
渲染队列:Geometry(2000)
通过对 ZWrite 和 Z-Test 的相互组合配置来控制半透明物体的渲染(关闭深度写入,开启深度测试,透明度混合)
深度缓冲区中存储的深度值为 $[0,1]$ 的非线性值,所以在 Fragment Shader 中操作 Depth Buffer 的时候,比如制作雾效、深度可视化等,一定先将 z 变换到线性空间。[[03 深度法线纹理#非线性转线性]]
1 深度和 ZBuffer概念
首先先了解一下模型在渲染管线中的几次空间变换
模型一开始所在的模型空间:无深度。
通过 M 矩阵变换到世界空间,此时模型坐标已经变换到了齐次坐标(x,y,z,w):深度存在 z ...
【图形系统08】透明
[!error] 渲染管线的差异由于 URP 管线不适用多 pass,一些在 Built-in 中的双 pass 的实现都可以用单 pass 实现。具体原因,还不清楚。有待学习
1 Unity 渲染顺序在 Unity 中,渲染顺序是根据以下参数依次按条件先后顺序进行排序渲染处理。先按上层条件排序,如上层条件相同,则进入下层条件牌序,最终分出先后
**Camera Depth > Render Queue 大于还是小于等于 2500 > Sorting Layer > Order in Layer > Render Queue > Camera order algorithm
Camera Depth:值越小越优先渲染,优先渲染可能会被覆盖
Render Queue <= 2500:视为不透明物体
按照 Sorting Layer / Order in Layer 设置的值,越小越优先。若无此属性,等同于 Sorting Layer = default,Order in Layer = 0 参与排序
Re ...