SDF函数

SDF函数 // 返回 (t_near, t_far)无交点时 t_near 0 vec2 intersect_sphere(vec3 ro, vec3 rd, vec3 center, float radius) { vec3 oc ro - center; float a dot(rd, rd); float b 2.0 * dot(oc, rd); float c dot(oc, oc) - radius * radius; float discriminant b * b - 4.0 * a * c; if (discriminant 0.0) { return vec2(-1.0, -1.0); } float sqrt_d sqrt(discriminant); float inv_2a 1.0 / (2.0 * a); return vec2( (-b - sqrt_d) * inv_2a, (-b sqrt_d) * inv_2a ); }在进行射线求交绘制球体的时候需要注意的点1.高光算出之后可以模拟金属度特别高的话会接近金属所以需要乘以一个小数。2.高光算出之后还需要乘以一个【光的颜色】一般用vec3(1.0)而不是去乘以本身的值不然会高光特别暗。3.算出漫反射光系数后需要考虑物体本身的环境光和漫反射光的比例。可以用mix联系起来。这个环境光可以保证——没有被照到的地方也是可以看到一点东西的这更真实。4.uv要记得-0.5*2.5.uv.y要倒转6.uv.x要乘以分辨率(x/y)7.简单制作射线的话可以直接是normalize(vec3(uv.x,uv.y,-1或者1)8.根据碰撞的点可以算出Normal。点-圆心9.根据normal和light可以得到漫反射系数。10.view的计算方法是从碰撞的点-减去相机的点。Normaliaze一下。11.blinn_phong的算法是.hnormalize(view,light)pow(max(0,dot(normal,h),64)