news 2026/1/17 10:03:46

图形渲染管线流程笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
图形渲染管线流程笔记

文章目录

  • 概述
  • 现代GPU的图形渲染管线完整流程
  • 阶段详解(2D视角)
    • 输入装配(Input Assembler)
    • 顶点着色器(Vertex Shader)
    • 图元装配(Primitive Assembly)
    • 光栅化(Rasterization)
    • 片段着色器(Fragment Shader)
    • 测试与混合(Tests & Blending)
    • 对于2D游戏,可以重点关注
  • 实际渲染2D精灵流程示例
    • 准备阶段(CPU)
    • 顶点着色器处理
    • 光栅化
    • 片段着色器处理
    • 最终输出

概述

  • 图形渲染管线(Graphics Pipeline)

现代GPU的图形渲染管线完整流程

  • CPU提交数据
  • 输入装配 -> 【顶点着色器】-> 曲面细分 -> 几何着色器
  • 图元装配 -> 光栅化 -> 【片段着色器】 -> 测试与混合
  • 帧缓冲区 -> 【屏幕显示】

阶段详解(2D视角)

输入装配(Input Assembler)

  • 作用:收集原始的顶点数据
  • 2D示例:
// 一个2D矩形的4个顶点数据constvertices=[// x, y, u, v (位置坐标 + UV纹理坐标)-1,-1,0,0,// 左下角1,-1,1,0,// 右下角-1,1,0,1,// 左上角1,1,1,1// 右上角];

顶点着色器(Vertex Shader)

  • 作用:处理每个顶点的位置和属性
  • 2D特点:通常简单,只是传递数据
  • 示例关键理解:每个顶点都会执行一次这个程序:
// Laya 2D顶点着色器voidmain(){gl_Position=mvp*vec4(a_Position,0.0,1.0);// 位置变换v_TexCoord0=a_TexCoord0;// 传递UV坐标}

图元装配(Primitive Assembly)

  • 作用:将顶点组装成三角形、线条等基本图形
  • 2D示例:把4个顶点组装成2个三角形,组成一个矩形精灵

光栅化(Rasterization)

  • 作用:将几何图形转换为屏幕上的像素(片段)
  • 过程:三角形几何体 → 计算覆盖的像素 → 生成片段(Fragment)
  • 重要概念:片段(Fragment) ≠ 像素(Pixel)
    • 片段是"候选像素",还需要经过测试才能成为最终像素

片段着色器(Fragment Shader)

  • 作用:决定每个片段的最终颜色
  • 示例关键理解:每个像素都会执行一次这个程序!
voidmain(){vec4 color=texture2D(u_AlbedoTexture,v_TexCoord0);// 采样纹理color.rgb*=u_Brightness;// 调整亮度gl_FragColor=color;// 输出颜色}

测试与混合(Tests & Blending)

  • 深度测试:决定哪个物体在前(3D重要,2D通常按绘制顺序)
  • 模板测试:用于遮罩效果
  • Alpha混合:处理半透明效果
// 经典的Alpha混合公式final_color=source_color*source_alpha+destination_color*(1.0-source_alpha)

对于2D游戏,可以重点关注

  • [精灵顶点数据] → [顶点着色器(传递数据)] → [光栅化] → [片段着色器(上色)] → [混合]
  • 关键简化:
    • 顶点着色器通常只是传递位置和UV
    • 深度测试通常用绘制顺序代替
    • 主要工作都在片段着色器中完成

实际渲染2D精灵流程示例

准备阶段(CPU)

// Laya中创建精灵letsprite=newLaya.Sprite();sprite.loadImage("hero.png");

顶点着色器处理

// 每个顶点执行:位置 → 裁剪空间,UV → 传递// 输入:4个顶点 → 输出:4个变换后的顶点

光栅化

  • 矩形几何体 → GPU计算覆盖的像素 → 生成1000个片段(假设精灵大小)

片段着色器处理

// 每个片段执行:voidmain(){// 根据UV坐标从纹理获取颜色vec4 color=texture2D(u_Texture,v_TexCoord0);// 应用特效(如变红表示受伤)if(u_IsHurt>0.5){color.rgb=mix(color.rgb,vec3(1.0,0.0,0.0),0.5);}gl_FragColor=color;}

最终输出

  • 经过Alpha混合后,精灵显示在屏幕上
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/14 14:43:31

springboot校园助学兼职发布系统-vue

目录已开发项目效果实现截图校园助学兼职发布系统摘要关于博主开发技术介绍核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联…

作者头像 李华
网站建设 2026/1/12 7:43:40

springboot线上就医咨询系统 药品商城 挂号 分时段1c3d7t79

目录已开发项目效果实现截图摘要关于博主开发技术介绍核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!已…

作者头像 李华
网站建设 2026/1/12 6:55:10

多智能体间通信之Golang

基于 Golang 实现多 LLM 智能体之间的高效通信,这是构建复杂智能体系统(如任务分工、协作决策、结果汇总)的核心环节。本文将围绕多智能体通信的核心场景、Golang 原生通信方案、结构化消息处理、分布式通信拓展展开,提供可落地的代码实现和关键细节解析。 一、多智能体通…

作者头像 李华
网站建设 2026/1/11 22:37:36

双向充电:未来能源交互的关键技术

目录 一、双向充电工作原理 1. 双向充电的基本概念 2. 能量流动方向 3. 核心电路拓扑 4. 控制逻辑 二、双向充电关键技术 1. 双向功率变换拓扑优化 2. 并网控制技术 3. 电池管理与安全保护 4. 通信与协议标准 5. 能量管理策略 三、典型应用案例详解 1. 车辆到负载…

作者头像 李华
网站建设 2026/1/14 3:51:45

吐血推荐专科生必用TOP9 AI论文软件测评

吐血推荐专科生必用TOP9 AI论文软件测评 2025年专科生论文写作工具测评:为什么你需要这份榜单? 随着AI技术在教育领域的快速渗透,越来越多的专科生开始借助AI工具提升论文写作效率。然而,面对市场上琳琅满目的论文软件&#xff0c…

作者头像 李华
网站建设 2026/1/14 12:23:33

【图像处理基石】以图搜图的底层架构是怎样的?

以图搜图的底层是CBIR(基于内容的图像检索) 架构,核心流程为图像预处理→特征提取→特征索引与ANN检索→相似度匹配→结果排序,支撑该流程的是一系列成熟算法,解决方案则围绕“精度-速度-成本”平衡进行工程落地。 一、底层算法架构(5层核心链路) 图像预处理:统一尺寸…

作者头像 李华