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




