百人计划(程序)

第一章  基础夯实

一、 渲染流水线 (作业)

  • 应用阶段(CPU)

        1.准备基本数据

                ①场景物体数据(物体变换数据:位置、旋转、缩放,物体网格数据:顶点位置、uv贴图等)

                ②摄像机数据(位置、方向、远近裁剪平面,正交/透视,视口比例/尺寸等)

                ③光源及阴影数据(光源类型:方向光/点光/聚光等,颜色、位置、方向、角度等参数;是否需要阴影、阴影参数)

                ④其他全局数据等

        2.加速算法,粗粒度剔除

                碰撞检测,加速算法,

                遮挡剔除:通过判断物体位置遮挡关系对被不透明物体完全遮挡的物体进行剔除。

        3.设置渲染状态

                绘制设置(不同物体使用不同的着色器、不同的选择对象使用合批方式),

                绘制顺序(以相对摄像机的距离/RenderQueue/UICanvas等渲染顺序),

                渲染目标(FrameBuffer/RenderTexture),

                渲染模式(前向渲染/延迟渲染)

        4.调用DrawCall,输出渲染图元到显存

                顶点数据,其他数据

  • 几何阶段(GPU)

        1.顶点着色器(可编程):模型空间→世界空间→摄像机空间→裁剪空间 通过MVP矩阵对顶点的坐标进行变换

        2.曲面细分(可选)

        3.几何着色器(可选)

        4.顶点剪裁(CVV视锥体/正面或背面剔除)

        5.屏幕映射

  • 光栅化阶段(GPU)

        1.三角形设置

        2.三角形遍历

        3.片元着色器

        4.逐片元操作

                片元着色、颜色混合(Alpha Test、Depth Buffer Test、Stencil Test、Blending)、目标缓冲区(FrameBuffer、RenderTexture)

  • 后处理

 二、数学基础

  • 向量运算

        1.向量:是指n维空间中一种包含了模 (magnitude) 和方向 (direction) 的有向线段。

        2.向量运算

                     ①向量和标量的乘法/除法:kv=(kv_{x},kv_{y},kv_{z}) /  

                     ②向量的加法和减法:

                     ③向量的模:向量的模是一个标量,可以理解为是矢量在空间中的长度。

                     ④单位向量:单位向量指的是那些模为1的向量。对任何给定的非零向量,把它转换成单位向量的过程就被称为归一化(normalization)。零向量(即向量的每个分量值都为0, 如v=(0,0,0)是不可以被归一化的。

                    ⑤向量的点积(dot product):

                        · 意义:现在有一个光源,它发出的光线是垂直于\vec{a}方向的,那么b\vec{a}方向上的投  影就是b方向\vec{a}上的影子。                                                             

                        · 性质:(1)点积可结合标量乘法。(kab=a·(kb)=k(a·b)

                                     (2)点积可结合向量加法和减法。a·(b+c)=a·b+a·c

                                     (3)一个向量和本身进行点积的结果,是该向量的模的平方。

                    ⑥向量的叉积(cross product):

                        · 意义:对两个向量进行叉积的结果会得到一个同时垂直于这两个向量的新向量。

  • 矩阵运算

        1.矩阵:它是由mXn个标量组成的长方形数组。

        2.矩阵运算

                ①矩阵和标量的乘法:

                ②矩阵和矩阵的乘法:不满足交换律/满足结合律

        3.特殊矩阵

                ①方块矩阵/方阵

                ②单位矩阵

                ③转置矩阵

                        · 性质一:矩阵转置的转置等于原矩阵。 (M^{T})^{T}=M

                        · 性质二:矩阵串接的转置,等于反向串接各个矩阵的转置。 (AB)^{T}=B^{T}A^{T}

                 ④逆矩阵:

                         MM^{-1}=M^{-1}M=I (并非所有的方阵都有对应的逆矩阵。)

                        · 性质一:逆矩阵的逆矩阵是原矩阵本身。 (M^{-1})^{-1}=M

                        · 性质二:单位矩阵的逆矩阵是它本身。     I^{-1}=I                           

                        · 性质三:转置矩阵的逆矩阵是逆矩阵的转置。(M^{T})^{-1}=(M^{-1})^{T}

                        · 性质四:矩阵串接相乘后逆矩阵等于反向串接各个矩阵的逆矩阵。(AB)^{-1}=B^{-1}A^{-1}

                ⑤正交矩阵:

                        MM^{T}=M^{T}M=I  / M^{T}=M^{-1}

        4.矩阵的几何意义:变换

                线性变换包括:缩放、旋转、错切、镜像、正交投影

                ①平移矩阵:

                                                 

                ②缩放矩阵:

                                        

                ③旋转矩阵:

                                      

                                                            

                ④复合变换:

                                P_{new}=M_{translation}M_{rotation}M_{scale}P_{old}

                             (由于上面我们使用的是列矩阵, 因此阅读顺序是从右到左。)

        5.左乘右乘

        参数的位置会直接影响结果值。通常在变换顶点时,我们都是使用右乘的方式来按列矩阵进行乘法。这是因为, Unity 提供的内置矩阵(如 UNITY_MATRIX_MVP等)都是按列存储的。但有时,我们也会使用左乘的方式,这是因为可以省去对矩阵转置的操作

  • MVP矩阵运算                

        1.M:模型空间 → 世界空间

        2.V:世界空间 → 观察空间(以摄像机为原点)

        3.P:观察空间 → 裁剪空间

三、纹理介绍

  • 纹理概述

        1.纹理的概念:一种可供着色器读写的结构化存储形式。

        2.采用纹理的原因:①牺牲几何细节→ 减少建模工作量 ②减小存储空间 ③提升读取速度

  • 纹理管线

模型空间位置→投影函数→纹理映射→纹理坐标→通讯函数→新纹理坐标→纹理采样→纹理值                                  (展UV)                                                                        (避免依赖纹理读取)

        1. 投影函数:将表面坐标投影到纹理坐标空间,通常得到是一个二维坐标 (u,v) ,投影函数把三维的坐标投影到二维UV坐标上。(一般uv基本在建模的时候就处理好了,储存在顶点中)

            

        2.通讯函数:规定纹理只有一部分可以被用来显示,或者进行一些矩阵变化来任意的应用纹理;定义纹理的应用方式,比如当uv超出0-1的范围时,在OpenGL称为Wrapping Mode(包装模式),DX则是Texture Addressing Mode(纹理寻址模式)。

                ①Wrap(DX)/ Repeat(GL)or tile :舍弃整数部分只用小数部分。

                ②Mirror:超过1的时候反过来,超过2的时候再反回来。

                ③Clamp:超过1,就是1。

                ④Border超过1时用一个定义的边缘颜色渲染。

  •  纹理采样设置——Filter Mode 纹理过滤(作业)

        1.Filter Mode:过滤设置,当屏幕上的方形区域尺寸和图片像素尺寸差不多时,基本是还原整张图片的,但当区域很大时,就会发生放大(magnification),反之则是缩小(minification)。

        2.Magnification放大:

                ①nearest neighbor (最邻近):只使用放大后最接近纹理中心的那个像素值,会有一种块状(像素化)的效果。

                ②bilinear interpolation(双线性插值):对每个像素访问周边的四个相邻像素然后混合。效果更模糊,但是少了很多锯齿感。

                ③quilez的光滑曲线插值:使用一个平滑曲线来插值2x2的纹素组。常见的两个是smoothstep曲线和quintic曲线。

                ④cubic convolution(三次卷积插值):比较贵,牺牲性能提高表现。

        3.Minification 缩小:

                 ①最邻近/双线性插值:颜色丢失与闪烁。

                ②Mipmap:通过预处理纹理,创建数据结构,来有助于在实时计算中快速计算一组纹理对一个像素效果的近似值,将 2x2 的4个相邻的纹理值作为下一级的新的纹理值,所以新一级的纹理是上一级的1/4大。直到 1x1 ,所以在存储空间上多了1/3。

                缺点:比如整体会偏模糊,特别当一个像素沿u方向和v方向包含的纹素数量差别很大的时候(比如从边缘观察一个物体)。

                解决方法:各向异性过滤(Ripmap)

  •  GPU渲染优化方式(作业)

        1.纹理图集/数组(降低DrawCall)

        2.纹理压缩:减少了资源在CPU中进行解压缩的过程,减小了包体大小,减少了数据量级,减轻了带宽计算的压力,内存的使用效率更高。

  • 立方体贴图 Cubemap

         由六张正方体纹理组成,每个代表立方体的一个面。 立方体问题由一个三维的纹理坐标访问,其代表的是方向,由立方体中心指向外侧。

  •  凹凸贴图 Bump Mapping

        不使用纹理来改变光照方程中的颜色分量,而是使用纹理来修改表面法线。曲面的几何法线保持不变,只是修改了照明方程中使用的法线。

  • 位移贴图 Displacement Mapping

       真正移动了顶点的位置

补充:https://blog.csdn.net/zheliku/article/details/124464638

第二章 光照基础

一、色彩空间

  • 色彩发送器

        1.光的概述

                ①光源(产生光的物体)

                ②光(本质是一种处于特定频段的光子流)可见光的波长:(紫外线) 400-700 (红外线)

        2.分光光度计:将成分复杂的光,分解为光谱线的科学仪器。

                常用的波长范围为:(1)200~380nm的紫外光区,(2)380~780nm的可见光区(作业),(3)2.5~25μm(按波数计为4000cm<-1>~400cm<-1>)的红外光区。

        3.光的传播:直射光、折射光、反射光、光线追踪

  • 光源接收者</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值