专业编程基础技术教程

网站首页 > 基础教程 正文

我竟然帮群友解决了一个自己都没遇到过的问题

ccvgpt 2024-07-21 17:33:28 基础教程 10 ℃

~为共同爱好相遇,是多么美好的事~


Hello,我是烈焰。(,,′?ω?)ノ"(′っω?`。)

我竟然帮群友解决了一个自己都没遇到过的问题

事情是这样的,昨天群里的一位小伙伴问了一个关于NUKE中Script Editor的问题,但是这个问题我也没有遇到过,但是通过以前所学到的知识结合相关资料的查阅,我竟然解决了这个问题!虽然不是什么困难的问题,但是烈焰觉得这个过程还蛮有趣的,所以想要分享给大家。

问题描述是这样的。

有没有大佬知道白色(1,1,1,1)/(255,255,255,255)是怎么换算到4294967295.0这个奇奇怪怪的数值的啊?

那么我首先看到这个问题的时候是有点懵逼的,因为从来没有看到过(1,1,1,1)/(255,255,255,255)这种写法来表示颜色的,但是既然涉及到颜色转换,我第一反应肯定是色彩空间的问题,所以我问他:“什么色彩空间?”

小伙伴的回答:

然后才得知小伙伴想要做的是用Python脚本给一个节点上色,那么对应的就是一个节点的'tile_color'属性。然后小伙伴又发来了一些信息:

很明显他是通过setValue的方法去进行赋值的,由于我也没有尝试过用Script去改变一个节点的颜色,所以我按照他的方法试了一下。我把一个节点的tile_color设置为白色,然后通过Script去获取他的颜色值,果然得到的结果和他叙述的是一样的:

i = nuke.selectedNode()
x = i.knob('tile_color').getValue(0)
print(x)

可是这个结果却有点诡异,因为我们都知道一个颜色是由RGB三个原色组合而成的,但是经过用不同的颜色多次测试之后我发现getValue并不能获取到他的三个值,反而只能获取同一个值。

经过这次实验我也发现如果输入一个超出数组长度的值,那么他默认会得到第0位的值。那么结论就很明了了,这个颜色就是由一个值控制的。那么颜色只由一个值控制,很容易想到的就是十六进制颜色。比如0xffffff就是白色,这个大家用Adobe的拾色器就很容易看到

那么我就大胆的做了一个设想,假如这个颜色就是通过十六进制转换得来的呢?那么想要验证这个想法也很简单~只需要得到他的十六进制颜色数值,然后转换成十进制和我们Script中得到的数值进行比对就行了。可是要怎么获取到他的十六进制颜色呢?

其实也很简单,我们都知道NUKE的节点可以直接从一个软件界面直接复制到另一个软件界面,甚至从一个电脑到另一个电脑,只要我们能够完整地复制它。那么细心的人肯定已经发现这是通过剪切板复制的(用过mocha的人都知道mocha最常用导出数据的方式就是copy to clipboard),所以我就直接把一个染色的节点复制,然后新建了一个txt文档,粘贴了进去。果然发现它的颜色就是用十六进制的颜色值控制的。


OK问题就已经很简单了,接下来需要做的就是将它的十进制数值输入计算器,然后将换算好的十六进制值和他进行比对就知道结果了。哟西~带入计算!


结果不出我所料,果然他就是利用这种方式去赋值的,那么我就做了一个简单的实验,我想把他的颜色直接复制给另外一个节点。所以我复制了他的节点颜色值0xe95f9ff,并且通过Script的方式赋值给一个新建的tracker节点。(大家也可以用这个值和下面的代码去做个试验)

i = nuke.selectedNode()
i.knob('tile_color').setValue(0xe95f9ff)

得到的结果如下:


那么这就很简单了,我们只需要获取到我们想要的十六进制颜色写在里面就行了~比如我在Adobe拾色器里找一个橙色。那么我获取到的数值就是bd5c1b,再将其复制到Script中就得到了我想要的结果,这里需要注意的是他需要变成0x******00的形式,烈焰也不知道它的原理是什么,这就跟进制换算有关啦~

然后机智的小伙伴还在网上找到一个函数,可以直接将RGB的信息转换为十六进制颜色,不过我觉得可能除非你是对颜色原理掌握的比较牢固,否则单独靠RGB可能也比较难得到一个想要的颜色,除非是已知的特定值?

至此这个问题就圆满解决啦~虽然对工作可能没有什么用处,但是这种解决问题的方法和思路一直是烈焰和大家非常强调的东西!烈焰也会在这次过程中吸取一些经验教训,也希望为各位小伙伴解决问题提供一些思路,遇到问题学会思考,很多东西就会迎刃而解啦~

我是烈焰,我们下次再见~


MR影视 微信公众号二维码


MORE REALISTIC

把想法变成现实

最近发表
标签列表