3D 顶点着色与Phong 反射模型

Phong 反射模型有时被称为“Phong 照明”或“Phong 照明”。它由环境光照、漫反射(朗伯反射)、镜面反射三部分组成。

3D 顶点着色与Phong 反射模型_第1张图片

根据下面公式:渲染引擎用到的输入参数和贴图分别是:

输入参数: 高光指数:控制高光的聚集程度和形状; 环境光强度:控制周围环境光对物体的影响程度;漫反射光强度:控制漫反射光照在表面的亮度; 镜面反射光强度:控制高光的亮度;材质色彩:决定物体表面漫反射光的颜色。

 Phong 反射模型提供了一个方程式,用于计算表面上每个点的光照,I_p:

3D 顶点着色与Phong 反射模型_第2张图片

 第一部分代表环境光项。在GLSL代码中,可以表示为:

float k_a = 0.6; // a value of our choice, typically between zero and one
vec3 i_a = vec3(0.7, 0.7, 0); // a color of our choice

vec3 ambient = k_a * i_a;

第二部分表示漫反射项。在GLSL代码中,可以表示为:

vec3 p = ro + rd * d; // point on surface found by ray marching
vec3 N = calcNormal(p); // surface normal
vec3 lightPosition = vec3(1, 1, 1);
vec3 L = normalize(lightPosition - p);

float k_d = 0.5; // a value of our choice, typically between zero and one
vec3 dotLN = dot(L, N);
vec3 i_d = vec3(0.7, 0.5, 0); // a color of our choice

vec3 diffuse = k_d * dotLN * i_d;

#这个 i_d我认为是白光的光强,dotLN 是cos\theta投影系数

 

3D 顶点的颜色是由UV纹理和Phong反射模型和光照决定的:

3D 顶点着色与Phong 反射模型_第3张图片

 

3D 顶点着色与Phong 反射模型_第4张图片

 获取α值的常用方法有:1. 设定一个固定的值,比如0.5。这种方法简单,但是不能很好地拟合不同材料的高光特性。2. 根据材质类型设定值。例如,金属材质α=0.8,塑料α=0.5等。这种方法可以粗略模拟不同材质,但是无法精确拟合真实材料。3. 基于物理计算获取。考虑入射光的角度、折射率等参数计算高光的强度,从而确定α。这种方法理论上可以模拟真实材质,但是计算复杂,不太实用。4. 数据驱动获取。利用测量或合成的图像数据,通过反向渲染或机器学习算法估计最合适的α值。这种数据驱动方法可以较好地拟合真实材质,目前较为流行。

你可能感兴趣的:(从0开始学3D游戏开发,java,开发语言)