2016-10-26 6 views
2

나는 작은 경로 추적 프로그램을 가지고 있으며 몇 가지 기본 BRDF를 구현하는 방법을 찾으려고합니다.BRDF는 일반적으로 어떻게 구현됩니까?

1) For each pixel: 
    1.1) For each sample: 
     1.1.1) I construct a path. 
     1.1.2) I calculate the contribution of this path. 
     1.1.3) I calculate the "probability" of this path. 
     1.1.4) Finally, I calculate the overall color value(taking into account number of samples, "probability" and contribution of the path). 
    1.2) Take the sum of all samples' values and write it to the pixel. 

그래서, 내가 단계 1.1.1) I construct a path에 반영 광선의 방향을 계산 : 는 여기에 내가 (재귀없이)를 사용하여 파이프 라인에 대한 간략한 설명입니다.

지금까지는 확산 반사, 정반사, 광택 반사, 굴절을 구현했습니다. 이제는 복잡한 BRDF를 구현하고자합니다. Cook-Torrance BRDF를 예로 들어 봅시다. 여러 구성 요소가 포함되어 있습니다 (확산 반사 및 정반사). 조합을 얻기 위해 광선을 어떻게 추적해야합니까? 내가 diffuse_ray/specular_ray 사이에서 임의로 선택하고 평소와 같이 값을 쌓아 두어야합니까? (무작위 값이 0.5 이상이면 확산 광선, 그렇지 않으면 - 반사를 추적 할 때처럼) 또는 여러 광선을 추적해야합니까? 각 교차로에서?

일반적으로 물리적 기반 렌더러에서 어떻게 구현됩니까?

P. 누군가이 주제에 대한 좋은 기사를 알고 있다면 나는 그것을 보게되어 기쁘다. 나는 pbrt를 읽으려고했지만 아주 복잡하고 거대한 것처럼 보입니다. 그리고 카메라 모델과 다른 것들처럼 다르게 구현되는 것들이 있습니다.

+0

내 추측 적 추적자에서 나는 반사 및 확산 반사에 대해 별도의 광선을 생성하지만 위에 설명한 방법으로 광선 트리를 더 작게 유지하고 계산 복잡성을 줄여야합니다. 나는 그 방법을 사용하는 것을 고려해 보았지만, "색상"무작위 계수를 갖는 방법을 이해할 수 없기 때문에 확산과 반사 사이의 구분이 표면색에 따라 달라질 수 있습니다 (플라스틱 대 금속 재료에서 일어난다 고 생각합니다) – Alnitak

답변

1

첫 번째 단계는 BRDF가 광선이 어떻게 튀어야하는지 결정할 수 있습니다. 여러 방법의 조합 인 경우 BRDF에서 각 방법에 확률을 할당 한 다음 주어진 확률에 따라 BRDF를 선택하십시오.

예를 들어 반사 및 확산 반사 조합 인 BRDF가 필요하다고 가정합니다. BRDF를 인스턴스화하면 60 %의 반사와 40 %의 확산이 필요하다는 것을 알 수 있습니다. 그런 다음 경로 추적자가 BRDF에 반사 광선 방향을 가져 오도록 쿼리하면 BRDF는 시간의 60 %의 반사 광선과 확산 광선의 40 %를 내부적으로 계산할 수 있습니다.

EDIT - 또 다른 방법은 BRDF가 두 가지 방법을 보간하여 반사 된 방향을 생성하기 위해 제공된 확률을 사용하는 것입니다. 위의 예에서 BRDF는 모든 교차점에 대해 반사 광선 및 확산 광선을 계산하고 계산 된 반사 광선의 60 % 및 계산 된 확산 광선의 40 %의 선형 보간 인 방향의 새 광선을 반환합니다.