GAMES101 Lec 07~09:Shading 定义、着色模型、着色频率、图形渲染管线、纹理

  • 3dMax 导出一个模型文件包含内容:顶点坐标,法线,边的关系,
  • model 模型
  • 空间中有了一个摄像机 Model 通过变换可以让摄像机放在原点 View
  • 三维空间的模型变换到屏幕上 Projection
  • 通过采样进行光栅化 Rasterization

    下一步着色
    1 Shading: Definition 着色定义
    引入明暗与不同颜色的过程称为着色
    在本课中定义是给物体应用材质的过程在这里插入图片描述

    2 Blinn-Phong Reflectance Model 一种简单的着色模型
    关于Blinn-Phong的着色模型
    先前我在 LearnOpenGL学习笔记—光照02:Lighting Basis/Advanced Lighting 中对其概念进行过阐述
    当时也是用了闫老师的PPT和视频作为讲解材料,并做了简单实现(点光源为例)
    所以此处不再赘述

    3 Shading Frequencies 着色频率
    在这里插入图片描述

    3.1 平面着色

  • 平面着色
    在这里插入图片描述

3.2 顶点着色

  • 顶点着色
    每个顶点做一次Shading,对颜色值插值
    在这里插入图片描述

3.3 像素着色

  • 像素着色
    这里的Phong Shading指的是一种着色频率,之前说的Blinn-Phong是一种着色模型
    三角形三个顶点求出法线,在三角形内部的像素,对法线值做插值,对每个像素做Shading在这里插入图片描述

    3.4 对比

  • 几何形体足够复杂的情况下,用简单的Shading方法也可以达到好的效果在这里插入图片描述

    3.5 顶点法线求法

  • 顶点法线求法
    在这里插入图片描述

内部平滑过渡的法线做法——Barycentric interpolation 重心插值
法线记得归一化
 在这里插入图片描述

Graphics (Real-time Rendering)Pipeline 实时渲染管线

关于这一部分

在这里插入图片描述

在这里插入图片描述

  到现在的知识的学习已经可以让我们去学习API了(如OpenGL, DirectX)
在这里推荐:ShaderToy,在这个网站,我们只需要关注着色器怎么写

在这里插入图片描述

当下的实时渲染

在这里插入图片描述

5 Texture Mapping 纹理映射

关于纹理映射的内容
我在 LearnOpenGL学习笔记—入门05:Texture 做过阐述

  • PPT中的示意图很好表示这个映射过程
  • 在这里插入图片描述

  • 纹理本身设计可以无缝衔接:tilable,一种设计无缝衔接纹理的方法:Wang Tiling

6 Barycentric Coordinates 重心坐标插值

  • 重心坐标插值
    在这里插入图片描述

在这里插入图片描述

 利用面积的计算确定系数

在这里插入图片描述

利用坐标的计算确定系数

在这里插入图片描述

  • 利用中心坐标插值的方法,投影前后的重心坐标可能会变化,所以需要在对应的阶段计算对应的重心坐标来做插值,不能随意复用
  • 进行插值

 在这里插入图片描述

7 Applying Textures 纹理应用

  • 点上计算得到插值出来的UV坐标,然后在纹理上查询,之后根据需要应用(图中为简单应用,直接赋值)
  • 在这里插入图片描述

8 Texture Magnification 纹理放大

纹理分辨率太小,多个pixel(像素)映射到了同一个texel(纹理像素)

  • 解决方法→插值
  • 在这里插入图片描述

8.1 Bilinear Interpolation 双线性插值

双线性插值:水平插值+竖直插值
lerp为linear Interpolation的缩写
下图为最近的四个点插值

  • 找到目标点周围四点
    在这里插入图片描述

 红点离四个点左下角的垂直与水平距离

在这里插入图片描述

 在这里插入图片描述

8.2 Bicubic Interpolation 双三次插值

取周围16个点也是做竖直和水平的插值
每次用4个,做三次的插值,不是用线性的差值
双向三次插值运算量大,但是效果好
关于这个方法可以看看这位大神的介绍
双三次插值算法(bicubic interpolation)与图形学和计算方法的关系
双三次插值(BiCubic插值)
 

9 纹理过大的问题

  • 纹理过大时,一个pixel对应了多个texel → 采样频率不足导致 摩尔纹+锯齿(走样)
    远处地平面的一个像素,对应一个大块的纹理,简单的点采样不行
    在这里插入图片描述

 在这里插入图片描述

解决:
超采样,提高采样频率,可是太浪费

 在这里插入图片描述

采样会引起走样,那么我们不采样,只得到一定范围的平均值。

这是点查询与范围查询的问题

  • 点查询,给出一个点,得到一个点的值

范围查询,不采样,给出一个区域,得到区域的(平均)值


9.1 Mipmap 多级渐远纹理

Mipmap 多级渐远纹理
可以进行快速的范围查询,但是是近似的,并且只有方形
关于Mipmap的内容
我在 LearnOpenGL学习笔记—入门05:Texture 中的 纹理环绕方式/纹理过滤 这一部分做过阐述

  • 以下为PPT中的示意图
    在这里插入图片描述

关于计算Mipmap的示意图
首先我们要把像素覆盖的区域找出来,进行近似

考虑一个像素时,也考虑上周围的点
然后把它们的中心一起映射到UV上计算距离
于是可以用距离为边长的 虚线的正方形框 来近似 映射过来不规则的四边形
层数D约为相邻pixel的映射uv之间的距离取2的对数
D的作用举例
如果区域的大小是1×1 D=0 那么在最原始的等级的Mipmap上找
如果区域的大小是4×4 D=2 那么在第二等级的Mipmap上找,也就是在第二等级上,这个4×4会变成1×1,然后去第二等级上去查这个像素的值,那就是这个区域的平均值
在这里插入图片描述

在这里插入图片描述

单纯只是整数层之间,会有不连续的缝隙
所以如果不是整数层,那么查前后两层,进行双线性插值,然后再进行一次插值
也就是三线性插值,得到结果
在这里插入图片描述 
9.2 Anisotropic Filtering 各向异性过滤

Mipmap会把远处的细节都模糊掉
因为它只能查询方块的区域内,以及插值毕竟只是近似

  • 解决三线性插值的方法就是各向异性过滤
    在这里插入图片描述

    方块的近似有时候太过勉强,如下图纹理映射后奇形怪状的
    在这里插入图片描述 
    Mipmap做的是方块的 也就是下图左上角的图,但是不方正的压缩做不了
    在这里插入图片描述

    各向异性过滤允许我们对长条的区域进行范围查询,但是对于斜着的区域,不行
    生成各向异性过滤的图(Ripmaps)的开销是原本的三倍
    各向异性的意思是,在不同的方向上它的表现各不相同
    各向异性的几X是压缩几倍,也就是从左上角往右下角多几层

    EWA过滤,把任意不规则的形状拆成很多不同的圆形,去覆盖这个形状
    多次查询自然可以覆盖,但是耗时大

     10 Application of Texture 各种纹理贴图
    之前的内容中,我们可以得到,给出一个网格,然后做各种shading
    在这里插入图片描述

     接下来在shading的基础上,我们可以贴上各种贴图
    在这里插入图片描述

    有许多种类的纹理贴图
    在这里插入图片描述

    10.1 Environment Map 环境光贴图

    把来自各个方向的光照记录下来,假设环境光来自无限远,只记录方向
    也就是说纹理可以用来表示环境光
    在这里插入图片描述
    Spherical Environment Map 球面环境映射
    可以类比成地球仪
    存在拉伸和扭曲问题
    在这里插入图片描述

    Cube Map 立方体贴图
    把环境光记录在立方体的表面上
    问题也有,之前球面可以很方便得到某一方向的光照,但是现在还要判断这个方向记在立方体的哪一个面上
    在这里插入图片描述

    10.2 Bump Mapping 凹凸贴图
    Bump Mapping的Texture记录了高度移动,不改变几何信息
    贴图作出人为的假的法线,由此得到假的着色效果,产生凹凸效果
    通过自定义的高度差,逐像素地扰动法线方向,法线方向一改,着色结果就会发生变化

    计算法线方向:求出切线以后找到垂直方向
    在这里插入图片描述

    UV情况下的法线算法
    在这里插入图片描述

     10.3 Displacement mapping 位移贴图
    与凹凸贴图的输入相同,但是位移贴图真正改变几何信息,对顶点做位移
    相比上更逼真,因为凹凸贴图在边界上会露馅
    位移贴图要求模型的三角形足够细致,且运算量更高
    DirectX有Dynamic的插值法,根据需要对模型做插值,看情况把模型变得细致
    在这里插入图片描述

    10.4 Procedural textures 程序纹理

    三维的纹理,定义了空间中任意一点的值
    对于这种纹理,并没有真正生成这个纹理的图
    它们定义了三维空间的噪声函数,函数经过各种处理,可以变成需要的样子
    在这里插入图片描述
     

    10.5 Precomputed Shading 预计算着色

    用空间算时间,先计算好环境光遮蔽贴图,然后再把纹理贴上
    在这里插入图片描述

    10.6 Solid modeling & Volume rendering

    三维纹理广泛应用到体渲染之中
    比如核磁共振等扫描后,得到体积的信息,通过这些信息进行渲染,得到结果

猜你喜欢

转载自blog.csdn.net/jiuzhouhi/article/details/123184307
今日推荐