Unity的渲染管线

news2024/11/27 0:51:07

渲染管线

概念

Unity的渲染管线是在图形学渲染管线的基础上,加上了高度可配置可扩展的框架,允许开发者自定义渲染流程。

渲染管线(渲染流水线)概述:将数据阶段的变为屏幕图像的过程。

  • 数据指的是模型、光源和摄像机等内容的顶点、纹理、光照等数据。

  • 阶段:应用阶段—>几何阶段—>光栅化阶段

    image-20240617175319915

CPU和GPU

  • CPU:中央处理器,负责逻辑处理。
  • GPU:图形处理器,搭载在显卡上,负责渲染逻辑处理。

图元

在渲染管线中,图元是几何数据的基本单元,是构成几何体的最小可绘制单元。

图元可以是点、线、三角形,在几何阶段,顶点数据会被组合成图元。

这些图元将在光栅化阶段转换为像素,最终呈现在屏幕上。

像素

像素组成图像的最小可控单位。

具有位置和属性,用于表示颜色和其他信息。

二维图像中的一个点,每个像素都占据屏幕的固定位置。

片元

片元是光栅化阶段生成的像素或像素片段。

片元是渲染管线中进行像素级别操作和计算的基本单位。

其实片元就是像素加上了一些其他信息,如颜色、深度值、法线等。

应用阶段

概述:CPU将渲染数据传递给GPU,用于后两个阶段的处理。

应用阶段CPU为渲染准备了什么?

  1. 剔除不可见(相机外)的物体数据。
  2. 准备好模型相关的数据,如顶点、法线、切线、贴图、着色器等。
  3. 把数据加载到显存中。显存就是显卡的专用内存,用来存储显卡芯片处理过或者即将提取的渲染数据。
  4. 设置渲染状态,如网格需要使用哪个着色器、材质、光源属性等。
  5. 调用DrawCall,DrawCall就是CPU通知GPU用上面准备的数据和渲染状态进行渲染的命令。

image-20240614210459107

应该尽可能避免多的DrawCall

因为它会影响性能。每次调用DrawCall,CPU就会给GPU发送大量的内容,效率就慢了,可能会造成卡顿。

怎么减少呢?批处理技术

  • 将多个静态物体的网格合并为一个网格,变为一次DrawCall。
  • 使不同网格使用同一种材质。
  • 合并图集:将多张图片合并成一张大图。(2D游戏和UI中常用)

几何阶段

几何阶段是GPU主导的阶段,它的主要工作为:顶点处理、坐标转换、裁剪画面外图元

概述:在几何阶段,我们主要通过自定义顶点着色器阶段,带来不同的画面表现效果。

image-20240617171522020

顶点着色器:是完全可编程的,进行一些操作就能带来如水波纹、布料等表现效果。

image-20240617172841403

image-20240617172937407

光栅化阶段

GPU主导,确定片元是否被渲染,并且确定片元的最终渲染颜色效果等。

我们主要通过自定义片元着色器阶段,带来如水面、火焰、黑白或模糊等效果。

image-20240617174032679

  • 三角形设置:计算三角形网格的表示数据,人话就是把顶点连成三角形。

  • 三角形遍历:检查哪些像素被三角形网格覆盖了,覆盖就生成为一个片元,最终获得片元序列。

    • image-20240617175824695
  • 片元着色器(可编程):

    • image-20240617175937464
  • 逐片元操作(输出合并阶段,可配置):

    • image-20240617180058393

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1851986.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ | Leetcode C++题解之第174题地下城游戏

题目&#xff1a; 题解&#xff1a; class Solution { public:int calculateMinimumHP(vector<vector<int>>& dungeon) {int n dungeon.size(), m dungeon[0].size();vector<vector<int>> dp(n 1, vector<int>(m 1, INT_MAX));dp[n][m …

【从0实现React18】 (二) JSX 的转换 jsx到底是什么?React是如何把jsx转换为ReactElement?

react项目结构 React(宿主环境的公用方法)React-reconciler(协调器的实现&#xff0c;宿主环境无关)各种宿主环境的包shared(公用辅助方法&#xff0c;宿主环境无关) 当前实现的JSX转换属于 react****包 初始化react包 先创建react package并初始化 更新package.json文件&a…

Redis源码学习:quicklist的设计与实现

为什么需要quicklist 假设你已经知道了ziplist的缺陷&#xff1a; 虽然节省空间&#xff0c;但是申请内存必须是连续的&#xff0c;如果内存占用比较多&#xff0c;申请效率低要存储大量数据&#xff0c;超过了ziplist的最佳上限后&#xff0c;性能有影响 借鉴分片思想&…

仓颉编程语言入门

华为在 2024 年 6 月 21 日的华为开发者大会上&#xff0c;华为终端 BG 软件部总裁龚体正式官宣了华为自研仓颉编程语言&#xff0c;并发布了 HarmonyOS NEXT 仓颉语言开发者预览版。 仓颉编程语言文件后缀名为 .cj, 以下是第一个入门代码输出&#xff1a;你好&#xff0c;仓颉…

理解 什么是 滚动更新,蓝绿部署,灰度发布 以及它们的区别

滚动更新&#xff0c;蓝绿部署&#xff0c;灰度发布 这3种 现代化的 发布模式相信很多人都听过&#xff0c; 但是并不是都能正确理解他们的作用和区别 滚动更新 Rolling Update 所谓滚动更新是for 那些多实例的service的。 假如1个 service 有n 个instance, 更新时并不是n 个…

xss.haozi.me靶场通关参考

url&#xff1a;https://xss.haozi.me/ 文章目录 0x000x010x020x030x040x050x060x070x080x090x0A0x0B0x0C00xD00xE00xF0x100x110x12 0x00 先看js代码&#xff0c;第一关给你热热手&#xff0c;没给你加过 payload&#xff1a; <script>alert(1)</script>0x01 这…

移动端 UI 风格,诠释精致

移动端 UI 风格&#xff0c;诠释精致

文华财经wh7关于mancd和KDJ预警指标公式源码

一、零轴下金叉和零轴上死叉的预警 MA5:MA(C,5); MA10:MA(C,10); DIFF:EMA(CLOSE,12) - EMA(CLOSE,26); DEA:EMA(DIFF,9); MACD:2*(DIFF-DEA); CROSS(MA5,MA10)&&MAX(DIFF,DEA)<0,NOTICE(零轴下金叉); CROSSDOWN(MA5,MA10)&&MIN(DIFF,DEA)>0,NOTI…

华为---理解OSPF Route-ID(五)

9.5 理解OSPF Route-ID 9.5.1 原理概述 一些动态路由协议要求使用Router-ID作为路由器的身份标示&#xff0c;如果在启动这些路由协议时没有指定Router-ID,则默认使用路由器全局下的路由管理Router-ID。 Router-ID选举规则为&#xff0c;如果通过Router-ID命令配置了Router-…

46、基于自组织映射神经网络的鸢尾花聚类(matlab)

1、自组织映射神经网络的鸢尾花聚类的原理及流程 自组织映射神经网络&#xff08;Self-Organizing Map, SOM&#xff09;是一种用于聚类和数据可视化的人工神经网络模型。在鸢尾花聚类中&#xff0c;SOM 可以用来将鸢尾花数据集分成不同的类别&#xff0c;同时保留数据间的拓扑…

centos7系统上安装MySQL8.4图文教程

本章教程&#xff0c;主要记录如何在CentOS7系统上安装MySQL8.4的详细步骤。 一、查看当前系统版本 cat /etc/centos-release二、安装步骤 1、创建mysql目录 cd /usr/local && mkdir mysql && cd mysql2、安装rpm包 yum install https://repo.mysql.com//m…

[FreeRTOS 基础知识] 互斥访问与回环队列 概念

文章目录 为什么需要互斥访问&#xff1f;使用队列实现互斥访问休眠和唤醒机制环形缓冲区 为什么需要互斥访问&#xff1f; 在裸机中&#xff0c;假设有两个函数&#xff08;func_A, func_B&#xff09;都要修改a的值&#xff08;a&#xff09;&#xff0c;那么将a定义为全局变…

Django数据驾驶舱

Django数据驾驶舱 1.项目介绍2.项目结构3.库表结构3.1 appcsdn的models3.2 appssq的models3.3 appweather的models3.4 appweibo的models 4.功能展示5.解决问题5.1 路由配置5.2 后端数据与前端echarts展示5.3 长图表丝滑滚动条 6.遗留问题7.资源分享 1.项目介绍 这里介绍本人最…

STM32读写备份寄存器和实时时钟

文章目录 1. 硬件电路 2. RTC操作注意事项 操作步骤 3. 代码实现 3.1 读写备份寄存器 3.1.1 main.c 3.2 实时时钟 3.2.1 MyRTC.c 3.2.2 MyRTC.h 3.2.3 main.c 1. 硬件电路 对于BKP备份寄存器和RTC实时时钟的详细解析可以看下面这篇文章&#xff1a; STM32单片机BKP备…

水果销售系统

摘 要 随着电子商务的快速发展&#xff0c;传统的实体销售模式面临着越来越多的挑战。在这个数字化的时代&#xff0c;消费者的购物习惯发生了翻天覆地的变化&#xff0c;消费者更倾向于在家中通过网络平台浏览并购买商品&#xff0c;这无疑给传统水果销售带来了极大的挑战。为…

【动态规划】1130. 叶值的最小代价生成树

1130. 叶值的最小代价生成树 难度&#xff1a;中等 力扣地址&#xff1a;https://leetcode.cn/problems/minimum-cost-tree-from-leaf-values/description/ 题目内容 给你一个正整数数组 arr&#xff0c;考虑所有满足以下条件的二叉树&#xff1a; 每个节点都有 0 个或是 2 个…

算法04 模拟算法之一维数组相关内容详解【C++实现】

大家好&#xff0c;我是bigbigli&#xff0c;模拟算法我们将分为几个章节来讲&#xff0c;今天我们只看一维数组相关的题目 目录 模拟的概念 训练&#xff1a;开关灯 解析 参考代码 训练&#xff1a;数组变化 解析 参考代码 训练&#xff1a;折叠游戏 解析 参考代码 …

韩顺平0基础学java——第29天

p592-599 线程 用户线程和守护线程 1.用户线程:也叫工作线程&#xff0c;当线程的任务执行完或通知方式结束 2守护线程:一般是为工作线程服务的&#xff0c;当所有的用户线选束&#xff0c;守护线程自动结束 3.常见的守护线程:垃圾回收机制 当我们希望当main线程结束后&…

C# Onnx Yolov5 水果识别,人员识别,物品识别 人工智能

目录 先上效果 来电废话&#xff0c;但实用 网络成功案例实践易失败的原因 万物检测涉及技术 下载合集 关键代码 全部代码 实操vs2022安装关键 YOLO V5核心库编译 编写自己识别软件 更新相关依赖 标注字库文件 测试效果 名词解释YOLO 名词解释ONNX 源码 直播教…

利用第三方服务对目标进行被动信息收集防止被发现(web安全白帽子)

利用第三方服务对目标进行被动信息收集防止被发现&#xff08;web安全白帽子&#xff09; 1 被动信息收集1.1 信息收集内容1.2 信息用途 2 信息收集-DNS2.1 DNS信息收集NSLOOKUP2.1.1 ping2.1.2 nslookup 2.2 DNS信息收集-DIG&#xff08;此命令查到的结果更复杂些&#xff0c;…