I'm trying to implement the derivation of the masking function G_1 by Smith. The appendix of Walter et al 1, Hammons presentation 2 and this research paper 3 talk in detail about it and I feel as I do understand the majority of the math behind it. But when it comes to turning this into code I cannot seem to get it right.
Some of my questions entail:
In the first integral from minus infinity to infinity over P22(p, q), the way I understand it I can simply iterate over all of my microfacets and use the previous formular (P22(p, q) = D(m) cos^4(theta_m)) and add them together for a riemann sum?
As far as I understand is mu (= |cot(theta_v)|) the slope of the view vector and when using an integral from mu to infinity the goal is to decrease te angle of theta_v until it is zero?
The way I naivly implemented it is as an nested loop of two riemann sums that aim to describe the two integrals. In pseudocode:
calculate mu from view angle Aux = 0.0; //for loop uses calculation of the angle theta_v to decide termination of loop for(float q = mu; angleof(q) > 0.0001f; q += dq) { float P2 = 0.0; for(iterate through all maicrofacets) { calulate theta of current microfacet calculate cos^4(theta) get D of current microfacet P2 += D * cos^4(theta) * dp; } Aux += (q - mu) * P2 * dq; } Aux *= 1.0 / mu; return 1.0 / (1.0 + Aux) I write in C++ but I would be very happy with any kind of code or hint as to how to solve this.