跳到主要内容

纹理

sRGB 纹理处理​

表示颜色的纹理,例如漫反射、自发光、高光和绒光纹理,通常存储在 sRGB 空间中,以保持颜色准确并减少色带。引擎使用这些纹理时,会自动将其从 sRGB 转换到线性空间,以正确计算光照。只要纹理采用 sRGB 格式,GPU 就能高效执行转换,而不产生额外开销。

指定纹理的 sRGB 编码​

加载表示 sRGB 空间颜色的纹理资源时,必须指定 sRGB 编码。下面演示如何创建使用 sRGB 编码的资源:

new pc.Asset(
'color',
'texture',
{ url: 'heart.png' },
{ srgb: true }
);

在编辑器中标记 sRGB 纹理​

在编辑器中,确保在检查器面板中将颜色纹理标记为 sRGB。这样引擎才能正确将纹理解释为 sRGB,并执行到线性空间的必要转换。

sRGB

sRGB 程序化纹理与渲染目标​

创建程序化纹理,或渲染到表示颜色且将由着色器读取的纹理时,应使用 sRGB 格式,以启用自动转换。渲染到该纹理时,线性值自动转换到伽马空间,避免色带。之后将其作为颜色纹理使用时,像素又会自动转换回线性空间。

下面演示如何创建 sRGB 渲染目标纹理:

const texture = new pc.Texture(app.graphicsDevice, {
name: 'color-texture',
width: 512,
height: 512,
format: pc.PIXELFORMAT_SRGBA8
});