2012-04-15 1 views
1

현재 WebGL에서 직설적 인 직접 처리 (다중 통과 또는 후 처리 없음) 렌더링을하고 있습니다. 모든 프레임을 수행 할만큼 효율적으로 전체 렌더링 된 이미지 (즉, 단일 숫자)의 평균 밝기/휘도를 결정하고 싶습니다.WebGL에서 평균 장면 밝기는 어떻게 결정합니까?

내가 달성하고자하는 것은 현실적인 조명과 장면 전환없이 실내 및 실외 장면을 모두 볼 수 있도록 장면에서 "노출"조정 (비디오 카메라 또는 인간의 눈으로)을 구현하는 것입니다. 현재 프레임의 밝기는 다음 프레임의 밝기에 대한 음의 피드백이됩니다.

현재 내 장면 데이터를 통해 몇 개의 광선을 보내서 CPU 측에서 매우 대략적인 근사값을 계산하여 해당 지점의 밝기를 찾습니다. 이 방법은 효과가 있지만 샘플 수가 너무 적어서 (광선이 광원을 가로 지르는 것처럼보기 각도에 따라 밝기가 크게 달라집니다). 내 응용 프로그램이 일반적으로 CPU 바운드이기 때문에 가능한 경우 GPU로 작업을 오프로드하는 것을 선호합니다.

+0

WebGL에 전달 된 정보를 사용하거나 이미지 기반 솔루션을 원하십니까? 솔루션이 정확해야하나요? 아니면 근사값으로 충분합니까? –

+0

@StefanHanke 편집을 참조하십시오. 간단히 말하면, 근사값은 괜찮습니다. 빛은 세계 데이터에서 쉽게 추출되지만 더 많은 CPU 작업을 추가하고 싶지는 않습니다. –

+1

내 생각은 : MRT를 사용하여 해상도가 다른 두 가지 색상의 첨부 파일로 렌더링합니다. 작동하지 않는 이유는 WebGL이 [단색 부착 만 지원하기 때문에] (http://stackoverflow.com/q/9820496/1262542) 새로운 OpenGL 버전에서도 다중 해상도를 사용한 렌더링이 지원되는지 여부를 모르겠습니다. –

답변

3

난 그냥 끔찍한 kludge 생각, 즉 그것에 텍스처와 generateMipmaps에 렌더링, 그리고 작은 수준을 읽습니다. 더 좋은 방법이 있기를 바랍니다.

무엇이 잘못 되었나요? 이 방법은 거의 전적으로 GPU에서 수행되며 기존 렌더링 파이프 라인에 잘 적용될 수 있으며 합리적인 결과를 제공해야합니다. 나는 그것에 대해 추천 할 어떤 이유가 있는지 모른다.

+0

무엇이 잘못 되었나요? 음, 예를 들어, 전혀 재 샘플링하지 않아도 전혀 관련이 없습니다. 하지만 CPU 기반이라고 주장했습니다. 그것을 시도해야 할 것 같아요. –

+0

이제 구현을 시도했습니다. 기본 개념은 잘 작동하는 것처럼 보이지만,'generateMipmap' 이후에는 필터가 밉맵으로 설정되지 않은 경우에도 텍스처는 즉시 검정색이됩니다. 나는'generateMipmap'을 할 때 framebuffer가 현재 바인드되어 있지 않은지 확인하고, 나중에'readPixels'를 만들기 위해 다른 프레임 버퍼로 그리기를했습니다. 'generateMipmap'을 제거하면 예상되는 결과가 생성됩니다. 어떤 제안? –

관련 문제