自定义 Metal CIFilter 中 RGB 通道的值范围是多少?
Posted
技术标签:
【中文标题】自定义 Metal CIFilter 中 RGB 通道的值范围是多少?【英文标题】:What is value range of RGB channels in custom Metal CIFilter? 【发布时间】:2021-11-23 17:48:05 【问题描述】:如果在 Metal 中有以下 CIKernel
过滤器:
namespace coreimage
float4 FilterA(sampler src, float exponent, float intensity)
float4 srcSample = src.sample(src.coord());
float r = min(srcSample.r, 2.0) / 2.0;
srcSample.r = 2.0 * (pow(r, exponent) * intensity);
srcSample.g = 0.0;
srcSample.b = 0.0;
return srcSample;
我在某处读到 RGB 通道的值范围是 0.0 ... 2.0。然而,Simon J Gladman 的“Core Image for Swift”一书似乎建议最大值为 1.0。
当我假设最大值为 1.0 并将上面的一行更改为 float r = min(srcSample.r, 1.0)
时,我得到不同的输出。
如果范围确实是 0.0 ... 2.0,这是否适用于传递到 CIKernel
、CIColorKernel
和 CIWarpKernel
的所有图像?
那么,阅读this,色彩空间对RGB值范围有影响吗?
如果返回超出范围的 RGB 值会怎样?它们是被剪裁到范围内还是原封不动地传递给行中的下一个过滤器?
【问题讨论】:
【参考方案1】:这取决于很多因素:
-
图像处理技术(SDR 或 HDR & apple EDR)。
显示器的特性(nits,...)。
图像色彩空间(kCGColorSpaceITUR_2020_PQ_EOTF、Display P3、sRGB、扩展的 sRGB)。
...
对于 SDR 技术,颜色浮点范围为 0.0 - 1.0:
0.0代表黑色 1.0代表白色对于 HDR 和 EDR 技术,颜色浮动点范围为 0.0 - (v > 1)。
v = 最高 3.2(1600 尼特显示)我强烈推荐观看此视频Explore HDR rendering with EDR。
【讨论】:
以上是关于自定义 Metal CIFilter 中 RGB 通道的值范围是多少?的主要内容,如果未能解决你的问题,请参考以下文章
通过自定义 CIFilter 运行图像时 CIImage 属性丢失
CIFilter 不回答自定义过滤器的 kCIAttributeDescription
如何将 Vignette CIFilter 应用于 iOS 中的实时摄像机源?