渲染管线噔噔噔
一、前言这里是随机一次的梦到哪句讲哪句环节二、渲染管线简要描述1.应用阶段决定并准备要画什么例如更新场景、摄像机、动画、模型和材质然后提交绘制命令。应用阶段决定画什么2.几何阶段把模型的 3D 顶点经过位置变换、裁剪、组装等处理变成准备投影到屏幕上的三角形数据。几何阶段决定形状和位置3.光栅化阶段把这些三角形转换成屏幕上的片元并通过片元着色、深度测试、混合等步骤得到最终图像。光栅化阶段决定哪些像素显示什么颜色三、细嗦应用阶段我们按照流程从头到尾来说说应用阶段搞什么东东1.首先由玩家操作键盘、鼠标或者触摸输入2.更新各种状态角色位置、粒子、物理运动、摄像机位置方向视野、动画3.剔除摄像机看不到的物体4.使用已经加载好的模型、纹理和材质并更新本帧变化的矩阵、动画、颜色等参数5.安排绘制顺序6.设置渲染状态意思就是用什么规则什么资源去做渲染这个工作7.提交Draw Call但是这个命令仅仅会指向一个需要被渲染的图元 (primitives) 列表而不会再包含任何材质信息这是因为我们已经在上一个阶段中完成了注意对于模型、纹理材质这些东西只有首次加载的时候写入系统内存然后再加载到显存里因为显卡读取显存更快而且大多数显卡对系统内存是没有访问权限的还有在把这些数据从系统内存加载到显存后并不是说就可以把这些数据从系统内存删除了因为cpu可能也需要调用他们他们从磁盘加载过来是很费劲的四、几何阶段的解读几何阶段主要做的是对每个顶点进行从模型空间转换到齐次裁剪空间接着通常再由硬件作透视除法最终得到归一化的设备坐标。具体过程是这样的模型空间–世界空间–观察空间–裁剪空间1.读取DrawCall命令将获得的数据构成三角形2.顶点着色器处理将顶点的坐标转换、变换法线、计算逐顶点光照、计算顶点颜色3.曲面细分着色器(可选)把一个三角形细分成很多三角形4.几何着色器(可选)增加、删除或修改图元图元说的就是三角形5.裁剪三角形GPU 判断三角形是否超出摄像机的可视范围。这和应用阶段的物体剔除不同应用阶段判断整个物体要不要提交 Draw Call几何阶段判断物体内部的三角形如何裁剪6.透视除法和屏幕映射GPU 将裁剪空间坐标转换为屏幕坐标产生近大远小的透视效果。这时三角形已经知道三个顶点在屏幕上的位置每个顶点对应的 UV、颜色、法线等数据这里的透视除法就是将xyz3个坐标分别除以第四个分量ww初始是1经过投影矩阵后被计算出来7.交给光栅化阶段几何阶段最后输出一批已经确定位置和形状的三角形以及每个顶点的附加数据后续光栅化阶段会把三角形覆盖的区域转换成片元继续执行片元着色器五、光栅化阶段干了什么1.转换到屏幕坐标几何阶段经过透视除法后得到 NDC 坐标光栅化阶段再把它转换成实际屏幕坐标。NDC坐标指的就是透视除法计算后得到的坐标也是归一化坐标但是和普通的归一化0~1不一样它是-1~12.确定三角形覆盖的范围并确定范围内的片元片元就是可能称为像素点的一个东西在采样点也就是还没被绘制颜色的像素点这个没被处理的像素点的中心要是在三角形内部那就被确定为一个片元但是片元不一定最终被绘制成像素点一个像素点的位置可能有多个片元但是只有最靠前的片元才会被处理为像素3.插值顶点数据三角形的三个顶点通常分别有不同的UV 坐标顶点颜色法线深度其他自定义数据GPU 会根据片元在三角形中的位置对这些数据进行插值。UV 和法线也会被插值。透视场景下通常使用透视校正插值。4.执行片元着色器片元着色器通常对每个片元执行一次负责计算颜色采样纹理计算光照混合顶点颜色处理透明度生成法线贴图效果丢弃某些片元5.逐片元操作对每个片元进行进行深度、模板等测试GPU 判断这个片元是否应该保留深度测试是否被前面的物体遮挡模板测试是否允许写入指定区域剪裁测试是否在有效绘制区域内透明度测试透明片元是否丢弃6.颜色混合如果物体是透明的GPU 会把新颜色和已经存在的颜色混合最终颜色 新颜色 × 透明度 旧颜色 × (1 - 透明度)注意上述的这个顺序不统一有的GPU会在执行片元着色器前先进行逐片元操作因为当 GPU 在片元着色器阶段花了很大力气终于计算出片元的颜色后 却发现这个片元根本没有通过这些测试 也就是说这个片元还是被舍弃了 那之前花费的计算成本全都浪费了对于一个充分发挥性能的GPU当然是提前知道哪些片元要操作在Unity 给出的渲染流水线中 我们也可以发现它给出的深度测试是在片元着色器之前。这种将深度测试提前执行的技术通常也被称为Early-Z技术但是也会出现一些问题如果你提前测试深度有一个镂空的叶子挡在墙的前面在镂空的部分是透明的像素这个部分应该是要显示后面的墙但是提前测试的时候会告知后面的片元着色器这里有片叶子在墙的前面但是不告诉它叶子是镂空的结果片元着色器就只绘制了镂空的叶子但是镂空的部分没有显示后面的墙。按正常的流程走的话这里片元着色器会把镂空的部分的像素clip去除掉用后面的墙来填充因此现代的 GPU 会判断片元着色器中的操作是否和提前测试发生冲突如果有冲突就会禁用提前测试。但是 这样也会造成性能上的下降 因为有更多片元需要被处理了。 这也是透明度测试会导致性能下降的原因。六、处理DrawCall我们通过三个问题来了解DrawCall的处理过程1.在这个渲染流程中CPU和GPU是如何并行工作的命令缓冲区CPU提交的DrawCall命令会放入这个缓冲区队列中CPU不用管GPU是不是闲置的我只需要把任务丢进这个缓冲队列其他的GPU你自个看着办当然这个缓冲队列不止放DrawCall命令更换着色器或者纹理的命令也在这里面2.为什么DrawCall过多会影响帧率帧率是由cpu和gpu共同主导的当cpu负担很大需要制作很多DrawCall命令的时候gpu游刃有余说C哥你行不行啊这点像素我洒洒水就绘制完了这时候就是cpu耗时长影响帧率。3.如何减少DrawCall这个问题你要先知道DrawCall是怎么来的我们应用阶段得知DrawCall是我们C哥根据场景状态准备好渲染资源和参数然后向G哥提交Draw Call对于同一套渲染规则可以合并在一起做成一个DrawCallGpu一趟就跑出来了而不同规则就会导致生成不同的DrawCall我们要解决的就是怎么让相同规则的一起塞进一个DrawCall里让G哥来绘制4.总结Draw Call是CPU提交给GPU的绘制命令不是CPU计算顶点后生成的结果。减少Draw Call的关键是让更多物体共享同一套Shader、材质和渲染状态并通过合并网格或实例化在一次绘制命令中处理更多物体。最核心的条件是这些物体必须能够使用同一套渲染规则在一次命令中被 GPU 绘制。细节分析1.要使用相同的Shader或者Shader变体例如都使用同一种光照 Shader。如果一个用标准材质、一个用透明 Shader通常不能直接合并。2.渲染状态相同包括深度测试方式是否写入深度透明混合方式背面剔除方式渲染通道图元类型等3.材质和纹理共享最简单的情况是使用同一个材质和纹理。如果纹理不同也可以通过纹理图集Texture Array在 Shader 中根据索引选择纹理让它们共享一次绘制。4.必须属于同一个渲染Pass普通颜色绘制、阴影绘制、深度绘制通常是不同 Pass不能简单合成一个 Draw Call。5. 几何数据能否合并把两个箱子的顶点数据拼成一个大网格6.物体间的差异能否作为数据传入差异比如这两个箱子可以拼成一个大网格但是需要位置数据来区分他们的差异7.物体的绘制顺序能否合并不透明的物体可以调整顺序来按材质合批但是透明的物体不能随意合并因为他的绘制受远近顺序影响满足上述条件的合批的方案有如下StaticBatch / DynamicBatch / GPUInstancing七、总结今天梦到渲染管线了你梦到了吗

相关新闻

从拼参数到拼实效,2026年中国AI进入“算账时代”

从拼参数到拼实效,2026年中国AI进入“算账时代”

2026年8月,中国AI行业出现明确转向:靠Demo博热度的粗放时代终结,ROI、安全合规、场景复制成为企业采购AI的三个硬指标。8部委联合发文(参考来源:《新一代人工智能伦理规范》等公开政策文件)、央国企开放超1…

2026/8/26 16:02:17 阅读更多 →
【Agent】1.GPT构建器演示 - 使用自然语言构建代理

【Agent】1.GPT构建器演示 - 使用自然语言构建代理

本案例灵感来源于OpenAI DevDay 2023上展示的GPTs界面。它演示了如何使用自然语言构建一个代理,更特别的是,您可以使用另一个代理来构建您自己的代理!1. 案例目标本案例的主要目标是创建一个"代理构建器",它能够根据用户…

2026/8/26 16:14:27 阅读更多 →
内容运营用CMS可发现性能力提升检索复用与规模化协作效率

内容运营用CMS可发现性能力提升检索复用与规模化协作效率

导读:内容找不到,就等于没写过。Baklib 是 AI 驱动的知识管理与发布平台,以全文检索 LLM 智能总结提升内容可发现性,并配合集合、分类与任务控制中心支撑… 内容找不到,就等于没写过。Baklib 是 AI 驱动的知识管理与发…

2026/8/26 13:59:39 阅读更多 →

最新新闻

Agent任务拆解:从Prompt到可校验可追踪的稳定工程流程

Agent任务拆解:从Prompt到可校验可追踪的稳定工程流程

很多开发者在搭完第一个 Agent 的时候,都会经历一个类似的心路历程:Demo 阶段一切都很丝滑,让大模型查资料、写代码、调工具,每一步都像模像样;一旦把真实业务接进系统,Agent 就开始花式翻车。要么漏掉关键…

2026/8/27 21:12:25 阅读更多 →
LTC2946电源轨监测实战:I2C接口下的电压电流功率与能量测量

LTC2946电源轨监测实战:I2C接口下的电压电流功率与能量测量

做电源轨监测这几年,我越来越觉得“能测电压”和“会算电能量”是两回事。去年在改一台48V工业设备的电源板时,主控要同时盯住电压、电流、瞬时功率,还要统计整块板子上电过程的电荷和能量,接口最好用I2C,方便直接挂到…

2026/8/27 21:12:25 阅读更多 →
Freescale高灵敏度加速度计应用实践:选型、硬件与调试全攻略

Freescale高灵敏度加速度计应用实践:选型、硬件与调试全攻略

Freescale的高灵敏度加速度计,说实话在MEMS传感器圈子里算是一代经典。我最早接触这个系列是在做工业状态监测的项目,当时需要检测低速重载设备的微小振动,找了一圈发现Freescale(现在叫NXP)的MMA系列在分辨率和噪声特…

2026/8/27 21:12:25 阅读更多 →
AD/DA转换器原理、选型与PCB设计避坑指南

AD/DA转换器原理、选型与PCB设计避坑指南

1. 项目缘起:从“未知引脚”到信号世界的桥梁最近在调试一个嵌入式项目时,遇到了一个让人头大的问题:系统读取到的传感器数据总是飘忽不定,时准时不准。用万用表量模拟信号是稳定的,但到了微控制器里就变成了“跳跳糖”…

2026/8/27 21:12:25 阅读更多 →
C语言strcmp模拟实现:底层内存契约与安全编码实践

C语言strcmp模拟实现:底层内存契约与安全编码实践

1. 为什么“模拟实现strcmp”是C语言学习路上绕不开的硬核关卡刚接触C语言字符串处理时,我见过太多人对着strcmp函数文档发呆:它返回一个整数,但这个整数到底代表什么?为什么不是简单的true/false?为什么比较两个相同字…

2026/8/27 21:12:25 阅读更多 →
Python 机器学习库 Top 10,你值得拥有!

Python 机器学习库 Top 10,你值得拥有!

随着人工智能技术发展且普及开来, 它超越了好多其他编程语言, 变成了机器学习领域里极热门且极常用的编程语言当中的一个。致使它在众多开发者里这般受追捧存在好多缘由, 其中一个便是它有着大量跟机器学习相关的开源框架以及工具库。依据它的数据表明, 45%的科技公司都趋向于把…

2026/8/27 21:11:25 阅读更多 →

日新闻

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

2026/8/27 0:00:51 阅读更多 →
网盘直链下载助手5分钟解析八大网盘真实地址

网盘直链下载助手5分钟解析八大网盘真实地址

网盘直链下载助手5分钟解析八大网盘真实地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅雷云盘 / 夸…

2026/8/27 1:06:27 阅读更多 →
从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南

从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南

从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 Arduino ESP32 是乐鑫官方的 ESP32 系列 Ardui…

2026/8/27 1:06:27 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/27 17:46:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/27 20:00:17 阅读更多 →