Unity渲染管线基础知识学习与总结(一)

Unity渲染管线基础知识学习与总结

    • 引言
    • 渲染流程概述
    • GPU渲染管线(GPU流水线)

引言

鄙人只是对游戏开发感兴趣,所以在不断学习游戏相关知识,越往深入去学习游戏开发与制作,越感觉自己会的东西很少。鄙人想深入了解特效的开发制作,对渲染管线流程深入学习。做一个上架游戏或者demo需要很多计算机、物理、数学、动画以及美术等多学科基础,做一个demo为例包括以下几个部分:

  • 游戏剧情及内容策划:做一个游戏首先要确定你的游戏主题及风格,自己做个demo主要看你想做什么风格的游戏。
  • 游戏模型及场景制作:这是游戏的根本元素,游戏对象模型制作的是否精美、是否入目直接影响整个游戏的玩赏性,这个需要一定的美术功底,可以学习3dmax、maya、blender、zbrush等软件来进行人物及场景建模。
  • 游戏动画制作:主角的行走、奔跑以及攻击等动画,可以通过Unity、3dmax、maya等制作,2D像素游戏可以由PS制作。
  • 游戏编程:Unity通过C#、JS编写,UE4由C++编写;主要编写游戏运动逻辑、UI界面、状态机管理等,需要了解数据结构、多线程甚至GPU计算等知识。
  • 特效渲染制作:通过编写Shader实现游戏中炫酷的特效,这里需要知道GPU渲染流程及原理,会shader编程应该是做游戏开发中比较高级的技术。

渲染流程概述

Unity渲染管线基础知识学习与总结(一)_第1张图片
渲染流程可以由上图概述:

  1. 该过程表示将CPU内存(RAM)中存储的模型顶点、法线、三角面以及UV等渲染所需要的信息加载到显存当中(VRAM),这是因为GPU对于显存的访问速度更快,而且大多数GPU不能直接访问RAM。
  2. 该过程包含两个内容,一个是读取显存中模型的顶点等渲染数据,另一个是接收来自CPU的Draw Call指令,该指令告诉GPU按照CPU设置的方式渲染。
  3. 将经过GPU渲染管线后的颜色缓冲区的颜色输出到屏幕上,上述所有的操作需要我们编程操作的便是GPU渲染管线阶段,也是我们编写shader的核心。

GPU渲染管线(GPU流水线)

该图来自书籍《Unity Shader入门精要》,讲的比较详细,国内Shader方面的书比较少,推荐这本入门。
Unity渲染管线基础知识学习与总结(一)_第2张图片

  • 顶点着色器:是完全可以编程的,它的是流水线的第一个阶段,用于顶点坐标变换以及顶点颜色计算等,在这里改变顶点的位置可以模拟水面和布料等的运动。其中,顶点着色器将顶点坐标从模型空间转换到齐次裁剪空间,接着进行裁剪剔除不渲染的点后,最终得到归一化的设备坐标(NDC),Unity设备坐标范围同OpenGL一样在[-1,1]之间。
  • 曲面细分着色器、几何着色器:都是可选的着色器,不必过于了解。
  • 裁剪:由于我们的场景会很大,摄像机视野外的画面不需要进行渲染计算,所以裁剪的作用便是剔除视野外的图元。如下图一条线段A点在视野内,B点在视野外,将会剔除B点,取线段与视野交点处C点。注意裁剪这一步我们不可以编辑,这是硬件上的固定操作。
Unity渲染管线基础知识学习与总结(一)_第3张图片
  • 屏幕映射:将图元的x和y坐标转换到屏幕坐标系,这与屏幕的分辨率有关,而图元的z坐标表示各物体与摄像机的远近,用于判断各图元的遮挡关系,这一阶段输出屏幕坐标系下的顶点坐标,Z深度信息,法线方向等。
  • 光栅化:我的理解是将屏幕坐标系坐标转换为图像像素的过程。光栅化处理包含以下几个部分:
    1)三角形设置:计算三角形网格的边界像素坐标。
    2)三角形遍历:该阶段将会检查每个像素是否被三角网格覆盖,对应覆盖像素会生成一个片元,而片元的状态由三角网格三个顶点插值得到,注意片元不是像素。这些片元包含屏幕坐标、深度、法线、UV等。
    3)片元着色器:可以编程,对纹理进行采样,输出该片元的颜色信息。
  • 逐片元操作:这一阶段决定片元的可见性,通过模板测试、深度测试后,将片元的颜色和已经存储在颜色缓冲区的颜色进行混合存入颜色缓冲区。为了避免看到正在栅格化的图元,GPU使用双重缓冲,场景渲染是在幕后的后置缓冲区进行的,一旦场景渲染完成后会将后置缓冲区内容与前置缓冲区交换,保证图像的连续性。
    这一小节主要了解渲染基本流程,后面会进行实例编程讲解,这个过程有些枯燥,但这是必经之路,加油老铁们!

你可能感兴趣的:(Unity)