从零开始的图形学
概述前言由于实在觉得有必要细致、全面、通透地学习一遍图形学相关基础理论知识,于是开了这个坑。
但是,就我个人而言,该系列不会局限单纯的理论。目前的想法是,除开基础理论推导
会添加一些引擎中的原理和实现,games系列闫令琪老师101,202的作业,以及流行图形API规范如OpenGL的理论实践。
同时PBR,RTR等图形学进阶书籍阅读笔记也可能会不定期更新。
总的来说,理论性会更强,实验性的记录和学习也会占相当一部分,包罗图形学及其相关应用。个人的意义算是这个方向的笔记或“个人百科全书”。后续也会不断完善。
Overview of Computer Graphics这里借games101开个头
Why Study CG
Fundamental Intellectual Challenges:
Creates and interacts with realistic virtual world(与虚拟交互)
Require understanding of all aspects of physical world(了解物理世界)
New computing methods, ...
No title
Signal Processing在图形中,我们经常要处理具有连续变量的函数:一开始你只看到一张图像,但是随着你的探索,你将会看到更多。本质上,连续函数不能直接在电脑上表达,我们必须用优先的比特来表达他们。
最有用的方法之一是存储这个函数在不同点的值,然后在需要的时候进行重构。
你现在位置应该熟悉使用二维网格像素来表达图像,所以你已经见过一个采样的表现。
另一个关于sampled representation 的粒子是二维的数字化平板。
例如平板电脑,或者艺术家使用的数位屏。这种情况下,最原式的函数是数位笔的移动
(stylus数位笔触针手写笔)
…
Digital Audio : Sample in 1d即使sampled representation 已经用于电子交流很久了,激光唱片(compact disc)在1982年的引入,紧随着音频数字记录器的使用增长,在过去的10年里,是第一个高度可视的消费者应用采样。
…
Sampling Artifacts and Aliasing数字音频记录可以为sampling 和reconstruction处理更加具体的模型。
Aliasing ...
软链接c盘
软链接c盘
c盘文件链接到d盘,减小c盘占用
例如将C:\Program Files\Adobe链接到D盘
保证C盘没有该目录(通过剪切到D盘)
管理员身份打开cmd,输入以下软链接
mklink /D "C:\Program Files\Adobe" "D:\MySoftware\Adobe"
Unity Cache
参考(36条消息)
修改Unity的Cache缓存位置_GA博客的博客-CSDN博客_unity缓存
SP字体太小
QT_SCALE_FACTOR 1.3 用户变量
但是有副作用
Markdown
【Markdown笔记】设置字体颜色_markdown
字体颜色-CSDN博客
unityshader精要12
屏幕后处理
参考:
入门精要
Games101系列课程
上采样(UnSampling)
和 下采样(DownSampling)是啥? - 知乎 (zhihu.com)
URP下用RenderFeature实现高斯模糊
- 知乎 (zhihu.com)
多种模糊算法Unity中的模糊效果(基于URP)
- 知乎 (zhihu.com)
百人计划学习 图形
4.1 Bloom算法 游戏中的辉光效果实现 - 知乎 (zhihu.com)
URP
bloom(基于双重方框模糊) - 知乎 (zhihu.com)
unity
ShaderLab 基础之【像素混合Blend】Blend命令详解 shaderLab blend
blendOp透明度颜色混合_blend公式和效果-CSDN博客
顾名思义,在屏幕渲染完成后,制作特效等使得整体画面进一步提升艺术感。
onRenderImage属于抓取屏幕的函数,应用在所有透明和不透明渲染完成后(URP弃用)
PostEffectsBase.cs用于检验shader和material,并且通过脚本面板更改数据; ...
unityshader精要11
Chapter11-让画面动起来
纹理动画
1.序列帧动画
....
2.滚动背景
1234//frac函数返回标量或每个矢量中各分量的小数部分。return v - floor(v);o.uv.xy = TRANSFORM_TEX(v.texcoord,_MainTex) + frac(float2(_ScrollX,0.0)*_Time.y);o.uv.zw = TRANSFORM_TEX(v.texcoord,_DetailTex) + frac(float2(_Scroll2X,0.0)*_Time.y);//可以发现当x乘上一个小于1的值时,系数越小,呈现的图像结果会越稀疏
函数如下图
frac(float)等价上图
frac(float2())则等价于以圆心为原点,以这个点为起点的线为半径,每过v的长度,为一个周期。最后构成多重圆环。而横坐标
的倍率则影响密度。倍率大于1,噪声越大,间隔小,密度大。
如果渲染2d物体,可以将相机模式转换成正交模式
3.水波动画
由于本例中需要移动模型空间坐标,而批处理会使得相关模型合并,使得相关模型丢失原来模型空 ...
Computer Graphics 06
The Graphics Pipeline前面几章已经建立了所需的数学基础(scaffolding)
现在主要讨论第二种主要的rendering 方式。
—在屏幕上一个接着一个绘制物体,也即object order rendering
不同于ray tracing 的方式,通过像素找物体,现在会反过来通过物体找像素
**在一张被几何图元(geometric primitive)占满的图像上的所有像素的过程,称之为rasterization(光栅化)**,所以object order rendering也称之为光栅化渲染
而实现这一操作的操作序列,称之为图形渲染管线,graphics pipeline
这种方法的成功,来源于它的效率。
对于大型场景,对数据存储模式的管理 是至关重要的操作。而且制作一个整个场景的通道来访问几何的每一个bit一次,比重复地搜索场景来检索所需的场景更加有有时。
object-order rendering不只有一种方法。
hardware 硬件pipeline使用OpenGL,Direct3D等API
software pipeline使用鱼电影制作,提供了像 ...
Computer Graphics 05
ViewingViewing Transformations视角变换用于映射3d位置。
它是一头复杂的野兽,依赖于包括相机坐标、orientation(取向),投影的类型,视角的区域,和图片的清晰度(resolution);
它是通过几个简单变换点乘获得
相机变换(camera/eye transformation)
投影变换(projection transformation)
视口(窗口)变换(viewport transformation)
模型空间->世界空间->相机空间->规范化视线空间->屏幕空间
The Viewport Transformation假设我们想要看到的几何体在规范的视图体积空间(canonical view volume)
然后我们想要在z轴方向用**正交(orthographic)**相机观察
canonical view volume(规范视图空间)是一个包含了所有3d坐标的正方体,这些坐标
在笛卡尔坐标系(cartesian coordinates)中处于(-1,1)之间
我们将x = -1投射到屏幕的左边,y = ...
Event System
Event System方法1:两个文件
EventManager
EventManager
用法
使用interface IEventListener注册事件,卸载事件
注册具体方法使用AddEventListener,卸载使用RemoveEventListener
如果需要传多个参数,需要适当更新文件具体代码
综述
一件事情会有可能会有许多反馈,每当我们要检测一个事件,首先注册这个事件,不断+=添加方法(反馈),这些都在start(awake)之类中进行,等到游戏结束再取消订阅。
包含一个static EventManager instance;单一实例并用于外部访问成员数据和方法
包含一个interface IEventInfo用于外部多态地实现方法
包含一个字典Dictionary<string,IEventInfo> actionDic 用于存储事件,可以理解成”事件池”
包含类EventInfo<T>继承自上述接口,用于添加单参数方法
包含添加、移除、触发事件
方法2:文件
EventHandler
原理与方法一是一样的,使用方法也大差不差。 ...
unityshader精要8
Chapter8 透明效果
实现透明的方法
unity中通常使用两种方式实现透明效果
1.透明度测试(alpha test),(无法实现真正的半透明)
2.透明度混合(alpha blending)
使用深度测试,可以不考虑渲染顺序,但是使用透明度混合时,需要关闭ZWrite,关闭了深度写入
虽然透明度测试不需要关闭,但是它的机制是如果透明度不满足某个阈值(通常小于),直接舍弃该片元。
为什么关闭ZWrite?
由于深度测试丢弃远处被遮挡部分,但是透明物体的机制是"可以透过并看见远处的物体"。
关闭了ZWrite,渲染顺序则成了问题。
流程
1.渲染时,会进行深度测试,如果先渲染后面的不透明b,将b写入颜色缓冲和深度缓冲;然后渲染前面的透明a,a写入颜色缓冲,会发生透明混合,显示正确。
2.如果先渲染a,进行深度测试,写入颜色缓冲,但是关闭了ZWrite,无法写入深度值,然后渲染b,写入深度值,写入颜色缓冲,b的颜色覆盖a,只能看见b。
3.半透明物体之间亦然。
Alpha Test
Unity Shader解决方案为SubShader 中的Tag ...
Computer Graphics 04
Surface Shading渲染3d场景时,无论使用ray tracing还是rasterization,在实时还是在批处理中,着色是对视觉效果影响
最大的过程之一
本章描述基于点光源照射的不透明表面基本着色模型。
Point source illumination点光源包括position,intensity
点光源有isotropic(各向同性)
the irradiance E is E = P/4PI * 1/pow(r,2)
the quantity I = P/4PI,是光强(amount of light),后者是factor
更普遍地,E = I * cos(theta) / pow(r,2),其中cos(theta) = n * l
Directional illumination不同于点光源,由于方向光是由很远的点光源产生,这就导致I/(r^2)的占比很小,这里设为一个常数H
E = H * cos(theta)
其中常量H被称为法向辐射(normal irradiance)
Basic reflection models现在可以计算辐射度(irradi ...