《UnityShader 入门精要》 笔记01

2023-09-21 13:33:03

第二章 渲染流水线

2.1 综述

2.1.1 什么是流水线

所有步骤并行

2.1.2 什么是渲染流水线

由一个三维场景触发、生成(渲染)一张二维图像

应用阶段 --(输出渲染图元)->几何阶段–(输出屏幕空间的顶点信息)->光栅化阶段
CPU -> GPU -> GPU

  • 应用阶段 CPU
    由开发者主导,输出渲染图元 ---- 点、线、三角面等
  • 几何阶段 GPU
    确定要绘制的图元 怎么绘制 在哪绘制
    把顶点坐标变换到屏幕坐标
  • 光栅化阶段 GPU
    使用屏幕上的像素,渲染出最终的图像

2.2 CPU和GPU之间的通信

2.2.1 把数据加载到显存中

硬盘(HDD) – CPU – 系统内存(RAM) – GPU – 显存(VRAM)

2.2.2 设置渲染状态

设置使用哪个顶点着色器 片元着色器 光源属性 材质来去渲染

2.2.3 调用DrawCall

DrawCall是由CPU发给GPU的一个命令
CPU通过DrawCall来告诉GPU开始进行一个渲染过程,一个DrawCall会指向本次调用需要渲染的图元列表

2.3 GPU流水线

2.3.1 概述

对于几何阶段和光栅化阶段 开发者无法拥有绝对的控制权 但是GPU向开发者开放了很多的控制权

几何阶段:

1、顶点着色器 (可编程的 必实现) 实现顶点的空间变换,顶点着色等功能
2、曲面细分着色器 (可选) 细分图元
3、几何着色器 (可选) 执行逐图元的着色操作,或者被用于生产更多的图元
4、裁剪 (可配置 不可编程) 将不在视野内的图元裁剪掉,剔除某些图元的面片
5、屏幕映射 (不可配置 不可编程) 把每个图元的坐标转换到屏幕坐标系中

光栅化概念阶段:

1、三角形设置 (不可配置 不可编程) 固定函数阶段
2、三角形遍历 (不可配置 不可编程) 固定函数阶段
3、片元着色器 (可编程) 实现逐片元的着色操作
4、逐片元操作 (不可编程 可配置) 修改颜色、深度缓冲、进行混合

2.3.2 顶点着色器

输入来自于CPU 处理单位是顶点 -->输入进来的每个顶点都会调用一次顶点着色器
主要工作:坐标变换(把顶点坐标从模型空间转换到齐次裁剪空间)和逐顶点光照

2.3.3 裁剪

不在视野范围的物体不需要被处理。

图元和摄像机的关系:
1、完全在视野内:传递给下一流水线阶段
2、完全在视野外:不向下传递
3、部分在视野内:裁剪 在这个图元与视野边界处建立新的顶点代替(新的顶点生成 外部顶点舍弃)

2.3.4 屏幕映射

输入为三维坐标系下的坐标
任务是把每个图元的x和y转换到屏幕坐标系 是一个缩放的过程
屏幕映射不会对输入的z进行处理 屏幕坐标和z坐标一起构成了窗口坐标系

OpenGL 左下角为0,0
DirectX 左上角为0,0

2.3.5 三角形设置

计算每个图元覆盖了那些像素 为这些像素计算他们的颜色

2.3.6 三角形遍历(扫描变换)

根据上一阶段来判断三角网格覆盖了哪些像素,并使用三个顶点信息对整个覆盖区域的像素进行插值,如果被覆盖则生成一个片元,最后输出一个片元序列
(一个片元不是真正意义上的像素,而是包含了很多状态的几何,用于计算每个像素的最终颜色)

2.3.7 片元着色器

根据数据插值输出一个或者多个颜色值

2.3.8 逐片元操作(输出合并阶段)

决定可见性:
通过模板测试和深度测试来确定是否舍弃片元

混合:
对于半透明物体 需要混合来让物体看是透明的

双重缓冲:后置缓冲 前置缓冲
一旦场景被渲染到了后置缓冲中 GPU就会交换后置缓冲和前置缓冲(之前显示在屏幕上的图像) 保证我们看到的图像信息总是连续的

2.4 一些容易困惑的地方

2.4.1 什么是OpenGL/DirectX

由于开发者想访问GPU是一件非常麻烦的事情,OpenGL/DirectX作为图像应用编程接口,在这些硬件的基础上实现了一层抽象,可用来渲染二维或者三维图形。可以说这些借口架起了上层应用程序和底层GPU的沟通桥梁。

2.4.2 什么是HLSL/GLSL/CG

这些都是高级着色器语言
DirectX的HLSL(High Level Shading Language)
OpenGL的GLSL(OpenGL Shading Language)
NVIDIA的CG(C for Graphic)
这些语言会被编译成中间语言,再交给显卡驱动翻译成GPU可以理解的机器语言

2.4.3 什么是Draw Call

CPU调用图像编程接口 如OpenGL的glDrawElements命令或者DirectX中的DrawIndexedPrimitive命令,以命令GPU进行渲染操作

CPU和GPU并行操作试用命令缓冲区。CPU添加命令 GPU执行

CPU需要完成很多前置工作才能提交一个Draw Call命令 但是GPU渲染能力很强,可以做的很快。如果CPU把大量时间用在提交Draw Call上 则会造成CPU的过载。
批处理思想:把很多小的DrawCall合并成一个大的DrawCall

在游戏开发中,为了减少Draw Call的开销 有两点需要注意
1、避免使用大量小网格,当不可避免时考虑是否可以合并
2、避免使用过多的材质,尽量在不同网格之间共用一个材质

2.4.4 什么是固定管线渲染

没有对流水线阶段的完全控制权,只是给开发者提供一些配置操作

2.5 那么,你明白什么是Shader了吗

Shader就是:
1、GPU流水线上一些可高端变成的阶段
2、有一些特定类型的着色器(顶点着色器、片元着色器)
3、控制流水线中的渲染细节

更多推荐

科普丨OTP语音芯片和语音合成芯片的区别

语音芯片根据集成电路类型来分,凡是与声音有关系的集成电路被统称为语音芯片(又称语音IC,这里应该叫成VoiceIC),但是在语音芯片的大类型中,又被分为语音IC(这里应该叫成SpeechIC),音乐IC(这里应该叫成MusicIC)两种。一、OTP语音芯片OTP(OneTimeProgramable)是指一次性可编程语

高德地图实现-微信小程序地图导航

效果图:一、准备阶段1、在高德开放平台注册成为开发者2、申请开发者密钥(key)。3、下载并解压高德地图微信小程序SDK高德开放平台:注册账号(https://lbs.amap.com/))申请小程序应用的key应用管理(https://console.amap.com/dev/key/app))->我的应用->创建新

Oracle 19c RAC安装时遇到 INS-06006 错误

1.错误现象通过执行gridSetup.sh配置19cgridinfrastructure的时候,在SSHconnectivity步骤,发生如下错误:[INS-06006]PasswordlessSSHconnectivitynotsetupbetweenthefollowingnode(s):[<racnode2>]

软件定义汽车时代,1 亿行代码的安全保障,极狐GitLab 这么做!

本文整理自极狐GitLab解决方案部总监张扬老师在AUTOSEMO会议上的主题分享“驾驭代码激增浪潮,护航软件定义汽车”。软件定义汽车的挑战“软件吞噬世界”,这是网景创始人MarcAndreessen在2011年说的一句话。这些年软件行业的飞速发展也验证了这句话。智能手机就是一个很鲜活的例子,各种app彻底改变了人们的

健身完全手册

文章目录饮食完全手册摄入总量日内分配来源和配餐方法专题&错误训练完全手册训练分化动作模式胸背手肩腿臀腹训练计划减脂完全手册胸肌训练(原理+动作+计划+饮食)健身训练的分化、动作、配重体态大师饮食完全手册参考视频:💪🏻B站版《健身新手的饮食完全手册》™健身饮食不是管理具体食物,而是管理食物背后的碳蛋脂摄入总量定碳蛋脂

抖音seo短视频矩阵系统源代码开发部署分享

一、抖音seo短视频矩阵系统源码开发需要用到以下技术:前端技术:HTML、CSS、JavaScript等。后端技术:PHP、MySQL等。视频处理技术:FFmpeg等。抓取技术:爬虫技术,如Python的Requests、BeautifulSoup等。推荐算法:协同过滤算法、基于内容的推荐算法等。SEO优化:关键词分析

蓝桥杯每日一题2023.9.21

蓝桥杯2021年第十二届省赛真题-异或数列-C语言网(dotcpp.com)题目描述Alice和Bob正在玩一个异或数列的游戏。初始时,Alice和Bob分别有一个整数a和b,有一个给定的长度为n的公共数列X1,X2,···,Xn。Alice和Bob轮流操作,Alice先手,每步可以在以下两种选项中选一种:选项1:从数

0 杂项知识

文章目录加密算法对称加密非对称加密散列加密sha-512与md5算法的对比加密算法参照:链接一般将加密算法分为三种:对称加密,非对称加密,散列加密对称加密对称加密就是只存在一把钥匙,这把钥匙可以用来加密文件,也可以用来解密文件(个人理解)常用于需要经常性沟通的加密,即给出钥匙的对方与己方需要有经常性的沟通。非对称加密非

【FAQ】安防监控系统/视频云存储EasyCVR平台安全检查Proxy出现sql injection的漏洞,该如何修改?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。最近有用户反馈,在使用视频监控系统EasyCVR平台安全扫描时,发现

企业工程项目管理系统源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)

工程项目管理软件(工程项目管理系统)对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营,全过程、全方位的对项目进行综合管理工程项目各模块及其功能点清单一、系统管理1、数据字典:实现对数据字典标签的增删改查操作2、编码管理:实现对系统编码的增删改查操作3、用户管理:管理和查看用户角

JVM调优笔记

双亲委派机制app---->ext----->bootstrap保证系统的核心库不被修改沙箱安全机制限制系统资源访问,将java代码限制在虚拟机特定的运行范围中基本组件字节码校验器确保java类文件遵循java规范,帮助java程序实现内存保护类加载器nativeJava的作用范围达不到了,需要调用底层栈栈内存主管程序

热文推荐