Press "Enter" to skip to content

Huahua's Tech Road

Nikon Z8/Z9 HLG Deepdive | HLG 详解 VS N-LOG

网上关于HLG的资料相对来说还是比较匮乏的,更别说是针对Nikon Z系列了。之前做过一期简单的HLG直出视频,但是没人感兴趣…

首先HLG是一条用于交付的Gamma曲线,向下兼容SDR内容,这也就注定了它的上限比较低,这也是为什么大部分人对它不感兴趣的原因(另一个原因是它是HDR)。HLG的动态范围(尤其高光)比不过N-LOG,更别说Slog3了。暗部表现则比其他LOG曲线要好一些。它最大的优点就是所见即所得,不需要LUT还原,也(基本)不需要向右曝光,特别适合HDR直出。不过如果你只做SDR的话,还是选N-LOG吧。只是2025年了,拍N-LOG/NRAW获得12+档动态范围,然后再压缩到8档,我只能说历史的包袱太沉重了。可以参见:再谈苹果XDR显示器与HDR之殇

响应曲线

我在Z8上实测响应曲线,测试方法:调整曝光,记录不同曝光值下中灰的IRE,并和理论值做对比。为了统一起见,我将中灰(Stop 0)都曝光到36%。Note: HLG中灰的理论值应该是38%,不过差别不大,大概0.2档左右。结果实测N-LOG的时候,同样用了95 (37.2%)的斑马线,最后得到的曝光是38%,不管了,差不多就行了。

Z8 HLG实测曲线和理论曲线在[-7, +3]的范围内贴合的非常不错。实测的HLG底噪大约是3%,。两者在高光部分差别比较大,HLG中灰以上一档就开始变成对数曲线,和Stops应该是线性关系,但实测下来,Nikon对+3档以上的高光做了一些保护,曲线非常平滑,因此也比理论多了1档的高光,中灰以上5.3档才会完全过曝。 但比起N-LOG还是差了一档多。另外HLG模式下,IRE最大值不是100,而是97左右,斑马线需要设置在245才会有效果。

N-LOG的曲线大致上贴合的还是不错的。noise floor,13%左右。-7档开始就贴着了。只有在+1档到+2档的附近有点波动。高光部分的斜率还是太大了,竟然比理论值还大一些。中灰以上6档就过曝了。只比HLG好了不到1档。

名义ISO

众所周知,N-LOG的基础ISO是800,第二档则是ISO 4000。HLG的基础ISO是400,第二档是ISO 2000。无论是N-LOG还是HLG,它们的ISO都是名义ISO,或者说等效ISO。在相同照度下,我使用相同的参数(1/400s F/4 ISO800)拍摄灰卡,N-LOG和HLG的IRE是36%左右,SDR则为52%。三者还原之后中灰的亮度大体上相同(SDR稍微亮了一点),证实了”名义”ISO。但实际上传感器使用的ISO是多少呢?其实都是ISO 100左右,如何证明呢?拍摄同样的白卡,记录刚刚过曝时的曝光参数。
N-LOG: 1/30s F/4 ISO 800
HLG: 1/30s F/4 ISO 400
SDR: 1/30s F/4 ISO 80 (NL profile, Active D-lighting off)
进光量相同,传感器同时过曝了,表明实际ISO是相同的。
等效ISO也可以这么理解:
N-LOG拍摄时欠曝3档,后期还原时把中灰提亮3档,以起到保护高光的目的。
HLG拍摄时欠曝2档,后期还原时把中灰提亮2档,以起到保护高光的目的。
这也就是为什么按照标准曝光(将中灰曝到36% IRE),N-LOG暗部噪点爆炸,需要使用向右曝光的原因之一。
HLG则相当于找了一个平衡点,欠曝2档,等效于使用ISO 400拍视频,对于全画幅来说勉强可以接受吧。

HLG quality 设置

由于是面向直出的交付曲线,只有H.265编码支持HLG。虽然Nikon贴心的提供了HLG质量选项,但这里有个坑,在默认的设置下,相机是会对HLG的画面进行锐化的,导致使用超级锐的Z卡扣镜头时会产生过度锐化的情况。需要将Quick Sharp设置成-1才能获得未锐化的画面。有需要的话,也可以将对比度和饱和度也降低一些,推荐-1。

不同Quick Sharp模式下的波形图

调整对比度

调整饱和度

再谈苹果XDR显示器与HDR之殇

我之前有一篇文章聊过苹果的MBP的XDR显示器,以及为什么“正确”调色过的SDR在它上面效果如此之好,以至于连HDR都黯然失色。Why SDR looks so good on Apple’s XDR display that even shadows HDR?

其实很简单:苹果的XDR显示器把普通的SDR内容HDR化了,高光部分没动,只是把暗部压暗了很多,接近5档!

一谈HDR,很多人上来就吹什么动态元数据什么的。抛开色彩不谈,HDR的字面意思就是高动态范围,就是指内容最终在显示设备上呈现时最亮的地方和最暗的地方的比值,能超过一个数值(比如10档/1024)就可以称为HDR了,物理学就是这么简单。

XDR显示器在呈现Rec. 709 (Gamma 2.22)的内容时,IRE 50%~100%时和标准曲线基本吻合。但在50%以下的部分,对比度会慢慢增加,低于10%之后,黑化愈发明显。播放有损压缩视频时,暗部色块和断层基本不可见,显示效果大幅提升,正所谓一黑遮百丑。谁叫人家能黑的下去呢!标准的Rec. 709曲线在最大亮度500nit时,1% IRE的亮度为1.11nit,动态范围8.8档。但在XDR显示器上,实测100% IRE 450nit, 1% IRE 0.04 nit,动态范围13.5档,这还不算HDR吗?

Rec. 709在普通LCD显示器和XDR显示器上的暗部区别巨大(相机直拍)

后记

XDR的MBP发布已经近4年了,现在最新的iPhone/iPad以及安卓阵营在SDR最大亮度上早已超过了它,达到1000nit或以上,至少14档的显示动态范围使得SDR被HDR化有过之无不及。最高2000nit的激发亮度使得HDR的高光也就比SDR多1档,食之无味弃之可惜,普及遥遥无期~此时JPEG说我真的还能再活500年!

中年大叔的赛博保温杯:开源掌机的尴尬与自洽

地铁玻璃倒映着我和身旁穿JK制服的姑娘,她耳机里流淌着抖音神曲,我膝盖上躺着台RG35XXH。当《魂斗罗》的BGM突然炸响时,她瞥见我布满茧子的拇指在AB键上翻飞,像看恐龙般瞪大了美甲精致的眼睛。

三十年前,我在百货大楼隔着玻璃抚摸GameBoy时,绝对想不到四十岁生日礼物会是台能模拟三万款游戏的开源掌机。中年男人的油腻保温杯里泡枸杞,我的电子保温杯里炖着整个游戏编年史。妻子总说我在客厅搓手柄的样子像返祖,可当马里奥跃过旗杆的瞬间,后颈分明掠过1995年新华书店门口的穿堂风。

开源掌机像台时光切片机,把FC红白卡带的塑料味、PS1光驱的嗡鸣、GBA像素的颗粒感,统统封印在系统的玻璃棺材里。社区论坛里,年轻极客们讨论超频和魔改系统,而我沉迷给《塞尔达传说:缩小帽》打金手指——就像给褪色的青春描眉画眼。

深夜加班后,我蹲在车库给开源掌机刷Linux固件。楼上的钢琴声与焊接声此起彼伏,邻居孩子练习车尔尼599,我试图复活二十年前的电子宠物。当拓麻歌子像素蛋在开源系统里破壳时,忽然觉得我们这代人就像游戏ROM,被时代反复转码却始终保留着某种顽固的比特基因。

如今Switch在年轻人手里漂移,手游在打工人屏幕上996,我的开源掌机永远停在标题画面。那些通关存档不再重要,重要的是每次按下电源键时,总能在3.5英寸的微光里打捞出那个攥着五毛钱硬币,在游戏厅门口徘徊的瘦小男孩。

全文由 DeepSeek R1生成,花花稍作修改并配图。

花花酱 LeetCode 3517. Smallest Palindromic Rearrangement I

这题考查的是排序吧… 还有rbegin的使用。

普通排序:时间 O(nlogn) / 空间 O(1)

前半部分顺序排序,后半部分逆序排序。

计数排序:时间:O(n),空间:O(n) -> O(1)

首尾一起写

花花酱 LeetCode 3508. Implement Router

算是比较复杂的题目了,主要考察数据结构的选择和应用。

Note that queries for addPacket will be made in increasing order of timestamp.
把题目简化了不少,注意timestamp可能会想同,非严格单调递增。

forwardPacket 的 FIFO,需要deque或者list
getCount 特定key的范围查询,hashmap + vector / deque
addPacket 需要用hashtable 去重。还要remove最旧的packet,最后的选择落到的deque上。

deque两头可以添加/删除,还能random access做二分搜索,真是居家旅行必备之数据结构。

时间复杂度:addPacket: O(1),forwardPacket:O(1),getCount:O(logN) N为dst的packet数量。
空间复杂度:O(M)