{
  "models": [
    {
      "url": "https://bitbybit.dev/files/site/learn/composer/composer.tutorial/catamaran-20m.ae949303.glb",
      "id": "boat",
      "name": "catamaran-20m",
      "gltfStructure": {
        "nodes": [
          {
            "name": "unit scale",
            "type": "transform",
            "children": [
              {
                "name": "Catamaran",
                "type": "transform",
                "children": [
                  {
                    "name": "Options",
                    "type": "transform",
                    "children": [
                      {
                        "name": "Option - Lower helm, classic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "classic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Upper helm, classic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "classic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Lower helm, ergonomic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "ergonomic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Upper helm, ergonomic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "ergonomic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Lower helm, sport",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "sport"
                          }
                        ]
                      },
                      {
                        "name": "Option - Upper helm, sport",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "helm_style",
                            "value": "sport"
                          }
                        ]
                      },
                      {
                        "name": "Option - Foredeck sun beds",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__foredeck",
                            "value": true
                          }
                        ]
                      },
                      {
                        "name": "Option - Flybridge sun bed",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__flybridge",
                            "value": true
                          }
                        ]
                      },
                      {
                        "name": "Option - Beach club, starboard",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__beach_starboard",
                            "value": true
                          }
                        ]
                      },
                      {
                        "name": "Option - Beach club, port",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__beach_port",
                            "value": true
                          }
                        ]
                      },
                      {
                        "name": "Option - Tender",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__tender",
                            "value": true
                          }
                        ]
                      },
                      {
                        "name": "Option - Tender helm, classic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__tender",
                            "value": true
                          },
                          {
                            "name": "helm_style",
                            "value": "classic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Tender helm, ergonomic",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__tender",
                            "value": true
                          },
                          {
                            "name": "helm_style",
                            "value": "ergonomic"
                          }
                        ]
                      },
                      {
                        "name": "Option - Tender helm, sport",
                        "type": "transform",
                        "variantMatch": [
                          {
                            "name": "aboard__tender",
                            "value": true
                          },
                          {
                            "name": "helm_style",
                            "value": "sport"
                          }
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ],
        "variantStrategy": "hierarchical",
        "materialVariants": [
          {
            "name": "Deck: Natural teak",
            "variantMatch": [
              {
                "name": "deck",
                "value": "natural_teak"
              }
            ]
          },
          {
            "name": "Deck: Silver teak",
            "variantMatch": [
              {
                "name": "deck",
                "value": "silver_teak"
              }
            ]
          },
          {
            "name": "Deck: Synthetic teak",
            "variantMatch": [
              {
                "name": "deck",
                "value": "synthetic_teak"
              }
            ]
          },
          {
            "name": "Deck: Pearl non-slip",
            "variantMatch": [
              {
                "name": "deck",
                "value": "pearl_non_slip"
              }
            ]
          }
        ],
        "materials": [
          {
            "name": "Hull paint",
            "colorVariants": [
              {
                "name": "Noir",
                "color": "#121316",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "noir"
                  }
                ]
              },
              {
                "name": "Midnight",
                "color": "#1A2C4E",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "midnight"
                  }
                ]
              },
              {
                "name": "Regatta",
                "color": "#F3F3F0",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "regatta"
                  }
                ]
              }
            ]
          },
          {
            "name": "Hull stripe",
            "colorVariants": [
              {
                "name": "Noir",
                "color": "#2A2D31",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "noir"
                  }
                ]
              },
              {
                "name": "Midnight",
                "color": "#101B30",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "midnight"
                  }
                ]
              },
              {
                "name": "Regatta",
                "color": "#1D2B3D",
                "variantMatch": [
                  {
                    "name": "collection",
                    "value": "regatta"
                  }
                ]
              }
            ]
          }
        ]
      }
    }
  ],
  "advancedBackground": {
    "type": "solidColor",
    "color": "#dcdcdc"
  },
  "arcRotateCamera": {
    "position": [
      -39.3,
      3.6,
      23.3
    ],
    "target": [
      -9.7,
      3.4,
      -1.3
    ],
    "angularSensibilityX": 700,
    "angularSensibilityY": 700,
    "lowerRadiusLimit": 0.27336,
    "upperRadiusLimit": 61.507,
    "lowerBetaLimit": 1,
    "upperBetaLimit": 179,
    "panningSensibility": 1267.2,
    "wheelPrecision": 0.95041,
    "maxZ": 2733.6,
    "minZ": 0.027336,
    "pinchDeltaPercentage": 0,
    "pinchPrecision": 12,
    "useNaturalPinchZoom": false,
    "fov": 45.84,
    "inertia": 0.85
  },
  "skybox": {
    "type": "sunset",
    "size": 1000,
    "rotation": 180
  },
  "environment": {
    "preset": "goldenHour",
    "brightness": 0.65,
    "ground": "water"
  },
  "directionalLights": [
    {
      "direction": [
        -14.995,
        -29.99,
        -22.493
      ],
      "intensity": 1,
      "diffuse": "#ffffff",
      "specular": "#ffffff",
      "shadowGeneratorMapSize": 2048,
      "enableShadows": true,
      "shadowRefreshRate": 1,
      "shadowDarkness": 0,
      "shadowUsePercentageCloserFiltering": true,
      "shadowContactHardeningLightSizeUVRatio": 0.2,
      "shadowBias": 0.0005,
      "shadowNormalBias": 0.010935,
      "shadowMaxZ": 82.009,
      "shadowMinZ": 20.502,
      "transparencyShadow": false
    },
    {
      "direction": [
        22.732,
        -22.732,
        34.098
      ],
      "intensity": 0.6,
      "diffuse": "#d4e0f0",
      "specular": "#a0b0c0",
      "shadowGeneratorMapSize": 1024,
      "enableShadows": false,
      "shadowRefreshRate": 4,
      "shadowDarkness": 0,
      "shadowUsePercentageCloserFiltering": true,
      "shadowContactHardeningLightSizeUVRatio": 0.2,
      "shadowBias": 0.0001,
      "shadowNormalBias": 0.002,
      "shadowMaxZ": 1000,
      "shadowMinZ": 0,
      "transparencyShadow": false
    }
  ],
  "gui": {
    "controls": [
      {
        "key": "aboard",
        "label": "On deck",
        "type": "checkbox",
        "options": [
          {
            "label": "Foredeck sun beds",
            "value": "foredeck",
            "isDefault": true
          },
          {
            "label": "Flybridge sun bed",
            "value": "flybridge",
            "isDefault": true
          },
          {
            "label": "Starboard beach club",
            "value": "beach_starboard",
            "isDefault": true
          },
          {
            "label": "Port beach club",
            "value": "beach_port"
          },
          {
            "label": "Tender",
            "value": "tender",
            "isDefault": true
          }
        ],
        "renderMode": "rendered",
        "orderProperty": {
          "include": true
        }
      },
      {
        "key": "helm_style",
        "label": "Helm",
        "type": "radio",
        "options": [
          {
            "label": "Classic",
            "value": "classic"
          },
          {
            "label": "Ergonomic",
            "value": "ergonomic"
          },
          {
            "label": "Sport",
            "value": "sport",
            "isDefault": true
          }
        ],
        "renderMode": "rendered",
        "orderProperty": {
          "include": true
        }
      },
      {
        "key": "collection",
        "label": "Collection",
        "type": "radio",
        "options": [
          {
            "label": "Regatta",
            "value": "regatta",
            "isDefault": true
          },
          {
            "label": "Midnight",
            "value": "midnight"
          },
          {
            "label": "Noir",
            "value": "noir"
          }
        ],
        "renderMode": "rendered",
        "orderProperty": {
          "include": true
        }
      },
      {
        "key": "deck",
        "label": "Planks",
        "type": "radio",
        "options": [
          {
            "label": "Natural teak",
            "value": "natural_teak",
            "isDefault": true
          },
          {
            "label": "Silver teak",
            "value": "silver_teak"
          },
          {
            "label": "Synthetic teak",
            "value": "synthetic_teak"
          },
          {
            "label": "Pearl non-slip",
            "value": "pearl_non_slip"
          }
        ],
        "renderMode": "rendered",
        "orderProperty": {
          "include": true
        }
      }
    ]
  },
  "logic": {
    "rules": [
      {
        "id": "rule_1",
        "trigger": "while-matching",
        "effects": [
          {
            "type": "setOptionState",
            "controlKey": "aboard",
            "optionValue": "beach_port",
            "enabled": false,
            "hint": "The tender stows here"
          }
        ],
        "name": "The tender takes the port side",
        "when": {
          "logicalOperator": "AND",
          "conditions": [
            {
              "name": "aboard__tender",
              "operator": "==",
              "value": true
            }
          ]
        }
      }
    ]
  }
}
