news 2026/3/31 20:17:25

图形渲染管线流程笔记

作者头像

张小明

前端开发工程师

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/3/27 3:04:53

2025必备!10个一键生成论文工具,专科生轻松搞定毕业论文!

2025必备!10个一键生成论文工具,专科生轻松搞定毕业论文! AI 工具如何让论文写作更高效? 随着人工智能技术的不断进步,越来越多的专科生开始借助 AI 工具来辅助毕业论文的撰写。这些工具不仅能够帮助学生节省大量时间…

作者头像 李华
网站建设 2026/3/27 12:00:37

linux 进程和线程的本质区别是什么

在Linux系统中,进程与线程的本质区别体现在资源分配、调度机制、上下文切换成本、通信方式及安全性等多个维度,具体分析如下: 1. 资源分配与隔离性 进程:是操作系统资源分配的基本单位,拥有独立的地址空间、内存、文…

作者头像 李华
网站建设 2026/3/30 15:04:21

1.3 Kubernetes核心概念详解:掌握本地集群配置与应用部署秘诀

1.3 Kubernetes核心概念详解:掌握本地集群配置与应用部署秘诀 Kubernetes(简称K8s)是当前最流行的容器编排平台,它为容器化应用提供了部署、扩展和管理的完整解决方案。本文将深入解析Kubernetes的核心概念,带你从零开始搭建本地集群,并掌握应用部署的关键技巧。 Kuber…

作者头像 李华
网站建设 2026/3/27 5:50:26

3.3 LLM检索增强生成(RAG)技术入门:打造专属智能运维知识库

3.3 LLM检索增强生成(RAG)技术入门:打造专属智能运维知识库 在AIOps领域,虽然大语言模型(LLM)具有强大的通用知识和语言理解能力,但在处理企业特定的运维场景时,往往需要结合企业内部的专有知识。检索增强生成(Retrieval-Augmented Generation, RAG)技术应运而生,它通…

作者头像 李华
网站建设 2026/3/28 8:20:58

Transformer搞定康复动作识别,效率翻倍

📝 博客主页:Jax的CSDN主页 Transformer赋能康复动作识别:实时精准评估,效率提升两倍目录Transformer赋能康复动作识别:实时精准评估,效率提升两倍 引言:康复医学的效率瓶颈与技术破局 一、技术…

作者头像 李华