GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅

马肤

温馨提示:这篇文章已超过472天没有更新,请注意相关的内容是否还可用!

摘要:近期参加了GAMES101学习课程,旨在提升游戏开发技能。课程涵盖了游戏设计基础、游戏引擎技术、游戏编程等方面的内容。通过学习和实践,对游戏制作流程有了更深入的了解,掌握了游戏开发的基本技能。此次学习对于个人游戏开发能力的提升具有重要意义。

Lecture 7:Shading 1(lllumination,Shading and Graphics Pipeline)

Visibility / occlusion 解决可见性和遮挡的问题

可见性,Z-buffering

Z-Buffer 深度缓存

Idea:

  • Store current min. z-value for each sample (pixel)
  • Needs an additional buffer for depth values
  •  -- frame buffer stores color values
  •  -- depth buffer (z-buffer)store depth  

    利用深度缓存的想法维护遮挡信息,维护深度缓存算法即可,与顺序无关

    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第1张

    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第2张

    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第3张更新示例

    --对于MSAA来说,深度缓存应该针对的是采样点而不是像素点 

    shading:着色

    引入明暗的不同,引入颜色的不同

    给物体施加材质的过程。包括光照和texture。

    Blinn-Phong Reflectance Model  

    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第4张

    specular高光:与观察方向有关  镜面反射相关
    diffuse漫反射:与观察方向无关,光线打过来,均匀地反射到四面八方。比如墙面
    ambient环境光:间接光照,可以设置为常数

    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第5张

    着色具有局部性,比如下面这张图,它只考虑了光照和自己,不考虑其他物体的存在,没有阴影

    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第6张

    漫反射 Diffuse Reflection

    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第7张

    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第8张

    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第9张

    光线考虑衰减,I/r^2,实际衰减的是irradiance(单位面积的光的power)

    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第10张max的作用,如果点乘是负数的话没有物理意义,所以直接记为0

    物体有颜色是因为会吸收一部分颜色光,然后反射不吸收的颜色光。

    考虑每一点有不同的吸收率 就是图中的系数 kd (表示成三通道的rgb)

    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第11张

    不管从哪里观测,看到的应该都一样,因为漫反射是均匀的射向四面八方

    Lecture 8: Shading 2 (Shading ,Pipeline and Texture Mapping)

    高光 Specular Term(Blinn-Phong)

    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第12张

    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第13张

    简化了吸收的计算--Blinn-Phong 还是一个经验模型

    指数p的作用是为了更合理的模拟

    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第14张常用的p是 150 ~ 200

    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第15张

    环境光 Ambient Term

    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第16张常数

    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第17张

    着色频率

    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第18张

    • 对面shading(flat)
    • 对vertex做shading(gouraud)
    • 对像素做shading(phong shading)

      顶点求法线  -- 与这个顶点有关系的所有三角形的发现求平均,也可以加权平均(三角形大小不一样)

      GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第19张

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

      如何从场景到一张图,经历的过程就是管线 

      GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第20张

      图形渲染管线

      • 三维空间顶点经过mvp矩阵变换,变成屏幕空间的顶点。
      • 屏幕空间的顶点,经过三角形处理,组成三角形。
      • 三角形经过光栅化,变成fragment(片元)。
      • fragment经过shading,计算光照、纹理映射(比如采用布林冯模型、微表面模型,就在此处进行相应的计算),变成fragment。
      • 带材质的fragment经过framebuffer(比如深度处理),变成屏幕上的图像。


        *具体过程是,先进行mv矩阵变换,然后对顶点进行着色(包括法向量、纹理坐标、颜色等),之后投影矩阵变换,得到一个标准化立方体(正交投影得到标准立方体好理解,但其实透视投影得到的也是标准立方体,经过压缩之后的),之后经过视锥剔除这一步操作,避免不必要的时间消耗,此时得到的还是标准化立方体,顶点的坐标还是三维的,然后经过视口变换,得到对应屏幕大小的二维图像,此时的顶点包括所有需要的信息(包括法向量、纹理坐标、颜色等)。然后进入光栅化阶段,先进行三角形处理,对顶点与顶点之间做插值,然后做光栅化,对应到像素,然后做shadding(包括纹理映射),对像素着色,之后做可视化处理、alpha测试、模板测试等,上屏到显示设备

        GPU -- 高度并行化的处理器

        纹理映射

        GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第21张

        GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第22张 好丑

        GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第23张

        Lecture 9: Shading 3 ( Texture Mapping Cont ) 

        *重心坐标(Barycentric Coordinates),用来做插值

        为什么在三角形内部进行插值

        • 我们做的很多操作是在三角形顶点上完成的
        • 希望在三角形内部得到一个平滑的过度

          插值什么内容?

          Texture coordinates , colors, normal vectors , ....

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第24张重心坐标

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第25张 A点的重心坐标

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第26张

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第27张

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第28张

          三维空间中的点还是应该在三维空间中做插值,然后再对应到二维中

          简单的使用纹理映射 会造成什么问题?

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第29张

          问题:

          如果纹理太小怎么半?

          纹理太小的话纹理就会被拉大

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第30张 右边的叫做双向三次插值

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第31张先竖直再水平也可以的

          如果纹理太大是什么问题?

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第32张引起了走样

          texture magnification


          如果纹理太小怎么办?纹理上一个texel被图像上多个pixel包含,texel不够用。

          方法:用插值的方法补texel!近邻、双线性、双次立方。
          如果纹理过大怎么办?图像一个pixel包含多个texel(摩尔纹)。

          方法:mipmap。(Allowing (fast,approx.,square)快速的,近似的,正方形的)mipmap的好处,额外的内存开销小,只有原来的三分之一;缺点,只能对正方形区域查询,有的pixel包括的texel是斜着的一条区域,mipmap仍然不能表现该区域的属性。

          改良:ripmap,各向异性过滤,开销是原来的三倍。

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第33张多了三分之一的存储量

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第34张

          D 是 查询的 Mipmap的层数M

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第35张   层次分明

          如果我想查找1.8层的怎么办? -- 插值

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第36张两个平面 ,三线性插值

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第37张连续变化

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第38张GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第39张

               超采样                                                        mipmap  远处的细节全部糊成一片   Overblur

          各向异性过滤   Ripmap  不同的方向上表现不同

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第40张

          Lecture 10 : Geomerty 1 (Introduction )  几何

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第41张

          可以用纹理描述环境光,可以用环境光渲染物体

          假设环境光来自无限远处,所以假定不同方向的光的强度相同

          环境光可以记录在球面上,然后再展开,但是会存在扭曲 不是均匀的描述

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第42张GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第43张

          Cube Map

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第44张

          凹凸贴图

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第45张

          在不把几何形体变复杂的前提下,通过利用一个复杂的纹理来定义一个点的相对高度

          Bump Mapping 法线贴图

          Adding surface detail without adding more triangles

          扰动每一个像素的法线

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第46张黄色的线是凹凸贴图

          求法线  2D

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第47张

          求法线 3D

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第48张

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第49张

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第50张

          着色的结果 乘以 计算好的环境光遮蔽 得到一个纹理 之后可以直接用

          GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第51张  可以用纹理存储计算好的信息

          材质的应用

          环境贴图、环境光(包括很多游戏大作的画面非常好,有些就是提前计算好光照,做成光照贴图)、

          *环境贴图可以是球面或立方体面

          纹理不只可以表示颜色,也可以表示高度/法向量(bump/normal),只是影响了shading计算,没有真正地改变顶点的位置。用displacement mapping,可以实际上改变顶点的位置。(bump/normal这一步,纹理影响shading,作用于fragment,在fragment做shading的阶段进行处理;而如果是displacement,应该是顶点处理阶段进行。看来,着色频率的选取跟纹理贴图的应用有实际的对应关系。)

          三维噪声函数定义纹理,在任意点都能取得相应的值。(参考隐式的几何表达。)

           

          显式/隐式几何表达


          隐式的几何表达

          • Points satisfy some specified relationship

            GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第52张

            代数公式、水平集、分形/自相似(fractals)

            CSG(constructive solid geometry):通过简单几何体的布尔运算获得复杂的几何体、

            距离函数:指的是到几何体点的最小距离,当两个几何体的点近,通过融合距离函数,生成新的几何体


            显式的几何表达:

            直接或由参数映射,给出几何体上的点

            点云、几何面、.obj

            隐式集合表达的好处:

            很好区分内外关系,光线追踪时易于求交,处理拓扑结构方便,紧凑的表达

            隐式几何表达的坏处:

            对于一些复杂几何形状很难表示

            GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第53张

            GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第54张  CSG

            Distance Function ( lmplicit )  距离函数

            对于任何一个几何,不直接描述它的表面,去描述任何一个点到这个表面的最近距离

            GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第55张

            水平集

            GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第56张

            Lecture11 : Geometry 2 (Curves and  Surfaces )  曲线和曲面

            点云

            • list of points ( x,y,z )
            • 可以表示任意的几何
            • 点云经常会被变成三角形的面
            • 不容易被画出来

              GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第57张GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第58张

              The Wavefront Object File ( .obj ) Format

              GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第59张

              曲线

              贝塞尔曲线

              GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第60张

              怎么样去画一条贝塞尔曲线

              GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第61张

              用控制点 + 插值的方法找到曲线

              GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第62张

              GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第63张

              贝塞尔曲线的性质

              GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第64张

              • 仿射变换之后贝塞尔曲线不变
              • 投影变换后不行
              • 凸包性质:画出来的曲线一定在控制点形成的凸包内

                逐段贝塞尔曲线

                当控制点很多的时候画出来的曲线不是很直观,所以会分段画曲线,然后再连起来

                GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第65张GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第66张

                GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第67张

                样条

                表示曲线的分段多项式函数。简单来说就是控制曲线的函数。满足一定的连续性

                B-样条 

                既有贝塞尔曲线的性质,相比起来又需要更多的信息

                曲面

                曲面是由贝塞尔曲线表达的


                1、曲面细分


                Loop细分:只能对三角形进行,一分四,优化可以靠加权重进行。

                GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第68张  将三角形一分为四

                GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第69张对新的顶点进行处理

                GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第70张

                对旧的顶点进行处理,n就是顶点的度,度就是它所连的边的条数,这张图里就是6
                Catmull-Clark细分:对矩形进行,先找奇异点,奇异面。

                • 假设全是三角形才可以进行 loop 细分,如果有四边形,catmull 可以做的更好
                • quad face 四边形

                  GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第71张

                  做法:

                  • 取每条边的中点
                  • 取每个面的中点
                  • 中点互相连起来

                    GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第72张再细分GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第73张

                    性质

                    • 一次细分之后,所有的非四边形都消失了,奇异点数量不会增多
                    • 细分之前有多少个非四边形,细分之后就多几个奇异点

                      GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第74张
                      2、曲面简化

                      GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第75张

                      边坍缩

                      GAMES101 学习 2,GAMES101学习心得分享,探索游戏设计的奥秘之旅 第76张
                      二次度量误差:每次细分要保证新的点到原来的边的距离之和最短,迭代此过程动态进行。

                      如何判断哪些边是重要的,我要坍缩哪些点?

                      • (某个点放在某个位置上可以使最小化二次误差)
                      • 优化这个点的位置,使得这个点到原来几个面的距离平方和最小

                        从二次度量误差最小的边开始坍缩,以此来推

                        • 如何去选边? -> 给每条边打分 (二次度量误差值)
                        • 但是坍缩了一条边后,会影响其他的二次度量误差

                          核心算法:贪心算法

                          数据结构 : 优先队列 / 堆

                          先找误差最小的,然后动态更新后,再找

                          参考文章:GAMES101 梳理 / 个人向图形学笔记-CSDN博客


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码