2014-05-15 6 views
1

Phong 조명 쉐이더를 쓰고 있는데, gl_FragColor에 전달하는 값을 정규화할지 여부를 결정하는 데 어려움이 있습니다.gl_FragColor 값을 정규화해야합니까?

정규화 된 값을 사용하면 조명이 약간 이상합니다. 예를 들어, 광원으로부터 멀리 떨어진 물체 (비 점등)는 방출 성 구성 요소, 주변 구성 요소 및 전체 주변 광의 합에 의해 결정되는 색을 갖습니다. 최대 합계가 (0.3, 0.3, 0.3)입니다. 이것에 대한 보통은 약 (0.57, 0.57, 0.57)입니다. 이것은 내가 기대하는 것보다 훨씬 더 밝습니다.

그러나 정규화되지 않은 값을 사용하면 가까운 물체의 경우 반사 영역이 실제로 매우 밝아지고 일반적으로 재료 상수에 낮은 값을 사용해야합니다.

는 참고로, 난 단지 RGB 구성 요소를 정상화하고 및 알파 성분은 항상 내가 조금 압도하고 1

내가이에 관련된 아무것도 찾을 수 없습니다. 그 또는 내 검색이 완전히 잘못되었습니다.

답변

1

아니요. 색상을 표준화하면 흥미로운 효과가 발생하지만, 항상 그렇지는 않을지라도 가장 좋아할 것으로 생각합니다.

경우에 따라 장면에 더 많은 세부 사항을 제공하는 것처럼 보일 수도 있지만 색상 출력을 표준화하면 정보가 손실 될 수 있습니다. 모든 조각의 색상이 정규화 된 경우 모든 RGB 벡터의 표준이 1과 같습니다. 즉, 흰색 (norm = sqrt(3)), 노란색 (norm = sqrt(2))과 같은 밝은 색상, 진한 빨간색 (norm(0.5, 0.0, 0.0) = 0.5)과 같은 어두운 색상 등 출력에 존재할 수없는 색상이 있습니다. 또 다른 문제는 0 벡터 정규화입니다. 즉 검은 색).

색상 정규화가 잘못된 이유를 이해하는 또 다른 방법은 그레이 스케일 이미지를 렌더링하는 덜 일반적인 경우를 생각해보십시오. 단 하나의 색상 구성 요소가 있으므로 정규화는 실제로 모든 색상을 지정하는 것처럼 의미가 없습니다. 1.0. [0, 255] 또는 [0.0, 1.0]을 :


없이 정규화 값을 이용하여 문제는 출력 이미지는 컬러 값이 일정 간격으로 고정 갖고 있다는 사실로부터 발생한다. 물체의 반사 부분이 확산되는 빛을 반사하는 것보다 더 많은 빛을 반사하기 때문에 계산 된 색상 값이 심지어 (1.0, 1.0, 1.0)보다 클 수 있으며 대부분의 반사 영역에서 흰색으로 고정 될 수 있습니다. 따라서이 영역은 아마도 너무 밝아 질 수 있습니다.

간단한 해결책은 재료 상수 값 또는 광도를 낮추는 것입니다. 한 단계 더 나아가서 계산 된 색상 값이 (1.0, 1.0, 1.0)을 초과 할 수 없도록 재료 상수 및 광도 값을 선택해야합니다. 일관된 값이 장면의 모든 재질과 모든 조명에 사용되면 계산 된 색상 값을 간단히 나누면 동일한 결과를 얻을 수 있지만 장면이 너무 어둡기 때문에 잔인한 장면입니다.


더 복잡하지만, 더 나은 찾고 솔루션은보다 사실적인 이미지를 얻기 위해 같은 bloom 같은 HDR rendering 및 노출 필터를 포함한다. 이것은 기본적으로 [0, 255] RGB 버퍼보다 ​​큰 범위를 처리 할 수있는 플로트 버퍼로 장면을 렌더링 한 다음 특정 광도 및이 메커니즘 (블룸)에 의해 야기 된 이미지 인공물에 적응하는 카메라 또는 인간의 눈 동작을 시뮬레이트하는 것을 의미합니다.

+0

고맙습니다. 의심의 여지가 없습니다. 순간적으로 재료 상수/광도를 낮추는 것이 최선의 가장 간단한 옵션입니다. –