OpenGL vs DirectX

2022-3-28 21:18cgsd 185 0

Hello . 大家好

今天给大家带来两种图形API在DCC软件中的不同

我是几维



学习图形学的知识有一段时间了,好好的复习巩固一下。希望能把程序的语境转化成美术也能够理解的语境去整理。本文不会专注于图形学的内容,而是基于图形学基础去延申出这两种API(应用编程接口),然后提炼出在软件顶层设计中有什么区别。简单来说是侧重于美术从业者阅读。


1
应用编程接口API



以前软件开发缺乏标准,一种代码就只是对应着一种硬件和一种系统。这样导致的结果是开发的过程会非常繁琐。这是时候就需要一个中间层在不同的软件和不同的硬件中进行沟通,就是API。API是执行一组相关操作的标准函数集合。图形API是一组执行基本操作的函数。程序可以直接通过这些函数进行构建不需要访问更底层的东西。API的意义在于简化编程的操作。


图形API是针对GPU的图形库,用于渲染2D、3D矢量图形的跨语言、跨平台的应用编程接口。


DirectX由微软定义,支持平台有Windows、Xbox。

OpenGL由Khronos定义支持平台有Windows、MacOS、Linux,Andriod、IOS。


OpenGL是一种图形API,DirectX是许多种API的集合体,其中也包括图形API,比如Direct3D。它就相当于是游戏引擎,显卡驱动和系统层之间的桥梁。


2
纹理坐标Texture Coordinates


纹理坐标定义了图像(或图像的一部分)如何映射模型上。纹理坐标与几何体模型上的每个顶点相关联,它指示纹理图像中的哪个点应映射到该顶点上。

 

OpenGL和DirectX中对UV纹理处理起来有一些不同。比如市场上最常用的软件Maya和3DMax选择的不同的应用编程接口。Maya是基于OpenGL,3DMax是基于DirectX。有时候在用软件或者引擎做一些材质动画的时候就需要比较清楚的知道这个方向的区别。


Direct3D

-纹理在内存中是从上到下的。

-纹理内存的第一个字节是图像的左上角。

-UV坐标是自上而下的。(0,0)是在纹理(象限)的左上角。


OpenGL

-纹理在内存中是从下到上的。

-纹理内存的第一个字节是左上角。(注意看图的区别)

-UV坐标是自下而上的。(0,0)是在纹理(象限)的左下角。



3
法线贴图Normal Map





首先Normal map的用途是为了在几何物体表面上加入细节。常用比较多的有两种,一种是(对象空间)object-space,另一种是切线空间(tangent-space)。简单来说对象空间是对象的局部3D空间。向上总是向上,向左总是向左。另一方面,切线空间最好被认为是表面空间,换句话说就是沿着法线。还有一个是(世界空间)world-space,这里不过多介绍,重点不是这个。


因为DirectX和OpenGL的不同,法线贴图也会出现不同的情况。最常见的就是当把模型导入到Substance Painter中时,有一个选项需要选择是法线贴图格式。



根据纹理坐标的定义,OpenGL的第一个像素在底部,而DirectX的第一个像素在顶部。也就意味着我们要反转RGB通道中的Green通道。

 

举一个例子,在max中UVW是三个轴向。U代表红色是X轴向,V代表绿色是Y轴向,W代表蓝色是Z轴向。所以我们知道了OpenGL和DirectX第一像素的位置正好相反,那么就可以得到结论是需要反转Y的轴向。当然在maya里面也是一样的。



最直接的区别就是法线贴图是凸出的还是凹陷的。



4
3D空间坐标系


在图形学中右手坐标系和左手坐标系都存在。是屏幕空间的一个习惯。区别就在于Z轴的方向,基于电脑屏幕的话,一个是朝外的一个是朝内的。朝向里面的就是左手系统,朝向外面的就是右手系统。左手系统的好处是因为所有物体都在屏幕里面,那就意味着所有物体的值都是正值。如果是右手系统,所有的物体就在Z轴的负方向。



Maya和OpenGL使用的是右手坐标系,DirectX和Max使用的是左手坐标系。如果不同的软件坐标系不一样,比如模型互导就会影响顶点绕序,从而影响背面剔除的结果(Face Culling)等。


顺便提一下背面剔除(Face Culling),就是在渲染的时候,将模型背面的面片丢弃,只将正面朝向的面片进行计算。背面剔除的目的就是节省CPU和GPU的资源。



5
参考


GAMES101-现代计算机图形学入门-闫令琪


GAMES103-基于物理的计算机动画入门


Fundamentals-of-Computer-Graphics-Fourth-Edition



鲜花

握手

雷人

路过

鸡蛋

最新评论

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-3-28 20:27 , Processed in 0.041522 second(s), 18 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.