2017-12-08 1 views
1

내가 추적 책 현실적인 레이를 읽고 있어요 그리고 난 상자 필터 코드를 이해할 수 없었다 : 제 생각에는현실적인 광선 추적에서 "필터"는 무엇을 의미합니까?

void boxFilter(Vector2* samples, int num_samples) 
{ 
    for (int i = 0; i < num_samples; i++) 
    { 
     samples[i].x = samples[i].x - 0.5f; 
     samples[i].y = samples[i].y - 0.5f; 
    } 
} 

를, "필터"가중치의 배열이되어, 샘플링 위치를 생성하는 것입니다 광선을 생성하려면 필터가 결과를 결합해야합니다 (따라서 필터 메서드는 float[]을 반환해야하지만 위의 함수는 Vector2[]을 반환합니다). 코드 란 무엇을 의미합니까?

+0

이 기능은 샘플링 된 값이 아닌 샘플링 위치에서 작동하는 것 같습니다. 주어진 함수에 관한 책에서 더 많이 언급 된 것이 있습니까? – Matso

답변

0

상자 필터링의 기본 개념은 이미지면 "픽셀"에서 샘플이 도착하는 위치와 관계없이 상자 필터를 사용하면 렌더링이 해당 픽셀의 정확한 중앙에 위치하는 것처럼 동작하게됩니다.

나는 특정 책을 읽고하지 않은,하지만 난 그 코드 조각에서, sample[].x.y 반환 된 레이는 픽셀 좌표에 이미지 평면을 히트 int (또는 이전에 floor() ED) 위치가 같은데요. 따라서 각각에서 .5을 뺀 것은 각 픽셀의 기하학적 중심에 샘플을 놓습니다. 따라서 상자 필터입니다.

상자 필터링 (및 기타 필터)에 대한 자세한 내용은 물리적 기반 렌더링, 7 장, "샘플링 및 재구성"을 참조하십시오.

관련 문제