纹章与家纹如何指导我们构建视觉识别生成器

Hacker News Top 新闻

摘要

本文探讨了西方纹章与日本家纹的规则体系如何启发过程式视觉识别生成器的设计,强调系统生成优于目录选择。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/09/28 16:47

# 纹章学与日本家纹如何启发视觉识别生成器设计 作者:本·奥弗迈尔 来源:https://benovermyer.com/blog/2026/09/japanese-vs-western-heraldry 我花费大量时间思考纹章学,但角度或许与纹章史学家有所不同。在Iron Arachne项目中,我必须将纹章视为可在软件中实现的系统。这改变了我提出的问题。构建一个包含狮子、鹰、十字架、剑、花朵和皇冠的符号库并从中随机选取并不困难† (https://benovermyer.com/blog/2026/09/japanese-vs-western-heraldry#sidenote-catalog)这几乎是纹章生成器最初版本的做法。事实上,纹章生成器比Iron Arachne项目本身更早诞生,原始代码中没有任何部分保留到当前网站中。↩ (https://benovermyer.com/blog/2026/09/japanese-vs-western-heraldry#sidenote-ref-catalog) 这能生成看似纹章的图案,但并不能真正复现纹章学。纹章传统不仅是符号集合,更是一套规则体系,规定着这些符号如何被选择、描述、排列、组合、区分和识别。 这给程序化生成带来一个更有趣的问题:如何在保持历史发展语境真实性的前提下,用程序化方式表达这些系统?将欧洲纹章与日本*家纹*进行比较特别有意义,因为这两种传统使用截然不同的视觉体系来解决相似问题。这些差异提示了不同的程序化生成方法。 ## 术语表 本文描述了一些你可能不熟悉的概念,我在此整理术语表进行定义。如果已了解这些概念,可直接跳至下一节。 - **程序化生成**:通过应用规则而非从符号库中选取现成样例来创建内容。 - **纹章描述语**:纹章图案的传统文字描述方式。 - **底色与色彩**:底色指盾牌背景;色彩是纹章学中对颜色或金属的称谓(*Azure*代表蓝色,*Or*代表金色)。 - **图案、母题与姿态**:图案是放置在底色上的图形;母题指图形的类型,姿态指其姿势(如*直立*的狮子呈后腿站立姿态)。 - **普通图案与分区**:普通图案是标准的几何图形,如十字架或宽条纹;分区将底色划分成不同区域。 - **家纹与氏纹**:*家纹*是日本纹章;*氏纹*特指家族纹章。 - **语法与语料库**:语法指构建设计的规则;语料库是历史上有记载的样例集合。 - **形态学与句法**:形态学描述语言中术语的形式;句法描述这些术语的排列方式。 - **抽象语法树与场景图**:抽象语法树是描述中各部分的嵌套结构;场景图组织视觉对象及其关系。 - **有限状态机**:一种根据规则在有限命名状态间移动的过程模型。 - **分支标识与纹章组合**:分支标识用于区分家族分支的纹章;纹章组合通过并列纹章来显示继承或联盟关系。 - **负空间**:形状周围及之间的留白区域。 - **SVG**:基于文本的可缩放矢量图像格式。 - **枚举与标签联合**:枚举是固定命名选项列表;标签联合是可取多个命名形式之一的值。 ## 作为生成系统的纹章学 西欧纹章学对程序员格外友好,因为它已具备类似形式语言的结构。纹章可通过“纹章描述语”来描述:一套专门的词汇和语法,能以足够精确的方式描述纹章设计,使熟悉该体系的人能够重现图案。以下是一个简单示例: 考虑一个简单的假设性描述: > Azure, a lion rampant Or. 即使未见盾牌,熟悉纹章学的人也能重构其基本外观。底色为蓝色(*azure*),其上是一只以传统直立姿态站立的狮子,狮子为金色或黄色(*Or*)。 蓝色盾牌上的直立金狮 Iron Arachne纹章生成器产出的"Azure, a lion rampant Or"图案 更复杂的纹章会加入底色分区、普通图案、多个图案、位置关系、色彩变化及其他修饰,但基本原理不变。纹章描述语不仅是图像的标签,更是其结构化描述。这使其在计算视角下颇具趣味,其行为类似于受限自然语言:一套限制有效组合规则的语言。 纹章描述语具有词汇、形态学、句法和预期的信息排列顺序。某些构式有效,而另一些无效。描述的前部建立语境,后部在此语境中被解读。相对少量的规则和术语可描述大量可能的图像空间。 这类似于语言学研究的生成系统。语言提供规则而非存储所有可能的句子,从而能生成几乎无限数量的句子。纹章学对视觉设计也做着类似工作。 对程序化生成器而言,这暗示了一种清晰的架构:先生成有效的纹章描述,再进行渲染。理论上,同一描述语可交给多个渲染器处理。它们可能生成风格不同的狮子、盾牌或百合花纹,但都能产出可识别的相同纹章表示。其核心身份部分源于抽象描述,而非某一幅精确的画作。 ## 日本家纹的不同路径 日本*家纹*与*氏纹*呈现出截然不同的挑战。与欧洲纹章相似,*家纹*作为视觉标识,与家族、个人、机构和政治关系相关联,出现在服饰、旗帜、器具、建筑及其他物品上。 但将*家纹*简单视为“日本纹章”会掩盖两种传统的重要差异。对程序化生成而言,最关键的是家纹体系中没有直接对应纹章描述语的核心机制。*家纹*通常是由可识别母题构建的高度风格化设计:植物、动物、天体、工具、几何图形及其他形式。这些母题被抽象成紧凑的视觉词汇,并按照可识别的构图模式排列。最著名的例子之一是德川家*三つ葉葵纹* (https://www.japanesewiki.com/culture/Mitsuba-aoi%20(Three%20Leaves%20of%20Hollyhock).html):三片风格化的蜀葵(或姜)叶片围绕中心点旋转排列。 德川家三叶葵纹,三片风格化叶片围绕中心点排列 这里重要的不仅是设计包含三片叶子。其身份源于特定风格化叶形、重复、方向、间距、对称性及整体轮廓的组合。若生成器以处理西方纹章描述语的方式处理此设计,可能从“三片蜀葵叶”开始。 此描述包含部分正确信息,但远不足以重现*家纹*。几何形状至关重要,这暗示了不同的程序化模型。 家纹生成器可更直接地操作图形基元,而非生成语言描述再解析为图像: > 取一个基础形状。将其复制三次。围绕共同原点旋转每个副本。根据模板缩放并定位元素。必要时将结果裁剪或封装于圆形内。 由此产生的系统开始更接近程序化几何,而非自然语言生成。 ## 两种不同的生成策略 这为我们提供了两种截然不同的纹章设计生成模型。西方纹章可视为以描述为主:生成对象的结构化描述,再渲染该描述。日本*家纹*则以构图为主:通过组合和变换图形元素生成视觉结构。 对比示意图:西方纹章从规则到描述语再到渲染的纹章;日本家纹从叶片母题经旋转重复到组合纹章 纹章设计生成的两种有效计算模型 这种区分并非绝对。西方纹章显然包含大量构图规则,*家纹*也有名称和传统分类。历史上这两种传统都不是作为软件架构被发明的。然而,在决定如何用计算方式表达时,这种区分很有用。 思考每个体系如何表达三个重复对象:在西方纹章学中,重要信息可能包括图案名称、色彩、数量及排列方式。“Three roundels argent, two and one”传达了一种纹章画师能解读的排列方式。家纹生成器则可能以几何方式表达类似概念: 1. 加载基础母题。 2. 生成三个实例。 3. 将它们的原点放置在距中心特定半径处。 4. 将实例分别旋转0度、120度和240度。 5. 缩放直至轮廓满足所需间距。 6. 应用任何封装或遮罩几何形状。 西方表示更接近抽象语法树,日本表示更接近场景图。对程序化生成而言,两者都极具吸引力。 ## 规则比符号列表更重要 此对比也说明了为何仅收集历史符号是不够的。西方纹章拥有规定色彩、底色分区、普通图案、图案放置、重复、分支标识、纹章组合等多方面的规则。例如著名的“色彩法则”通常禁止金属色置于金属色上或颜色置于颜色上。实际效果是形成强烈视觉对比:蓝底上的金狮易于辨识,而蓝底上的红狮则不那么明显。随机选择底色又独立随机选择图案色彩的生成器,将产生违反该体系最显著惯例的组合。 更佳的方法是条件生成。选择底色会限制后续选项。若底色是颜色,生成器可优先为重要图案选择金属色。若底色已分区,则另一组可能性可用。若存在普通图案,其他图案的可能放置方式也会改变。 *家纹*施加不同约束。对称性、重复、封装、负空间及抽象程度变得尤为重要。随机选取花朵三次粘贴在圆上的设计,其作为*家纹*的可信度,并不比随机选取狮子粘贴在盾牌上作为纹章的可信度更高† (https://benovermyer.com/blog/2026/09/japanese-vs-western-heraldry#sidenote-random-mon)虽然可以辩称这种极度简化版本是可接受的原型。我可能会尝试这样做。↩ (https://benovermyer.com/blog/2026/09/japanese-vs-western-heraldry#sidenote-ref-random-mon)两种情况下,生成器都需要建模关系而不仅是对象。 ## 然后还有例外情况 对程序员而言不幸的是,历史视觉体系很少像其入门规则呈现的那样规整。西方纹章充满例外、争议惯例、地域差异、历史发展以及看似违反基本规则的纹章。色彩法则本身就有著名例外。 传统上与耶路撒冷王国相关的纹章,将金十字架置于银底色上:金属色置于金属色。这不是纹章学的缺陷,而是证明该“规则”是历史惯例而非物理定律。 银色盾牌上的金制端十字架及四个小金十字架 程序化生成器因此必须决定其建模的系统类型。是生成满足现代纹章师期望的纹章?还是具有14世纪英格兰特征的纹章?或是综合多个欧洲传统的宽泛幻想近似?这些是不同的生成器。 *家纹*从另一方向呈现相同问题。母题+重复+封装的清晰分类对软件有用,但历史语料库并不利于我TypeScript接口的便捷实现。设计可被修改、组合、简化、分化或以多种形式使用。家族可使用多个*家纹*,相关群体可使用设计的变体,相似母题可能独立出现。 甚至*家纹*与家族一一对应的观念(如同纹章属于特定有权持有者)也可能产生误导。真实的纹章体系包含历史,而历史产生不规则性。一个可能的解决方案是区分语法与语料库。 语法描述生成器可用的常规操作,语料库记录历史上有据可查的形式,包括常规语法不太可能生成或无法生成的形式。这种方法让软件能表明:“这是该传统设计通常的构建方式,但这些特定的例外设计同样存在。” ## Iron Arachne实际上应生成什么? 此对比为Iron Arachne现有的纹章生成器带来问题。幻想纹章生成器是否真的应主要基于西方纹章描述语?或许不然。 纹章描述语因其异常丰富的形式词汇而具吸引力。从程序员角度,直接复现该词汇颇具诱惑。生成底色、选择色彩、选取图案、确定其姿态与排列,并将结果序列化为描述语。但Iron Arachne的实际目标通常是为虚构设定生成有趣的视觉产物。在此背景下,*家纹*展示的构图逻辑可能更有用。 这改变了我提出的问题。不再问“应生成什么纹章句子?”,而是问“应生成什么视觉关系?”纹章可从少量图形基元开始。 这些基元可随后被反射、旋转、重复、嵌套、交叉或围绕轴线排列。纹章图案本身可成为更大构图系统的基元。结果未必是历史上有效的欧洲纹章或日本*家纹*,而是借鉴两者中有用的程序化洞见。 西方纹章提供了有意义类别和关系的语法,*家纹*则提供了视觉构图的语法。结合两者可能比单独忠实实现任一传统,产生更好的幻想符号生成器。 ## 生成难度如何? 乍看之下,西方纹章似乎更容易生成,因为其结构已在语言中被形式化。纹章描述语的子集可用枚举、标签联合、语法规则或抽象语法树非常自然地表示。渲染器可遍历该结构并生成SVG元素。 然而,随着支持词汇量的扩大,难度会迅速增加。

相似文章

GenClaw: 代码驱动的智能体图像生成

Hugging Face Daily Papers

GenClaw 提出了一种代码驱动的智能体图像生成框架,通过模拟人类的创作过程来打破黑箱范式:概念构思、使用代码(SVG/HTML/Three.js)进行草图绘制,然后利用生成模型添加纹理和实现逼真效果。