| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> 渲染管线概述 -> 正文阅读 |
|
[游戏开发]渲染管线概述 |
一、渲染的概念渲染是指以软件由模型生成图像的过程 渲染管线(广义)分为CPU应用程序端渲染逻辑和GPU渲染管线(通常我们说的渲染管线) 预渲染与实时渲染
二、CPU(当相机调用render()时开始工作)第一步 剔除(Culling)1?? 视锥体剔除(Frustum Culling)摄像机根据FOV(Field of View 视场角) 和远近裁面形成一个锥台,让模型和这个锥台进行碰撞检测,如果没有碰撞说明不在视野内,直接剔除,不需要渲染。 🎯 Tips 1: 有的模型表面的网格非常复杂(比如球体) 简化处理:生成一个AABB包围盒与锥台进行碰撞检测 2?? 遮挡剔除(Occlusion Culling)3?? 层级剔除(Layer Culling Mask)第二步 确定渲染顺序—排序(Sort)Render Queue 的数值越小,表示物体越先被渲染 如果Render Queue相等,会分成两个渲染队列,不透明渲染队列和透明渲染队列 1?? 不透明渲染队列(Render Queue < 2500)按摄像机距离从前到后排序 🍜Tips 1: Why? 这其实是一种优化,离得近的如果覆盖了遮挡了距离远的,那后者就可以不用渲染了 2?? 半透明渲染队列(Render Queue > 2500)按摄像机距离从后向前排序 🍜Tips 1: Why? 这是为了保证渲染结果的正确性 第三步 打包数据 发送给GPU包含大量数据和参数 第四步 调用Shader:SetPassCall、DrawCall 发送给GPU三、GPU收到指令SetPassCall、DrawCall 和 CPU 传送的打包数据 第一步 通过一系列工作将模型渲染成2D图像1?? 顶点处理顶点Shader:将模型空间顶点转换成裁剪空间,然后又硬件来将这些顶点映射到屏幕上(3D变2D)
拍照过程:放置物体 -> 摆好相机 -> 摁下快门 通过矩阵完成以下空间变化 ① 模型空间 -> 世界空间 ② 世界空间 -> 相机空间 ③ 相机空间 -> 裁剪空间 2?? 图元装配及光栅化(硬件操作阶段)图元装配:将点连接起来 光栅化:在图元内部插入片元(类似还没有显示的像素) 光栅化之后3D彻底变成2D 具体操作 ① 裁剪操作 对裁剪空间进行裁剪。与视锥体相交的部分会被裁剪不渲染部分并生成新的三角面,完全在外面的就直接裁剪掉 ② 透视除法 将裁剪后的物体坐标缩放到标准化设备坐标(NDC) ③ 背面剔除 根据索引列表来判断是否为背面。 ④ 视口转换 将标准化设备坐标转化为屏幕坐标(只转化x,y坐标) ⑤ 图元装配 前面的所有操作都是顶点操作,图元装配环节将点进行连线 ⑥ 光栅化 生成在图形内部生成片元 z坐标值会通过插值储存为片元的深度值等各种数据来帮我们处理前后遮挡关系等 插值:我们知道两边界点的值,算出中间的值 3?? 片元处理每一个片元都会调用自己的片元Shader进行计算 片元Shader:对片元进行着色 ------ 光照着色,纹理着色 纹理图像:一个二维数组,利用文素地址储存一组颜色值
4?? 输出合并处理遮挡关系和颜色混合等等,并完成输出
流程: ① Alpha测试 检测片元的Alpha值,如果太小就可以直接丢弃 ② 模板测试 ③ 深度测试 检测片元的深度值:深度越小越应该渲染(小于深度缓冲区深度值才能写入,写入后更新深度缓冲区的深度值)
④ 混合 可以柔和地将片元都输出到像素点,进行混合
🍪 Tips 1: Shader是什么? Shader是运行在GPU上的一段可编程的程序 一个完整的Shader由顶点Shader和片元Shader组合而成 第二步 输出到帧缓冲区帧缓冲区相当于是临时的画布,当全部渲染完毕时,帧缓冲区的内容可以显示到屏幕中 缓冲区分为颜色缓冲区、深度缓冲区和模板缓冲区 第三步 后处理操作显示到屏幕前,CPU可以拿到帧缓冲区的内容,进行二次修改(调色、Bloom等)然后再传送给GPU渲染管线,最终才显示在屏幕上 四、多个相机每个相机会跑完整的渲染流程 相机通过Depth决定渲染顺序,后渲染的可以通过Clear Flags确定是否清除前一个相机的渲染。 参考资料:视频教程 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/28 14:32:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |