Gamma Correction/Gamma校正/灰度校正/亮度校正 - 部分 DCC 中的线性工作流配置

article/2025/10/16 3:24:40

文章目录

  • 也可以简单参考 SIGGRAPH 2010 的 PBS 的 Gamma-Correct
  • Unity 中的 gamma、linear 工作流
  • Unity BRP 管线中的 shaderlab 提供的 gamma2linear, linear2gamma
  • Unity中线性空间配置
  • DCC 中的 gamma 值是怎么计算的?
  • Photoshop 的线性工作流
    • 方式1
    • 方式2
    • 验证 Photoshop 中是否在线性工作流
    • PS与 Unity 下的 Linear Workflow 实践案例
  • AE 中的 Linear 工作流
  • C4D 中的 Octane 渲染器 的 Linear 工作流
  • 3Ds Max VRay 中的线性工作流
  • 流程图
  • Docs
  • URP下的 UI alpha blend 的 gamma to linear
  • BRP下的 UI alpha blend 的 gamma to linear
  • References


我们一般说的 gamma correction 简称 gamma,而 gamme correction 就是对 pow(inputVal, 2.2) 也就是压暗颜色的处理,而 gamme correction 的逆运算可以简称:degamma,就是 pow(inputVal, 1.0/2.2) 也就是提亮的处理

好,这里总结一下:

  • gammaCorrect - gamma 校正 - pow(inputVal, 1.0/2.2) - 提亮颜色
  • degamma - gamma 反向校正 - pow(inputVal, 2.2) - 压暗颜色

(注意,DCC软件中的 gamma 值的设置,一般都是这么使用,比如 3Ds max 中的 gamma 值:outputVal=gammaCorrect(inputVal, gamma)outputVal=pow(inputVal, 1.0/gamma),下文有提到)


OK,到这里,我们都不知道为何要有这两个东西


因为经过前人验证过

如果现实世界中,我们看到的线性的颜色亮度,人眼看起来感觉不是线性的

如下图,看图感受:
在这里插入图片描述

  • 问题1:你觉得左边是线性值,还是右边是线性值?
  • 问题2:你觉得左边的还是右边的图中的黑和白的颜色过渡比较均匀?

那么下面回答:

  • 问题1 回答:左边是:非线性,右边才是:线性的值(这是前人使用过专业的光子平均面积亮度测量仪测出来的结果)
  • 问题2 回答:正常人都会觉得,左边的比较均匀,感觉中间就是刚刚好的黑与白中间的中灰

下面是左边的图的 中灰 位置
在这里插入图片描述

下面是右边的图的 中灰 位置
在这里插入图片描述


上图再次总结:

  • 人眼看到的亮度线性信息,大脑感知的是非线性的
  • 这个非线性呈:上拱曲线型,大概是:pow(inputVal, 1.0/2.2) 的曲线
  • 从上图的右图可得知,人眼看到的是暗部偏少(也就是说,暗部的值很快就往更亮的值靠近,所以才呈现:上拱形状)

使用 GGB 可以看到 pow(InputVal, 1.0/2.2) 是怎么个拱法:
在这里插入图片描述

为什么变亮了,如:线性值为 0.5,但是被上拱过之后,就变成了在 0.73 左右

所以原本 0.5 变成了 0.73 那肯定就更亮了
在这里插入图片描述

倒回这两个黑白颜色过渡图
在这里插入图片描述

如果我们想要将:右边的线性值,在人眼看到后在大脑呈现上拱(被提亮)过的信号,能像 左边那样看着比较舒服的信号

那么我们就需要之前开头说的:这里相对 hunmanEyeSeeLinear之后的数据,做 类似 gamma 校正 pow(inputVal, 2.2) - 压暗颜色 来处理 上拱过的数据

注意,所谓的 gamma 校正,没有确定一定是,上拱 的,或是 下压的曲线,都是相对不同情况时的校正方式不同而已,比如,你发光设备发射出来的 linear 的数值,但是人眼看到太亮了,那么这里的 gamma 校正就是 pow(inputVal, 2.2)

另一种情况是:如果 CRT 显示二极管的电极强与发光亮不是线性的,那么这里的 gamma 校正就是 pow(inputVal, 1.0/2.2) 的提亮校正

还是使用 GGB 来查看效果
在这里插入图片描述

将:humanEyeSeeLinear 改为:gammeCorrect 后,会更好理解 各个 DCC 软件得应用情况:outputVal=pow(inputVal, 1.0/gamma)

下面是相对各种 DCC 软件中的操作,基本上只会提供一个:gamma 给你设置,公式就是上面的:outputVal=pow(inputVal, 1.0/gamma) 的应用
在这里插入图片描述

可以看到 humanEyeSeeLinear (没错就是 Cnglish,一般可以写为:linearAfterEyeSee 会更好一些)是人眼看到的线性感知后的上拱型,而我们需要的 gamma 是下压型来将 被拱 过的 压回 线性的

那么压回线性的结果就是对应: linear(x)=gammaCorrect(humanEyeSeeLinear(x))


下面引用一张图来说明(此图中的显示器都是 CRT为例

(DCC 中编辑好得照片,在 CRT 显示器 中,感觉被 gamma=0.45454545; output=pow(input, 1.0/gamma),导致亮度被压暗了
然后通过软件 gammeCorrect,也就是 gamma=2.2; output=pow(input, 1.0/gamma);,所以图片在 CRT 上看着正常了
然后通过 internet ,等传送方式到各个CRT设备上的显示时,这些图片都是经过:gamma=2.2; output=pow(input, 1.0/gamma); 处理过的(提亮了),所以在 CRT 上 gamma=0.45454545; output=pow(input, 1.0/gamma) 的特性抵消好,刚好就是 linear 的结果)
在这里插入图片描述

从图中也可得知:

  • 先是 Linear 数据被 显示器 下压过
  • 再到 上拱软件 提亮
  • 然后保存 上拱过的数据(纹理,图片)
  • 然后在互联网上传播的都是 被上拱过的 拘束
  • 然后将 被 上拱过的数据 通过 显示器 下压 数据后再显示,这时又变回 Linear 数据

因为我们人眼在看到真实世界中的亮度值时,在眼球编码生物神经电信号给大脑中的灰度感知并非线性的(人眼会将 pow(inputVal, 1.0/2.2) 处理,会将原来的线性颜色表现出来的亮度整体偏亮,这种视觉效果感觉很差(暗部偏低,亮度又过亮)
所以我们为了提高视觉效果更好,才会在颜色输出给人眼看到之前,先将其压暗颜色,也就是A=pow(inputVal, 2.2),这样将压暗过的结果,再给到人眼时呈现的是 pow(A, 1.0/2.2) 颜色亮度,但是刚刚说过,给人眼看前压低了亮度,人眼编码在大脑提亮了亮度,这一降一升,刚刚好变成线性的,所以这时在人脑中的灰度信号是线性的,那么视觉上自然就会舒服很多,但是实际上真正的物理亮度是被压暗过的
如果有些设备,如:CRT,也是会降低亮度的输出,这样,CRT 降低1次,人眼再提亮1次,刚刚好看起来就像是在 线性变化的感觉(注意这时人眼看到的输出结果都是被压暗过的,不压暗就会过曝,人眼对灰度的感知编码不是线性的)


也可以简单参考 SIGGRAPH 2010 的 PBS 的 Gamma-Correct

s2010_physically_based_shading_hoffman_b.pdf

下面是原理,和需要处理的部分:

In Theory, Just Need To:
• Convert shader inputs to linear before shading
• Convert shader output to gamma at end
• “Free” (pre-convert constants & vertex colors,
HW converts from textures / to frame buffer)
• In practice this works if you never do shading
operations in the frame buffer

下面是一些引起的其他问题,多是一些早期的硬件没考虑 颜色空间的问题导致硬件程序的处理不当导致的:

Complications
• Some HW does gamma blending incorrectly
– Bad for multipass / deferred shading, transparencies
• Some HW filters gamma textures incorrectly
– But you can at least generate MIP maps the right way
• Actual nonlinear space supported by HW varies
– Especially bad for consoles

下面是导致需要在工作流中做对应调整的部分:

Unintended Consequences
• Changes light distance falloff, Lambert falloff,
soft shadow edges, vertex interpolation, etc.
– May require artist adjustment / retraining
– In some cases (like vertex interpolation) it might make
sense to fix in the shader


Unity 中的 gamma、linear 工作流

unity 文档中的 gamma space(伽马空间) 都是 下压过亮度 之后的颜色空间

比如:“A纹理是在 Photoshop Gamma 空间下生产的”

意思说:在 Photoshop 中默认(默认的颜色空间配置)对 A 纹理制作生产过程中,都是基于 下压过亮度pow(inputVal, 2.2)) 的颜色设置方式导出的资源

参考 :

  • linear or gamma workflow
  • Color space

unity 纹理 sRGB 勾选项的作用:

参考:TextureImporter.sRGBTexture

  • gamma 空间上
    勾不勾 都无所谓,都当作 没有勾选 纹理格式一样是使用:GL_COMPRESSED_RGB8_ETC2,就是 硬件不会有 gammaCorrect 解码处理
  • linear 空间上
    • 勾上,那么unity 会 gammaCorrect 解码 此纹理,也就说会 硬件将此纹理压暗;纹理格式为:GL_COMPRESSED_SRGB8_ETC2
    • 不勾,就是说,硬件把你的纹理直接当做 linear 数据 不做 gammaCorrect不压暗亮度) ,直接给到 shader 着色计算,纹理格式为:GL_COMPRESSED_RGB8_ETC2

简单总结为:

  • linear space 下
    • 纹理的 sRGB 勾上,说明此需要保留压暗处理,请 unity 帮我保持 gammaCorrect 编码
    • 纹理的 sRGB 没勾,说明此 不需要 gammaCorrect 编码

所以你现在应该知道 unity sRGB 的作用了

颜色空间 除了会 影响纹理的 sRGB 的格式外,还会影响 FrameBuffer(下面简称 FB)的格式

下面以 OpenGL Graphics API 在 RenderDoc 中抓帧分析的情况,使用一张表格来表示

Tabel EditPlatformColor SpacesRGB CheckedHDRTextureDefaultFormatFrameBufferFormatComments
jave.linOpenGLGammaFalseFalseGL_COMPRESSED_RGB8_ETC2GL_RGBA8初始化…
jave.linOpenGLGammaTrueFalseGL_COMPRESSED_RGB8_ETC2GL_RGBA8在 Gamma 空间下,将 sRGB=True,发现 Texture, FB 的格式都没有变化
jave.linOpenGLGammaTrueTrueGL_COMPRESSED_RGB8_ETC2GL_R11F_G11F_B10F将 HDR=True,发现 FB 格式 RGBA8 变成了 R11FB11FG10F,A通道精度完全丢失,都放到RGB通道来来做High Range
jave.linOpenGLLinearTrueTrueGL_COMPRESSED_SRGB8_ETC2GL_SRGB8_ALPHA8Color Space调整为Linear后 Texture 和 FB 的格式都有变化
jave.linOpenGLLinearFalseTrueGL_COMPRESSED_RGB8_ETC2GL_SRGB8_ALPHA8sRGB=False,Texture格式变为:GL_COMPRESSED_RGB8_ETC2
jave.linOpenGLLinearFalseFalseGL_COMPRESSED_RGB8_ETC2GL_R11F_G11F_B10F将 HDR=False,发现 FB 格式 RGBA8 变成了 R11FB11FG10F,A通道精度完全丢失,都放到RGB通道来来做High Range

那么继续往下看

在 Unity 中,颜色空间的有:

  • Edit/Project Settings…/Player/Other Settings/Color Space: Gamma 或是 Linear
  • 每个纹理资源只要是颜色类型的纹理(不是 AO, Normal, Height 贴图),那么 sRGB 的勾选需要在对应的 Color Space 下选择是否勾选:
    • 在 Color Space 为 Gamma 时,勾上(Unity 默认情况下时会勾上的),且够不够选都无所谓,因为在 Color Space 为 Gamma 时,unity 会当这个 纹理是在 sRGB 勾选的
    • 在 Color Space 为 Linear 时
      • 如果我们美术输出的纹理颜色资源都是在被 下压过的数据(压暗过的),或者说是在 Gamma 空间下生产的资源,那么就要够上 sRGB,让 unity 先 gammaCorrect 后再给到 shader 进行光照计算
      • 如果我们美术输出的纹理颜色资源都是 线性的数据(没有提亮,也没压暗),那么就不要勾选 sRGB,就是啥都不处理

(但是由于现在很多 DCC 软件输出的颜色纹理默认都是 被下压过的数据(被压暗过的),所以一般我们在 Linear 下的纹理默认都会勾上 sRGB)

unity 想要保留 gamma 的处理,因为Linear 空间是有硬件兼容性问题的

Linear 的颜色空间的话,如果在 Android 平台,那么需要在 Android 4.3 或是 OpenGL 2.0 以上(不含 2.0)


Unity BRP 管线中的 shaderlab 提供的 gamma2linear, linear2gamma

下面是在:BRP 管线中的:UnityCG.cginc 下相关与 gamma2linear, linear2gamma 的代码

可以看出来:

  • half3 GammaToLinearSpace (half3 sRGB) 就是提供了将 half3 sRGB 的一个下压(变暗)曲线变换,等价于:outputVal=pow(inputVal, 2.2)
  • half3 LinearToGammaSpace (half3 linRGB) 就是提供了将 half3 linRGB 的一个上拱(提亮)曲线变换,等价于:outputVal=pow(inputVal, 1.0/2.2)outputVal=pow(inputVal, 0.4545454545)
// Legacy for compatibility with existing shaders
inline bool IsGammaSpace()
{#ifdef UNITY_COLORSPACE_GAMMAreturn true;#elsereturn false;#endif
}inline float GammaToLinearSpaceExact (float value)
{if (value <= 0.04045F)return value / 12.92F;else if (value < 1.0F)return pow((value + 0.055F)/1.055F, 2.4F);elsereturn pow(value, 2.2F);
}inline half3 GammaToLinearSpace (half3 sRGB)
{// Approximate version from http://chilliant.blogspot.com.au/2012/08/srgb-approximations-for-hlsl.html?m=1return sRGB * (sRGB * (sRGB * 0.305306011h + 0.682171111h) + 0.012522878h);// Precise version, useful for debugging.//return half3(GammaToLinearSpaceExact(sRGB.r), GammaToLinearSpaceExact(sRGB.g), GammaToLinearSpaceExact(sRGB.b));
}inline float LinearToGammaSpaceExact (float value)
{if (value <= 0.0F)return 0.0F;else if (value <= 0.0031308F)return 12.92F * value;else if (value < 1.0F)return 1.055F * pow(value, 0.4166667F) - 0.055F;elsereturn pow(value, 0.45454545F);
}inline half3 LinearToGammaSpace (half3 linRGB)
{linRGB = max(linRGB, half3(0.h, 0.h, 0.h));// An almost-perfect approximation from http://chilliant.blogspot.com.au/2012/08/srgb-approximations-for-hlsl.html?m=1return max(1.055h * pow(linRGB, 0.416666667h) - 0.055h, 0.h);// Exact version, useful for debugging.//return half3(LinearToGammaSpaceExact(linRGB.r), LinearToGammaSpaceExact(linRGB.g), LinearToGammaSpaceExact(linRGB.b));
}

至于 IsGammaSpace() 其实就算判断,ProjectSettings…/OtherSettings/RenderSettings/Color Space : Gamma 与否:

下面是测试 shader代码

// jave.lin : 测试是否在 gamma color space 下的判断
Shader "TestInCammaOrLinear"
{SubShader{Tags { "RenderType"="Opaque" }Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;};struct v2f{float4 vertex : SV_POSITION;};sampler2D _MainTex;float4 _MainTex_ST;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);return o;}fixed4 frag (v2f i) : SV_Target{if (IsGammaSpace())return half4(1, 0, 0, 1);elsereturn half4(0, 1, 0, 1);}ENDCG}}
}

GIF 效果:
请添加图片描述


Unity中线性空间配置

  1. 确保 unity 项目在 线性空间 (Editor/Project Setting/Player/Other Setting/Color space : 选择Linear)
  2. 确保 MASK贴图的 inspector 面板属性中,不勾选:SRGB
  3. 确保 GraphicsSetting.asset(文件所在:<ProjectName>/ProjectSettings/GraphicsSettings.asset) 中的配置是否使用了 线性空间的 灯光强度

  1. 使用线性颜色空间 : Linear
    在这里插入图片描述

  2. 数据纹理SRGB不要勾
    在这里插入图片描述

  3. 用记事本打开:<ProjectName>/ProjectSettings/GraphicsSettings.asset 文件,修改最后的内容:m_LightsUseLinearIntensity : 1
    在这里插入图片描述


DCC 中的 gamma 值是怎么计算的?

在往下看 各种 DCC 软件 的 gamma 值设置前

先了解这些软件他们设置的 gamma 是怎么计算的

之前我们说:

  • gammaCorrect - gamma 校正 - pow(inputVal, 1.0/2.2) - 提亮颜色
  • degamma - gamma 反向校正 - pow(inputVal, 2.2) - 压暗颜色

上面说法没有问题,都是代码公式中写法

DCC 软件中是这么用的:(参考:Gamma and LUT Preferences)

DCC 中提到的 gamma 值,都是这么用的 outputVal=gammaCorrect(inputVal, gamma)outputVal=pow(inputVal, 1.0/gamma)

gamma”的计算是 output_intensity = input_intensity (1/gamma)。也就是说,结果是原始值的 gamma 值的倒数次幂。该计算的一个结果是 1.0 的 Gamma 值根本不会调整图像。
在这里插入图片描述
Gamma = 1.0:无校正

I 代表强度。

伽玛计算的另一个结果是黑色不受调整的影响,白色也不受调整(或任何完全饱和的颜色)。Gamma 调整仅影响图像的中间色调。

在这里插入图片描述
左:伽马 = 1.8
右:gamma = 2.2,标准
水平轴代表输入(原始值),垂直轴代表输出(伽马校正值)。

标准伽马值为 2.2。这是sRGB 标准指定的理论上正确的值。现代显示器已根据此标准进行校准。Gamma 2.2 使存储在位图中并由渲染器使用的线性色彩空间在屏幕上看起来是线性的。

然而,由于摄影胶片的响应也不是线性的,一些用户发现这个理论上正确的值看起来太亮并且褪色了。一种折衷方案是渲染到 1.7 或 1.8 的 gamma,使事物看起来更具照片感;也就是说,就好像图像是在胶卷上拍摄然后显影的。更好的方法是使用mr 摄影曝光控制,它可以模拟胶片的响应。另一种方法是在后期制作中应用类似电影的响应曲线。

建议您始终打开伽玛校正。

如果您需要为特定显示器设置伽玛,请找到一个值,使您自己的显示器上的中间灰色与真正的中间 (50%) 灰色相匹配。

注意:如果使用您的渲染的唯一其他应用程序也是 Autodesk 媒体和娱乐产品,您可能希望使用 LUT 校正而不是 Gamma 校正来进行显示。


Photoshop 的线性工作流

在这里插入图片描述

(下面以 Photoshop 2022 cc,23.0.0 版本为例)


方式1

先将 图像/调整/32位每通道

然后在进行:缩放混合、或是高斯模糊,等等(涉及到 像素之间的颜色值运算的都需要先这么处理)
处理好折后,CTRL + SHIFT + E,将所有可将图层合同一个新的图层
在将这个新的图层复制打开在另一个 *.psd 工程
然后在对这个新的 *.psd 的颜色在此调整:图像/调整/8位每通道

这个方法在官方 Adobe 论坛有找到类似得说法:Creating Linear Color space

在这里插入图片描述

但是这种工作流的方式导致美术那边工作很麻烦

特别是多选图层的导出更加麻烦,每次导出都要 多选需要导出的、合并、再新建 PSD 图像/模式/8位通道,然后才能导出非 HDR 的 LDR 数据图片,比如:JPG, PNG 等

所以我们强烈推荐另一种方式2,往下看


方式2

另一种是:调整 编辑/颜色设置…
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

如果想要同步 PS 与 Unity 中的字体的透明度混合,需要设置下面的选项:
在这里插入图片描述
该方法可以参考我之后的一篇:Unity & PS Linear Workflow - Unity 和 PS 的线性工作流实践 - 简单配置示例

后续美术同学在新建 PSD 文档时,就可以设置:“颜色配置文件” 的配置信息了
在这里插入图片描述

还有 首选项->导出->去掉 颜色空间的 sRGB 复选框,这个参考:PhotoShop如何导出线性空间下的图片

(jave.lin : 首选项->导出->颜色空间的 sRGB 复选框 在部分低版本的 PS 中是没有的,我也没找到低版本在哪设置,或是压根就没得设置)

在这里插入图片描述

总结为一句话:编辑->颜色设置…->工作空间->RGB->自定义 RGB->Gamma: 1.0->保存,然后每次新建 PSD 都直接选这个 RGB 设置即可

这种方式在后续的贴图的制作中,设计到颜色的混合、模糊、各种计算,都是在 Linear 下的,保存导出的图像也是 线性空间下的,比之前 方式1 的有好很多


验证 Photoshop 中是否在线性工作流

检查自己的 PS 里面是否正确配置线性空间工作流,可以这么试验:
先在 同一图层 画两个 红、绿 圆形,让两个圆形 的像素有交集半个圆左右的面积
在这里插入图片描述

然后使用 高斯模糊 6.0 半径

如果是模糊混合出来的颜色是带有 黑色 边缘的,说明你的 PS 不是线性工作流
在这里插入图片描述

正确的 红、绿 模糊时 混出来的是 黄色,如下图:
在这里插入图片描述


PS与 Unity 下的 Linear Workflow 实践案例

直接参考我之后写的一篇:Unity & PS Linear Workflow - Unity 和 PS 的线性工作流实践 - 简单配置示例


AE 中的 Linear 工作流

在这里插入图片描述


C4D 中的 Octane 渲染器 的 Linear 工作流

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


3Ds Max VRay 中的线性工作流

在这里插入图片描述

Gamma Correction changes and Linear Workflow in 3ds Max - 官方 auto desk 3ds max 的 linear workflow
在这里插入图片描述


在一些 DCC 软件中,如果没有 Gamma 与 线性工作流的,需要自己去转换 gamma 与 线性
如下:

Linear to sRGB : sRGB(non-linear) = pow(linear pixel, 1/2.2)
sRGB to linear = pow(sRGB pixel, 1/0.4545~)

流程图

请添加图片描述


Docs

  • JaveLin_美术资源规范_2022_07_18_完善_UI_特效_PS_线性空间的配置
  • JaveLin_美术资源规范_2022_07_19_完善_UI_特效_PS_AE_线性空间的配置

URP下的 UI alpha blend 的 gamma to linear

可以参考:

  • Unity Products:Amplify Shader Editor/Gamma To Linear
  • URP下Alpha从Gamma空间到Linner空间转换(二)——多Alpha贴图叠加
  • 为什么Unity使用AssetBundle热更的时候要剔除掉.mainfest文件

BRP下的 UI alpha blend 的 gamma to linear

(后续自己增加实例测试)


References

  • Color space - unity 官方的文档 - 建议先看这个 大智的讲解(相信里面的部分理解也是看过 韩世鳞 老师的视频)
  • Gamma校正与线性工作流入门讲解 - 韩世鳞 老师的讲解,太牛逼了,有讲解 3ds max, vray 的 3ds max插件, photoshop 的工作流
    • V-Ray for 3ds Max 线性工作流参数设置详解
    • V-Ray for SketchUp 线性工作流参数设置详解
  • Gamma校正 - 结合大部分 DCC 的涉及 gamma 校正的处理,很不错
  • s2010_physically_based_shading_hoffman_b.pdf
  • Unity3D Gamma And Linear Space
  • Renderdoc确认线性or伽马空间工作流
  • Technical Artist 的不归路 —— 线性空间光照
  • Gamma vs Linear Space - 这帖子有点逗,从 伽马 vs 线性空间,跳到了:A2C(Alpha to Coverage) 的部分。。。
  • 聊聊Unity的Gamma校正以及线性工作流
  • Unite 2018 | 浅谈伽玛和线性颜色空间
  • 关于Color Space是Gamma还是Linear的一些问题
  • [Translate]Reverse Engineering The Rendering Of The Witcher 3 I | [译]巫师3渲染逆向工程 1 - 里面有 DXBC ASM 的查看巫师3的 gamma 校正处理
  • Creating Linear Color space - Photoshop 颜色空间 的 线性空间的正确设置姿势
  • Proper Linear Workflow | Fusion, AE, PS, Octane, C4D - 讲解 Fusion, AE, PS, C4D Octane 的 Linear 工作流
  • UNDERSTANDING GAMMA CORRECTION - 专业摄影讲解 gamma 校正
  • Linear Workflow: Gamma 2.2 Setup in 3ds max and Vray, Working with Correct math! - 3Ds max 和 VRay 渲染器的 linear workflow 设置
  • Gamma Correction changes and Linear Workflow in 3ds Max - 官方 auto desk 3ds max 的 linear workflow
  • Gamma and LUT Preferences - 官方 auto desk 3ds max 的 linear workflow
  • Confusion about Gamma vs. Linear - 说真的,unity 把这些 gamma, linear 搞得让人发懵
  • PhotoShop如何导出线性空间下的图片
  • Unity线性空间UI制作方面总结
  • 关于Unity伽马校正的一点笔记
  • Unity线性空间UI的问题 - 里面有写 gamma 和 linear 的一些 RGB 和 Alpha 的混合公式,但是怎么由来的,或是参考哪里的,并没有说明
  • Gamma校正与线性空间

http://chatgpt.dhexx.cn/article/WiAHG58e.shtml

相关文章

光栅投影中Gamma校正

学习 郑东亮 达飞鹏 《提高数字光栅投影测量系统精度的gamma校正技术》一文后&#xff0c;对其中的关键技术进行了解析。 摄像机获得的实际灰度图像&#xff1a; 其中是整个系统的gamma值&#xff0c;是预编码值&#xff08;需要根据实验进行选择&#xff09;&#xff0c;是幅…

java opencv gamma_Gamma校正及其OpenCV实现

一、什么是Gamma校正&#xff1f; Gamma校正是对输入图像灰度值进行的非线性操作&#xff0c;使输出图像灰度值与输入图像灰度值呈指数关系&#xff1a; [2] 这个指数即为Gamma. 经过Gamma校正后的输入和输出图像灰度值关系如图1所看到的&#xff1a;横坐标是输入灰度值&#x…

gamma校正 matlab,Gamma校正 ——图像灰度变化 OpenCV (十)

Gamma校正(C++、OpenCV实现) 1.作用: Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系: 伽玛校正由以下幂律表达式定义: 2.函数原型 void calcHist( const Mat* images, int nimages, const int* channels, InputArray mask, Out…

图像Gamma(伽玛)校正的原理及OpenCV代码实现

什么是Gamma校正&#xff1f; Gamma校正是对输入图像灰度值进行的非线性操作&#xff0c;使输出图像灰度值与输入图像灰度值呈指数关系。 Gamma校正的原理表达式如下&#xff1a; 上面中的指数γ即为Gamma。这就是Gamma校正的名称来历。 其中的取值范围是0~1&#xff0c;最重…

Gamma校正

下面是自己所整理的一些gamma校正的东西如有侵权请联系删除。 Gamma矫正&#xff1a; 伽马矫正也称幂律变换&#xff0c;一般用于平滑的扩展暗调的细节。 进行伽马矫正的原因是人类的眼睛在感知光线时&#xff0c;眼睛对亮度的感知遵循近似的幂函数&#xff08;如图&#xf…

图像Gamma校正

1. gamma校正的起因&#xff1a;人眼感知光线的特殊性 对于现实世界的光的强度来说&#xff0c;描述光的强弱&#xff0c;是根据光子在单位面积上的光子数量来描述的&#xff0c;这是物理规则&#xff0c;这是没错的&#xff0c;光的亮度&#xff08;强度&#xff09;是和光子数…

Gamma校正原理及实现

gamma校正原理&#xff1a;   假设图像中有一个像素&#xff0c;值是 200 &#xff0c;那么对这个像素进行校正必须执行如下步骤&#xff1a;   1. 归一化 &#xff1a;将像素值转换为 0 &#xff5e; 1 之间的实数。 算法如下 : ( i 0. 5)/256 这里包含 1 个除法和 1…

python手撕分水岭算法

python手撕分水岭算法 1 分水岭算法实现 主要思路就是&#xff1a; 利用一个优先队列与有序队列&#xff08;有序队列其实可以不用&#xff09;。优先队列是按像素的灰度值排列的&#xff0c;灰度值低的先被淹。通过统计像素的附近的点的标记种类个数来确认当前像素点的标记…

分水岭算法java,OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法...

1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry)&#xff0c;它属于立体视觉(stereo vision)几何学&#xff0c;立体视觉是计算机视觉的一个分支&#xff0c;它从同一物体的两张不同图像提取三维信息。 极几何的工作原理&#x…

分水岭算法-python-opencv

分水岭算法简单原理&#xff1a; 对于一个图像的灰度值&#xff0c;将图像放平&#xff0c;可以看成是类似与山谷与山顶的图像&#xff0c;灰度值小的就是山底。先找到若干个山底&#xff0c;同时加水&#xff0c;当加到一定程度时候&#xff0c;某些山顶会被淹没&#xff0c;…

分水岭算法解析[halcon]

分水岭算法 分水岭算法是根据分水岭的构成来考虑图像的分割&#xff0c; 它是—种基于拓扑理论的数学形态学的分割方法。 首先&#xff0c; 把一幅图像看作起伏的地形&#xff0c; 图像的每像素灰度值作为这个地形的高度&#xff0c; 极小值是盆地&#xff0c; 极大值为山脊。…

opencv-分水岭算法图像分割

分水岭算法图像分割 目标   本节我们将要学习   • 使用分水岭算法基于掩模的图像分割   • 函数&#xff1a;cv2.watershed()    原理   任何一副灰度图像都可以被看成拓扑平面&#xff0c;灰度值高的区域可以被看成是山峰&#xff0c;灰度值低的区域可以被看成是山…

分水岭算法的python实现及解析

1 算法简介 分水岭算法的原理很容易查到&#xff0c;但是很多文章都是直接用的opencv或matlab函数&#xff0c;看不到具体实现方法&#xff0c;这篇文章希望能对大家有点帮助。 分水岭算法就是往山谷中注水&#xff0c;把不同湖水接触的位置称作分水岭&#xff0c;这么做的结…

opencv28:分水岭算法的图像分割

目标 在本章中&#xff0c;将学习 使用分水岭算法实现基于标记的图像分割函数&#xff1a;cv2.watershed() 理论 任何灰度图像都可以看作是一个地形表面&#xff0c;其中高强度的像素表示山峰&#xff0c;低强度表示山谷。可以用不同颜色的水(标签)填充每个孤立的山谷(局部…

OpenCV-分水岭算法

文章目录 分水岭算法cv2.watershed示例 分水岭算法 任何灰度图像都可以看作是一个地形表面&#xff0c;其中高强度表示山峰&#xff0c;低强度表示山谷。你开始用不同颜色的水(标签)填充每个孤立的山谷(局部最小值)。随着水位的上升&#xff0c;根据附近的山峰(坡度)&#xff…

【OpenCV】- 分水岭算法

文章目录 什么是图像分割分水岭算法1、实现分水岭算法&#xff1a;watershed()函数2、处理流程&#xff08;视频&#xff09;3、示例程序&#xff08;书中&#xff09; 什么是图像分割 将图像中像素根据一定的规则分为若干个cluster集合&#xff0c;每个集合包含一类对象 如下…

OpenCV分水岭算法详解

原理分析 分水岭算法主要用于图像分段&#xff0c;通常是把一副彩色图像灰度化&#xff0c;然后再求梯度图&#xff0c;最后在梯度图的基础上进行分水岭算法&#xff0c;求得分段图像的边缘线。 下面左边的灰度图&#xff0c;可以描述为右边的地形图&#xff0c;地形的高度是由…

分水岭算法 matlab实现

背景 做图像分割的时候用到了&#xff0c;就学习了一下 大概思想 把图像中的像素大小理解成山地的海拔&#xff0c;向山地灌水&#xff0c;海拔低的地方会积水&#xff0c;这些地方称之为谷底。随着水位上升&#xff0c;不同谷底的水会相遇&#xff0c;相遇的地方就是分水岭。…

分水岭算法c语言,Opencv分水岭算法学习

分水岭算法可以将图像中的边缘转化成“山脉”&#xff0c;将均匀区域转化为“山谷”&#xff0c;这样有助于分割目标。 分水岭算法是一种基于拓扑理论的数学形态学的分割方法&#xff0c;其基本思想是把图像看作是测地学上的拓扑地貌&#xff0c;图像中的每一点像素的灰度值表示…

分水岭算法

引言&#xff1a;它是基于拓扑理论的形态学处理方法。将一张图像假想成为一张地貌特征图。 原理理解&#xff1a;灰度图被看作拓扑平面&#xff0c;灰度高看成山峰&#xff0c;灰度低看成山谷。从山谷开始注水&#xff0c;随着水位升高水流会相遇汇合。为了防止汇合&#xff0…