使用 LUT 实现 Color Grading 后处理效果

本文介绍了如何利用LUT(查找表)进行颜色校正的后处理效果。LUT是一种三维颜色映射工具,常用于图形渲染中的颜色矫正。由于图形API不直接支持三维纹理,LUT通常被展开成二维形式。在实现过程中,需要注意不同图形库对纹理坐标的处理差异,并确保使用线性插值以避免色彩失真。Shader代码是实现这一过程的关键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LUT 查找表

在这里插入图片描述
LUT 可以用于后处理中的颜色矫正,它能将一个 RGB 颜色唯一地映射到另一个颜色。

它是一个三维的颜色查找表,但图形渲染中,由于图形 API 通常并不支持三维纹理的查找,所以我们会将三维 LUT 展开成二维的形式。

下图是一个标准的 16 * 256 LUT,每个 Block 由16*16 个像素组成。像素内使用 RG 通道索引,Block 通过 B 通道索引。

在这里插入图片描述

需要注意的是,这个 LUT 的原点是在左上角的,Vulkan 和 DX 的纹理坐标默认也是左上角,而 OpenGL 在计算 UV 的时候要将 V 坐标翻转一下。

实现

RGB 的色彩空间是 255 * 255 * 255,而 LUT 的色彩空间远小于此,因此在设置纹理的时候需要将纹理的 Filter 设置为线性插值以上。

VkSamplerCreateInfo samplerInfo {
   
   };
samplerInfo.sType		= VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
samplerInfo.magFilter	= VK_FILTER_LINEAR;
samplerInfo.minFilter  	= VK_FILTER_LINEAR;

R 通道和 G 通道实际上是一个 Block 内的 偏移,Block 之间通过 B 通道索引。

具体的 Shader 代码如下:

#version 310 es

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值