Unity Shader入门精要第一道坎:渲染流水线到底是什么?
1.先整体了解一下什么是渲染流水线1.1该从哪里下手所以什么是渲染流水线我们不妨将这个问题拆成两个问题既什么是渲染什么是流水线。1.2什么是渲染渲染是一种工作流程通过一系列图形阶段把三维场景中的几何、材质、光照和相机信息最终计算成屏幕上每个像素的颜色生成一帧二维图像。1.3什么是流水线流水线则是一种工作方式引入流水线后不同步骤可以同时处理不同任务从而提高整体吞吐量。我们以制造一批娃娃来举例子通过分析不使用流水线和使用流水线的情况下生产娃娃看看他们的效率之间的差距这样或许你就知道为什么渲染要引入流水线技术毕竟GPU是以高性能著称。如下图1所示你会发现从开始到结束使用流水线的生产线总共制造了4个娃娃而没有使用流水线的生产线总共才制造了2个娃娃引入流水线后虽然制作一个洋娃娃仍然需要4个步骤但不需要从头到尾完成全部步骤 而是每个步骤由专人来完成所有步骤并行进行。如果你是生产线老板你会引入流水线技术吗答案是肯定的所以你现在知道为什么渲染要引入流水线技术了吗图11.4回答什么是渲染流水线1.4.1简要回答我们知道了渲染是一种工作流程而流水线是一种工作方式所以渲染流水线是一种并行工作方式与渲染工作流程的结合。1.4.2严谨表述当然以上表述可能过于简化如果你更追求严谨更严谨的表述:渲染流水线是将渲染任务划分为多个有序阶段并采用流水线方式让不同阶段同时或重叠处理不同数据从而提高渲染吞吐量的处理流程。2.渲染流水线三大阶段有哪些2.1该从哪里下手上面回答了什么是渲染流水线但只是从整体角度来讲解当然这是不够的我们接下来就要知道其内部如何也就是渲染流水线有哪些阶段以及每个阶段都在做什么。渲染流程通常分成三个阶段:应用阶段几何阶段光栅化阶段如图2所示。注意这里仅仅是概念性阶段每个阶段本身通常也是一个流水线系统即包含了子流水线阶段。本书的重点是几何阶段和光栅化阶段所以重点讲解这两个阶段的子流水线阶段如图3所示展示了这两个阶段的各个子流水线阶段。综上接下来讲解的逻辑是理解应用阶段大体都在做什么然后重头戏是理解几何阶段和光栅化阶段的各个子流水线阶段都在做什么。图2图32.2应用阶段应用阶段主要有三个阶段:把数据加载到显存→设置渲染状态→调用DrawCall。2.2.1把数据加载到显存中先搞清楚这里的数据指的是什么我们知道,模型由一个个点线面构成如图4所示。而这里的数据通常是模型的一些顶点信息例如顶点的位置信息、法线方向、顶点颜色、纹理坐标等。为了提高渲染性能往往需要做一个粗粒度剔除culling工作以把那些不可见的物体剔除出去这样就不需要再移交给几何阶段进行处理。也就是说完全在视锥外整体剔除但是与视锥相交则整个物体先提交后续由几何阶段的裁剪工作来处理。图4把数据加载到显存的流程我们游戏中的模型等数据往往一开始是存在系统硬盘中当我们场景中需要哪些数据的时候就会将这些数据从硬盘读取到系统内存RAM中然后再交给GPU的显存中大致流程如图5所示。图5为什么要加载到显存专业的事要交给专业的人我们知道GPU是以高性能著称所以场景中所有需要渲染的数据当然要交给GPU来处理所以应用阶段第一件事情就是把数据加载到显存中。2.2.2设置渲染状态首先理解一下状态这个词!状态就是当前生效的一套配置。每个状态项只能有一个值但多个状态项能同时生效。人当前只能跑、走或跳但能同时拿武器、穿装备、开 Buff。GPU 也是不能同时用两个片元着色器也不能既开又关混合但能同时用某 Shader、绑纹理、开深度、关混合。设置渲染状态就是改这些状态项告诉 GPU 接下来怎么画。为什么要设置渲染状态把数据加载到显存后这些数据只是一些模型的顶点信息如果不设置渲染状态那么大家所展示出来的模型都是一个样那有什么意义呢?所以这个时候你就要指定这个模型应该呈现一种什么状态给我们也就是指定材质顶点着色器/片元着色器、光源属性、材质等这就是设置渲染状态。注意如果我们没有更改渲染状态那么所有的网格都将使用同一种渲染状态如图6所示。图6为什么在把数据加载到显存的时候不直接把材质等数据加载到显存其实也可以但大部分不这样做原因是如果把模型加载和材质状态绑定死就会失去复用性、灵活性和性能优化空间。实际引擎通常把“资源加载”和“状态设置”分开绘制时再组合成一次具体的渲染。2.2.3调用DrawCall当上述工作都做完了之后CPU会调用DrawCall函数以命令GPU渲染哪个模型如图7所示。该函数会指向刚刚加载到显存的数据而不会再包含任何材质信息 ,因为在调用DrawCall之前,已经设置了渲染状态指定了这个模型要使用的材质可以参考如下伪代码。伪代码:设置 A 状态 Draw(A) 设置 B 状态 Draw(B)图72.2.4输出从字面意思来看应用阶段是由我们应用主导的因此由CPU负责实现。应用阶段是渲染管线的起点由 CPU 执行所以它没有“上一管线阶段”的输出作为输入。该阶段会输出好要渲染的数据而这一阶段最重要的输出是渲染所需的几何信息,既渲染图元。渲染图元可以是点线面。3.下篇讲解几何阶段与光栅化阶段的各个子流水线阶段...

相关新闻

GPT-5.6 写基金申请书怎么能这么好用!

GPT-5.6 写基金申请书怎么能这么好用!

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。 第一次冲击国家级重大项目的研究者,多数不是输在选题不够重要,也…

2026/10/13 7:03:56 阅读更多 →
嵌入式开发STM32F103ZET6--历史与生态

嵌入式开发STM32F103ZET6--历史与生态

1.嵌入式系统的技术方向嵌入式系统按照核心处理器/计算架构可以划分为以下4个方向1.1MCU方向MCU是将处理器内核,存储器(Flash,RAM),外部接口(UART,SPI,I2C,ADC,Timer等)集…

2026/10/13 7:03:56 阅读更多 →
真正值得科研学术党安装的 5 个 Codex skill

真正值得科研学术党安装的 5 个 Codex skill

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。 插件体系与 Skill 能力持续升级,Codex 正逐步融入硕博研究生的日…

2026/10/13 7:03:56 阅读更多 →

最新新闻

SpringBoot连接Hive数仓:HiveServer2 JDBC配置与排查实战

SpringBoot连接Hive数仓:HiveServer2 JDBC配置与排查实战

说句实话,第一次接到让 SpringBoot 应用连上 Hive 数仓的活,我内心的想法是:数据库连接嘛,换一个 driver,配一下 url,写两个查询方法,撑死了半天搞定。结果从环境准备到第一个查询真正跑通&…

2026/10/13 7:49:14 阅读更多 →
Ubuntu安装配置MySQL实战:版本选择、安全加固与性能调优

Ubuntu安装配置MySQL实战:版本选择、安全加固与性能调优

搞过 Linux 服务器的人基本都躲不开 MySQL,尤其是 Ubuntu 上安装配置这块。我最早是在一台配置很一般的云服务器上手搓,当时照着网上的文章一路 apt install mysql-server ,装完发现字符集乱码、root 密码没法远程登、端口被防火墙拦&#…

2026/10/13 7:49:14 阅读更多 →
仿QQ即时通信项目实战:Java Socket多线程全链路解析

仿QQ即时通信项目实战:Java Socket多线程全链路解析

很多找我推荐练手项目的人,都问过同一个问题:管理系统做腻了,有没有一个项目能让我把Java核心知识全部串起来,做完还能产生"我写的软件真的能跑起来"的成就感?我一般都会推荐仿QQ的即时通信项目。原因很简单…

2026/10/13 7:49:14 阅读更多 →
图像融合评估指标详解:从PSNR到SSIM的Python实现与避坑指南

图像融合评估指标详解:从PSNR到SSIM的Python实现与避坑指南

简介:面向图像融合算法研究的Python评估指标工具包,实现了EN、SF、SD、PSNR、MSE、MI、VIF、AG、CC、SCD、Qabf、SSIM、MS-SSIM、Nabf等十余种主流融合质量指标,支持单幅图像、单算法全部结果批量评估,也可一键计算所有对比算法并…

2026/10/13 7:49:14 阅读更多 →
Windows下MySQL安装配置全攻略:从环境准备到卸载清理

Windows下MySQL安装配置全攻略:从环境准备到卸载清理

1. 安装前的准备:版本选择与环境检查 1.1 先搞清楚该装哪个版本 提起MySQL在Windows上的安装,很多人第一反应是去官网点“Download”,结果面对一堆版本号直接懵了。这里我直接就事论事:目前主流选择是 MySQL Community Server 8…

2026/10/13 7:49:14 阅读更多 →
PhotoImpact v13 兼容指南:在 Win10/11 与虚拟机中重跑老图像软件

PhotoImpact v13 兼容指南:在 Win10/11 与虚拟机中重跑老图像软件

简介:Ulead PhotoImpact 13.0版是一套功能完整的图像编辑与设计软件,主要面向网页设计师、平面爱好者以及需要快速处理图片的办公用户。软件在图像制作、编修、克隆修复、滤镜填充、快速特效模板、抓图与动画方面都有完善表现,可高效产出网页…

2026/10/13 7:48:13 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →