ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

《Shader入门精要》笔记——渲染流水线

2021-08-02 23:06:05  阅读:229  来源: 互联网

标签:渲染 裁剪 Shader 图形学 阶段 流水线 精要 屏幕 着色器


《Shader入门精要》笔记——渲染流水线


前言

作者在序章部分提到,程序员的三大浪漫——编译原理、操作系统、图形学。

感觉总结得还挺有意思的,不过也确实说明了图形学的地位所在。

工作了一年,才开始学习这本书。之前零零碎碎也了解了不少渲染的知识,也看完了闫令琪老师的图形学课,感觉多多少少对图形渲染也有些基础的认知。但是偏偏却因为不会写Shader而无法上手。

希望自己能够坚持把这本书看完,既是对渲染知识的一个回顾和深化,又是对Shader的一个入门和上手。

然后这一章笔记,我加入了一些自己对于渲染管线的理解,综合书中所讲,作此文章。


概述

渲染流水线,即我们常说的渲染管线。也就是计算机把图形绘制出来的过程。

大部分书都会把渲染管线分为几个大的阶段,而且不同的书划分地可能不同。但总而言之,渲染管线具体干的事是绝对跑不了的,这些所谓的阶段不过只是用于划分渲染管线干的事罢了。

《Real-Time Rendering》是分为了三个阶段,应用阶段、几何阶段、光栅化阶段。


应用阶段

在应用阶段,主要是由开发者来主导,由CPU负责主要实现。

作为开发者,在这一阶段主要有3个任务:

一是准备好场景数据,即摄像机数据、物体数据、光源数据等等。

二是为了提高渲染性能,需要做一个粗粒度的剔除工作,把无需渲染的物体给剔除出去。

三是设置好每个物体的渲染状态,即材质、纹理、Shader等等。

最终生成的是图元信息,即点线面,这些图元会传递给到下一个阶段。

具体一点可以分成三个阶段:

首先,把数据加载到显存中。所谓显存,即显卡上的存储空间。一般来说,要渲染的数据首先会从硬盘加载到内存中,之后其网格和纹理由从内存中加载到显存中。为啥呢?因为大多数显卡无法直接访问内存,并且显卡访问显存速度非常快。

其次,设置渲染状态。所谓渲染状态,即如何渲染,如何着色。换句话说,就是用什么着色器、材质、光源等。

最后,调用DC。所谓DC,即CPU调用GPU渲染命令。


几何阶段

几何阶段主要是负责处理图元,包括顶点着色器、曲面细分着色器、几何着色器、裁剪剔除、屏幕映射等,最终会输出物体的屏幕坐标、深度、着色等信息给光栅化阶段进行处理。

顶点着色器的主要任务就是MVP坐标变化和顶点着色(高洛德着色)。MVP变化主要是把世界坐标转换到齐次裁剪坐标(-w到w的立方体),之后再由硬件做透视除法,最终得到归一化的设备坐标(-1到1的立方体)。

曲面细分着色器是一个可选的阶段,主要是用于细分图元。

几何着色器也是一个可选的阶段,主要是用于进行平面着色,以及用于产生更多的图元。

裁剪剔除阶段主要是将那些在屏幕外看不到的顶点进行裁剪,并且剔除掉看不见的面,比如背面剔除。这一阶段的剔除和裁剪是可控制的,可以通过指令控制裁剪区域,可以通过指令剔除正面还是背面。

在光栅化之前还有最后一个阶段,即屏幕映射。有些地方把这一阶段归属于光栅化的一部分,但干的事情都是一样的,即把每个图元坐标转换到屏幕坐标系中。具体过程是先把归一化的设备坐标(-1到1的立方体)忽略z轴形成-1到1的正方形坐标系,之后把-1到1的正方形坐标系映射到屏幕坐标系中(0到width/height的屏幕)。这里并不会对z轴进行任何处理,并没有舍弃z轴信息,z轴信息会当作深度值来进行后续的计算。


光栅化阶段

光栅化阶段主要是将物体信息进行处理,设置三角形,遍历三角形,最终生成各个片段信息。生成的片段信息经过片段着色器处理生成最终呈现在屏幕上的像素。(不包括后处理)

所谓设置三角形,即把传入过来的顶点信息转变为一个个三角形信息。

所谓遍历三角形,即检查每个像素是否被三角形网格所覆盖,如果被覆盖则会生成对于的片段(片元)信息。

片段着色器(片元着色器、像素着色器)是一个非常重要的阶段,因为这一阶段可以完成很多重要的渲染技术。

最后一个阶段,是合并操作阶段,也叫逐片元操作阶段。这一部分涉及到很多工作,如测试阶段(模板测试、深度测试)、混合阶段(Alpha混合)。需要知道的是,逐片元操作阶段是高度可配置的。

最终生成的屏幕像素值被存储在缓冲区中。有些GPU会使用双重缓冲的策略,即两个缓冲区,一个在前面显示,一个在后面计算。


小结

渲染管线中还有很多细节和策略这里都没有细说,主要是针对书中内容做的一个大概笔记。

推荐《Real-Time Rendering》图形学秘籍,图形学的财富密码,我感觉我应该是啃不完的,有兴趣的小伙伴可以尝试深读。

标签:渲染,裁剪,Shader,图形学,阶段,流水线,精要,屏幕,着色器
来源: https://blog.csdn.net/weixin_42186870/article/details/119335931

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有