IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> UnityShader入门精要(渲染流水线 二) -> 正文阅读

[游戏开发]UnityShader入门精要(渲染流水线 二)

UnityShader入门精要(渲染流水线 二)

渲染流水线之CPU

我根据《UnityShader入门精要来》这本书来一步一步的学习,这个系列是记录我的学习过程,方便以后查阅,因为我有一个很大的"优点",就是很容易忘!

乐乐女神在开始就说了,“没有了解渲染流水线的工作流程,就永远没法说自己入门”,这句话我有很深刻的印象,因为在面试的过程中,面试官会问,什么是渲染流水线?如果回答上来,说明你入门了,可以继续交流,如果这个都没说上来,那就证明不熟悉渲染,只是了解,不过也不是绝对的,有些大佬除外。

渲染流水线是啥?包含了什么?以及这条工作流程最终的结果是啥

CUP和GPU之间的通信:

?今天来学习学习新的东西CPU和GPU之间的通信,昨天我们了解到渲染流水线的起点,也就是完全可以控制的应用阶段,应用阶段分为下面三个小阶段:

  • 把数据加载到显存中
  • 设置渲染状态
  • 调用DrawCall(俗称DC)

那先说说第一个阶段,将数据加载到显存中

数据加载到显存:

所有的渲染数据都需要从硬盘中加载到系统内存中,然后操作内存中的数据加载到显卡的显存中,因为显卡对于显存的访问便利程度远远大于内存(访问便利程度就是指访问速度和访问的权限,因为大多数显卡没有直接访问内存的权限)

如下图所示:渲染所需的数据(两张纹理以及三个网格)从硬盘加载到显存中的流程,这样在渲染时,显卡可以直接很快的去访问显卡中存储的数据来进行渲染。

image-20211123210320124

需要注意:
真实渲染的过程更加的复杂,这里只是将流程简单的梳理出来;
例如,顶点的位置信息,法线的方向,顶点的颜色,纹理坐标等

当把数据加载到显存中后,内存中的数据就可以移除了;但是对于一些数据来说,是CPU所需要的,CPU仍然需要访问他们(例如,希望CPU可以访问网格数据来进行碰撞检测),那这些就是需要的数据。不希望移除,因为从硬盘加载到内存的过程十分的耗时。

数据加载准备完毕以后,接下来就可以通过CPU设置渲染状态,来指导GPU进行渲染工作。

设置渲染状态:

啥是渲染状态? 通俗的说就是,这些个状态定义了场景中的网格是怎么被渲染出来的,例如:使用了那个顶点着色器或者是片元着色器,光源的属性,材质等,如果没有更改渲染状态,那么所有网格就是一个渲染的状态,下图使用一种渲染状态渲染三个不同网格的结果,由于没有改变3个网格的外观,所以看起来是同一个材质的物体

image-20211123210358539

在准备好所有的工作后,CPU就需要调用一个渲染命令(DrawCall)来告诉GPU,数据准备ok,可以按照设置的指令来开始渲染了

调用DrawCall:

实际上DrawCall就是一个指令,CPU ——>GPU,这个命令仅仅会指向一个需要被渲染的图元列表,而不会再包含任何材质信息。如下图所示,CPU告诉GPU开始进行渲染,一个DrawCall会指向本次调用需要渲染的图元列表

image-20211123211041976

当给定一个DrwaCall时,GPU就会根据渲染状态(如,材质,纹理,shader等)和所输入的顶点数据来进行计算,最终输出成屏幕上显示的漂漂亮亮的像素。

茶后杂谈:

今天是第二天学习shader,坚持下去,一定会有收获!不求学太多,每天进步一点。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 08:26:52  更:2021-11-25 08:27:33 
 
开发: 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/27 23:33:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码