“我们不能指望能够像纹理,阴影等那样完全真实地显示对象。 我们希望只创建足够接近的图像以达到一定程度的真实感。”
裴廷芳
Bui Thuong Fong出生于1941年,在越战期间成为计算机科学家。 在60年代的有毒环境中完成他的学业一定很困难,更不用说他被叫到前列了! 但是他设法生存并生存到1975年,直到白血病在他为现代照明和阴影理论(
Fong的着色器)奠定了世界基础仅两年之后才得以生还。
越南名字由三部分组成:姓,中间名和个人名字。 也就是说,当人们说“ Fong shader”时,他们称呼个人名字Bui Tyong。 您可以在
Wikipedia上阅读有关
个人名称的更多信息。
我不确定是否是Phong,但Google表示可以。“轻轻地让温暖的阳光
在我垂死的床上玩耍
昏暗的山谷
我必须用孤独的脚踩。 “
让光进入-弗朗西斯·哈珀(Francis Harper)的诗
Phong的着色器基于极其简洁的数学。 实际上,您不需要知道这些,除非您真诚地希望成为一名图形程序员。 但是,从长远来看,她的知识将是有用的。 以下摘自Graham Sellers的
第七版OpenGL Superbible和Kronos Group ARB Foundation的摘录。
A)一些概念
首先,让我们弄清楚概念。 如果您一直在处理3D建模或游戏开发至少一分钟,那么您一定已经遇到过它们,但是重复并没有困扰任何人。
A-1)环境光
大多数书籍,尤其是低质量的书籍,都将这种照明与阳光进行了比较,但这是完全不正确的。 环境照明不是阳光。 它来自
四面八方 ,也就是说无处不在,但是在计算中它只是一个包含三个分量的向量。 在“ Phong”的阴影中,它是最后添加的,但不会更改。
A-2)漫射/漫射光
漫射照明有方向。 这实际上是
[sic]光源的
方向组件 。 在电影院中,光线是通过柔光箱散射的,而在计算机图形学中,光线是通过下面显示的公式散射的。 大小即散射照明的大小取决于表面。 例如,如果表面是粗糙的,即吸收的光大于反射的光,则该值将大于光滑表面的情况。
磨砂屏幕散射/吸收的环境光A-3)镜面高光
像散射光一样,反射
光是定向的,但基于表面的光泽度。 它留下了一个
亮点,叫做
发亮 。 在现实生活中,光泽度不是材料的组成部分。 实际上,薄膜涂料或一滴蜡会比其他任何东西都增加更多的光泽。 反射的
光泽度是介于0到128之间的一个因子,因为在值大于128时,它将不会对着色器产生很大的影响。
带有胶片的胶片-厚厚的彩色纸,带有光滑的胶片涂层,是对孩子的真实礼物。A- 4)反照率
这是表面
反射的入射光的一部分。
A-5)防风配方
根据Phong计算物料的公式如下:
其中:
:环境材料
:扩散材料
:镜面材料和
:光泽度
:环境照明
:漫射照明
:间接照明
您可能会问,向量呢? 不用担心,现在我们将介绍它们:
:垂直于表面
:从阴影点到光源的单位向量(换句话说,光向量)
:反射光矢量的负值
:指向观看者的向量
B)Gouraud底纹
在开始使用Fong的着色器之前,让我们看看如何在GLSL上获得Gouro着色。 请注意,我在Superbible中使用的是GLSL 4.1版本,但如果您是
www.learnopengl.com的粉丝,则可以使用3.3。 没关系 因此,让我们看看Gouraud底纹是什么。
这种着色方法是Henri Gouraud在1971年发明的。 它不会以任何方式超过Phong阴影,如今,它主要用作Cinema 4D等程序包中的无GPU加载预览方法。 他的问题是,他产生的
耀斑看起来像是火花:
此问题是由顶点之间的颜色插值引起的,由于颜色是线性插值的,所以三角形之间会出现间隙。 仅在Phong着色器中解决了此问题。 让我们看看如何在GLSL 4.1上实现Gouro着色。
清单1 :GLSL 4.1上的Gourox顶点着色
#version 410 core
现在是片段着色器。
清单2:相同概念
的片段着色器。
#version 410 core
C)阴影
在继续之前,让我们记住,Phong
阴影和Phong
照明是两个不同的概念。 您可以通过添加更多顶点来摆脱Gouro耀斑的“雪花”,但是为什么在Fong中添加阴影呢? 在Phong着色器中,颜色不会在顶点之间进行插值(如清单1和2所示),我们
在曲面法线的顶点之间进行插值,并使用生成的法线为每个
像素 (而不是顶点)执行所有光照计算。 但是,这意味着片段着色器将不得不做更多的工作,如清单4所示。但是首先,让我们看一下顶点着色器。
清单3: GLSL 4.1上的Phong着色器
的顶点着色器。
#version 410 core
几乎没有任何变化。 但是在片段着色器中,情况完全不同。
清单4: Fong片段着色器着色器。
#version 410 core
好,这是本文的结尾,希望您喜欢它。 如果它激发了您对OpenGL的兴趣,您可以在亚马逊上购买
OpenGL Superbible或浏览Learnopengl.com。 如果您不能处理着色器,建议您使用
Book of Shaders 。