【从UnityURP开始探索游戏渲染】专栏-直达

有了开篇的渲染管线和渲染流水线的基本概念,接下来先从原理上看看渲染流水线是怎么运作的,然后再看看UnityURP是对应是怎么实现的,最后再看UnityURP是怎么构建渲染管线,逐层探索剖析。本篇作为渲染流水线的主线文章,将列举渲染流水线中的各个阶段,将数据到图像的每一步处理步骤都列出,每个阶段的具体的详细讨论在后续相应的文章链接中展开详解。

(对渲染的探索是个持续不断完善的过程,记录这个过程将零散的内容整理起来,其中肯定会有理解偏差和问题,如果哪里有问题,欢迎在评论区探讨和指出)

基于URP默认的渲染路径:前向渲染Forward 来讲解基本的渲染流水线

渲染路径 概念在最后会讲解,默认的前向渲染路径就是最通用的复合常规的渲染流水线中的流程,其他路径都是优化特定情况而出现的,先用前向的学习后再看其他的渲染路径。

渲染流水线(Rendering Pipeline)中可编程或可配置阶段,按顺序执行:

应用阶段 -〉几何阶段 -〉 光栅化阶段 -〉逐片元阶段 -〉输出

应用阶段(CPU)包括(包围盒裁剪、遮挡剔除、其他裁剪算法等)

几何阶段(GPU)包括(顶点着色器(可编程)、细分着色器(可选)、几何着色器(可选)、图元装配(固定)、裁剪(固定)、归一化设备坐标(透视除法;固定)、屏幕映射(固定))

光栅化阶段(GPU)包括(光栅化(三角形设置、三角形遍历;固定)、片元着色器(可编程))

逐片元阶段(GPU)包括((可见性测试Scissor、多重采样测试)透明度测试、模版测试、深度测试、深度写入、混合)(全可配置)


接下来详细列出渲染流水线的阶段索引

应用阶段

  • 包围盒裁剪
  • 遮挡剔除
  • 其他裁剪算法
  • 渲染命令队列和其中的渲染指令(drawcall)、渲染状态设置

几何阶段

  • 关键顺序‌:
  1. 顶点着色器输出齐次裁剪坐标(如 UnityObjectToClipPos 返回值)‌。
  2. GPU执行裁剪(依赖 w 分量的动态范围)‌。
  3. 透视除法触发归一化‌,生成NDC坐标供屏幕映射‌

模型空间 →(Model矩阵)→ 世界空间 →(View矩阵)→ 观察空间 →(Projection矩阵)→ ‌裁剪空间‌→(透视除法)→ ‌NDC空间‌ →(视口变换)→ 屏幕空间

  • 其中模型空间到裁剪空间是在顶点着色阶段运算的。(在顶点着色器中手动用MVP矩阵进行左乘计算)
  • NDC空间是归一化时做的 (GPU自动计算)
  • 屏幕空间是屏幕映射阶段做的 (GPU自动计算)
  • 顶点着色器(Vertex Shader)‌
  • 可选阶段:曲面细分着色器(Tessellation Shader)‌
  • 可选阶段:几何着色器(Geometry Shader)‌
  • ‌图元装配
  • 裁切
  • 归一化设备坐标(Normalized Device Coordinates, NDC)
  • 屏幕映射

光栅化阶段

  • 光栅化‌
  • 片元着色器(Fragment Shader)‌

逐片元阶段

  • 逐片元操作(Per-Fragment Operations)‌
  • 深度偏移(Slope Scale Depth Bias)‌
  • 渲染顺序与层级

Unity中基于SRP的URP渲染管线

  • SRP提供的核心功能与架构‌
  • URP在SRP上的具体实现‌
  • URP对SRP的扩展与简化‌
  • 对URP的扩展
  • URP中的渲染路径选择‌

其他

URP中实时阴影计算流程

计算着色器(Compute Shader)‌:GPU 通用计算,可并行处理非图形任务(需单独编写)。

后处理(Post-Processing)‌:屏幕空间特效(如 Bloom),通过 URP Renderer Feature 添加。

投影Projector。

平面阴影


【从UnityURP开始探索游戏渲染】专栏-直达

(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,)

【渲染流水线】主线索引-从数据到图像以UnityURP为例的更多相关文章

  1. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第五章:渲染流水线

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第五章:渲染流水线 学习目标 了解几个用以表达真实场景的标志和2D图像 ...

  2. Shader 入门笔记(二) CPU和GPU之间的通信,渲染流水线

    渲染流水线 1)应用阶段(CPU处理) 首先,准备好场景数据(摄像机位置,视锥体,模型和光源等) 接着,做粗粒度剔除工作. 最后,设置好每个模型的渲染状态(使用的材质,纹理,shader等) 这一阶段 ...

  3. 《UnityShader入门精要》学习笔记之渲染流水线

    第一种分类方式: 图形管道(如下7步): 顶点数据 : 由3D模型传递的三角形网格 顶点着色 : 编写CG程序对各个顶点进行着色 生成几何图元 : 连接特定的顶点生成几何图元,例如连接三个顶点生成一个 ...

  4. Unity Shader入门精要学习笔记 - 第2章 渲染流水线

    来源作者:candycat   http://blog.csdn.net/candycat1992/article/ 2.1 综述 渲染流水线的最终目的在于生成或者说是渲染一张二维纹理,即我们在电脑屏 ...

  5. .net下灰度模式图像在创建Graphics时出现:无法从带有索引像素格式的图像创建graphics对象 问题的解决方案。

    在.net下,如果你加载了一副8位的灰度图像,然后想向其中绘制一些线条.或者填充一些矩形.椭圆等,都需要通过Grahpics.FromImage创建Grahphics对象,而此时会出现:无法从带有索引 ...

  6. 移动端 像素渲染流水线与GPU Hack

    什么是 像素渲染流水线 web页面你所写的页面代码是如何被转换成屏幕上显示的像素的.这个转换过程可以归纳为这样的一个流水线,包含五个关键步骤: 1.JavaScript:一般来说,我们会使用JavaS ...

  7. Unity Shader 之 渲染流水线

    Unity Shader 之渲染流水线 什么是渲染流水线 一个渲染流程分成3个步骤: 应用阶段(Application stage) 几何阶段(Geometry stage) 光栅化阶段(Raster ...

  8. Unity 渲染流水线 :CPU与GPU合作创造的艺术wfd

    前言 对于Unity渲染流程的理解可以帮助我们更好对Unity场景进行性能消耗的分析,进而更好的提升场景渲染的效率,最后提升游戏整体的性能表现 Unity的游戏画面的最终的呈现是由CPU与GPU相互配 ...

  9. 对索引像素格式的图片进行Setpixel(具有索引像素格式的图像不支持SetPixel)解决方案

    最近编写了一个验证码识别软件.其中对png.jpg图片进行二值化处理时,出现了错误:具有索引像素格式的图像不支持SetPixel解决方案.从字面上来看,这说明我对一个具有索引色的图片进行了直接RGB颜 ...

  10. Elasticsearch .Net Client NEST 索引DataSet数据

    NEST 索引DataSet数据,先序列化然后转成dynamic 类型进行索引: /// <summary> /// 索引dataset /// </summary> /// ...

随机推荐

  1. OpenDeepWiki:让您的代码仓库拥有MCP变成Agents的一部分!!

    想象一下,如果您的代码仓库突然有了生命,能够自己介绍自己.回答问题.甚至还能生成漂亮的文档,那会是什么样的场景?别以为这是科幻小说,OpenDeepWiki就是这样一个神奇的"代码翻译官&q ...

  2. Dispatch PDI v2.0.4即将发布,历经1000+用户装机验证,稳定版震撼来袭!

    Dispatch PDI V2.0.4版本,即将登场! 亲爱的用户们: 在数据调度领域的探索之路上,我们始终致力于为大家提供更强大.更高效的工具.今天,我们怀着激动的心情宣布,Dispatch PDI ...

  3. 「Log」做题记录 2023.10.30-2023.11.26

    \(2023.10.30-2023.11.5\) \(\color{blueviolet}{AT\_abc285\_g}\) 神秘题. 网络流是显著的,建边方式如下: 所有边容量都为 \(1\). 每 ...

  4. AdGuard Home使用体验

    AdGuard Home使用体验 AdGuard Home is a network-wide software for blocking ads and tracking. After you se ...

  5. python爬虫学习——re模块(正则表达式)

    正则表达式常用操作符 . 任何单个字符 [] 字符集,对单个字符给出取值范围 [abc].[a-z] [^ ] 非字符集,对单个字符给出排除范围 [^abc] * 对前一个字符0次或无限次拓展 abc ...

  6. Typora优化教程:如何使用回车键来实现「换行」而非「分段」(类似Obsidian)

    Typora优化教程:如何使用回车键来实现「换行」而非「分段」(类似Obsidian) 前言: 首先 在Typora中的默认设置中 按一下 回车键 会实现「分段」操作(中间空一行) 按一下 Shift ...

  7. UFT Wscripts.Shell & Mercury.DeviceReplay

  8. Spring AI Alibaba 1.0 正式发布!核心特性速览+老项目升级指南

    随着 Spring AI 首个正式版本 1.0 的发布,国产之光 Spring AI Alibaba 也发布了 1.0 GA 正式版本,更新速度真的很快! 我对框架的更新真的是又爱又恨,爱的是功能更丰 ...

  9. 从零开始实现简易版Netty(二) MyNetty pipeline流水线

    从零开始实现简易版Netty(二) MyNetty pipeline流水线 1. Netty pipeline流水线介绍 在上一篇博客中lab1版本的MyNetty参考netty实现了一个极其精简的r ...

  10. C# 组合键 判断,文本框不接受纯回车enter

    //TextBox 必须是多行文本框 private void Txt_Billcode_KeyDown(object sender, KeyEventArgs e) { if (e.Control ...