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的算法是.h=normalize(view,light),pow(max(0,dot(normal,h),64)

相关推荐
松树戈2 天前
【Godot4精进之路】03~Godot编辑器常用界面介绍
编辑器·游戏引擎·godot
郝学胜-神的一滴6 天前
[简化版 GAMES 101] 计算机图形学 16:纹理走样、Mipmap、三线性插值、各向异性过滤原理全解
unity·游戏引擎·godot·图形渲染·three.js·opengl·unreal
风子1125 天前
pong_Day 3:AI 对手球拍 + 计分系统 + 胜负判定
godot
风子111 个月前
pong_day02_让球飞来+碰撞反弹
godot
玉夏1 个月前
【Shader基础】UV 与纹理采样 Part1
unity·着色器·uv
kyle~1 个月前
Godot开源游戏引擎
开源·游戏引擎·godot
郝学胜-神的一滴1 个月前
[简化版 GAMES 101] 计算机图形学 13:从光栅化到着色——赋予三维像素光影灵魂
c++·计算机视觉·unity·godot·图形渲染·opengl·unreal
Zwarwolf1 个月前
Godot零散知识点项目汇总
游戏引擎·godot
caimouse1 个月前
Godot Engine 最新版官方文档(简体中文完整翻译 & 精简梳理)
游戏引擎·godot