참조 Phong 공식을 사용하여 조명 모델을 구현 중입니다. 다른 색상으로 재질을 적절하게 렌더링하는 방법을 아직 확실히 알지 못합니다. 나는 텍스처를 사용하지 않는다. 광 포인트에 I가 화소마다 사용하고 기본 방정식은, 다음과 같다 :퐁 쉐이딩 (Phong Shading) 조명 모델의 재질 색
Result.R := Ia.R*ka.R + P.IL.R*((M.kd.R*LN) + (M.ks.R*Power(Max(VR,0),M.Ns)));
Result.G := Ia.G*ka.G + P.IL.G*((M.kd.G*LN) + (M.ks.G*Power(Max(VR,0),M.Ns)));
Result.B := Ia.B*ka.B + P.IL.B*((M.kd.B*LN) + (M.ks.B*Power(Max(VR,0),M.Ns)));
Result.R := Round(Result.R*255/3);
Result.G := Round(Result.G*255/3);
Result.B := Round(Result.B*255/3);
(* Where:
Result : (R,G,B) color of pixel;
Ia: intensity of Ambient Light for each component R, G, B;
ka: material coefficient for reflection of ambient light;
P: Dot Light;
IL: intensity of Dot Light for each component R, G, B;
kd: material coefficient for diffuse reflection of Dot Light;
ks: material coefficient for specular reflection of Dot Light;
LN: dot product (L.N);
VR: dot product (V.R);
L: Vector from pixel to Dot Light;
N: Normal vector on the pixel;
V: Vector from pixel to Observer;
R: Reflected vector of L relative to N; *)
각 식의 최대 값은, 각 구획 때문에 (Ia.R ka.R * 3, 각 구성 요소 (Result.R, Result.G 및 Result.B)가 0에서 255까지 유지되도록 결과를 조정합니다.
이렇게 정확하게 프로그래밍되지 않았습니다. 두 개 이상의 도트 라이트가있는 경우 결과의 모든 라이트의 확산 및 반사 구성 요소 합계를 계산합니다. Ia * ka 구성 요소는 변경되지 않습니다. 위의 3으로 나누는 대신 다른 숫자로 나눕니다 (2 개의 점등이 있으면 5로 나눕니다. 3, 7 등으로 나눕니다).
이러한 종류의 구현으로 ka, kd 및 ks 계수를 통해 재료 색상을 제어 할 수 있습니다. 밝은 색상은 전반적으로 Ia 및 P.IL에 의해 제어됩니다. 내가 따라 왔던 모델은 위키 백과에서 찾은 one과 비슷합니다.
내가 Phong의 공식을 잘못 해석하면 나는 어떤 종류의 오해를 저 지르지 만 알고 싶습니다. Phong의 조명 모델은 여러 버전이 있지만, 어떤 것들이 재료와 조명 색상을 변경할 가능성이 있는지 배우고 싶습니다. 사전에
덕분에, 나는 모든 관심을 주셔서 감사하고 클램핑 대신 값을 정상화됩니다하고 있습니다 :
좋아, 내가 지적한 두 번째 주석을 수행하는 코드 부분을 게시하지 않았습니다. 미안합니다. 나는 아직도 불빛의 수에 대해 혼란 스럽지만. 계속해서 새로운 조명을 추가하면 계속해서 더 밝아 져야합니다. 그러나 만약 내가 하나의 매우 밝은 빛을 가지고 있다면 그 효과는 같지 않을까요? –
그러나 색상을 처리하는 방법에 대해 뭔가 어색한 점이 있습니까? –
색상이 꺼져 있음을 나타내는 결과물이 있습니까? Round (...) 대신 Clamp (Result.R, 0, 255)를 사용하여 색상을 정규화해서는 안됩니다. 앰비언트, 스페 큘러 및 디퓨즈는 각각 0-1 범위를 가질 수 있어야합니다. 그들은 0-0.333의 범위를 가지고 있다고 말하고 있습니다.즉, 내가 거울이나 앰비언스를 가지지 않는다면, 단지 확산을 기반으로 한 흰색 픽셀을 가질 수 없다는 것을 의미합니다. – ciel712