Unity的渲染管线

2024-06-18 07:28
文章标签 unity 渲染 管线

本文主要是介绍Unity的渲染管线,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

渲染管线

概念

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

这篇关于Unity的渲染管线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1071653

相关文章

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档

Unity协程搭配队列开发Tips弹窗模块

概述 在Unity游戏开发过程中,提示系统是提升用户体验的重要组成部分。一个设计良好的提示窗口不仅能及时传达信息给玩家,还应当做到不干扰游戏流程。本文将探讨如何使用Unity的协程(Coroutine)配合队列(Queue)数据结构来构建一个高效且可扩展的Tips弹窗模块。 技术模块介绍 1. Unity协程(Coroutines) 协程是Unity中的一种特殊函数类型,允许异步操作的实现

OpenGL ES 2.0渲染管线

http://codingnow.cn/opengles/1504.html Opengl es 2.0实现了可编程的图形管线,比起1.x的固定管线要复杂和灵活很多,由两部分规范组成:Opengl es 2.0 API规范和Opengl es着色语言规范。下图是Opengl es 2.0渲染管线,阴影部分是opengl es 2.0的可编程阶段。   1. 顶点着色器(Vert

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光 一,前言二,资源包内容三,免费获取资源包 一,前言 在创意的世界里,每一个细节都能决定一个项目的独特魅力。今天,要向大家介绍一款令人惊艳的粒子效果包 ——Super Confetti FX。 二,资源包内容 💥充满活力与动态,是 Super Confetti FX 最显著的标签。它宛如一位

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(4)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)-CSDN博客  这节就是真正的存储数据了   理清一下思路: 1.存储路径并检查 //2进制文件类存储private static string Data_Binary_Pa

Unity Adressables 使用说明(一)概述

使用 Adressables 组织管理 Asset Addressables 包基于 Unity 的 AssetBundles 系统,并提供了一个用户界面来管理您的 AssetBundles。当您使一个资源可寻址(Addressable)时,您可以使用该资源的地址从任何地方加载它。无论资源是在本地应用程序中可用还是存储在远程内容分发网络上,Addressable 系统都会定位并返回该资源。 您

Unity Adressables 使用说明(六)加载(Load) Addressable Assets

【概述】Load Addressable Assets Addressables类提供了加载 Addressable assets 的方法。你可以一次加载一个资源或批量加载资源。为了识别要加载的资源,你需要向加载方法传递一个键或键列表。键可以是以下对象之一: Address:包含你分配给资源的地址的字符串。Label:包含分配给一个或多个资源的标签的字符串。AssetReference Obj

在Unity环境中使用UTF-8编码

为什么要讨论这个问题         为了避免乱码和更好的跨平台         我刚开始开发时是使用VS开发,Unity自身默认使用UTF-8 without BOM格式,但是在Unity中创建一个脚本,使用VS打开,VS自身默认使用GB2312(它应该是对应了你电脑的window版本默认选取了国标编码,或者是因为一些其他的原因)读取脚本,默认是看不到在VS中的编码格式,下面我介绍一种简单快

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(2) (*****生成数据结构类的方式特别有趣****)-CSDN博客 做完了数据结构类,该做一个存储类了,也就是生成一个字典类(只是声明)  实现和上一节的数据结构类的方式大同小异,所

【Unity小技巧】URP管线遮挡高亮效果

前言 在URP渲染管线环境下实现物体遮挡高亮显示效果,效果如下: Unity URP遮挡高亮 实现步骤 创建层级,为需要显示高亮效果的物体添加层级,比如Player 创建一个材质球,也就是高亮效果显示的材质球找到Universal Renderer Data Assets 4.在Assets上添加两个Render Objects组件 第一个做如下三处设置 指定遮挡层级指