游戏中的物品,是由GameObject以及各种Component组合而成的,例如Transform(位置)、Collider(碰撞盒)等
对于Shader(着色器)而言,Shader的工作主要是用于实现图形的一些高级效果,例如阴影、光照、材质、纹理、透明度等
在图形渲染管线中,Shader被分为两个主要类型:顶点着色器(Vertex Shader)和片段着色器(Fragment Shader)。
顶点着色器负责处理输入模型的顶点信息,例如位置、法线、纹理坐标等。它可以对顶点进行变换、变形、旋转等操作。
片段着色器负责处理每个像素的颜色值和其他属性,例如光照、纹理采样和透明度。它决定了最终在屏幕上显示的像素的颜色。
除了顶点和片段着色器,还有几种其他类型的Shader,如几何着色器(Geometry Shader)和计算着色器(Compute Shader),它们提供了更多的灵活性和功能,用于处理复杂的几何形状和执行通用计算任务。
Mesh Filter组件:存储的是一个Mesh(由一系列顶点、法线、UV坐标以及其他属性组成的三维几何形状。它定义了一个物体的形状和表面特性,例如模型的外观、纹理映射和碰撞形状。),也就是一个模型网格体,就是模型是由哪些三角面组成,最终组合而成的是一个什么样子的模型,三角面的一些顶点信息
Mesh Renderer组件:主要就是根据Mesh来渲染他的外观,就是样子,例如皮肤和外观的颜色,主要就是通过Material(材质),来控制渲染的颜色
Material:贴图(可以没有,也可以是一个简单的一个颜色)
OpenGL和DirectX是两种用于图形渲染和多媒体处理的编程接口和库。 Shader可以认为是一种渲染方式,由OpenGL或者Dx来进行解析,然后来控制渲染图像
Unity中Shader的分类(使用的是ShaderLab编写unity中的Shader)
- 表面着色器 Surface Shader
- 顶点/片元着色器 Vertex Shader
- 固定函数着色器(由于版本的原因已经弃用了)
GPU和CPU以及OpenGl以及应用程序三者之间的关系
GPU(图形处理器)和CPU(中央处理器)是计算机系统中的两种不同类型的处理器,而OpenGL是一个用于图形渲染的编程接口。
GPU(图形处理器):
GPU是一种专门设计用于处理图形和图像计算的处理器。它具有大量的并行计算单元和高速内存,可以同时执行大量的计算任务。
GPU通常用于处理图形渲染、计算机视觉、深度学习等需要高并行性的应用。它能够快速处理大规模的图像数据,并实时生成图像或进行复杂的计算操作。
在图形渲染方面,GPU负责执行图形管线中的各个阶段,包括顶点变换、几何处理、光栅化、像素着色等。它通过高度并行的方式将各个阶段的计算任务分配给多个计算核心,以提高图形渲染的效率和性能。
CPU(中央处理器):
CPU是计算机系统的核心处理器,负责执行大部分的计算任务和控制操作。它具有较少的计算核心,但每个核心都能执行更复杂和通用的计算任务。
CPU通常用于执行应用程序的控制流程、数据处理、物理模拟、逻辑运算等任务。它更适合处理顺序执行的任务和需要较高的单线程性能的情况。
在图形渲染方面,CPU负责准备图形数据、进行场景管理、计算物理模拟等任务。它与GPU协同工作,将准备好的数据传输给GPU进行图形渲染,同时处理其他的系统任务。
OpenGL(Open Graphics Library):
OpenGL是一个用于图形渲染的跨平台编程接口。它提供了一组函数和命令,开发者可以使用它来指导GPU进行图形计算和图像渲染。
OpenGL充当了GPU和应用程序之间的桥梁。开发者可以使用OpenGL函数来描述所需的图形效果、绘制图元、设置着色器、纹理映射等,这些操作最终会被传输给GPU,由GPU执行实际的渲染操作。
应用程序使用OpenGL来利用GPU的并行计算能力和图形处理功能,以实现高效的图形渲染和计算。在应用程序中,CPU通过调用OpenGL函数来与GPU进行交互,并将数据传递给GPU进行处理和渲染。
综上所述,GPU和CPU是两种不同类型的处理器,各自负责不同的计算任务和功能。OpenGL作为图形渲染的编程接口,协助应用程序与GPU进行通信和交互,使得应用程序能够利用GPU的并行计算和图形处理能力,实现高效的图形渲染和计算。
那为什么不直接在GPU中调用呢?非要用OpenGl作为接口
使用OpenGL作为接口的主要原因有以下几点:
跨平台支持:OpenGL是一个跨平台的图形渲染API,可以在多种操作系统上运行,包括Windows、macOS、Linux等。通过使用OpenGL作为接口,应用程序可以保持跨平台的兼容性和可移植性,而不需要针对不同的GPU架构和驱动程序进行单独的编写和优化。
开发者友好:OpenGL提供了一组易于理解和使用的函数和命令,使得开发者能够以相对简单的方式描述所需的图形效果和渲染操作。它提供了抽象的图形渲染管线和状态管理机制,使得开发者可以更方便地控制和调整渲染流程。相比直接在GPU中编程,使用OpenGL能够更快速地实现和迭代开发。
生态系统和工具支持:OpenGL拥有庞大的生态系统和丰富的工具支持。有许多第三方库、工具和文档可用于辅助OpenGL开发,如GLFW、GLEW、GLM等。这些工具和库可以简化开发过程、提供常用功能的封装,并且提供了大量的学习资源和社区支持。
兼容性和稳定性:使用OpenGL作为接口可以提供更好的兼容性和稳定性。OpenGL的规范经过了长期的发展和验证,在不同版本之间有着向后兼容的设计原则。这意味着应用程序使用的OpenGL代码可以在不同的硬件和驱动程序上保持一致的行为,并且具有较高的稳定性。
其他API的支持:使用OpenGL作为中间层还可以在需要时与其他图形API进行集成。例如,OpenGL可以与CUDA(用于通用计算)或Vulkan(另一种图形渲染API)配合使用,以满足特定的应用需求。这种灵活性使开发者能够利用不同的工具和技术组合,实现更复杂和高度定制化的图形和计算任务。