【Shader渲染流水线流程】

简介: 【Shader渲染流水线流程】

1.1.Shader渲染流水线_概念


渲染流水线的工作任务在于将三维场景渲染或者生成一张二维图像。需要从一系列的顶点数据、纹理等信息出发,将信息转换成一张图像。通常是由CPU和GPU共同完成的。


1.2.渲染流水线概念


这个是在第二篇中顺带介绍过的渲染流程三阶段,如下

image.png

注意:这只是概念阶段,每个阶段本身也是一个流水线,即包含了子流水线。提示 概念,是从Shader渲染流水线 提炼出的概念。所以在网上或书上看到的,会有名称上的差别,并且种类多到眼花,其实不用过于在意这些。


1.3.CPU和GPU的协作流程


接下来就展开的说一下,我会整理一下,有必要会逐个词对应介绍。

image.png

对比 渲染流水线概念图 和 CPU和GPU的协作流程图,可以对照着看一下每个阶段的名称和作用。应用阶段也即CPU提供数据资源,几何阶段属于GPU渲染管线,光栅化和帧缓存是不同的阶段,虽然都属于流程的后期。其中


光栅化:光栅化是将几何图元转变为片段(Fragment)的过程,也就是需要让几何图元能在屏幕上显示为像素就需要经过光栅化处理。

光栅化阶段包括两个部分:

1.确定屏幕坐标中的那些区域需要标准图元占用。

2.分配颜色值和深度值到各个区域。


Frame Buffer:帧缓存是图形渲染的偏后一个步骤,帧缓存中储存着用于渲染到屏幕上的像素,下一步输出到屏幕上。


1.4.Unity3D图形渲染完整流水线


那么再细化一下。下面是扩展开的渲染管线。

Unity3D渲染管线:

image.png

image.png

淡紫色长方形的属于CPU应用阶段范围内。红色长方形属于GPU渲染管线。


CPU:提供数据资源,模型的顶点坐标\法线信息\UV等数据\这些数据其实都是数字和矩阵组成的, CPU应用程序端处理提供。

GPU:渲染流水线处理,也即渲染流水线(Render Pipeline)

Frame Buffer:帧缓存,流渲染成图像的意思,经过流水线处理操作后,最终就可以在屏幕上出现的渲染效果。

淡紫色长方形的属于CPU应用阶段范围内。红色长方形属于GPU渲染管线。


CPU应用阶段

剔除Culling:

a. 视椎体剔除(Frustum Culling)

b. 层级剔除(Layer Culling Mask)、遮挡剔除(Occlusion Culling)等等

排序Sort


渲染队列RenderQueue

a.不透明队列(RenderQueue<2500)、按摄像机距离 从前到后 排序

b.半透明队列(RenderQueue>2500)、按摄像机距离 从后到前 排序

渲染队列在这一篇有介绍。


打包数据Batch

a.模型信息:顶点坐标、法线、UV、切线、顶点色、索引列表

b.变换矩阵、各空间切换矩阵。从模型到世界到相机到裁剪空间。(MVP)

c.灯光信息、材质参数


循环绘制所有物体

a.绘制调用Draw call

b. 传入GPU渲染管线


1.5.GPU渲染流水线


image.png

结合代码块用视图介绍一下如下:

顶点着色器:

a. 顶点MVP空间变换(MVP:从模型空间变换到屏幕空间的矩阵简写)

b. 自定义数据。

排序Sort


光栅化

a.裁剪、背面剔除、屏幕坐标

b.图元装配


片元着色

a.光照着色

b.纹理着色


输出合并

a.Alpha测试、深度测试、模版测试、颜色混合


到这里渲染流程全部说明。


相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
相关文章
|
28天前
|
监控 数据可视化 测试技术
云效流水线 Flow 评测:助力企业高效完成 CICD 全流程
云效流水线 Flow 评测显示其在CI/CD领域表现出色,尤其适合新人上手。具备直观的可视化编辑和Yaml化选项,丰富的文档教程,以及全面的功能,如多代码源支持、自动化测试、稳定部署及阿里云服务集成。此外,Flow性能稳定,监控功能强,且高度可扩展,支持插件和API集成。相比其他工具,Flow在成本、功能和性能上有竞争优势,特别适合与阿里云生态结合的团队。作为一款易用且性价比高的工具,Flow值得推荐给各类企业。
463 12
|
28天前
|
人工智能 安全 Devops
让研发规范管得住,在流水线之上做研发流程
研发规范的目标,是为了解决或降低出现软件危机的风险。但传统流水线受限于工具的定位,无法解决研发规范的落地问题,需要在更高的层面来解决。阿里云云效团队经过内部启发后推出的新产品:云效应用交付平台 AppStack 给出了解决方案,快来使用体验吧!
78598 7
|
8月前
|
监控 jenkins Java
持续集成/技术交付全流程流水线工具的设计与落地
持续集成/技术交付全流程流水线工具的设计与落地
|
运维 Devops 测试技术
Devops 如何使用 Codeup 和流水线构建发布流程
Devops 如何使用 Codeup 和流水线构建发布流程,让发布更顺畅
943 0
Devops 如何使用 Codeup 和流水线构建发布流程
|
前端开发 JavaScript Go
浏览器原理 22 # 渲染流水线:CSS如何影响首次加载时的白屏时间?
浏览器原理 22 # 渲染流水线:CSS如何影响首次加载时的白屏时间?
104 0
浏览器原理 22 # 渲染流水线:CSS如何影响首次加载时的白屏时间?
|
存储
【计算机系统】CPU指令执行流程与指令流水线原理
【计算机系统】CPU指令执行流程与指令流水线原理
1261 0
【计算机系统】CPU指令执行流程与指令流水线原理
|
缓存 JavaScript Android开发
渲染流水线中的光栅化
Rasterization,光栅化,又称为栅格化,它用于执行绘图指令生成像素的颜色值。光栅化是渲染流水线中的一个重要环节,但是不同的 UI Toolkit 和不同浏览器渲染引擎使用的光栅化策略并不一样,本文主要讨论各种不同的光栅化策略和它们各自的优劣。 ## 渲染流水线 ![rasterization_1.png](https://i.loli.net/2019/08/16/8aHV5
1140 0
|
JavaScript
【自然框架】添加数据的思路和流程 —— 流水线式
        自然框架里面,添加数据的思路、流程:     1、 根据元数据绘制表单。  2、 用户看到表单后就可以录入数据了。  3、 在前台使用正则来做验证。  4、 通过后提交给后台。
895 0
|
图形学
Unity 3D Shader流水线
Unity开发VR之Vuforia 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar ...
1004 0
|
Web App开发 异构计算