- 博客(52)
- 收藏
- 关注
原创 LearnOpenGL——SSAO学习笔记
SSAO是一项屏幕采样技术,由于我们没有物体的几何信息,我们就需要将每个片元的几何数据渲染成屏幕空间的纹理,然后将这些纹理发给SSAO着色器,这样就可以访问每个片元的几何数据。shaderSSAO的片元着色器,会接受G-Buffer中的数据,也接受噪声纹理和法向半球核心样本作为输入参数,最终结果是一个灰度值,表示当前片段的遮蔽程度。由于平铺的随机向量纹理保持了一致的随机性,我们可以使用这一性质来创建一个简单的模糊着色器:对当前像素和其邻近像素进行采样,并计算加权平均值来代替当前像素的值。
2024-08-21 22:18:31
886
原创 LearnOpenGL——延迟渲染学习笔记
我们之前使用的一直是,指的是在场景中根据所有光源照亮一个物体,之后再渲染下一个物体。对程序性能影响很大,因为对于每一个需要渲染的物体,而且还有一部分被渲染的片段会被覆盖遮挡,造成浪费。
2024-08-21 15:05:11
1098
原创 LearnOpenGL——HDR、Bloom学习笔记
色调映射(Tone Mapping)是一个损失很小的转换浮点颜色值至我们所需的LDR[0.0, 1.0]范围内的过程,通常会伴有特定的风格的色平衡(Stylistic Color Balance)。默认的帧缓冲默认一个颜色分量只占用8位,当使用32位每颜色分量的浮点帧缓冲时,就相当于要4倍的内存,所以除非非常高的精度,一般16够用。高斯模糊基于高斯曲线,高斯曲线通常被描述为一个钟形曲线,中间的值达到最大化,随着距离的增加,两边的值不断减少。我么可以通过MRT,在单独的一个渲染pass中提取两张图片。
2024-08-21 11:20:07
987
原创 LearnOpenGL——法线贴图、视差贴图学习笔记
我们将观察方向变化到切线空间中,所以P向量的x和y分量会与表面切线和副切线对齐,由于切线和副切线向量与表面纹理坐标的方向相同,我们可以用P的x和y元素作为纹理坐标的偏移量。目前,如果我们让平面竖直面对我们,此时效果正常,因为法线贴图中的法线方向指向z正方向并且平面的法线也指向z轴正方向。将法线向量的x、y、z元素储存到纹理中,代替颜色的r、g、b元素,因为法线向量的范围在[-1,1],所以我们要先将其映射到[0,1],变换为RGB颜色元素。法线向量从z轴方向也有向其他方向的偏差,颜色也就发生了轻微的变化。
2024-08-19 15:26:16
1548
原创 LearnOpenGL——点光源阴影笔记
为了把值渲染到深度立方体贴图,我们将需要3个着色器:顶点和像素着色器,以及一个它们之间的几何着色器。点光源发出的光线向四面八方扩散,对于ShaderCalculation函数,与普通的阴影计算不同,我们将fragment的光空间位置换成了fragment的位置,我们将使用一个方向向量来采样立方体深度贴图。我们创建了6个视图矩阵,把它们乘以投影矩阵,来得到6个不同的光空间变换矩阵。使用这些着色器渲染场景,立方体贴图附加的帧缓冲对象激活以后,你会得到一个完全填充的深度立方体贴图,以便于进行第二阶段的阴影计算。
2024-08-17 16:18:15
772
原创 LearnOpenGL——阴影映射
因为我们渲染的是深度贴图(黑白灰),所以颜色缓冲没啥用,所以我们将调用glDrawBuffer和glReadBuffer把读和绘制缓冲设置为GL_NONE,告诉OpenGL我们不适用任何颜色数据进行渲染。图片每个斜坡代表深度贴图一个单独的纹理像素,有些在地板上面,有些在地板下面,这样我们所得到的阴影就有了差异。深度贴图是从光的透视图里渲染的深度纹理,用它计算阴影。光的视锥不可见的区域一律被认为是处于阴影中,不管它真的处于阴影之中,发生这种情况的原因是我们之前将深度贴图的环绕方式设置成了GL_REPEAT。
2024-08-17 14:41:13
1006
原创 LearnOpenGL——Blinn-Phong模型光照、伽马矫正
Gamma矫正就是在显示到显示器之前加一个Gamma2.2的倒数Gamma0.45进行矫正。我们在颜色显示到显示器的时候把每个颜色输出都加上这个翻转的Gamma曲线,这样应用了显示器Gamma以后最终的颜色将会变为线性的。举个例子,我们想要将暗红色0.50.00.00.50.00.0显示在屏幕上,线性的颜色显示出来相当于降低了2.2次幂的亮度,即0.50.00.02.20.2180.00.00.50.00.02.20.2180.00.0,亮度会减弱。
2024-08-16 14:26:12
994
原创 【IMR、TBR、TBDR】【RenderTexture、Cbuffer】学习
在渲染过程中,一开始的纹理是存储在CPU的,称为client-side的texture;它最终要被送到gpu的存储里,gpu才能使用它进行渲染,送到gpu里的那一份被称为server-side的texture。CPU和GPU之间纹理的传输需要考虑带宽瓶颈。
2024-08-15 16:31:32
1890
原创 LearnOpenGL——几何着色器、实例化
在顶点着色器和片元着色器之间还有一个可选的几何着色器,几何着色器输入的是一个图元(点或者三角形)的一组顶点,几何着色器可以在片元着色器之前对它们进行随意变化,可以变换为不同的图元,也可以生成更多的顶点。我们需要声明从顶点着色器输入的图元类型——在in前面加一个布局修饰符(如下),如果我们要绘制三角形,就将修饰符修改为triangles,括号内的数字表示的是一个图元所包含的最小顶点数。几何着色器,会接收每一个顶点(包括一个位置向量和一个法向量),并在每个位置向量处绘制一个法线向量。
2024-08-15 11:29:55
1110
原创 LearnOpenGL——高级数据、高级GLSL
当从文件中加载数据时,得到的会是分类好的数据数组,比如会得到三个数组position[]、normal[]、texture[],而不是像我们之前使用的交错的数据数组123123123这样的。目前对于一个个uniform变量,我们还需要一个个来设置,我们可以使用Uniform缓冲对象的工具。我们能够选用的其中一个图元是GL_POINTS,每个顶点都是一个图元,都会被渲染为一个点,我们可以使用float类型的变量gl_PointSize来调整渲染出来的点的大小(可以在顶点着色器中修改这个值)。
2024-08-12 14:21:48
1110
原创 LearnOpenGL——帧缓冲、立方体贴图
如果你想将你的屏幕渲染到一个更小或更大的纹理上,你需要(在渲染到你的帧缓冲之前)再次调用glViewport,使用纹理的新维度作为参数,否则只有一小部分的纹理或屏幕会被渲染到这个纹理上。由于渲染缓冲对象通常都是只写的,它们会经常用于深度和模板附件,当我们不需要从这些缓冲中采样的时候,通常都会选择渲染缓冲对象,因为它会更优化一点。,附件是一个内存位置,作为帧缓冲的其中一个缓冲,可以想象为一张图片。当把一个纹理附加到帧缓冲的时候,所有的渲染指令将会写入到这个纹理中,就像它是一个普通的颜色/深度或模板缓冲一样。
2024-08-10 21:37:39
1009
原创 Unity URP 曲面细分学习笔记
学百人时遇到了曲面着色器的内容,有点糊里糊涂,于是上知乎找到了两篇大佬的文章和,本文只是自己做学习记录使用。
2024-08-10 15:41:58
2125
原创 LearnOpenGL-深度测试与模板测试
它会与将要写入缓冲的模板值进行与(AND)运算。默认情况下设置的位掩码0xFF所有位都为1,不影响输出,但如果我们将它设置为0x00,写入缓冲的所有模板值最后都会变成0.这与深度测试中的glDepthMask(GL_FALSE)是等价的。深度缓冲包含了一个介于0.0和1.0之间的深度值,观察空间的z值可能是投影平截头体的近平面(Near)和远平面(Far)之间的任何值。深度缓冲像颜色缓冲一样,在每个片段中存储了信息,并且有一样的宽度高度,都是由窗口自动创建的,在大部分系统中,深度缓冲的精度都是24位。
2024-08-08 15:11:43
1067
原创 LearnOpenGL-光照章节学习笔记
环境光照(Ambient Lighting)、漫反射光照(Diffuse Lighting)和镜面光照(Specular Lighting)。通过为每个分量指定一个颜色,我们就能够对表面的颜色输出有细粒度的控制了。在片段着色器中,我们创建一个结构体(Struct)来储存物体的材质属性。
2024-08-06 19:20:48
1112
原创 LearnOpenGL-入门章节学习笔记
OpenGL一般被认为是图像API,其本身并不是API,而是由Khronos组织制定并维护的规范。实际的OpenGL库的开发者通常是显卡的生产商。
2024-08-05 22:07:00
2227
原创 Chapter18 基于物理的渲染——Shader入门精要学习
计算BRDF时,入射方向 l 和 出射方向 v 都会被给定,只有一部分微面元反射的光线会进入我们眼睛中,即它们的法线 m 等于 l 和 v 的一半,即半程向量 h;Unity创建模型或者材质时,默认着色器都是一个名为Standard 的着色器——基于物理的渲染。:假设漫反射在所有方向上的强度都是相同的,而BRDF要求半球内的积分值为1。光是一种电磁波,由光源射出,与场景中的物体相交,一部分被。真实可信的渲染效果,我们需要为场景中的物体指定合适的材质。值是非负的标量,决定了高光区域的大小、亮度和形状。
2024-07-23 21:37:01
1097
原创 Chapter17 表面着色器——Shader入门精要学习
Unity内置了基于物理的光照模型函数 Standard 和 StandardSpecular( UnityPBSLighting.cginc),以及简单的非基于物理的光照模型函数 Lambert 和 Blinn-Phong(Lighting.cginc):#pragma surface 用于指明该编译指令是用于定义表面着色器的,后面需要指明表面函数(surfaceFunction)和光照模型( lightMode),以及一些可选的参数。的函数(名字可以任意),格式是固定的。
2024-07-23 11:00:37
853
原创 Chapter16 渲染优化技术——Shader入门精要学习笔记
超过设定值的 Shader 将不会被渲染,可以在 SubShader 中设置 LOD 值,或使用 Shader.maximumLOD 或 Shader.globalMaximumLOD 设置允许的最大 LOD 值。对于逐像素的光源来说,被这些光源照亮的物体需要再被渲染一次,还不能使用批处理操作(额外的Pass无法批处理)对于半透明物体来说,由于没有开启深度写入,从后往前渲染——几乎一定会造成overdraw。由于深度测试,物体都是从前往后绘制的,很大程度上减少了overdraw。
2024-07-22 14:25:20
1040
原创 Chapter13 深度和法线纹理——Shader入门精要学习笔记
【代码】Chapter13 深度和法线纹理——Shader入门精要学习笔记。
2024-07-18 21:51:54
1125
原创 Chapter12 屏幕后处理效果——Shader入门精要学习笔记
概念:在渲染完整个场景得到屏幕图像后,再对这个图像进行一系列操作,实现各种屏幕特效。
2024-07-17 22:43:21
901
原创 Games101学习笔记 Lecture 18: Advanced Topics in Rendering
Lecture 18: Advanced Topics in Rendering一、高级光照传输1.无偏方法 Unbiased①双向路径追踪 BDPT②蒙特卡洛光传输 MLT2.有偏方法 Biased①光子映射 Photon Mappinga.光子追踪b.光子收集c.局部密度估计②Vertex Connection and Merging (VCM)③Instant Radiosity (IR)二、高级建模1.非表面模型①非散射介质 —— 烟雾、云层、水、空气②毛发③颗粒状材质 Granular Mater
2024-07-17 09:21:39
697
原创 Games101学习笔记 Lecture17 Materials and Appearances
frLiωi)Loωo∫H2frLiωicosθidωifrLi∫H2cosθidωiπfrLi→frπ1frπρ0∼π1ωoωi2cosθn2ωi⋅nn→ωo−ωi2ωi⋅nnωoωinηisinθiη。
2024-07-08 09:09:55
979
原创 Chapter11让画面动起来——Shader入门精要学习笔记
Unity Shader 提供了一系列时间变量来允许我们方便地在Shader中访问运行时间。使用 i.uv.xy 和 i.uv.zw 对两张背景纹理进行采样。使用第二层纹理的透明通道来混合两张纹理。远处的背景应该移动的比近处的慢。
2024-07-05 17:48:11
784
原创 Games101学习笔记 Lecture16 Ray Tracing 4 (Monte Carlo Path Tracing)
∫abfxdxXi∼px)FNN1∑i1NpXifXiLrpωr)Lepωo)∫ΩLrp−ωifrpωiωrn⋅ωidwiLopωo)∫ΩLipωifrpωiωon⋅ωidwiFNN1∑i1NpXi。
2024-07-04 21:18:13
880
原创 Chapter10 高级纹理——Shader入门精要学习笔记
利用 Camera.RenderToCubemap 函数来实现(可以把任意位置观察到的场景图像存储到6张图像中,创建Cubemap)使用一张HDR图像(类似立方体展开图的交叉布局、全景布局等),把该纹理的 Texture Type 设置为 Cubemap 即可。创建一个 Cubemap ,然后把6张纹理拖拽到面板中。
2024-07-03 17:28:40
967
原创 Chapter9 更复杂的光照——Shader入门精要学习笔记
大多数情况下一个项目只使用一个渲染路径,在Player Setting中进行Rendering Path设置。也可以在每个摄像机中设置该摄像机的渲染路径。完成设置后,就可以在每个Pass中。渲染路径是 Unity 处理光照信息的方式,它决定了光照是如何被应用到 Unity Shader 中的。简单来说,渲染路径就像一个“沟通桥梁”,它。没有具体位置,也没有衰减,所有点的方向都是一样的。来指定Pass使用的渲染路径。
2024-07-02 20:16:26
821
原创 Games101学习笔记 Lecture 15: Ray Tracing 3 (Light Transport & Global Illumination)
计算不同的反射方向上会分布多少能量,描述了光线从特定方向入射到表面后,反射到各个方向的比例frf_{r}frωiω_{i}ωi→→ωrω_{r}ωr) =dLrdL_{r}dLrωrω_{r}ωr) /dEidE_{i}dEiωiω_{i}ωi) =dLrdL_{r}dLrωrω_{r}ωr) /LiL_{i}Liωiω_{i}ωicosθicosθ_{i}cosθi。
2024-07-01 17:01:11
1016
原创 Games101学习笔记 Lecture 14: Ray Tracing 2 (Acceleration & Radiometry)
r2m2m2。
2024-06-30 13:36:11
775
原创 Chapter7 基础纹理——Shader入门精要学习笔记
必须使用纹理的属性(例如 _MainTex_ST 变量)在Shader中对。Mirror:纹理坐标超出[0,1]范围时,会进行。Repeat:纹理坐标超出[0,1]范围时,会。Clamp:纹理坐标超出[0,1]范围时,会被。
2024-06-29 09:55:07
650
原创 Games101学习笔记 Lecture13:Ray Tracing 1 (Whitted-Style Ray Tracing)
光栅化无法很好处理全局光照效果:软阴影、反射、间接光照等光栅化速度快但质量低,容易出现错误光线追踪可以很好地模拟光线传播,但计算量大,需要的渲染时间更长。
2024-06-23 19:30:52
736
原创 Chapter6 Unity中的基础光照——Shader入门精要学习笔记
【代码】Chapter6 Unity中的基础光照——Shader入门精要学习。
2024-06-23 11:31:33
834
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人