异星工厂吧 关注:60,803贴子:388,873

大型工厂装修计划,流彩RGB灯管思路详解与探讨

只看楼主收藏回复



IP属地:广东1楼2024-11-23 18:39回复
    开篇先来唠唠嗑。2.0发布后捏了一段时间的产线,我这种老玩家特别是经历过SE的洗礼,很多时候设计产线感觉一下子就望到了头。遂开始了对于新版电路的研究,恰好前段时间看到了新版灯光支持RGB效果,作为一个50块捡垃圾都要上RGB的图吧垃圾佬,那么必须要给工厂上点特效。于是开启了我长达一个多星期对此方面的思考及研究。


    IP属地:广东2楼2024-11-23 18:43
    回复
      目录:
      1.点数据输入
      2.调色和色域
      3.函数输入
      4.后记


      IP属地:广东3楼2024-11-23 18:46
      回复
        另外还要声明一下,此帖更多是抛砖引玉,希望能更多的讨论思考以及互相学习,优越党,杠精勿扰。


        IP属地:广东4楼2024-11-23 18:54
        回复
          1.点数据输入
          首先我是看见灯光颜色可以由一段24位二进制数转10进制数控制,取值范围从0-16777215,我便想一个数代表一种色,那么用一组特定的数有序排列输出是不是就可以实现RGB效果呢?当时我还因为如何去做这个电路而卡壳求助。(https://tieba.baidu.com/p/9259161861?pid=151195467903&cid=0#151195467903
          后来采用了9楼的思路成功实现了效果,但效果仍然有些不尽人意,不过当时我还是比较满意的。毕竟也是经过思考和学习最终呈现的效果
          我选择发个帖来吧里看看,当然最终是没啥回复,而且我自己也觉得改效果不怎么样,正在思考如何去升级。而几天后,我帖子(https://tieba.baidu.com/p/9271979716?pid=151236609511&cid=0#151236609511)的11楼的回复,他给予了我一位外国网友的思路,我看了之后直呼牛逼,于是开启了新一轮升级。这也说明闭门造车不可取。
          事后来看当时我的思路确实是有问题的,因为点信号输入如果需要覆盖足够的颜色,那么整个工厂的信号标识都不够用,同时因为我是手动输入的,那么庞大的数据如果不借助代码而仅靠人工的话处理起来有一种山顶洞人手工计算哈希算法的滑稽。但整体这一套做下来我对此还是有些感悟的,那就是点信号输入在用在工厂中形成图片还是非常好的,事实上我去查阅了下也以及有人写了此类代码图片转蓝图。


          IP属地:广东5楼2024-11-23 19:02
          回复
            2.调色和色域
            在那之前我要再谈谈色彩的问题,因为最终要设定效果流畅且和谐需要颜色变化的色差不能太大,在我得到新思路之前我拿着画画的调色板比划了很久。
            当时我心里就有结论了,单一色彩的变化RGB值的关系是线性的,而不同颜色的变化RGB值的关系是曲线,而曲线的形状由色彩的色差而定,事实上我思考了很久如何去调色,因为异星工厂引擎的问题,里面灯光的色彩肯定不会如同我们自己的4K显示器饱满,不过事后来看我确实又在思维胡同里做无用功。当时我已经在思考放弃单一的点信号输入,采用RGB组合输入,不出所料的我又陷入了RGB三色值那该怎么对时序这个问题上,再次的事后来看,又是无用功。我大概算不上有多聪明,不然咋老是原地转圈呢不过对于色域思考让我确信了如果要实现多彩的话,颜色数据处理一定要用三色输入。


            IP属地:广东6楼2024-11-23 19:11
            回复
              3.函数输入
              那么回到我获得新思路的时候,当时我已经隐约有一丝眉目,再看完该国外大手子的文章以及细细阅读文章后,我一拍大腿,原来还能这样!https://www.reddit.com/r/factorio/s/hd0LWDrIUu
              这位大手子在思考如何制造呼吸灯时也在思考如何输出RGB三色以及制造色差,他原文中首先表示思考了使用泰勒展开,但是后来因为游戏引擎和电路限制,如果颜色色差不明显,他没有办法获得准确的值。最终他选择用正弦函数来模拟,而正弦函数在游戏中无法表达,最终呈现的表达式是二次函数的样子。

              啊,二次函数,死去的记忆开始攻击我,什么abc系数的关系,什么顶点公式,什么求根公式,幸好我还记得,否则真是全还给数学老师了。我根据他的思路拿着GeoGebra比划了半天,并且求出了原解析式(f(x)=如果(0≤x≤100, -((51)/(2000)) x^(2)+255, 100≤x≤200, -((51)/(2000)) x^(2)+((51)/(5)) x-765))。虽然他在说明中写了原(y=0.0255(x-p)^2 + 255) 不过我还是自己算了一遍然后画了出来以观察三色值的关系和变化。
              他自己发的原图实际上不完整,而下图我的才是他完整使用在游戏中的函数,总共6个函数,分别讨论了X在【-133,67】,【67,267】,【0,200】的情况,Y值随着X而变化,最终只需要对单一X的值实现计算就可以得到Y也就是RGB值的不同的组合
              当然还有最后一步对于输出数据的处理,这也是游戏的特性以及游戏电路的弊端而导致的。因为游戏计算帧的问题,即便是使用了判断运算器选择大于0输出,仍然会有几tick的负数导致整个RGB灯光突然闪烁,使得颜色输出不流畅。这里这个作者使用了平方再开方的计算,确保了计算以及输出值是正数且连续。不过众所周知的,这游戏电路自带的计算方式没有平方,而我看了这个平方电路和对数电路也是懵逼了,我想了半天没想出来这是那里来的思路想出这样的计算。(https://forums.factorio.com/viewtopic.php?t=40747),这个平方电路作者真是牛逼,好像也是Factorio forums上比较活跃的玩家,而这个RGB作者在此对于这个平方电路的评价是an impressive square root design。当然,我这样的小卡拉米只能仰望大手子们了,不过能从大手子这里学到些东西,也是相当不错。后续我还思考了很多,比如如何去简化电路,这方面还没有找到太好的思路,还有如何实现其他颜色变化,这个我实验了只需要截取一段输出就可以实现其他更多的特点颜色组,不过这个需要自己去根据RGB三色值的关系去调整。我把整体的分享出来也是希望贴吧的各位人才和大佬来多多交流,看能否得到更好的思路。


              IP属地:广东7楼2024-11-23 19:47
              收起回复
                4.后记
                事情是这样的,在完全看明白上述的函数电路并且自制成功后,我于几天前在游戏互联网大厅溜达,看见了一个名叫白羊观测站的服务器,服务器简介有银趴二字,我便加入进去以一场激烈刺激的游戏,一进去按下M就看见一个四方核电,再加上白羊观测站的服务器名字,我瞬间就知道了这是一位吧友@白羊星骑士。看着他们略显简陋的铀矿处理产线,后续帮他们升级了铀矿处理。这时我觉得给他们这帮小老弟开开眼,于是我掏出了我的RGB电路,并且连在研究站附近,试图告诉这帮小老弟没有特效的工厂是不完整的工厂。此时只见主机惊呼,我累个骚肛,这也太棒了。显然,他对我的家伙事很满意,我欣喜的沉浸在卡拉米们的围观下。但不一会,没想到,服务器里还有高手,只见一位ID名为asdf123玩家也从裤裆里掏出一家伙事,大概是这样,一时之间服务器众人纷纷开始比较起我俩的家伙事
                我很确信,这是跟我学来的是完全不同的思路,于是我细细品鉴了一番,此蓝图是通过R【0,255】,B【0,255】,G【0,255】三色两两组合获得三种搭配,并且通过某一颜色从0至255的循环来实现颜色的变化,可以说很成功的复现了原版游戏中从红至青的6种颜色渐变,不得不说也是一种思路。事实上如果将其视作一元一次函数,他的方法也算是函数输入,只不过他输入的是用图表表示是直线,而我的是曲线。后来在服务器混迹了些时间,才知道这位ID位asdf123的玩家竟然是工厂知名老玩家@马老师,那么他能整出这个我也是毫不意外
                转过天,我又来到此银趴服务器内,此时惊讶的发现,在研究站上多了一条RGB灯带,其主体使用了马老师的设计,然后将信号一一延时并且错开输入给后一列灯,从而实现了RGB灯带的效果。我到是不意外,不过一点小小的思路实现了这么酷炫的效果也是相当不错,又从对话得出这是主机的小设计相法,果然还是集思广益啊
                不过后来我又转念一想这主机竟然用马老师的主体设计而不是我的,看来他终究还是更喜欢马老师的家伙事一些。此时冷冷的秋冬夜,真是西风多少恨,吹不散眉弯。
                当然最好我自己也去尝试了下线性函数的输入,总体效果是不错的,不过细心的吧友应该可以发现,曲线函数输入色域比马老师版本的更广一点,毕竟是三色模拟,马老师的灯光颜色会总体偏深一点,不过瑕不掩瑜,总体而言都是非常优秀的设计了。
                如果各位看完帖的吧友有更好的想法和思路,欢迎讨论。


                IP属地:广东8楼2024-11-23 20:20
                收起回复
                  链接:https://pan.baidu.com/s/1swiFny-GTS-MSpgrNv--EQ
                  提取码:2024


                  IP属地:广东10楼2024-11-23 21:34
                  回复
                    我勒个神啊,等我工厂建成自己满意了样子,我一定要精修电路这块,到时候掏出我的家伙事,也让大家见识见识


                    IP属地:广东11楼2024-11-23 21:42
                    收起回复
                      最初看到封装RGB功能的时候我就想到会有彩色灯带的玩法,可算等到了。


                      IP属地:上海12楼2024-11-23 21:44
                      收起回复
                        我的妈呀!!!死去的记忆突然开始对我暴击,函数全忘光辣!!


                        IP属地:湖北来自Android客户端13楼2024-11-23 21:50
                        收起回复
                          我就是想舒舒服服的玩个游戏,咋还让你们整的比高考还头疼


                          IP属地:山东14楼2024-11-23 22:25
                          收起回复
                            新版的选择运算器能够生成随机数,我觉得在异星工厂里玩俄罗斯方块指日可待了


                            IP属地:福建来自Android客户端15楼2024-11-24 15:00
                            收起回复
                              虽然看不懂,但赶紧@Fuhrer😡 来设精


                              IP属地:甘肃来自Android客户端16楼2024-11-24 15:57
                              收起回复