计算机的图形渲染机制

游戏中的画面是怎样呈现在屏幕上的?GPU是怎样协助CPU去渲染图形的呢?nVIDIA和AMD的显卡和GPU的概念是怎样牵连到一起的? 现在很火爆的VR到底是个什么原理?OpenGL、DirectX是什么鬼?怎么游戏引擎有那么多种呢?夕阳产业Flash Player到底是怎么回事?

以上的这些问题,都会在本文中用最浅显的语言来解答,就算你不懂C/C++,甚至连代码也没有敲过,也能懂到底是什么回事。本文不会很深入,只是给一个入门者一个大概的轮廓,前一部分内容可以面向所有有阅读能力的人,后面一部分内容面向所有的计算机图形技术入门者。

计算机的显示技术

每天打开显示器,或者点亮手机屏幕,你就能体会到当今世界的计算图形技术。这个计算机世界的窗口————显示器,其实只是一个呈现器。我们对计算机的渲染技术的探索,将从这个呈现器起步。

  • 基础的呈现原理

我们的纸张、布料等是原始的呈现器,我们可以用笔,用涂料在上面绘制出我们想要的图案。而显示器是另一种呈现器,它的呈现原理和纸张既相同又不同,相同的地方是,都是用不同的颜色来呈现图案(或者说信息),不同的地方,是纸张的呈现是连续的(自然的),而显示器的呈现是不连续的(离散的)————人类充分地利用离散的技术,构建了我们现在的计算机技术。

什么叫离散呢?举个例子,对于一副油画作品,我们将它切割成许多个很小的区域,然后在新的画布上,我们同样切割成许多很小的区域,在每个区域里,根据原画的对应区域,只取其主要颜色,或者几种颜色的混合(成一种颜色),然后把这个颜色涂满这个小区域。只要这个区域足够小,最后我们复制出来的新油画,就和原来的油画是几乎一样的。(当然只是视觉上的)。

  • 三原色

学过一点点美术基础的都知道三原色(小学知识?)。通过黄、品红、青三种颜色的混合,可以调制出除了白色以外的各种颜色。计算机也同样利用了这个原理,只不过计算机的三原色是红蓝绿(见过RGB这个词汇没有)。显示器(先不说Kindle那种显示器)的三原色和美术颜料的三原色在物理上有一点不一样,简单的说,就是颜料是不发光的颜色,而显示器用的是颜色光。这种不同还体现在,计算机的红蓝绿可以调出白色。因此,一个想要呈现出任意颜色的颜色单位,只要包含有这三个颜色光,通过调节每个颜色光的亮度,就能混合出各种颜色。还有一个前提,就是让这个颜色单位足够小,让肉眼无法区分出三个颜色光。

  • 从三原色到显示器

显示器的发展以及有很多代了,在千禧年至今,从厚厚的显示器(CRT显示器),到今天的各种液晶(LCD)显示器技术。虽然技术上的很大的不同,但它们的本质是一样的,就是让显示屏上每个颜色单位的三个颜色光各自发出指定的亮度。现在说的2K显示器(分辨率2048×1080),拥有2048×1080个颜色单位,这样的显示器就需要时时刻刻去调整这么多个颜色单位里的三个颜色光的各自亮度。

  • 显示器的输入

在纸上作画,是直观的输入,而显示器的输入,则没有那么直观了。我们已经知道,显示器呈现的画面是离散的,也就是由许多个颜色单位组合成的,要怎么控制颜色单位发出不同的色彩呢?我们已经知道,发光单位由RGB三种颜色组成,通过调节每个原色的发光亮度,就可以调节成各种颜色。当我们对画面切割成许多个小网格时,这是第一次使用离散处理问题,接下来我们对颜色的亮度做第二层的离散化处理。目前,我们可以让每个颜色单位里的每个原色发光体的调节做成256级。为什么切割成256级呢,我们只要意识到一点就行,这样的切割,我们的肉眼不能分辨出相邻亮度的区别,我们会觉得颜色是渐变的。通过这种处理,一个发光单位可以显示出256x256x256(1600万)种颜色,肉眼能够区分的颜色其实没有这么多,因此,这已经满足我们描述这个自然界的各种颜色了。

有了离散化,我们就可以用数字去表达颜色。例如红色是(255,0,0),蓝色是(0,0,255),白色是(255,255,255)。

显示器要显示画面,就需要输入这个画面上的所有颜色单位的颜色值。显示器一般有2根线,一条是电源线,另一条是数据线,这个数据线就是来传输这些颜色数据用的。显示器的分辨率越高,就需要传入更多的数据。

  • 给科普读者的小结

对于科普读者来说,读到这里就懂得显示器的显示原理了。接下来的部分,是计算机部分了。计算机为了呈现出稳定的画面,就需要时时刻刻输出计算机画面的数据。显示器要显示什么样的画面,都是由计算机的主机来决定,各种各样奇幻的计算机视觉,全部都是主机的CPU计算好,然后发送给显示器,显示器显示出来。显示器本身也有个微型的计算机控制着计算机呈现效果,例如显示器的整体亮度。显示器控制亮度的界面,也是由显示器本身的微型计算机来输出的画面,跟计算机画面可以重叠在一起。

你可能感兴趣的:(游戏,人工智能)