首页 > 其他分享 >UnityShader入门精要学习 第二章解惑

UnityShader入门精要学习 第二章解惑

时间:2023-01-10 13:22:23浏览次数:48  
标签:Draw 着色器 命令 UnityShader Call GPU 精要 解惑 CPU

困惑

什么是OpenGL、DirectX

如果开发者直接访问GPU是一件非常麻烦的事情,我们可能需要和各种寄存器、显存打交道。

而图像编程接口再这些硬件的基础上实现了一层抽象。

OpenGL和DirectX就是这些图像应用编程接口。

这些接口架起了上层应用和低层GPU的沟通桥梁。

一个应用程序向这些接口发送渲染命令,而这些接口会依次向显卡驱动发送渲染命令,这些显卡驱动是真正知道如何和GPU通信的角色,正是它们把OpenGL或者DirectX的函数调用翻译成了GPU能够听得语言,同时它们也负责把纹理等数据转换成GPU所支持得格式。

 

HLSL、GLSL、CG

它们是着色器语言

着色器语言是专门用于编写着色器的
这些语言会被编译成与机器语言无关的汇编语言,也被称为中间语言。
这些中间语言再交给显卡驱动来翻译成真正的机器语言,即GPU可以理解的语言。
GLSL 跨平台性
也由于OpenGL没有提供着色器编译器,而是由显卡驱动来完成着色器的编译工作。
GLSL是依赖硬件,而非操作系统层级的。
HLSL
HLSL是由微软控制着色器的编译,就算使用了不同的硬件,用一个着色器的编译结构也是一样的。
CG
CG是真正意义上的跨平台。
它会根据平台的不同,编译成相应的中间语言。

 

什么是Draw Call

Draw Call 就是CPU调用图像编程接口

CPU、GPU实现并行工作

使用命令缓冲区

命令缓冲区

由CPU向其中添加命令,而由GPU从中读取命令,添加和读取的过程是相互独立的。

当CPU需要渲染一些对象时,它可以向命令缓冲区中添加命令,而当GPU完成了上一次的渲染任务后,它就可以从命令队列中再取出一个命令并执行它。

Draw Call多了会影响帧率

在每次调用Draw Call 之前,CPU需要向GPU发送狠多内容,包括数据、状态和命令等。

在这一阶段,CUP需要完成很多工作,例如检测渲染状态等。

一旦CUP完成了准备工作,GPU就可以开始本次渲染。

因此渲染速度往往快于COU提交命令的速度。

如果Draw Call 的数量太多,CPU就会把大量时间花费在提交Draw Call上,造成CPU的过载。

 

减少Draw Call

批处理


注意点

  • 避免使用大量很小的网格。当不可避免地需要使用很小的网格结构时,考虑是否可以合并他们

  • 避免使用过多的材质。尽量在不同的网格之间公用同一个材质。

  •  
TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
  TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back

标签:Draw,着色器,命令,UnityShader,Call,GPU,精要,解惑,CPU
From: https://www.cnblogs.com/ApolloniaLKX/p/17039869.html

相关文章