[
  {
    "name": "common",
    "glsls": [
      {
        "type": "vs",
        "name": "common_vertex"
      },
      {
        "type": "fs",
        "name": "common_fragment"
      }
    ],
    "variables": {
      "uniforms": [
        {
          "name": "u_vMatrix",
          "field": "vMatrix",
          "type": "mat4",
          "from": "camera"
        },
        {
          "name": "u_pMatrix",
          "field": "pMatrix",
          "type": "mat4",
          "from": "camera"
        }
      ]
    }
  },
  {
    "name": "modelMatrix_noInstance",
    "glsls": [
      {
        "type": "vs",
        "name": "modelMatrix_noInstance_vertex"
      }
    ],
    "variables": {
      "uniforms": [
        {
          "name": "u_mMatrix",
          "field": "mMatrix",
          "type": "mat4",
          "from": "model"
        }
      ]
    }
  },
  {
    "name": "modelMatrix_hardware_instance",
    "glsls": [
      {
        "type": "vs",
        "name": "modelMatrix_hardware_instance_vertex"
      }
    ],
    "variables": {
      "attributes": [
        {
          "name": "a_mVec4_0",
          "buffer": 5,
          "type": "vec4"
        },
        {
          "name": "a_mVec4_1",
          "buffer": 5,
          "type": "vec4"
        },
        {
          "name": "a_mVec4_2",
          "buffer": 5,
          "type": "vec4"
        },
        {
          "name": "a_mVec4_3",
          "buffer": 5,
          "type": "vec4"
        }
      ]
    }
  },
  {
    "name": "modelMatrix_batch_instance",
    "glsls": [
      {
        "type": "vs",
        "name": "modelMatrix_batch_instance_vertex"
      }
    ],
    "variables": {
      "uniforms": [
        {
          "name": "u_mMatrix",
          "field": "mMatrix",
          "type": "mat4",
          "from": "model"
        }
      ]
    }
  },
  {
    "name": "vertex",
    "variables": {
      "attributes": [
        {
          "name": "a_position",
          "buffer": 0,
          "type": "vec3"
        }
      ]
    }
  },
  {
    "name": "basic",
    "glsls": [
      {
        "type": "vs",
        "name": "webgl1_basic_vertex"
      }
    ]
  },
  {
    "name": "no_basic_map",
    "glsls": [
      {
        "type": "fs",
        "name": "webgl1_no_basic_map_fragment"
      }
    ],
    "variables": {
      "uniforms": [
        {
          "name": "u_color",
          "field": "color",
          "type": "float3",
          "from": "basicMaterial"
        },
        {
          "name": "u_alpha",
          "field": "alpha",
          "type": "float",
          "from": "basicMaterial"
        }
      ]
    }
  },
  {
    "name": "basic_end",
    "glsls": [
      {
        "type": "fs",
        "name": "webgl1_basic_end_fragment"
      }
    ]
  },
  {
    "name": "normalMatrix_noInstance",
    "glsls": [
      {
        "type": "vs",
        "name": "normalMatrix_noInstance_vertex"
      }
    ],
    "variables": {
      "uniforms": [
        {
          "name": "u_normalMatrix",
          "field": "normalMatrix",
          "type": "mat3",
          "from": "model"
        }
      ]
    }
  },
  {
    "name": "normalMatrix_hardware_instance",
    "glsls": [
      {
        "type": "vs",
        "name": "normalMatrix_hardware_instance_vertex"
      }
    ],
    "variables": {
      "attributes": [
        {
          "name": "a_normalVec3_0",
          "buffer": 4,
          "type": "vec3"
        },
        {
          "name": "a_normalVec3_1",
          "buffer": 4,
          "type": "vec3"
        },
        {
          "name": "a_normalVec3_2",
          "buffer": 4,
          "type": "vec3"
        }
      ]
    }
  },
  {
    "name": "normalMatrix_batch_instance",
    "glsls": [
      {
        "type": "vs",
        "name": "normalMatrix_batch_instance_vertex"
      }
    ],
    "variables": {
      "uniforms": [
        {
          "name": "u_normalMatrix",
          "field": "normalMatrix",
          "type": "mat3",
          "from": "model"
        }
      ]
    }
  },
  {
    "name": "normal",
    "variables": {
      "attributes": [
        {
          "name": "a_normal",
          "buffer": 1,
          "type": "vec3"
        }
      ]
    }
  },
  {
    "name": "light_common",
    "glsls": [
      {
        "type": "vs",
        "name": "webgl1_frontLight_common_vertex"
      },
      {
        "type": "fs",
        "name": "webgl1_frontLight_common_fragment"
      }
    ],
    "variables": {
      "uniforms": [
        {
          "name": "u_specular",
          "field": "specularColor",
          "type": "float3",
          "from": "lightMaterial"
        }
      ]
    }
  },
  {
    "name": "light_setWorldPosition",
    "glsls": [
      {
        "type": "vs",
        "name": "webgl1_frontLight_setWorldPosition_vertex"
      }
    ]
  },
  {
    "name": "common_light_map",
    "variables": {
      "attributes": [
        {
          "name": "a_texCoord",
          "buffer": 2,
          "type": "vec2"
        }
      ]
    }
  },
  {
    "name": "diffuse_map",
    "glsls": [
      {
        "type": "vs",
        "name": "webgl1_diffuse_map_vertex"
      },
      {
        "type": "fs",
        "name": "webgl1_diffuse_map_fragment"
      }
    ],
    "variables": {
      "uniforms": [
        {
          "name": "u_diffuse",
          "field": "diffuseColor",
          "type": "float3",
          "from": "lightMaterial"
        },
        {
          "name": "u_diffuseMapSampler",
          "field": "diffuseMap",
          "type": "sampler2D",
          "from": "lightMaterial"
        }
      ]
    }
  },
  {
    "name": "specular_map",
    "glsls": [
      {
        "type": "vs",
        "name": "webgl1_specular_map_vertex"
      },
      {
        "type": "fs",
        "name": "webgl1_specular_map_fragment"
      }
    ],
    "variables": {
      "uniforms": [
        {
          "name": "u_specularMapSampler",
          "field": "specularMap",
          "type": "sampler2D",
          "from": "lightMaterial"
        }
      ]
    }
  },
  {
    "name": "no_diffuse_map",
    "glsls": [
      {
        "type": "fs",
        "name": "webgl1_no_diffuse_map_fragment"
      }
    ],
    "variables": {
      "uniforms": [
        {
          "name": "u_diffuse",
          "field": "diffuseColor",
          "type": "float3",
          "from": "lightMaterial"
        }
      ]
    }
  },
  {
    "name": "no_specular_map",
    "glsls": [
      {
        "type": "fs",
        "name": "webgl1_no_specular_map_fragment"
      }
    ]
  },
  {
    "name": "no_light_map",
    "glsls": [
      {
        "type": "fs",
        "name": "webgl1_no_light_map_fragment"
      }
    ]
  },
  {
    "name": "no_emission_map",
    "glsls": [
      {
        "type": "fs",
        "name": "webgl1_no_emission_map_fragment"
      }
    ]
  },
  {
    "name": "no_normal_map",
    "glsls": [
      {
        "type": "vs",
        "name": "webgl1_no_normal_map_vertex"
      },
      {
        "type": "fs",
        "name": "webgl1_no_normal_map_fragment"
      }
    ]
  },
  {
    "name": "no_shadow_map",
    "glsls": [
      {
        "type": "fs",
        "name": "webgl1_no_shadow_map_fragment"
      }
    ]
  },
  {
    "name": "light",
    "glsls": [
      {
        "type": "vs",
        "name": "webgl1_frontLight_vertex"
      },
      {
        "type": "vs_function",
        "name": "defineLightCount"
      },
      {
        "type": "fs",
        "name": "webgl1_frontLight_fragment"
      },
      {
        "type": "fs_function",
        "name": "defineLightCount"
      }
    ],
    "variables": {
      "uniforms": [
        {
          "name": "u_shininess",
          "from": "lightMaterial",
          "field": "shininess",
          "type": "float"
        },
        {
          "name": "u_cameraPos",
          "from": "camera",
          "field": "position",
          "type": "vec3"
        }
      ]
    }
  },
  {
    "name": "ambient_light",
    "glsls": [
      {
        "type": "fs",
        "name": "webgl1_ambientLight_fragment"
      }
    ],
    "variables": {
      "uniforms": [
        {
          "name": "sendAmbientLight",
          "from": "ambientLight",
          "field": "send",
          "type": "function"
        }
      ]
    }
  },
  {
    "name": "direction_light",
    "variables": {
      "uniforms": [
        {
          "name": "sendDirectionLight",
          "from": "directionLight",
          "field": "send",
          "type": "function"
        }
      ]
    }
  },
  {
    "name": "point_light",
    "variables": {
      "uniforms": [
        {
          "name": "sendPointLight",
          "from": "pointLight",
          "field": "send",
          "type": "function"
        }
      ]
    }
  },
  {
    "name": "light_end",
    "glsls": [
      {
        "type": "fs",
        "name": "webgl1_frontLight_end_fragment"
      }
    ]
  },
  {
    "name": "rotation_gizmo_circle_for_editor",
    "glsls": [
      {
        "type": "vs",
        "name": "webgl1_rotation_gizmo_circle_for_editor_vertex"
      },
      {
        "type": "fs",
        "name": "webgl1_rotation_gizmo_circle_for_editor_fragment"
      }
    ],
    "variables": {
      "uniforms": [
        {
          "name": "u_color",
          "from": "no_material_shader",
          "field": "rotationGizmoForEditor",
          "type": "float3"
        },
        {
          "name": "u_alpha",
          "from": "no_material_shader",
          "field": "rotationGizmoForEditor",
          "type": "float"
        },
        {
          "name": "u_cameraPosInLocalCoordSystem",
          "from": "no_material_shader",
          "field": "rotationGizmoForEditor",
          "type": "float3"
        }
      ]
    }
  },
  {
    "name": "outline_expand",
    "glsls": [
      {
        "type": "vs",
        "name": "webgl1_outline_expand_vertex"
      },
      {
        "type": "fs",
        "name": "webgl1_outline_expand_fragment"
      }
    ],
    "variables": {
      "uniforms": [
        {
          "name": "u_outlineColor",
          "from": "no_material_shader",
          "field": "outlineExpand",
          "type": "float3"
        }
      ]
    }
  },
  {
    "name": "outline_scaled_modelMatrix",
    "glsls": [
      {
        "type": "vs",
        "name": "modelMatrix_noInstance_vertex"
      }
    ],
    "variables": {
      "uniforms": [
        {
          "name": "u_mMatrix",
          "field": "mMatrix",
          "type": "mat4",
          "from": "expand_model"
        }
      ]
    }
  },
  {
    "name": "outline_origin",
    "glsls": [
      {
        "type": "vs",
        "name": "webgl1_outline_origin_vertex"
      },
      {
        "type": "fs",
        "name": "webgl1_outline_origin_fragment"
      }
    ]
  },
  {
    "name": "skybox",
    "glsls": [
      {
        "type": "vs",
        "name": "webgl1_skybox_vertex"
      },
      {
        "type": "fs",
        "name": "webgl1_skybox_fragment"
      }
    ],
    "variables": {
      "uniforms": [
        {
          "name": "u_skyboxCubeMapSampler",
          "from": "no_material_shader",
          "field": "skyboxCubeMap",
          "type": "samplerCube"
        },
        {
          "name": "u_skyboxVMatrix",
          "from": "no_material_shader",
          "field": "skyboxVMatrix",
          "type": "mat4"
        }
      ]
    }
  },
  {
    "name": "end",
    "variables": {
      "attributes": [
        {
          "buffer": 3
        }
      ]
    }
  }
]