GAMES101复习:着色(Shading)、渲染管线、纹理映射(更新中)

目录

0. 光照模型中的一些基本定义:法线、光线、视线、表面参数

0.1 shading ≠ shadow 

1.Blinn-Phong 反射模型(经验模型):Ambient+Diffuse+Specular

1.1 Diffuse Reflection(漫反射)

1.1.1 从各个方向看颜色相同

1.1.2 光本质是能量,与接受面大小有关(Lambert's cosine law)

1.1.3 Lamberian (Diffuse)Shading:与视线方向无关

1.2 Specular Term(高光) (Blinn-Phong)

1.2.1 视线与反射向量夹角越小亮度越大

⭐1.2.2 半程向量:将视线与反射向量夹角 转换为 法线与半程向量的夹角

1.2.3 cos指数p 

1.3 Ambient Term(环境光):constant

2.Shading Frequencies(着色频率)

⭐3.渲染管线(Real-time Rendering)

⭐4.纹理映射:不同点不同位置有不同的属性

4.1 重心坐标(Interpolation Across Triangles: Barycentric Coordinates)

4.1.0 为什么?需要什么?怎么做?:插值!

4.1.1 ​编辑

4.2 纹理放大(Texture Magnification) :纹理过小、过大

4.2.1 纹理过小:最近邻法(四舍五入像素位置到纹理位置,就是找他最近的texel)

4.2.2 纹理过小:双线性插值(取最近四个texel,水平、垂直线性插值,即双lerp)

⭐4.2.3 纹理过大: MipMap


In this course:The process of applying a material to an object.

0. 光照模型中的一些基本定义:法线、光线、视线、表面参数

在某一个特定的点上着色:

0.1 shading ≠ shadow 

1.Blinn-Phong 反射模型(经验模型):Ambient+Diffuse+Specular

1.1 Diffuse Reflection(漫反射)

1.1.1 从各个方向看颜色相同

1.1.2 光本质是能量,与接受面大小有关(Lambert's cosine law)

1.1.3 Lamberian (Diffuse)Shading:与视线方向无关

1.2 Specular Term(高光) (Blinn-Phong)

1.系数(高光颜色)、光能量吸收

2.反射向量的计算比半程向量计算量大很多

3.指数p,决定视线与半程向量角度大小影响的亮度

1.2.1 视线与反射向量夹角越小亮度越大

⭐1.2.2 半程向量:将视线与反射向量夹角 转换为 法线与半程向量的夹角

1.2.3 cos指数p 

 

1.3 Ambient Term(环境光):constant

1.跟实际光照方向没什么关系

2.跟视线方向没什么关系

基本上是一个常数,保证任何一个地方不是黑的

2.Shading Frequencies(着色频率)

⭐3.渲染管线(Real-time Rendering)

也可以看这篇博客:计算机图形学:渲染管线_老闫在努力的博客-CSDN博客

1.输入一堆空间中的点

2.三维空间中的点投影到二维平面上

3.这些点会形成三角形

4.但屏幕是离散的,所以要对其进行光栅化,并做一些深度测试

5.对像素着色

 

现代计算机图形学允许顶点和像素部分是可编程的

⭐4.纹理映射:不同点不同位置有不同的属性

希望有一种方法,能够定义物体中某一个点的属性,不同位置有不同的属性

在纹理上定义一个坐标系,称为UV坐标系,其中一般定义 U,V\in [0,1]

 

三维表面上的点,实际上展开就是一张二维平面图:

 

4.1 重心坐标(Interpolation Across Triangles: Barycentric Coordinates)

4.1.0 为什么?需要什么?怎么做?:插值!

4.1.1 (x,y)=\alpha A+\beta B+\gamma C \rightarrow (\alpha+\beta+\gamma=1)

伪代码实现:

  • 对每个像素点(中心):
    • 利用重心坐标计算UV坐标
    • 根据UV坐标查询texture颜色
    • 把颜色设置为反射系数kd 

4.2 纹理放大(Texture Magnification) :纹理过小、过大

纹理分辨率小于屏幕分辨率,则在映射时,会出现多个pixel出现在一个texel附近:

红色点为像素点。此时有如下解法:

4.2.1 纹理过小:最近邻法(四舍五入像素位置到纹理位置,就是找他最近的texel)

4.2.2 纹理过小:双线性插值(取最近四个texel,水平、垂直线性插值,即双lerp)

纹理在红点处(pixel)映射的值是多少? 

⭐4.2.3 纹理过大: MipMap

首先明确一点:有一张格子的纹理贴在这张“无线延申”的平面上,可以看到近大远小,这意味着远处点的pixel覆盖了更多的texel。若仍采用之前的采样方法,则会产生锯齿。

近处像素覆盖的纹理较小,远处较大。这告诉我们屏幕中不同像素覆盖的纹理区域大小是不同的。

首先想一下之前的抗锯齿方法:MSAA,假设买个像素取512个点采样,并作平均:

但是天下没有免费的午餐,而且MSAA这份午餐实在太贵了。由此我们想一想产生走样的原理:采样的频率与信号(纹理)变化的频率不同,在这个例子中,就是一个pixel内有很多个texel,这么多的texel(如此高的texel信号频率),却只进行了一次采样(一个pixel),那必然会导致走样

采样会引起走样,那如果我们不采样呢?我立刻可以知道这个平均值是多少?

这里先前引入一个问题:点查询范围查询

点查询就是我们之前提到的双线性插值等方法,范围查询则是:我们不做采样,给定一个范围,我立刻就可以知道范围的平均值。 

MipMap:渲染之前提前把纹理处理一下,使得可以进行范围查询, 生成很多MipMap,存储为原空间的4/3

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值