MarkovJunior项目语法详解:从网格创建到规则应用

MarkovJunior项目语法详解:从网格创建到规则应用

MarkovJunior Probabilistic language based on pattern matching and constraint propagation, 153 examples MarkovJunior 项目地址: https://gitcode.com/gh_mirrors/ma/MarkovJunior

概述

MarkovJunior是一个基于马尔可夫链的生成系统,通过定义网格、规则和节点来创建复杂的生成式内容。本文将深入解析该系统的核心语法元素,帮助开发者掌握其工作原理。

网格(Grid)系统

网格是MarkovJunior中最基础的构建块,所有生成操作都在网格上进行。网格创建有两种主要方式:

  1. 根网格创建:作为整个生成过程的起点
  2. 派生网格创建:通过wfcmap节点创建

网格属性详解

  • values属性:定义网格可能包含的值集合。例如values="BRGUY"表示网格可以包含黑色(B)、红色(R)、绿色(G)、蓝色(U)和黄色(Y)值,初始值为黑色。

  • folder属性:指定规则文件的查找目录。例如folder="DungeonGrowth"会从DungeonGrowth目录加载规则。

  • origin属性(仅根网格):布尔值属性,默认为False。当设置为True时,会在网格中心创建一个像素点,其值为values属性中的第二个值。例如values="YRBAN" origin="True"会创建一个黄色背景的网格,中心有一个红点。

对称性(Symmetry)控制

对称性是生成过程中的重要概念,可以显著影响最终结果的美观性和一致性。

  • 默认行为:系统默认使用最大对称性组
  • 自定义对称性:通过symmetry属性指定特定的对称模式。例如在花朵生成中,可以限制规则仅沿x轴镜像,确保花朵垂直生长而非侧向生长。

规则(Rules)系统

规则定义了网格状态如何转换,是生成过程的核心机制。

规则定义方式

  1. 直接定义

    • in="BBB/BWB":定义规则的输入部分
    • out="RR DA FR":定义规则的输出部分
    • 斜杠/分隔y轴,空格分隔z轴
  2. 文件加载

    • fin="filename":从文件加载输入
    • fout="filename":从文件加载输出
    • file="filename":加载包含输入和输出的完整规则

规则属性

  • p属性:规则应用概率,默认为1.0。例如可以设置只有25%的天花板位置会转换为光源。
  • legend属性:当从文件加载规则时必须指定,按扫描线顺序列出使用的值。

规则节点(Rulenodes)类型

MarkovJunior提供三种主要规则节点,用于控制规则的执行方式:

  1. one节点(存在节点):

    • 只要存在匹配的规则就执行
    • 适用于"至少存在一个"的场景
  2. all节点(全称节点):

    • 对所有匹配的规则都执行
    • 适用于"全部应用"的场景
  3. prl节点(并行节点):

    • 类似all节点,但规则独立应用,不考虑重叠
    • 性能更高,在无冲突场景下结果与all节点相同

steps属性:限制节点执行步数,例如steps="60"限制最多执行60步。

联合(Unions)机制

联合允许将多个规则组合使用,创建更复杂的生成行为。典型应用包括:

  • 组合不同生长方向的规则
  • 创建多阶段生成过程
  • 实现条件性规则应用

推理(Inference)系统

推理是MarkovJunior的高级功能,允许对生成过程施加约束。

观察元素(observe)

通过observe元素定义约束条件:

  • value:当前值
  • from:立即转换为什么值
  • to:最终应该转换为什么值

例如:

  • <observe value="W" to="BR"/>:白色方块最终应变为黑色或红色
  • <observe value="I" from="B" to="W"/>:靛蓝方块先变黑,最终变白

搜索模式

  • 贪婪模式(search=false):按规则传播场贪婪执行
  • 搜索模式(search=true):使用规则传播场作为启发式搜索状态图

搜索参数

  • limit:限制搜索状态数
  • depthCoefficient:在广度优先和深度优先搜索间插值
  • temperature:控制目标跟随严格程度

特殊节点类型

映射(Map)节点

用于网格转换和映射操作,典型应用包括:

  • 迷宫生成
  • 几何变换
  • 空间划分

路径(Path)节点

专为路径相关操作设计,可用于:

  • 迷宫填充
  • 电路生成
  • 地下城布局

卷积(Convolution)节点

实现基于邻域的转换规则,常见用途:

  • 细胞自动机(如生命游戏)
  • 洞穴生成
  • 连通区域处理

高级生成技术

波函数坍缩(WFC)

两种主要模式:

  1. 平铺WFC:基于预定义平铺的生成
  2. 重叠WFC:基于样本模式的生成

应用场景包括:

  • 建筑生成
  • 表面纹理
  • 复杂结构创建

卷积链(ConvChain)

基于马尔可夫链的生成技术,适用于:

  • 迷宫变体
  • 有机结构
  • 程序化内容混合

常见问题解答

Q:如何创建循环或重复序列?

A:将sequence节点嵌套在markov节点或其他sequence节点内。目前不支持计数器,替代方案是重复执行序列直到满足某个条件。

最佳实践建议

  1. 渐进式开发:从简单规则开始,逐步增加复杂度
  2. 对称性利用:合理使用对称性提高生成质量
  3. 性能优化:在无冲突场景下优先使用prl节点
  4. 约束设计:谨慎使用推理系统,避免过度约束
  5. 模块化:将复杂规则分解为多个简单规则组合

通过掌握这些语法元素和概念,开发者可以充分利用MarkovJunior创建各种复杂的程序化生成内容。

MarkovJunior Probabilistic language based on pattern matching and constraint propagation, 153 examples MarkovJunior 项目地址: https://gitcode.com/gh_mirrors/ma/MarkovJunior

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邱纳巧Gillian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值