《图形特效编程》课堂记录02
本节课讲了高级纹理的应用以及渲染管线的灯光部分。
高级纹理应用
凹凸贴图 Bump Mapping
法线贴图 Normal Mapping
对法线进行扰动,从而影响光照模型的计算结果。
优点
性能好
缺点
效果相对一般
纹理接缝处可能处理不好
视差贴图 Parallax Mapping
优点
性能相对Displacement Mapping好
效果比Normal mapping好
缺点
需要在片元着色器中写迭代算法,有损性能。
置换贴图(位移贴图) Displacement Mapping
根据贴图灰度对顶点进行实际的位移。
渲染管线中的灯光
《图形特效编程》课堂记录01
第一次课(2024.9.3)费广正老师为大家重新概括了一下光栅化渲染光线的流程。
其中涉及到了一些小要点和比较有趣的问题,这里记录一下。
光栅化渲染管线中几个主要阶段的重要任务
VertexShader
顶点着色器主要负责**坐标系的转换**。将模型顶点数据从本地坐标经过MVP矩阵变换到世界空间World Space(裁剪空间Clip Space、屏幕空间 Screen Spcae等)
Rasterization
光栅化是对三角面片的离散化处理。光栅化主要有两个任务,分别是
填充 填充屏幕中的像素颜色
插值
两个层面:
1)对像素点间的颜色进行线性插值(Breshanm画线算法,双线性插值)
2)对顶点数据进行插值(颜色、法线、深度等,但纹理坐标除外,因为近大远小,不同深度的模型纹理坐标有差距)
FragmentShader
计算光照(直接光照+间接光照 = 全局光照),根据光照模型进行着色。
图像混合阶段
可能会有同一像素有不同颜色缓冲的结果,此时需要根据先前设置的方法进行颜色融合(例如Blend One One等)
Unity Shader 结构
SubShader不是Sh ...
无题
C++中的s内存
资料:CSDN C++堆栈详解
内存的分类标准
C++中有多种内存分类的标准,这里记录了两种,一般三分类标准应该就足够理解大部分程序了。最主要的是需要理解堆(heap)与栈(stack)
三分类
静态(全局)存储区 static
编译时分配。存储静态数据、全局数据以及常量
栈区 stack
执行函数时,函数参数、局部变量、函数调用后返回的地址均创建在栈上。函数执行后地址内存自动释放。
堆区 heap
动态内存分配区。运行时使用malloc/new开辟的内存存储在该区,需要手动free/delete释放。或者在程序结束后自动释放掉动态内存。
五分类
栈
由编译器自动分配释放。通常存储局部变量,函数参数以及函数调用后的返回地址。
堆
使用new分配的内存存储在堆中,需要手动使用delete释放。程序结束后操作系统也会自动回收。
自由存储区
使用malloc分配的内存存储在堆中,需要手动使用free释放。
全局/静态存储区
全局变量和静态变量存储在这一内存块中。C语言还区分初始化和未初始化,C++不再区分。
常量存储区
存储常量,不能被修改。
递归函数与 ...
C++Lambda表达式
什么是Lambda表达式
Lambda表达式是一种在被调用的位置作为参数传递给函数的位置定义匿名函数对象的方法。
Lambda表达式的基本语法如下:
1[capture list](parameter list) -> return type {function body}
其中:
capture list是捕获列表,用于指定Lambda表达式内可访问的外部变量、参数传递方式(传值还是引用)。
捕获列表可为空。
默认捕获模式为&(引用类型)
parameter list是参数列表,和普通函数一样的使用方法。
在C++14中使用auto关键字实现泛型返回值。
return type 返回值类型,同函数的返回值类型。需要使用“->”指出返回值类型,但也可以省略此时将由编译器推导。
在C++14中使用auto关键字实现泛型返回值。
function body函数体用于表达表达式内的具体逻辑。
在C++14中使用constexpr关键字实现编译期计算。
Lambda表达式的捕获方式
值捕获
值捕获在值改变时Lambda表达式不受影响。
12345in ...
NeRF与3D-GS从隐式到显示
神经渲染:NeRF与3DGS从隐式到显式
清华大学 于涛
NeRF Neural Radiance Field 神经辐射场
微观——显微光场重建
宏观——场景光场重建
远观——黑洞光场重建
光场的表征与重建
全光函数 The Plenoptic Function
描述空间中任意一点光的分步的函数
$ \lambda = L(x,y,z, \phi , \theta , t) $
式中:
$ \lambda $ —— 波长
x,y,z —— 位置
$ \phi,\theta $ —— 光线方向
t —— 时间
光场 Light Field
光场是空间中光线集合的完备表示,采集并显示光场就能在视觉上重现真实世界。
成像 Imaging
成像是反向追踪每个像素的光线与场景的交互的过程
难点——消除奇异性(直接光+间接光)
从另一角度讲,光场是对光场进行采样得到图像的过程
对全光函数的积分:
$ \int L(x,y,z,\phi,\theta,t) $
新视点合成
问题定义: 重建光场就是给定离散的多视角图像重建出连续光场。
输入图像->光场重建->新视角合成
神经辐射场
利用神 ...
2024CCF图形学启明星计划夏令营
该文章是2024年8月参加的图形学夏令营主要讲座的笔记展示。
本次夏令营的主要内容是渲染,包含离线渲染、实时渲染以及深度学习在渲染中的应用三个主要方面。
下面是笔记文章:
光线追踪理论与实践(实践项目还没做)
C++面向对象编程OOP
实时渲染——GPU与渲染流水线
实时渲染方法
NeRF与3D-GS从隐式到显示
对于光线追踪、实时渲染两个专题之后有时间也会进行实践。
实时渲染方法
实时渲染方法
山东大学 王璐
Shadow Mapping(SM,PCSS,VSSM。DFSS)
Shadow Map, SM
Hard Shadow
两个Pass:
从点光源处渲染一张z-buffer作为shadow map
正常从相机进行渲染,比shadow map大的着色点在阴影中
问题:
Shadow Acne
Resolution Enhancement
//* 看起来不真(阴影过硬)
Soft Shadow
Percentage-closer Filtering PCF
面积光视为点光源
查询(采样)着色点周围区域的可见性的加权平均
Percentage Closer Soft Shadow, PCSS
在PCF的基础上进行修改。
Filter的大小与光源的距离相关。
具体步骤:
Blocker Search
Penumbra estimation
Percentage Closer Filter
问题:
Blocker Search 较为耗时
PCF 不准确
Varience Soft Shadow Mapping, VSSM
使用Mipmap
对于P ...