缺氧吧 关注:161,876贴子:2,096,542

世界生成器进阶

只看楼主收藏回复

不知道会不会被吞 先码着
之前写过一份不过不太全面[url]https://tieba.baidu.com/p/7573249429[/url]
这回我更稍微搞懂了从world到subworld再到biome和feature的关系 不过还是有些参数不懂


IP属地:浙江1楼2023-01-29 13:50回复
    #世界生成器配置
    name: STRINGS.WORLDS.TINYEMPTY.NAME #星球名称
    description: STRINGS.WORLDS.TINYEMPTY.DESCRIPTION #星球描述
    nameTables: [ GENERIC ] #随机名称列表
    #使用方括号 如果有多个定义则使用逗号分开
    #列表类型名称由翻译文本的索引字段的最后一部分组成
    #例如 nameTables: [ GENERIC,TERRA ]
    #则是使用在翻译文件中的以下这两个列表作为进入游戏后的星球名称
    #STRINGS.NAMEGEN.WORLD.ROOTS.GENERIC
    #STRINGS.NAMEGEN.WORLD.ROOTS.TERRA
    asteroidIcon: asteroid_vanilla_sandstone_start_kanim #星球图标 留空则以小砂岩星球为默认图标
    layoutMethod: PowerTree
    #启用生态群落自带的分布规则
    #否则则是按照OverworldSampleBehaviour来控制
    #如果也没有则每个生态以正六边形排列
    defaultsOverrides:
    #可选项
    #全部定义式子位于游戏数据 StreamingAssets\worldgen\defaults.yaml中
    data:
    #目前已知
    OverworldDensityMin: 20
    OverworldDensityMax: 20
    OverworldSampleBehaviour: PoissonDisk
    #这三个控制生态群落分布权重和随机位置
    WorldBorderThickness: 1
    WorldBorderRange: 1
    #这两个控制边界中子物质的分布
    #disableWorldTraits: true
    #没有世界特质
    worldTraitScale: 3.5 #世界特质数量 范围为0~4允许小数点 大于四则视为4
    worldTraitRules: #世界特质定义 这里的格式有点奇怪 建议只用以下一种写法
    #指定特定特质 worldTraitScale仍然可以随机额外的特质但是数量要大于固定特质
    #worldTraitRules:
    - specificTraits:
    #固定特质
    - traits/MetalRich
    - expansion1::traits/CrashedSatellites
    #或排除特定特征
    #worldTraitRules:
    # - min: 1
    # max: 2
    # forbiddenTags:
    # #排除拥有以下标签的特质
    # - StartWorldOnly
    # - GenericGeysers
    # - LargeWorld
    # - Oil
    # forbiddenTraits:
    # #排除以下特质
    # - expansion1::traits/CrashedSatellites
    # - expansion1::traits/Volcanoes
    worldsize: #世界大小
    X: 250
    Y: 390
    fixedTraits: #地表光照与辐射
    - sunlightVeryVeryVeryHigh
    #光照从低到高
    #sunlightVeryVeryLow
    #sunlightVeryLow
    #sunlightLow
    #sunlightMedLow
    #sunlightMed
    #sunlightMedHigh
    #sunlightHigh
    #sunlightVeryHigh
    #sunlightVeryVeryHigh
    #sunlightVeryVeryVeryHigh
    - cosmicRadiationHigh
    #辐射低到高
    #cosmicRadiationVeryLow
    #cosmicRadiationLow
    #cosmicRadiationMedLow
    #cosmicRadiationMed
    #cosmicRadiationMedHigh
    #cosmicRadiationHigh
    seasons: #地表陨石类型
    - GassyMooteorShowers
    - RegolithMoonMeteorShowers
    - MeteorShowers
    startSubworldName: subworlds/sandstone/SandstoneStart #基地生成选取生态群落位置
    #startSubworldName: expansion1::subworlds/XXX DLC的生态
    #startSubworldName: subworlds/XXX 原版的生态
    startingBaseTemplate: bases/sandstoneBase
    #基地所使用的模板 你可以自己存一份然后调用
    startingBasePositionHorizontal: # 基地的水平位置 但是仍然不是绝对位置
    min: 0.5
    max: 0.5
    startingBasePositionVertical: # 基地的垂直位置 但是仍然不是绝对位置
    min: 0.5
    max: 0.5
    subworldFiles: #调用的 subworlds 分别是dlc路径和原版路径
    #- name: 根目录subworlds/生物群系类型/生物群系属性
    #原版的根目录不用写 dlc的根目录需要 expansion1:: 开头
    - name: expansion1::subworlds/swamp/SwampWarpStart
    - name: subworlds/sandstone/SandstoneStart
    unknownCellsAllowedSubworlds: #地形生成器规则
    - tagcommand: Default #创建一个画布 该画布又以以下生物群系组成
    command: Replace #代替该位置的所有生物群系
    subworldNames: #生物群系列表
    - subworlds/sandstone/SandstoneStart
    - tagcommand: DistanceFromTag #根据tag进行填充
    tag: AtStart
    #AtStart #以世界中心为起点
    #AtEdge #以世界垂直边缘为起点
    #AtSurface #以世界顶部为起点
    #AtDepths #以世界地底为起点
    minDistance: 1 #距离起点位置的1环
    maxDistance: 2 #到一环之间的位置
    command: Replace
    #Replace #该位置范围内替换为 (调色桶)
    #UnionWith #该位置范围随机位置 (喷枪)
    #ExceptWith #清除之前在该位置范围内生成的生态群系 (橡皮擦)
    subworldNames:#指定生态群系
    - expansion1::subworlds/swamp/SwampWarpStart
    additionalWorldTemplateRules: #模板生成器规则 (如果没有合适的位置则会导致种子发芽失败)
    - names:
    - geysers/volcanohole
    - geysers/generic
    listRule: TryOne
    #TryOne #尝试一个
    #TryAll #尝试全部
    #TrySome #尝试至少n个
    #GuaranteeOne #保证一个
    #GuaranteeAll #保证全部
    #GuaranteeSome #保证至少n个
    #GuaranteeSomeTryMore #保证至少n个至多n个
    #someCount: 1 #保证一个
    #moreCount: 2 #至多两个
    times: 2 #执行多次
    priority: 290 #优先级 越大越早生成
    allowDuplicates: true #允许重复生成
    allowExtremeTemperatureOverlap: true #不清楚 没试过
    allowedCellsFilter: #位置选择器 允许多个存在
    - command: Replace
    #Replace #选择指定位置
    #ExceptWith #排除指定位置
    zoneTypes: [Sandstone] #选择指定背景墙的生态群系
    # subworldNames: #选择指定生态群系
    # - expansion1::subworlds/magma/VolcanoBiome
    # tagcommand: AtTag #选择拥有指定tag的生态群系
    # tag: NoGravitasFeatures
    # tagcommand: NotAtTag #选择没有指定tag的生态群系
    # tag: NoGlobalFeatureSpawning
    # temperatureRanges: #选择拥有指定温度范围的生态群系
    # - VeryHot
    # - ExtremelyHot
    # tagcommand: DistanceFromTag #根据距离进行选择 同地形生成器规则
    # tag: AtSurface
    # minDistance: 1
    # maxDistance: 1
    #
    一个星球生成器的最小写法
    name: STRINGS.WORLDS.TINYEMPTY.NAME
    description: STRINGS.WORLDS.TINYEMPTY.DESCRIPTION
    disableWorldTraits: true
    worldsize:
    X: 200
    Y: 200
    subworldFiles:
    - name: expansion1::subworlds/magma/VolcanoBiome
    unknownCellsAllowedSubworlds:
    - tagcommand: Default
    command: Replace
    subworldNames:
    - expansion1::subworlds/magma/VolcanoBiome


    IP属地:浙江2楼2023-01-29 13:51
    回复
      生物群系属性配置
      biomeNoise noiseDefaultCave #随机噪声类型
      temperatureRange Room #温度范围 定义范围在原版的根目录temperatures.yaml
      pdWeight 1 #生物群系尺寸大小
      density
      min 10
      max 20
      avoidRadius 20.0
      minChildCount 1
      sampleBehaviour PoissonDisk
      doAvoidPoints false
      dontRelaxChildren true #可能是防止放置动物幼崽
      biomes #组成成分
      - name expansion1biomesBiomes_noiseDefault #组成列表路径
      weight 1 #权重
      tags #局部标签 被用于控制当前位置的小动物和植物以及掩埋物品
      #似乎可用tag可以在mobs.yaml中找到 dlc和原版的根目录里各有一个
      - PrickleFlower
      - PrickleFlowerSeed
      centralFeature #群系中心子结构 只能有一个
      #例如丛林生态的那堆漂白石晶洞
      #以及辐射生态的辐射蜂巢
      type featuresgenericStartLocation
      features: #群系随机分布结构 可以有多个
      #可以重复 控制每块群系生成多个结构
      #例如被圈闭的石油那么多储油石就是这么生成的
      - type featuressedimentarySmallLake
      tags #群系全局标签
      - IgnoreCaveOverride #没有这个标签的时候 DefaultCave 这个随机噪声的高位部分会给当前位置设置为真空
      - NoGlobalFeatureSpawning #通常被用于控制模板生成器
      - NoGravitasFeatures #通常被用于控制模板生成器
      - StartWorld #起始位置
      - SwapLakesToBelow #将湖泊置换到下方
      - OilField
      - River
      - ErodePointToBorderWeak # Base game tuning
      - ErodePointToBorderInv
      - ErodePointToWorldTop
      - RemoveWorldBorderOverVacuum
      zoneType Space #背景墙类型
      borderOverride swampyMetalCrust #不同的背景相处会生成的边界样式 留空则生成深渊晶石
      #NONE #没有边界
      #rocky # 花岗岩 火成岩
      #hardToDig # 深渊晶石
      #impenetrable # 中子物质
      #
      #regolith # 浮土
      #ice # 冰 雪
      #oil # 火成岩 铀矿
      #softDirt # 沉积岩 泥土
      #softRock # 沉积岩
      #mooWorld # 火成岩 漂白石 浮土
      #seaBed #石灰 化石 火成岩
      #
      #saltyCrust # 盐 花岗岩 沙子
      #sandyCrust # 砂岩 沙子 铜矿
      #metalCrust # 金汞齐 铝矿 火成岩
      #swampyMetalCrust # 钴矿 污染土 沉积岩
      #frozenCrust # 冰 雪 镁铁质岩
      #frozenRustCrust # 冰 铁锈 镁铁质岩
      #organicCrust # 菌泥 藻类 金汞齐
      #radioactiveCrust # 沉积岩 花岗岩 铀矿
      subworldTemplateRules #生物群系自带的模板生成器规则
      - names
      - poipoi_oil_switchdoor
      - poipoi_oil_six_switch_door
      listRule TryAll


      IP属地:浙江3楼2023-01-29 13:52
      收起回复
        结构生成器配置
        shape: Splat #样式
        #ShortWide
        #TallThin
        #Blob
        #Splat
        #Circle #圆形
        #Square #矩形
        forceBiome: biomes/Frozen/Wet
        biomeTags:
        - ColdWheat
        - ColdWheatSeed
        - ColdBreather
        - Pacu
        - Crab
        - SeaLettuceSeed
        - SpiceVineSeed
        excludeTags:
        - SprinkleOfMetal
        - SprinkleOfOxyRock
        tags:
        - Wet
        - StartLocation
        - HighPriorityFeature
        - AllowExceedNodeBorders
        blobSize:#中心大小
        min: 3.0
        max: 13.0
        internalMobs:#在内部生成实体
        - type: GeyserGeneric_big_volcano #生成一个大火山
        count:
        min: 1
        max: 1
        - type: BeeHive #生成辐射蜂巢
        count:
        min: 1
        max: 1
        - type: DivergentWorm #生成1~2个虫果果虫
        count:
        min: 1
        max: 2
        - type: GasGrass #生成释气草
        count:
        min: 4
        max: 8
        borders:#壳层厚度 需要与壳层规则所匹配
        - 1
        - 1
        - 1
        - 1
        ElementChoiceGroups:#壳层规则 需要与壳层厚度所匹配
        SprinkleOfElementChoices:#未知 似乎在游戏中未使用
        RoomCenterElements:#核心
        selectionMethod: WeightedResample
        #WeightedResample 混合填充
        #PickOneWeighted 选择一种
        choices:#元素组成
        - element: SlimeMold #元素名称
        weight: 1 #权重
        overrides: #修饰
        massOverride: 50 #更改质量
        diseaseOverride: SlimeLung #添加病菌
        diseaseAmountOverride: 1000000 #数量
        - element: Algae
        weight: 0.1
        RoomBorderChoices0:#壳层0
        selectionMethod: HorizontalSlice
        choices:
        - element: DirtyIce
        weight: 0.7
        - element: Rust
        weight: 0.3
        RoomBorderChoices1:#壳层1
        RoomBorderChoices2:#壳层2
        RoomBorderChoices3:#壳层3


        IP属地:浙江4楼2023-01-29 13:54
        回复
          组成列表配置
          TerrainBiomeLookupTable:#根列表
          remove: []
          add:
          Basic_0: #列表名称
          - content: Oxygen #元素名称
          bandSize: 1 #深度
          overrides: #修饰
          massOverride: 50 #更改质量
          diseaseOverride: SlimeLung #添加病菌
          diseaseAmountOverride: 1000000 #数量
          - content: Diamond
          bandSize: 0.25
          - content: Katairite
          bandSize: 0.25
          - content: Granite
          bandSize: 0.25
          - content: Electrum
          bandSize: 0.25
          - content: Diamond
          bandSize: 0.25
          - content: Katairite
          bandSize: 0.25
          - content: SedimentaryRock
          bandSize: 0.25
          - content: Electrum
          bandSize: 0.25
          - content: Oxygen
          bandSize: 2
          - content: Diamond
          bandSize: 0.25
          Basic_1: #列表名称 允许多个列表


          IP属地:浙江5楼2023-01-29 13:54
          回复
            目录
            黑色的部分是火山活跃的生态群系 该生态群系拥有pdWeight: 0.4的尺寸倍率

            没有 layoutMethod和OverworldSampleBehaviour时生成的地形
            单个砂岩和火山地形面积相等

            有OverworldSampleBehaviour: PoissonDisk时候的地形
            生态群系分布变得不规则但是单个生态的面积仍然相等

            有layoutMethod: PowerTree时候
            砂岩比火山地形要大

            两者都有时的地形 分布更加混乱


            IP属地:浙江6楼2023-01-29 14:11
            回复
              OverworldSampleBehaviour: PoissonDisk
              上面一个密度是1~1 下面那个是30~30 (没有layoutMethod: PowerTree)



              IP属地:浙江7楼2023-01-29 14:13
              回复


                IP属地:浙江8楼2023-01-29 14:17
                回复


                  IP属地:上海来自Android客户端9楼2023-01-29 14:26
                  回复
                    给大佬递茶


                    IP属地:江西来自iPhone客户端10楼2023-01-29 14:34
                    回复
                      好贴。插眼


                      IP属地:安徽来自iPhone客户端11楼2023-01-29 15:22
                      回复
                        虽然我什么也看不懂,甚至懒得看,但是还是顶你一下,顺便火钳刘明


                        IP属地:湖南来自Android客户端12楼2023-01-29 15:40
                        回复


                          IP属地:广东来自Android客户端13楼2023-01-29 19:20
                          回复
                            勘误
                            layoutMethod: PowerTree和OverworldSampleBehaviour: PoissonDisk
                            对于地形的生成机制远比我想的要复杂更多
                            存在startingBaseTemplate定义时
                            AtEdge和AtSurface这几个位置锚点生成的地形会绕开以AtStart为锚点 0~1环的地方
                            且那些地方的生态群系的大小不受控制


                            IP属地:浙江14楼2023-02-10 02:12
                            收起回复
                              生成器规则同上
                              (layoutMethod: PowerTree和OverworldSampleBehaviour: PoissonDisk均为空时
                              以AtDepths 0~10并最后AtStart 0~0)
                              但是 不存在startingBaseTemplate定义时
                              以AtStart为锚点的地形被无视了且所有的分布均为标准六边形
                              但是 跟上面一样 不同的生态群系边界的深渊晶时候生成错乱


                              IP属地:浙江15楼2023-02-10 02:17
                              回复