You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

片段着色器中ScreenTC与TC_Window的含义及计算方法咨询(SSAO场景)

变量含义说明

这两个都是后处理渲染阶段的自定义变量,不属于GLSL内置变量,命名是引擎/开发者自定义的缩写:

  • tc_window:你推测的方向正确,这是窗口分辨率常量,存储当前渲染窗口/视口的像素宽高,一般是CPU端传入的uniform变量,不需要在片元着色器中手动计算
  • screenTC:就是屏幕空间归一化纹理坐标,取值范围固定为[0,1],x轴对应屏幕水平方向从左到右,y轴对应屏幕垂直方向(OpenGL默认从下到上,部分引擎会翻转成从上到下),专门用来采样屏幕空间的深度图、颜色缓冲等全屏纹理。

标准计算方式

1. tc_window的赋值

tc_window一般在CPU端更新,窗口大小改变时同步传入着色器即可:

// CPU端伪代码,对应1920*1080分辨率的传入逻辑
shader.setUniform("tc_window", vec2(windowWidth, windowHeight));

2. screenTC的计算

你的猜测完全正确,片元着色器内的标准计算逻辑就是用内置的gl_FragCoord.xy除以窗口分辨率做归一化:

// 方式1:用传入的uniform tc_window计算
vec2 screenTC = gl_FragCoord.xy / tc_window;

// 方式2:如果引擎内置了screenSize统一变量,等价写法
vec2 screenTC = gl_FragCoord.xy / screenSize;

示例逻辑验证

示例1验证

示例1中tc_depths = gl_FragCoord.xy / tc_window就是计算screenTC的过程,得到的[0,1]范围坐标用来采样深度图depthMap,完全符合屏幕纹理坐标的使用逻辑。

示例2验证

Crytek的SSAO代码直接把screenTC作为入参,用screenTC * screenSize /4计算旋转纹理采样坐标:screenTC乘screenSize换回像素级坐标,除以4是因为旋转纹理采用4x4平铺模式,和screenTC的定义完全匹配。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:54:10