时间、空间、现实不只是一条线性路径,
而是一个具有无限可能的棱镜,
一个小小的选择能衍生出无数的现实分支,
在你所知道的世界外,
创造出一个全新的世界。
——漫威《What if》
opus
最近有不少小伙伴在研究生成艺术 ,要不我们聊聊吧 @shadow
如果以技术的思维来看待设计 (艺术),创作的过程就是定义搜索空间,在搜索空间中找到最佳的组合(创意)
shadow
基于笛卡尔积的大批量设计生成
A×B={(x,y)|x∈A∧y∈B}
熊叔
上次设计挑战赛我们不是聊到了徽章的融合吗? 每一个人的徽章可以和别人的徽章进行繁衍,生成新的徽章
要不研究下以太猫的模拟基因合成吧!
以太猫
2021.10.6
CryptoKitties
以太猫是一个基于区块链的游戏,但它并不是100%基于区块链的。在区块链上只存储了基本的核心数据,比如猫咪的外观只有genes这一遗传密码,具体的图像生成逻辑在开发者的服务器上。
趁着假期,我花了点时间研究了下这个游戏。首先,如果你想实现类似的游戏机制,可以参考Kitty的数据结构,通过genes、父母ID、出生日期等来记录一只Kitty猫。
shadow
struct Kitty {
// Kitty的遗传密码
uint256 genes;
// 时间戳,记录了这只猫诞生时的区块时间
uint64 birthTime;
// 这只猫,可以进行繁殖的最短时间
uint64 cooldownEndBlock;
// 这只猫的父母的ID,如果是第0代,则是0
uint32 matronId;
uint32 sireId;
//如果这只猫怀孕了,则设置为公猫的ID,用于标记其"丈夫"是哪一只公猫,否则设为0
uint32 siringWithId;
//冷却时间,需要等待多久后才能繁殖,第0代是0,其他是floor(generation/2)
uint16 cooldownIndex;
//这只猫的“世代号”。第一只猫是0代,新一代的猫是他们的父母一代中较大的一个,再加上1。max(matron.generation, sire.generation) + 1
uint16 generation;}
❤️ 类型
CryptoKitties 有四种类型:Normal、Fancy、Exclusive、Special Edition。
# Normal
普通猫的外貌是基于其genes的
# Fancy
一系列特殊的猫,具有独特的艺术品和徽章
# Exclusive
独家猫通常是为了纪念某个事件而产生的,只会发布少数(限量)。Exclusive 猫繁殖的后代是Normal或者Fancy
# Special Edition
特别版会大量发布,特别版的小猫具有遗传特征,可以用来繁殖新的普通猫。
❤️ 特征
目前游戏中有 207 个特征,其中一些组合(有数十亿种可能的组合)从未被击中。你会是第一个吗?
主要的特征:
mouth嘴巴
fur毛发
eye shape眼睛形状
eye colour眼睛颜色
base colour基色
highlight colour突出颜色
accent colour强调色
pattern图案
还有一些额外的特征,比如elk horns(麋鹿角)、daemonwings (恶魔之翼)等等。
❤️ 冷却时间
我们都知道生孩子是一项艰苦的工作。因此,您的小猫在繁殖后需要时间休息。这被称为冷却时间。
# 冷却时间完全基于Kitty的一代。
# 低代小猫总是天生具有更快的冷却速度。
# 小猫每繁殖一次,它的冷却时间就会增加。
❤️ 基因
每只 CryptoKitty 出生时都有一组48 个基因。其中一些基因决定了在视觉上的表达(称为Cattributes),除了Cattributes外,还有隐藏基因。隐藏基因虽然不影响小猫的外观,但会影响他们的后代。
由于隐藏基因的存在,大量的玩家在探索(寻找)彩蛋,游戏的乐趣就在于此。
shadow
小猫的基因组由一组特征组成,每个特征(如眼睛、毛皮图案、体色等)包含四个基因(P、H1、H2、H3)。
主基因P:表示主要特征,决定小猫外观的可见特征。
隐藏基因H1、H2、H3:小猫的隐藏特征,这些特征不会影响其外观,但可能会遗传给后代。
遗传概率设定:主基因有 75% 的机会被传递,其中一个隐藏基因有 25% 的机会被传递。
举个例子:
两只小猫的图案都是calicool(主基因P)。而其后代图案的特征,可能的结果是calicool、luckystripe、totesbasic 或 spock。
后代的图案特征到底是哪个呢?我们计算下每种结果的概率:
Calicool: 37.5% + 37.5% + 0.8% = 75.8%
Luckystripe: 9.4% + 9.4% = 18.8%
Totesbasic: 2.3% + 0.8% = 3.1%
Spock: 2.3%
可见,计算逻辑非常简单,只要按照表格所示的概率相加即可。针对这一计算逻辑,许多开发者开发了各种第三方工具来计算可能的各种结果(预测)……
只要不断地繁殖,低概率事件总归会发生。
考考你们,有多少特征被官方隐藏了?
shadow
opus
12特征x4基因=48基因 uint256 genes到底是多大?2的256次方减一的十进制范围
eva
2²⁵⁶ 看来这可以扩展的空间很大呀
知识库
开发者Kai Turner破解了CryptoKitties 256 位基因组。
ace
听着感觉像“破解了人类基因组”似的 ……
Kitty #1001 的genes破解
# 十六进制 (base 16)
genome=0x00004a52931ce4085c14bdce014a0318846a0c808c60294a6314a34a1295b9ce
# 十进制 (base 10)
genome=512955438081049600613224346938352058409509756310147795204209859701881294
# 二进制 (base 2)
genome=0b010010100101001010010011000111001110010000001000010111000001010010111101110011100000000101001010000000110001100010000100011010100000110010000000100011000110000000101001010010100110001100010100101000110100101000010010100101011011100111001110
破解之后:
"09-09-09-09-06-07-07-04-01-01-14-01-09-15-14-14-00-05-05-00-06-06-04-04-13-08-06-08-01-03-03-00-05-05-05-06-06-05-05-03-09-08-09-09-11-14-14-14"
通过查找表即可对应到基因上。
❤️ 突变
以eye shape为例,raisedbrow 和fabulous是父母的基因,他们的后代发生基因突变的概率是多少?
raisedbrow:37.5% + 9.4% + 2.3%+0.8%=50%
fabulous:37.5% + 9.4% + 2.3%+0.8%=50%
旗鼓相当,这个时候,有了基因突变的干预,有 25% 的机会会突变成wingtips(翼尖基因)。也有 37.5% 的机会会变成raisedbrow(扬眉),37.5% 的机会是fabulous。
raisedbrow:37.5%
fabulous:37.5%
wingtips:25%
这就是纯种猫对繁殖特别有价值的原因。因为它们可以保证传递某种特性,所以发生突变的几率远远大于具有不同基因的猫。
❤️ family-jewels
家族珠宝(又名增强型Cattributes),是 2018 年 2 月添加到 CryptoKitties。为您的小猫提供珠宝以证明其皇室血统!
❤️ 玩家类型
收藏家喜欢每只猫,无论它多么古怪、狂野或古怪。他们纯粹是为了聚集一个庞大的小猫家族。
饲养员是一位杰出的遗传学家。他们研究猫的基因组并尝试不同的繁殖配对,以创造出最独特、最稀有、当然还有可爱的小猫。
交易者已经掌握了市场。他们不断地买卖最受欢迎的小猫,抢夺市场上最珍贵的小猫。
Fancy Chaser 喜欢特别的艺术品和第一个发现新幻想的快感。他们带头解决难题,解开我们最令人兴奋的小猫培育配方。
❤️ 总结
# 如果有一天游戏服务商不再提供CryptoKitties的服务,那保存在链上的数据仅仅只是一串“基因”编码。
# 猫也是有等级的,特征和数量是关键因素,另外可以通过配饰来区分等级,如family-jewels(增强型 Cattributes)。
# 特征越多,组合的可能越多。
# 模拟“基因”的概念,隐藏基因、遗传概率、突变
# 5种典型的玩家角色:收藏家、饲养员、交易者、花哨的追逐者。