当前位置: 首页 > news >正文

OpenGL渲染与几何内核那点事-项目实践理论补充(一-3-(3):GPU 着色器进化史:从傻瓜相机到 AI 画师,你的显卡里藏着一场战争)

@[TOC](OpenGL渲染与几何内核那点事-项目实践理论补充(一-3-(3):GPU 着色器进化史:从傻瓜相机到 AI 画师,你的显卡里藏着一场战争))

代码仓库入口:

  • github源码地址。
  • gitee源码地址。

系列文章规划:

  • (OpenGL渲染与几何内核那点事-项目实践理论补充(一-1-(1):从开发的视角看下CAD画出那些好看的图形们))
  • OpenGL渲染与几何内核那点事-项目实践理论补充(一-1-(2):看似“老派”的 C++ 底层优化,恰恰是这些前沿领域最需要的基础设施)
  • OpenGL渲染与几何内核那点事-项目实践理论补充(一-1-(3):你的 CAD 终于能画标准零件了,但用户想要“弧面”、“流线型”,怎么办?)
  • OpenGL渲染与几何内核那点事-项目实践理论补充(一-1-(4):GstarCAD / AutoCAD 客户端相关产品 —— 深入骨髓的数据库哲学)
  • OpenGL渲染与几何内核那点事-项目实践理论补充(一-1-(5)番外篇:给 CAD 加上“控制台”——让用户能实时“调参数、看性能”)
  • OpenGL渲染与几何内核那点事-项目实践理论补充(一-1-(6)番外篇:让视图“活”起来——鼠标拖拽、缩放背后的数学魔法
  • OpenGL渲染与几何内核那点事-项目实践理论补充(一-1-(7)-番外篇:点击的瞬间,发生了什么?
  • OpenGL渲染与几何内核那点事-项目实践理论补充(一-1-(8)-番外篇:当你的 CAD 遇上“活”的零件)
  • OpenGL渲染与几何内核那点事-项目实践理论补充(一-2-(1)-当你的CAD想“联网”时:从单机绘图到多人实时协作)
  • OpenGL渲染与几何内核那点事-项目实践理论补充(一-2-(2)-当你的CAD需要处理“百万个螺栓”时:从内存爆炸到丝般顺滑)
  • OpenGL渲染与几何内核那点事-项目实践理论补充(一-3-(1):你的 CAD 终于能联网协作了,但渲染的“内功心法”到底是什么?)
  • OpenGL渲染与几何内核那点事-项目实践理论补充(一-3-(2):当你的CAD学会“偷懒”:从“一笔一画”到“一键生成”的OpenGL渲染进化史)

巨人的肩膀:

  • deepseek
  • gemini

GPU 着色器进化史:从傻瓜相机到 AI 画师,你的显卡里藏着一场战争

故事开篇:百万螺栓之后,新烦恼来了

上一回,你的 CAD 软件好不容易扛住了“千人同屏”的分布式高并发,能流畅加载 GB 级的地形图,还能在 RTX 5090 上跑 DLSS 5 的 AI 渲染。你正坐在工位上喝咖啡,心想这下总算可以消停几天了。

结果,一个做汽车设计的用户发来一封邮件,标题是“你的软件渲染我的车壳像塑料玩具!”附件里,他用你的 CAD 导出的一张渲染图——引擎盖上的高光死白一片,曲面转折处没有任何细腻的渐变,远处看还好,一拉近就露出密密麻麻的三角形网格,完全没有金属漆的质感。

你赶紧检查代码:模型本身没问题,是 NURBS 曲面转的高精度网格;纹理贴图也是 4K 的。那问题出在哪?

你调出性能面板一看:顶点数 1200 万,帧率只有 12 fps。你突然意识到,尽管你的几何内核已经把数据准备得足够精细,但到了GPU 渲染这一步,你的代码还在用“老古董”方式画图。你只是在 CPU 端把顶点一股脑塞给 OpenGL,然后靠显卡默认的“傻瓜模式”去画——颜色单调、光照假、性能还差。

你决定从头捋一遍:从显卡诞生至今,程序员到底是怎么把一张图从“能看”变成“电影级”的?

你发现,这背后是一部程序员不断从硬件厂商手里抢夺控制权的斗争史。而这场斗争的主角,就是今天要聊的两个幕后英雄——Vertex Shader(顶点着色器)Fragment Shader(片元着色器)


V1.0:固定管线时代 —— “官方给什么,你就用什么”

你回想起自己上大学时,第一次用 OpenGL 1.x 画一个旋转的茶壶。那时候代码极其简单:

glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glLightfv(GL_LIGHT0,GL_POSITION,lightPos);glMaterialfv(GL_FRONT,GL_DIFFUSE,matDiffuse);glutSolidTeapot(1.0);

几行代码,一个带光照的茶壶就出来了。当时你觉得很神奇,现在你再看,这就像一个“傻瓜相机”——所有参数都是固定的旋钮,你只能调调光圈(光源位置)、换换滤镜(材质颜色),但底层的成像算法是写死在相机芯片里的,你没法改。

在显卡的世界里,这个“傻瓜相机”叫固定功能管线。硬件厂商(比如早期的 3dfx、NVIDIA Riva TNT、ATI Rage)把顶点变换像素着色的算法直接用电路实现了:

  • 顶点处理阶段:显卡内部有一套固定的公式,你把顶点的三维坐标(x, y, z)传进去,它自动帮你做模型变换、视图变换、投影变换,然后计算光照。你想改变它的算法?门都没有,只能调参数——比如把光源改成聚光灯,或者把材质的高光系数从 32 改成 64。
  • 像素处理阶段:只能做简单的纹理采样和颜色混合。你想实现一个卡通描边效果?对不起,硬件不支持。你想让水面有波光粼粼的动态高光?对不起,你只能换一张动态纹理,没法自己写光照公式。

第一批吃螃蟹的游戏开发者(比如当年的《雷神之锤》团队)很快就受不了了:他们发现,所有用固定管线的游戏,画面看起来都差不多——因为光照模型是写死的(通常是简化的 Phong 或 Gouraud 着色),材质的表现力极其有限。卡马克(John Carmack)为了在《毁灭战士3》里实现逼真的阴影和凹凸感,不得不疯狂魔改 OpenGL 扩展,但依旧处处受限。

你此刻的 CAD 软件里,如果还在用老式的glBegin()/glEnd()和固定管线,那画出来的车壳当然像塑料玩具——因为你的金属漆 BRDF 根本塞不进固定管线的公式里

深度扩展:固定管线的技术全貌

1. 固定管线的硬件实现

在 GPU 诞生早期(约 1990s 末至 2000s 初),图形芯片由两个独立的硬件单元组成:

  • T&L 单元:Transform & Lighting,负责顶点变换和光照计算,固化在芯片里。
  • 纹理单元:负责纹理采样、过滤、混合。

这些单元是ASIC,算法由硬件设计决定,无法通过软件更改。程序员通过状态机控制它们:

glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(...);// 设置视图矩阵glLightfv(...);// 设置光源参数glMaterialfv(...);// 设置材质属性
2. 固定管线的数学细节

顶点处理流程(GL 1.x 规范):

  1. 模型变换:物体坐标系 → 世界坐标系(由glTranslateglRotate等构成模型矩阵)。
  2. 视图变换:世界坐标系 → 相机坐标系(视图矩阵)。
  3. 光照计算:对每个顶点,根据光源位置、材质属性、法线方向,计算顶点颜色。早期常用Gouraud 着色:在顶点处计算光照,三角形内部颜色插值。
  4. 投影变换:相机坐标系 → 裁剪坐标系(投影矩阵,正交或透视)。
  5. 透视除法→ NDC(归一化设备坐标)。
  6. 视口变换→ 屏幕坐标。

像素处理阶段:

  • 纹理采样:从纹理内存取纹素,支持最近邻、双线性、三线性过滤。
  • 纹理混合:将纹理颜色与顶点插值颜色按固定函数混合(glTexEnv)。
  • 雾效:根据距离混合雾颜色。
  • Alpha 测试、深度测试、模板测试:固定功能。
3. 固定管线的局限性与扩展机制

为了突破限制,厂商引入了OpenGL 扩展,如:

  • GL_ARB_vertex_program:允许用汇编级语言写简单的顶点程序(可编程着色器雏形)。
  • GL_NV_register_combiners:NVIDIA 的像素组合器扩展,允许自定义颜色混合。
  • GL_ATI_fragment_shader:ATI 的像素着色器扩展。

这些扩展是V2.0 可编程管线的前奏,但由于各家实现不同,编写跨平台代码极其痛苦。

4. 为什么你的 CAD 还在用固定管线?

很多老旧 CAD 软件(或基于老旧图形引擎的软件)为了兼容旧显卡、简化开发,仍在使用固定管线的遗留模式(Compatibility Profile)。但现代 GPU 驱动对固定管线的支持已经靠软件模拟实现,性能低下,且无法发挥硬件特性。从 OpenGL 3.2+ 核心模式开始,固定管线已被彻底移除,必须使用着色器。


V2.0:可编程时代的开端 —— “把画笔交给艺术家”

你继续回忆。到了 2001 年左右,NVIDIA 发布了 GeForce 3,第一次在消费级显卡上支持可编程顶点着色器像素着色器。DirectX 8 和 OpenGL 扩展(GL_ARB_vertex_programGL_ARB_fragment_program)也随之而来。

这就像相机厂商突然说:“行吧,我们开放固件 SDK,你可以自己写代码控制传感器怎么成像了。” 艺术家(程序员)终于拿到了画笔!

在这个阶段,硬件上Vertex ShaderFragment Shader物理上独立的两个单元。它们各司其职:

  • 顶点着色器(VS):程序员可以写一小段代码,控制每个顶点怎么变换。比如,你可以在 VS 里用正弦函数让旗帜的顶点上下波动:
    y = A ⋅ sin ⁡ ( k ⋅ x − ω ⋅ t ) y = A \cdot \sin(k \cdot x - \omega \cdot t)y=Asin(kxωt)
    你还可以在这里计算自定义的光照,或者把一些插值数据(如纹理坐标、法线)传递给像素着色器。
  • 片元着色器(FS):程序员可以控制每个像素的最终颜色。你可以实现复杂的逐像素光照(如 Blinn-Phong)、法线贴图环境映射,甚至简单的后期特效。

你兴奋地把车壳的渲染切换到了可编程管线。你写了一个简单的 Blinn-Phong 片元着色器,金属漆的质感瞬间提升了一个档次——因为现在高光是逐像素计算的,而不是在顶点处算完再粗糙插值。

但好景不长,你又遇到了新问题。你的场景里,车壳模型有1200 万顶点,但像素着色器写的特效很简单(就一个金属光照)。你发现 GPU 利用率很奇怪:顶点着色器单元累得要死,帧率被顶点处理拖垮;而像素着色器单元却在悠闲地摸鱼

反过来,当你加载一个简单的方块,但上面叠加了多层复杂的后期特效(比如 SSAO、景深)时,像素着色器忙到冒烟,顶点着色器闲得打瞌睡

你恍然大悟:固定分配硬件资源的方式太蠢了!就像你让一个厨师既负责切菜又负责炒菜,但规定他必须左手切菜右手炒菜——如果某道菜需要大量切菜,左手忙死右手也只能干等。

深度扩展:分离式可编程着色器的细节

1. 着色器汇编与高级语言
  • 早期:程序员用类似汇编的语言编写着色器(如 DirectX 的Vertex Shader Assembly、OpenGL 的ARB_vertex_program汇编)。代码极其晦涩,寄存器数量严格受限(比如初代 VS 只有 12 个临时寄存器)。
  • 高级语言诞生:NVIDIACg(2002年)、微软HLSL(DirectX 9,2002年)、OpenGLGLSL(2003年)相继推出,极大降低了门槛。
2. Vertex Shader 1.0 / 2.0 的能力边界
  • 输入:顶点属性(位置、法线、颜色、纹理坐标等)。
  • 输出:变换后的顶点位置(必须写入gl_Position)、传递给片元着色器的插值变量(varying)。
  • 限制
    • 无法访问纹理(顶点纹理拾取是 SM 3.0 / GL 3.0 之后才支持的特性)。
    • 无法生成新顶点(不能做几何细分、不能做曲面细分)。
    • 指令数、寄存器数量严格受限(早期 VS 2.0 最多 256 条指令)。
3. Fragment Shader 1.0 / 2.0 的能力边界
  • 输入:光栅化插值后的顶点数据。
  • 输出:像素颜色(可输出到多个渲染目标 MRT,需要硬件支持)。
  • 限制
    • 无法知道像素的屏幕坐标(需要传递gl_FragCoord,但早期支持有限)。
    • 无法丢弃像素discard关键字在 SM 2.0 引入,用于透明裁剪)。
    • 纹理采样数量受限(早期 FS 2.0 最多 16 个纹理单元)。
4. 硬件资源分配不均衡的根因

在 GeForce 6/7 系列(2004-2006)之前,GPU 内部:

  • 顶点管线数量:6~8 个。
  • 像素管线数量:16~24 个。
  • 它们是物理分离的,中间通过一个固定大小的 FIFO 缓冲区传递数据。如果场景顶点密集,顶点管线成为瓶颈;如果像素填充率高(高分辨率、复杂着色),像素管线成为瓶颈。这种架构被称为分立式架构,后来被统一架构取代。
5. 早期着色器编程的“黑魔法”

由于资源有限,程序员们开发了各种技巧:

  • 用纹理存储查找表:将复杂数学函数(如sincos)预计算到纹理中,用纹理采样代替计算。
  • 压缩数据到颜色通道:用 RGBA 四个通道打包不同的标量数据。
  • 条件执行模拟:用lerp混合指令模拟if-else(因为早期着色器没有动态分支)。

这些技巧虽然晦涩,但奠定了现代 GPU 编程的思维基础。


V3.0:统一着色器架构 —— “身份不重要,干活最重要”

时间来到 2006 年,NVIDIA 发布了具有里程碑意义的GeForce 8800 GTX,它支持 DirectX 10,并首次采用了统一着色器架构

你第一次看到这块显卡的宣传图时,被它的内部结构震撼了:显卡上不再有“顶点处理区”和“像素处理区”的物理划分,而是密密麻麻排列着128 个一模一样的流处理器。每个流处理器既能跑顶点着色器代码,也能跑像素着色器代码,甚至还能跑一种新的着色器——几何着色器

这就像工厂进行了丰田式精益改造:以前是固定工位,A 组只做零件,B 组只做组装。现在所有工人都是多能工,任何工人拿到任何任务都能干。当订单(图形负载)来了,调度器会根据任务类型动态分配工人——顶点任务多就多派些人去跑顶点着色器;像素任务多就全派去跑像素着色器。

你的 CAD 软件升级到统一架构后,GPU 利用率一下子飙到了95% 以上。车壳的 1200 万顶点不再构成瓶颈,因为当顶点处理完成后,那些流处理器立刻转去处理复杂的光照计算。帧率从 12 fps 跳到了 45 fps。

你终于明白,逻辑上的分工(VS 负责几何变换,FS 负责着色)仍然存在,但物理上的分工已经消失。程序员写的顶点着色器和片元着色器代码,在硬件眼里都是一条条线程,被调度到空闲的流处理器上执行。

深度扩展:统一着色器架构的技术内幕

1. 统一架构的硬件组成

以 GeForce 8800 GTX(G80 核心)为例:

  • 流多处理器:16 个 TPC,每个 TPC 包含 2 个 SM,共128 个流处理器
  • 每个流处理器:标量 ALU,支持整数、浮点、特殊函数运算。
  • 调度器:硬件线程调度器,以Warp(NVIDIA 术语,32 个线程为一束)或Wavefront(AMD 术语,64 线程)为单位调度。
  • 共享内存 / L1 缓存:每个 SM 有 16KB 共享内存(可配置)。
2. 从分离到统一的逻辑映射
版本顶点着色器像素着色器硬件执行单元
V2.0独立硬件独立硬件分离,固定数量
V3.0+逻辑阶段逻辑阶段统一流处理器池

调度过程

  1. 驱动将 GLSL/HLSL 代码编译为中间表示。
  2. 在 DrawCall 时,GPU 前端(命令处理器)生成顶点任务和像素任务。
  3. 任务分发器将任务队列分配给各 SM 的 Warp 调度器。
  4. 调度器在每个时钟周期选择一个就绪的 Warp 发射指令。
3. 统一架构带来的新着色器类型
  • 几何着色器:在顶点和片元之间插入,可操作图元(点、线、三角形),能生成或销毁图元。
  • 计算着色器:完全脱离图形管线,用于通用并行计算。
4. 统一架构的编程模型变化
  • 资源绑定模型:从固定纹理单元改为资源视图,需要手动管理描述符堆。
  • 常量缓冲区:取代了原先的“常量寄存器”,允许更大、更灵活的数据传递。
  • 无绑定资源:现代 API 支持将纹理、缓冲区直接通过 GPU 虚拟地址访问。
5. 你的 CAD 如何利用统一架构?
  • 顶点密集场景:VS 代码被大量发射,占用大部分流处理器。
  • 像素密集场景:FS 代码主导。
  • 通用计算任务:用 Compute Shader 在 GPU 上做 BVH 构建、碰撞检测、物理模拟。
6. 统一架构之后的演进

从 G80(2006)到 Ada Lovelace(2022),流处理器数量从 128 增至18,432,但核心调度思想未变。变化在于:

  • Tensor Core:专用矩阵运算单元,加速 AI。
  • RT Core:专用光线追踪加速单元。
  • 更大的缓存层次:L1、L2 缓存大幅增加,减少显存访问。

V4.0:现代架构 —— “打破传统的流水线”

解决了硬件利用率问题后,你本以为可以高枕无忧了。但用户又提出了新的变态需求:他们想在 CAD 里实时预览数千万面的整车模型,还要有上百个动态光源(模拟摄影棚灯光),还要能实时切换材质(从哑光漆到电镀铬)。

你尝试把 3000 万面的模型塞进 Vertex Shader,结果 GPU 直接罢工——不是算不动,而是顶点着色器只能“一对一”处理顶点,你没法在 GPU 内部生成或删除顶点。于是 CPU 必须把 3000 万顶点全部传过去,显存带宽瞬间爆炸。

这时候,你了解到了现代图形 API 的两大神器Mesh Shader延迟渲染

神器一:Mesh Shader —— 顶点着色器的“超进化”

Mesh Shader 是 NVIDIA Turing 架构(RTX 20 系列)引入的,旨在彻底取代传统的 Vertex Shader + 几何着色器 + 曲面细分着色器的组合。

它不再是一个个顶点地处理,而是把模型预先切成一块块网格片,然后:

  1. Task Shader:决定哪些网格片需要渲染(视锥剔除、遮挡剔除)。
  2. Mesh Shader:对每个网格片,并行生成该片内的所有顶点和图元,并可以动态决定生成多少三角形。

这意味着:

  • CPU 不用再传海量顶点:只需传一个低精度的“代理网格”,Mesh Shader 在 GPU 上实时生成高细节。
  • 动态 LOD:根据距离,Mesh Shader 可以输出不同精度的三角形,无需 CPU 切换模型。
  • 无与伦比的剔除效率:Task Shader 可以直接丢弃整个网格片,节省大量计算。

你在 CAD 里尝试启用 Mesh Shader(虽然 OpenGL 没有原生支持,但 Vulkan 有VK_NV_mesh_shader扩展)。3000 万面的模型,现在 GPU 实际只处理了视锥内的一小部分,帧率稳定在 60 fps。

神器二:延迟渲染 —— 片元着色器的“分阶段作战”

车壳模型有了,但上百个光源怎么办?传统的前向渲染里,每个片元着色器都要循环遍历所有光源,计算量是O ( 片段数 × 光源数 ) O(\text{片段数} \times \text{光源数})O(片段数×光源数),几百个光源直接卡成 PPT。

你引入了延迟渲染:把渲染分成两个阶段。

  1. 几何阶段:不计算光照,只把物体的几何属性(位置、法线、材质 ID、粗糙度等)写入多张纹理(称为G-Buffer)。
  2. 光照阶段:用一个覆盖全屏的四边形,在片元着色器里从 G-Buffer 读取数据,然后逐像素累加所有光源的贡献。

这样做的好处是:光照计算量与场景复杂度解耦。不管场景有多少物体,光照阶段只处理屏幕上的每个像素一次。上百个光源也能轻松应对。

更进一步,你还可以用分块延迟渲染,把屏幕分成若干小块,每块只考虑影响它的光源,进一步降低计算量。

现在,你的 CAD 渲染出来的车壳,终于有了摄影棚级的质感:细腻的金属颗粒、逼真的反射、柔和的阴影。用户发来邮件:“这才是我想象中的样子!”

深度扩展:现代着色器架构与高级渲染技术

1. Mesh Shader 详细解析

传统管线 vs Mesh 管线

传统: IA -> VS -> HS -> TS -> DS -> GS -> Rasterizer Mesh: Task Shader -> Mesh Shader -> Rasterizer
  • Task Shader:可选,负责对 meshlet 进行剔除和 LOD 选择。每个线程组处理一个 meshlet。
  • Mesh Shader:接收 Task 的输出(或直接接收 meshlet 数据),生成顶点和图元。输出直接送入光栅化器。

Meshlet 数据结构
一个 meshlet 通常包含:

  • 顶点索引(最多 64 或 126 个,取决于硬件)
  • 图元索引(最多 126 个三角形)
  • 通过压缩格式存储,大幅减少带宽。

在 CAD 中的应用

  • 程序化几何生成:在 Mesh Shader 里根据参数方程生成 NURBS 曲面的近似三角形,CPU 端无需存储网格。
  • 视图相关 LOD:根据屏幕空间大小动态选择细分级别。

硬件支持情况

  • NVIDIA:Turing+(RTX 20 系列及以上)。
  • AMD:RDNA 2+(RX 6000 系列及以上)。
  • API 支持:DirectX 12 Ultimate、Vulkan(VK_NV_mesh_shaderVK_EXT_mesh_shader)。
2. 延迟渲染与 Forward+ 对比
特性前向渲染延迟渲染Forward+ (分块前向)
光源数少(<10)极多(>100)多(>100)
透明度易处理难处理易处理
MSAA支持困难支持
带宽高(G-Buffer 写入/读取)
材质多样性难(需材质 ID)

G-Buffer 布局示例

纹理格式存储内容
RT0RGBA16F世界空间位置(xyz) + 材质 ID(w)
RT1RGBA8法线(xy 压缩) + 粗糙度 + 金属度
RT2RGBA8反照率颜色
DepthD32F深度
3. 计算着色器(Compute Shader)在现代管线中的角色

除了 Mesh Shader,Compute Shader 已经渗透到渲染的各个环节:

  • 剔除:GPU 端视锥剔除、遮挡剔除。
  • LOD 选择:计算每个物体的屏幕覆盖率。
  • 粒子系统:更新粒子位置、速度。
  • 后处理:色调映射、Bloom、景深等。
  • 光线追踪降噪:AI 降噪器的推理在 Compute Shader 中执行。
4. 现代着色器编程语言趋势
  • GLSL仍在 OpenGL/Vulkan 中使用,但逐渐被HLSL统一(Vulkan 也支持 HLSL 编译)。
  • Slang:一种更现代的着色语言,支持模块化、泛型、自动微分,由 NVIDIA 等推动。
  • WGSL:WebGPU 的着色语言,语法类似 Rust。
  • SPIR-V:作为中间表示,使得不同语言可编译到同一后端。
5. 顶点着色器的未来:完全被 Mesh Shader 取代?

对于传统顶点变换,VS 依然简单高效。但对于高精度 CAD 模型,Mesh Shader 是必由之路。未来 GPU 可能会提供更细粒度的可编程几何管线,如Subdivision Surface Shader直接硬件加速曲面细分。

6. 你项目中的实践:从固定管线到现代 OpenGL

在你的Huhb3D-Viewer项目中,你已经完成了从固定管线到可编程管线的迁移。你可以:

  • 编写顶点着色器处理视图/投影变换。
  • 编写片元着色器实现 PBR 材质。
  • 使用 Uniform Buffer Object 高效传递相机和光源数据。
  • 使用 Compute Shader 加速 BVH 构建。

下一步,你可以尝试集成Mesh Shader(通过 Vulkan 后端)来处理超大规模 CAD 装配体,或者使用Bindless Texture技术实现巨量材质切换。


总结:一条进化之路

你关掉性能分析器,看着车壳模型在屏幕上流畅旋转,每个曲面转折处都有细腻的高光渐变。你想起十年前第一次用glBegin画茶壶的自己,不禁感慨万千。

版本核心逻辑解决的问题
V1.0 固定管线硬件写死算法,程序员调参数实现了 3D 硬件加速,但不可自定义,画面千篇一律
V2.0 独立着色器顶点/像素单元分离,可编程允许自定义效果,但硬件资源经常闲置/浪费
V3.0 统一架构流处理器池,动态分配任务硬件利用率大幅提升,支持更复杂的着色器类型
V4.0 现代架构Mesh Shader、Compute Shader、延迟渲染突破几何处理瓶颈,支持海量光源和超大规模场景

你终于明白,顶点着色器和片元着色器并不是一成不变的概念,它们是 GPU 从“固定功能电路”进化成“通用并行计算机”的过程中,逻辑上沉淀下来的两个关键阶段。理解了它们的演化史,你才算真正懂了现代图形编程的灵魂。

现在,当你再打开你的 CAD 软件,看到那些绚丽的材质、流畅的旋转、逼真的光影时,你看到的已经不是代码,而是一部波澜壮阔的图形硬件革命史


  • 如果想了解一些成像系统、图像、人眼、颜色等等的小知识,快去看看视频吧 :

    • 抖音:数字图像哪些好玩的事,咱就不照课本念,轻轻松松谝闲传
    • 快手:数字图像哪些好玩的事,咱就不照课本念,轻轻松松谝闲传
    • B站:数字图像哪些好玩的事,咱就不照课本念,轻轻松松谝闲传
      • 认准一个头像,保你不迷路:
  • 您要是也想站在文章开头的巨人的肩膀啦,可以动动您发财的小指头,然后把您的想要展现的名称和公开信息发我,这些信息会跟随每篇文章,屹立在文章的顶部哦

http://www.jsqmd.com/news/654340/

相关文章:

  • 从4.3(a)到2.1再到4.3(a):一次App Store审核拉锯战的破局复盘
  • 深入F28388D EtherCAT邮箱通信:如何实现两个从站间的自定义数据交换(附SDO读写测试心得)
  • PyTorch 2.8镜像行业实践:农业病虫害图像识别模型训练与田间部署
  • 如何用baidu-wangpan-parse轻松实现百度网盘高速下载
  • 表面粗糙度和硬度如何影响疲劳行为,高周疲劳or低周疲劳?
  • 【数据结构与算法】第49篇:代码调试技巧与常见内存错误排查
  • RDP Wrapper Library:Windows远程桌面多会话并发访问的技术实现与深度优化
  • 前端——前端构建优化实战:从15秒到1.5秒,我是如何优化打包的
  • 亚马逊卖家实测:指纹浏览器防关联效果到底如何?
  • Django和Fastapi的区别
  • LabVIEW堆叠柱状图实现
  • 【RK3588实战】从PyTorch到嵌入式部署:一个图像分类模型的完整落地之旅
  • Go语言的sync.RWMutex饥饿解决
  • 5分钟掌握B站视频转文字:bili2text让学习效率提升300%
  • 中国科学家建成全球最大量子计算原子阵列
  • 网络安全展望
  • DownKyi终极指南:3步轻松搞定B站高清视频下载
  • 百度网盘提取码智能解析工具:自动化获取解决方案
  • 零基础教程:用Sonic+ComfyUI快速制作口型同步数字人视频
  • 3秒克隆你的声音:Qwen3-TTS在VMware虚拟机中的部署与应用
  • 3分钟快速上手:免费在线PlantUML编辑器完整指南
  • 2026 年猪白条批发选哪家?
  • Optomec 为培养下一代工程师重磅推出气溶胶喷射系列教育机
  • Qt命名空间实战:从概念到项目架构的清晰解耦
  • NVIDIA Profile Inspector终极指南:5步解决配置保存问题并优化游戏性能
  • 专业的装修门窗避坑服务商
  • UDS服务
  • 别再只用find()了!C++ string里这两个‘反向’查找函数,处理用户输入和日志清洗超好用
  • 100W无线功率传输系统:从谐振匹配到效率优化的全链路实验
  • LinkSwift:八大网盘直链解析终极指南,告别限速下载新时代