2012-05-25 3 views
1

3D 엔진에서 조명을 구현 중이며 조명 계산 방법에 결함이 있음을 발견했습니다. 결합 쉐이더에서는 분산 색상과 조명 계산을 얻습니다.조명 계산의 올바른 방법

return diffuseColor * (diffuseLight + ambient); 

내가 알 수있는 한, 이것은 일을하는 표준 방법입니다. 그러나 예를 들어 색상이 0,1,0이고 광원이 1,0,0 인 경우 어떻게됩니까? (이 예제에서는 앰비언트 무시) 결과는 0,0,0이됩니다. 그러나 실생활에서 순수한 초록색 종이를 얻고 그것에 착색 된 붉은 빛을 비추면 황색이됩니다. 또는 최소한 흑인이 아닙니다.

다른 게임이 어떻게이 문제를 해결합니까?

+0

내가 설명했던대로 작동한다는 것을 맹세 할 수있었습니다. 나는 오랫동안 컴퓨터로 작업 해 왔을 것임에 틀림 없다. 적어도 나는 그것을 생각한 유일한 사람이 아니었다. 내가 여기 물어보기 전에 내 친구와상의했다. – Programmdude

답변

0

은 (각 RGB 구성 요소)이어야

return (diffuseColor * diffuseLight) + ambient; 

주위 성분이 일정하고 수행 된 다른 조명 모든 계산 후에 첨가하고,에 의존하지 않는다 빛 방향 또는 시선 방향. 훌리오가 말한대로

하는 순수한 녹색 종이는 순수한 붉은 조명 아래 검은 볼 것이다.

녹색으로 보이면 스펙트럼의 다른 모든 색상을 흡수하고 남은 부분 (예 : 녹색)이 반사되기 때문입니다. 빨간불을 비추면 반영 될 녹색이 없습니다.

+0

실제로 주위 광은 광 방향이나 눈 방향에 의존하지 않으므로 다르게 조정되어야합니다. – Julio

+0

@Julio 확산 광선은 시선 방향에 의존하지 않습니다. 위의 공식은'diffuseLight'에 이미 코사인을 곱한 경우에 맞습니다. 표면 법선과 빛의 방향 사이의 각도. – Alnitak