可编程管线简介

可编程管线流程

Application Stage:

输入primitive(点,线段,几何体)即vertex data。

Vertex Data包括:

    \bullet  Vertex Position

    \bullet Vertex Normal

    \bullet Vertex Color

    \bullet Texture coordinate(UV)

Geometry Stage:

Vertex Shader :

    \bullet 改变顶点位置

    \bullet  Vertex Transformation (Model-View-Projection)

    \bullet  纹理坐标转换

    \bullet Per-vertex Lighting

    \bullet  ……

MVP Matrix:


MVP矩阵转换过程

Clip space是视锥空间,然后会由硬件进行透视除法(NormalizedDevice Coordinates, NDC),换算成归一化坐标的立方体空间中(-1,-1,-1)到(1,1,1),方便调整深度与位置。

Primitive Assembly:

图元组装,把零散定点组装成三角形

Tessellation Shader (Optional for DX11,OpenGL4,OpenGL ES3.2):

把Primitive细分成更精细,更多三角面。

Geometry Shader(Optional for DX10,OpenGL3.2,OpenGL ES3.2 ):

输入单个primitive,进行顶点和图元的增减

Clipping:

把NDC空间外的部分剔除,卡在中间的用新顶点补齐。

Screen Mapping:

把3D空间转换到2D屏幕,即屏幕映射。

Rasterizer Stage:

Rasterization & Interpolation:

把三角形区域转化成一片一片fragment(不是Pixel),根据深度与位置其颜色做插值运算。

Fragment data:

\bullet Screen coordinate

\bullet  Color

\bullet  Depth

\bullet  Normal

\bullet  Texture coordinate(UV)

\bullet  ……

Fragment shader:

输入一个个的fragment,改变其颜色值和纹理映射(Texturemapping)

Raster Operations:可以用选项来控制

Raster Operations

\bullet  Pixel Ownership Test:当两个视窗(物体)重叠时,确定pixel的所有权

\bullet  背面剔除(不在图上)

\bullet  Scissor(剪刀) Test:设定一个长方形区域,物体只能在里面渲染

\bullet  Alpha Test:透明度测试,当透明度大于某值或小于某值才渲染

\bullet Stencil(模板) Test:使用一个参考值做比较,满足参考值的可以渲染,即用来限制渲染范围

在说明模板测试之前,我们需要先介绍一下模板缓存。

模板缓存与深度测试缓存、后台缓存(或颜色缓存,最终显示在屏幕上的缓冲区)的大小(分辨率)完全一致,模板缓存中的像素点与后台缓存的像素点是一 一对应的。模板缓存允许我们动态地、有针对性地决定是否将某个像素写入后台缓存中。模板缓存用与获得某种特效,如镜面效果或阴影效果。在实现镜面效果时,我们在“镜子”这块区域中绘制某个特定物体的映像,而使用模板缓存来阻止物体映像在“非镜子”的区域中进行绘制。为了进行这种阻止,就需要使用模板测试。判断是否将某个像素写入后台缓存的决策过程,称为模板测试

\bullet  Depth Test:距离Camara越远深度越高,一般设定深度小的才会被渲染出来

\bullet  Blending:颜色值混合,把fragment shader输入的颜色值和当前画面的颜色值混合,一般用来做半透明

融合技术能使我们将当前要进行的光栅化的像素的颜色与先前已经光栅化并处于同一位置的像素的颜色进行合成,即将正在处理的图元颜色值与存储中后台缓存中的像素颜色值进行合成。利用该技术,我们可以获得各种各样的效果,尤其是透明效果。不过值得注意的是,为了中场景中绘制透明物体,通常需要对物体按照由后到前的顺序进行混合处理,如果按照任意顺序进行处理将会产生严重的失真。所以在blending(混色)操作之前要来一次Depth test

\bullet  Dithering:用抖动的方式把颜色值算得更精确

在低位深度的图象中,由于颜色总数的限制,有些颜色无法显示出来,为了模拟出那些颜色以提高显示效果,广泛采用了一种称作抖动处理(dithering)的方法,也称半色调处理(Halftoning)。它是指用交替的点图案去模拟在图象中不能使用的颜色的过程。单色图象是最简单的格式,一般由黑色和白色组成,在一些单色图象如黑白照片和有深浅的图案中,会使用各种灰度,这种图象常被称为灰度图象(Grayscale Image)。由于人眼会把一个很细致的黑白相间的图案解释成灰色,所以灰度图象也可使用单色文件格式,数据仍然可以是黑和白。使用黑色或某一种单色的点获得连续的该色灰度的过程就是抖动处理。抖动处理被更多的用在那些低位数彩色图象文件中,与不采用这种处理相比,它具有更好的显示效果。

\bullet  Logic OP:用&,||,!来进行一些数值比较,最后输出颜色值到color buffer

相关技术:

    \bullet  Early Z:把Depth Test放到fragment shader之前,可以去掉一些不必要的fragment,节约时间

    \bullet  Double buffering:渲染需要时间,所用用front,end两层buffer,front用来显示,end用来渲染

    \bullet  ……

Direct3D和OpenGL


CG是如何跨平台的:


CG位于OpenGL和DX上层

Material,Shader和Texture 的关系

Material是渲染的结果,Shader是Material使用的渲染过程,Texture是shader的参数

Forward Rendering 和Deferred Rendering

鉴于传统的Forward Rendering对于多光源渲染时的低效问题,各种Deferred Rendering的方法被提出并且广泛使用。比如DeferredShading以及其之后的Deferred Lighting。Deferred方法相对于传统Forward Rendering最主要区别都是提高了对多光源渲染时的效率,它是是将光源的计算转到屏幕空间来进行,进而不浪费无效的光源着色。DeferredRendering的方法已经已经成为现在游戏引擎的主流。但是,DeferredShading与Deferred Lighting又是有所不同的:DeferredShading是一股脑儿将所有的Shading全部转到Deferred阶段进行,而Deferred Lighting则是有选择地只将Lighting转到deferred中进行,两种方法的不同也就导致了算法的不同的特点及各自的优劣。

传统的Forward Rendering在外理多光源时基本上需要一个与光源数量及待绘制物体数量相关密切相关的复杂程度,这样就导致效率很低。而DeferredRendering就是将这种与光源相关的计算转到屏幕空间来进行,这样最大程度上减少无关的计算浪费。为了将传统的ForwardRendering转移到Deferred上进行操作需要对光照方程进行分析或改动,并生成相应所需的辅助Buffer来完成最终的着色操作。

Render Target

一个Renter Target即一个渲染出来的场景buffertexture, multiple render target是现在 GPU的一种特性,在可编程管线中同时渲染多张贴图,例如法线贴图,光照贴图,深度图等等,被广泛用于deferredshading,deferred lighting中,因为这些技术需要把深度,法线等等信息(在GPASS中计算)储存于GBUFFER中

Reference:https://blog.csdn.net/bugrunner/article/details/7436600

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容