如何使用 Blinn-Phong 照明计算阴影最亮的点

问题描述 投票:0回答:0

假设我们有以下场景:

  • x-y 平面上的一个等边三角形,一个顶点在 (1, 0, 0) 处,另外两个顶点距离原点一个单位。
  • 从视点 (0, 0, 2) 看原点的相机
  • 点光源位于 (x, 0, 2)
  • 使用 Blinn-Phong 光照模型进行着色,具有
    K_d = 0
    K_s = 1
    n = 30
  • 正在计算局部光和查看器的着色,使用每个片段着色。
  • 所有三个顶点的法线都指向z方向。
  • 光源强度为1.

找到 x 的值,片段着色器为其计算图像中心的最亮值。

我的尝试:

Blinn-Phong 是:

I_res = K_a * I_a + I * K_d * norm.L + I * K_s * (norm.H)^n

因为没有指定环境

K_d = 0
那么我们简化为:

I_res = I * K_s * (norm.H)^n

并使用

K_s
I
给出的值:

I_res = (norm.H)^30

三角形的所有 3 个顶点的法线都是 (0, 0, 1) 所以在三角形的任何片段都是相同的。因此,

norm = (0, 0, 1)
。因此,与 H 的点积仅取决于
z
H
值。

计算H:

H = (L+V) / |L+V|

L = (0, 0, 0) - (x, 0, 2) = (-x, 0, -2)
V = (0, 0, -1)

H = (-x, 0, -3) / |L+V|
H = (-x, 0, -3) / sqroot(x^2 + 3^2)
H = (-x / sqroot(x^2 + 3^2), 0, -3 / sqroot(x^2 + 3^2)) 

norm.H = (0, 0, 1) . (-x / sqroot(x^2 + 3^2), 0, -3 / sqroot(x^2 + 3^2)) 
norm.H = -3 / sqroot(x^2 + 3^2)

为了最大化

norm.H
,我们需要最小化
sqroot(x^2 + 3^2)

所以

x = 0
.

opengl graphics light phong
© www.soinside.com 2019 - 2024. All rights reserved.