You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Godot空间着色器片段处理器中VIEW内置变量的准确含义

关于Godot空间着色器中VIEW内置变量的疑问

根据Godot官方文档对片段处理器中内置变量VIEW的描述:

视图空间中从片段位置指向相机的归一化向量,透视相机和正交相机均适用。

我原本以为可以直接将VIEW变量当作视图空间中从相机射向片段位置的射线使用,但实际测试后发现并非如此。将其取反赋值给ALBEDO的测试代码如下:

shader_type spatial;
render_mode unshaded, fog_disabled;

void vertex() {
    POSITION = vec4(VERTEX.xy, 1, 1);
}

void fragment() {
    ALBEDO = -VIEW;
}

该代码的渲染结果与预期的相机射线图像不符。

于是我自行编写了生成视图空间相机射线的代码,渲染结果符合预期:

shader_type spatial;
render_mode unshaded, fog_disabled;

uniform float camera_near;

void vertex() {
    POSITION = vec4(VERTEX.xy, 1, 1);
}

vec3 gen_camera_ray_in_view(vec2 frag_coord_xy, mat4 invProj, vec2 viewport_size)
{
    vec3 res;
    vec2 ndc_xy = 2.0 * frag_coord_xy  - 1.0;
    vec3 ndc = vec3(ndc_xy, -1.0);
    vec4 clip = vec4(ndc * camera_near, camera_near);
    vec4 inview = (invProj * clip);
    res = inview.xyz;
    return normalize(res);
}

void fragment() {
    ALBEDO = gen_camera_ray_in_view(SCREEN_UV, INV_PROJECTION_MATRIX, VIEWPORT_SIZE);
}

因此想请教,Godot中内置变量VIEW的准确含义究竟是什么?

内容的提问来源于stack exchange,提问作者SZYoo

火山引擎 最新活动