知识框架什么是渲染?给定3D场景(物体环境光照camera等)通过渲染生成/绘制一张2D二维图像 实现渲染这一过程的管线叫做渲染管线。 渲染,通俗的讲可以将一些部分理解为日常生活中的拍照: 在拍照时我们需要准备好要拍的东西(类比赋予材质后的模型)摆放好,然后要找到一个比较漂亮的构图(类比移动摄像机,选定视角,确定哪些需要渲染),当然摄影作为光影艺术,还要调节一个适宜的光线,让画面不灰不脏(类比光照的设置,环境光,漫反射,全局光照),这些都设置好了以后(给定3D场景)。然后“咔嚓”,按下快门键(渲染),拍立得的话就会生成一张照片(照片可以类比为渲染的2D图像)。当然有时候会对照片不满意,会拿PS修一修图(修图加滤镜的过程可以类比为后处理)。 渲染管线概述【美术向类比素描绘制】根据《real- time-rendering》中将渲染管线分为 应用阶段——几何阶段——光栅化阶段 *每个阶段本身也可能是一条管线,此外还可以对有的阶段进行全部或者部分的并行化处理。 *最慢的管线阶段决定绘制速度(图像更新的速度)一般用FPS来表示每秒绘制的图像数量,或者是Hz。 应用阶段1.准备场景数据:(模型的法线/顶点/材质/UV/光照/摄像机,其他数据如偏移数据等) 2.加速粗粒度剔除:(可见光剔除:视锥体/光锥没有交集不可见剔除AABB包围盒。可见场景剔除:八叉树/k_D树等) 3.设置渲染状态 (a,用什么shader, b,设置渲染顺序是按照摄像机距离远近,还是材质等, c,设置渲染目标:frame buffer/render texture, d渲染模式:前向渲染还是延时渲染) 调用Draw Call/setpass call输出数据到显存 (美术的理解就是,这一过程就是写生前的揣摩,脑内绘画,画画前先动脑!啊,集训PTSD……) 几何阶段*几何阶段执行的是计算量非常高的任务,在只有一个光源的情况下,每个顶点大约需要100次左右的精确的浮点运算操作。 坐标变换 (将坐标为模型空间--世界空间--观察空间--裁剪空间) 坐标变换我个人的理解是为了简化并且准确的描述位置的必要变换,在生活中我们拥有很多参考系,参照物,指指左右就可以,但如果构建一个虚拟的世界呢?那这个世界我怎么描述我在哪,我的手在哪?那个房子在哪?因此需要坐标,需要原点和参照。(MVP矩阵的推导会详细说明,这里只是介绍) 美术可以以C4D,MAYA为例理解这个变换过程,制作的时候,模型的坐标是可以移动的,整个场景是由一个坐标可以改的(做对称时,常把模型放回原点的操作)无论是外接keyShot,还是直接软件内渲染,都会有个摄像机,观察视图,裁剪后以这个尺寸比例输出。 顶点着色器(顶点shader) *为了产生逼真的场景,渲染形状和位置是远远不够的,我们需要对物体的外观进行建模。而物体经过建模,会得到对包括每个对象的材质,以及照射在对象上的任何复杂光源的效果在内的一些描述。 *确定材质上的光照效果的这种操作被称为着色,着色过程涉及在对象上的点处计算着色方程。 顶点光照 除此可能设置的shader还有曲面细分shader/几何着色shader *总之,顶点着色阶段的目的在于确定模型上顶点处材质的光照效果。 投影 透视投影/正交(平行)投影 (w值)——(将模型从三维空间投射到二维空间的过程,相当于快压扁的状态) *在光照处理之后,将视体变换到一个对角顶点分别是(-1,-1,-1)和(1,1,1)单位立方体内(CVV-规范立方体) 裁剪 NDC,CVV裁剪,(不可见三角片元剔除,边缘裁剪增加顶点,范围内保留) 屏幕映射 裁剪空间--屏幕空间(视口坐标空间) 光栅化阶段三角形设置: 将顶点试着连线三角面,计算三角网格边界(看三条边的顶点) 用于扫描转换,以及由几何阶段处理的各种着色数据的插值操作所用。 三角形遍历: 产生锯齿的阶段,看哪些像素是覆盖在片元里面的 片元着色器 输出颜色,给片元着色 输出合并,逐片元操作 片元——Alpha测试——模板测试——深度测试——blend混合——输出到帧缓冲区 此外可能还会进行一些后处理 美术理解: 其他什么是OpenGL/DirectX,HLSL/GLSL/cg?OpenGL/DirectX是图形API(图像应用编程接口) HLSL(high level shading language)微软开发的着色器中间语言 GLSL(OpenGL shading language)OpenGL开发中间语言 cg(C for Graphic)跨平台图形中间语言(OpenGL和Dx都可以使用,更加抽象了一层,但可能实现不了GLSL中最新的运用) 4.CPU和GPU是怎么并行工作的?使用命令缓冲区,将命令放在缓冲区中,CPU添加命令,GPU接收 5.Draw Call多了为什么会影响帧率?感性一点类比将一个10MB的数据放在1个文件夹和用无数文件夹分装,1个的更快, Draw Call多了会产生很多重复冗余的操作在cpu端,导致速度变慢 6.如何减少Draw Call采用批处理技术 将多个需要同一种渲染状态的网格合并成一个 7.什么是固定渲染管线固定函数的渲染管线,不可编程但可一定配置,目前已经out了 8.什么是Shader1.即是GPU渲染中高度可编程的阶段,而由着色器编译出来的最终代码是会在GPU上运行的 2.有顶点着色器和片元着色器等(特定类型着色器) 3.能控制渲染细节(例如顶点着色顶点坐标变化,片元着色器进行逐像素的渲染) 相关术语中英文对照更后续代码和ASE和shader forge连连看需要,先码一码 应用阶段:Applincation Stage 几何阶段:Geometry Stage 光栅化阶段: Rasterizer Stage 渲染图元:rendering primitives 顶点着色器:Vertex Shader 片元着色器:Fragment Shader 曲面细分着色器:Tessellation Shader 裁剪:Clipping 三角形设置:Triangle Setup 三角形遍历:Triangle Traversal 逐片元操作:Per-Fragment Operations 模板测试:Stencil Tset 深度缓冲:Z Buffer(一般Z都代表深度) 参考资料强烈建议先看完参考资料,再看文章,自己写的目的就是为了内化知识,梳理框架,会精简很多(后续也是) 技术美术百人计划 庄懂的美术向课堂(AP01前半部分) 《Unity Shader入门精要》冯乐乐,第二章 RTR3提炼总结.PDF(毛大),第二章 |
|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )
GMT+8, 2024-4-18 14:21 , Processed in 0.038853 second(s), 18 queries .
Powered by Discuz! X3.4 © 2001-2017 Discuz Team.