Open shawn0326 opened 2 years ago
这里phi代表的是方位角吧,如果半球采样的话,theta 最大是 Math.PI,phi最大应该始终是2 * Math.PI。
这个半球是在 z 轴方向上的
这个半球是在 z 轴方向上的
抱歉,刚刚也发现了这个问题,重新整理了下写法:
var phi = halton(i + offset, 2) * Math.PI * 2;
// rejecting samples that are close to tangent plane to avoid z-fighting artifacts
var cosTheta = 1.0 - (halton(i + offset, 3) * 0.85 + 0.15);
var sinTheta = Math.sqrt(1.0 - cosTheta * cosTheta);
var r = Math.random();
// for tbn space
var x = Math.cos(phi) * sinTheta * r;
var y = Math.sin(phi) * sinTheta * r;
var z = cosTheta * r;
@shawn0326 嗯一时想象不到这个效果怎么样,现在 clay-viewer 里是通过一个 bias 来控制的
https://github.com/pissang/clay-viewer/blob/86456edc4b28494e5facbe75fc4f009fe8cf3f3e/src/graphic/SSAOPass.js#L45
这里phi代表的是方位角吧,如果半球采样的话,theta 最大是 Math.PI,phi最大应该始终是2 * Math.PI。 另外,参考babylon的实现,建议处理一下theta角,避免因过于接近水平面而出现z-fight