├── .babelrc ├── .gitignore ├── .npmignore ├── LICENSE.md ├── README.md ├── demo ├── House.jsm ├── app.js ├── diffuse.jpg ├── index.js └── load.js ├── exporter ├── plug-ins │ └── SimpleJSON.py └── scripts │ └── SimpleJSONScript.mel ├── index.html └── package.json /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | presets: [ "es2015" ] 3 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | bower_components 2 | node_modules 3 | *.log 4 | .DS_Store 5 | bundle.js 6 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | bower_components 2 | node_modules 3 | *.log 4 | .DS_Store 5 | bundle.js 6 | test 7 | test.js 8 | demo/ 9 | .npmignore 10 | LICENSE.md 11 | exporter/ -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2016 Jam3 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 18 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 19 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 20 | OR OTHER DEALINGS IN THE SOFTWARE. 21 | 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # maya-json-export 2 | 3 | [![experimental](http://badges.github.io/stability-badges/dist/experimental.svg)](http://github.com/badges/stability-badges) 4 | 5 | [](http://jam3.github.io/maya-json-export/index.html) 6 | 7 | > [(demo)](http://jam3.github.io/maya-json-export/index.html) 8 | 9 | A generic Maya to JSON exporter for triangulated meshes, specifically built for ThreeJS BufferGeometry. Designed for ThreeJS r74 and Maya 2016. 10 | 11 | This is modified from [Sean Griffin's exporter](https://github.com/mrdoob/three.js/tree/master/utils/exporters/maya), but designed for static scenes with a lot of instancing (like a forest or city scape). 12 | 13 | This assumes you will be unrolling your vertex data into un-indexed VBO. This was chosen because Maya, unlike WebGL, indexes UVs/Normals/Colors independently of position. See [here](https://github.com/mrdoob/three.js/issues/6926) for discussion. 14 | 15 | Motivation: 16 | 17 | - Specifically designed for `BufferGeometry` and `InstancedBufferGeometry` 18 | - Can optimize complex scenes with a lot of repeating elements (e.g. trees) 19 | - Full control over parsing, vertex data, and materials 20 | 21 | Exports: 22 | 23 | - Vertex positions and their indices 24 | - Vertex normals and their indices 25 | - Vertex UVs and their indices 26 | - Material "Groups" for BufferGeometry 27 | - Includes a crude de-duplication for generating instanced geometry 28 | - Material data 29 | 30 | > ###### :seedling: This plugin is experimental and subject to change. 31 | 32 | ## Demo 33 | 34 | See the [demo](http://jam3.github.io/maya-json-export/index.html) which was exported with this plugin, and loaded directly into a `BufferGeometry`. 35 | 36 | ## Export Format 37 | 38 | The format roughly looks like this: 39 | 40 | ```js 41 | { 42 | "metadata": { 43 | "exporter": "maya-json-export", 44 | "version": 0.0 45 | }, 46 | "instances": [ 47 | { 48 | "position": [0.0, 0.0, 0.0], 49 | "quaternion": [0.0, 0.0, 0.0, 1.0], 50 | "scale": [1.0, 1.0, 1.0], 51 | "id": "Tree", 52 | "name": "Tree_01" 53 | }, 54 | { 55 | "position": [5.0, 2.0, 3.0], 56 | "quaternion": [0.0, 0.0, 0.0, 1.0], 57 | "scale": [1.0, 1.0, 1.0], 58 | "id": "Tree", 59 | "name": "Tree_02" 60 | }, 61 | ... 62 | ], 63 | "geometries": { 64 | "Tree": { 65 | "normal": [0, 0.5, 0, ...], 66 | "normalIndices": [ 0, 1, 2, ... ] 67 | "uv": [0, 0.33, ...], 68 | "uvIndices": [0, 1, 2, ...],, 69 | "position": [ 0, 5, 2, ... ], 70 | "positionIndices": [ 0, 1, 2, ... ], 71 | "groups": [ 72 | { "start": 0, "count": 500, "materialIndex": 0 } 73 | ] 74 | } 75 | }, 76 | "materials": [ 77 | // like ThreeJS exporter 78 | ] 79 | } 80 | ``` 81 | 82 | ## Importers 83 | 84 | See [demo/load.js](./demo/load.js) for an example of an importer with ThreeJS. When this plugin becomes more stable, the ThreeJS importer will be published to npm. 85 | 86 | ## Dedupe & Instancing 87 | 88 | When the `Dedupe` option is enabled, the script will try to separate "geometries" from "instances" in the selected meshes. It does this by simply looking for the last underscore in the mesh name, and creating a dictionary of geometries by the first part of that. 89 | 90 | For example, a city scene might have hundreds of skyscrapers repeated like so: 91 | 92 | - `Building_Tall_Shape01` 93 | - `Building_Tall_Shape02` 94 | - `Building_Tall_Shape03` 95 | - `Building_Short_Shape01` 96 | - `Building_Short_Shape02` 97 | 98 | With the regular ThreeJS exporter, you would end up with a lot of repeated triangles. Instead, with this exporter, you can deduplicate and end up with only two `geometries`, `Building_Tall` and `Building_Short`. The exporter provides 5 `instances`, each with their own attributes: 99 | 100 | - `id` String (e.g. `'Building_Tall'`) 101 | - `name` String (e.g. `'Building_Tall_Shape01'`) 102 | - `position` [ x, y, z ] 103 | - `scale` [ x, y, z ] 104 | - `quaternion` [ x, y, z, w ] 105 | 106 | Now, your scene will be much better optimized to make use of ThreeJS `Geometry` and `Mesh` classes. Or, you could use `InstancedBufferGeometry` to take advantage of hardware instancing. 107 | 108 | ## Install 109 | 110 | Only tested on Maya 2016. You need PyMel (included with 2015+). 111 | 112 | Copy the [exporter/](./exporter) files to your Maya `scripts` and `plug-ins` folder. 113 | 114 | Example paths: 115 | 116 | - Windows: `C:\Users\username\Documents\maya\VERSION\` 117 | - OSX: `~/Library/Preferences/Autodesk/maya/VERSION/` 118 | - Linux: `/usr/autodesk/userconfig/maya/VERSION/` 119 | 120 | After that, you need to activate the plugin. In Maya, open `Windows > Settings/Preferences > Plug-in Manager` and enable the checkboxes next to `SimpleJSON.py`. 121 | 122 | ## Gotchas 123 | 124 | - Make sure your meshes are triangulated with `Mesh > Triangulate` 125 | - You can Export All or Export Selected, but the latter is preferred 126 | 127 | ## License 128 | 129 | MIT, see [LICENSE.md](http://github.com/Jam3/maya-json-export/blob/master/LICENSE.md) for details. 130 | -------------------------------------------------------------------------------- /demo/House.jsm: -------------------------------------------------------------------------------- 1 | {"instances":[{"position":[0.30361234,0.0,0.0],"quaternion":[0.0,0.0,0.0,1.0],"scale":[1.0,1.0,1.0],"id":"polySurface74","name":"polySurface74_Shape1"},{"position":[-24.60050064,0.0,0.0],"quaternion":[0.0,0.0,0.0,1.0],"scale":[1.0,1.0,1.0],"id":"polySurface74","name":"polySurface74_Shape2"},{"position":[-49.3888683,0.0,0.0],"quaternion":[0.0,0.0,0.0,1.0],"scale":[1.0,1.0,1.0],"id":"polySurface74","name":"polySurface74_Shape3"},{"position":[-74.00589838,0.0,0.0],"quaternion":[0.0,0.0,0.0,1.0],"scale":[1.0,1.0,1.0],"id":"polySurface74","name":"polySurface74_Shape4"}],"materials":[{"opacity":1.0,"colorDiffuse":[0.4000000059604645,0.4000000059604645,0.4000000059604645],"depthWrite":true,"blending":"NormalBlending","shading":"Lambert","DbgName":"lambert1","transparent":false,"depthTest":true,"vertexColors":false},{"opacity":1.0,"mapDiffuseRepeat":[1,1],"mapNormalFactor":1,"depthTest":true,"colorDiffuse":[0.5,0.5,0.5],"vertexColors":false,"blending":"NormalBlending","mapDiffuseAnisotropy":4,"shading":"Lambert","transparent":false,"depthWrite":true,"mapNormalRepeat":[1,1],"mapNormalWrap":["repeat","repeat"],"DbgName":"lambert13","mapNormalAnisotropy":4,"mapNormal":"demo/bump.jpg","mapDiffuseWrap":["repeat","repeat"],"mapDiffuse":"demo/diffuse.jpg"}],"geometries":{"polySurface74":{"uvIndices":[0,1,3,3,1,2,5,6,4,6,7,4,4,7,11,9,10,8,10,11,8,7,8,11,13,14,12,14,15,12,12,15,19,17,18,16,18,19,16,15,16,19,20,21,23,23,21,22,28,29,27,25,26,24,24,26,29,26,27,29,30,31,33,33,31,32,34,35,37,37,35,36,39,40,38,38,40,42,40,41,42,44,45,43,43,45,46,7,6,48,48,6,47,49,50,52,52,50,51,55,56,54,57,58,56,58,53,56,53,54,56,9,8,60,60,8,59,62,63,61,39,38,64,61,63,38,63,64,38,62,61,67,61,65,67,65,66,67,69,70,68,68,70,71,72,73,76,73,74,76,74,75,76,77,78,84,84,78,83,78,79,83,83,79,82,80,81,79,79,81,82,85,86,88,88,86,87,89,90,94,94,90,93,93,90,92,90,91,92,95,96,98,98,96,97,99,100,104,100,101,104,101,102,104,102,103,104,105,106,108,108,106,107,109,110,113,110,111,113,111,112,113,115,116,114,114,116,117,119,120,118,118,120,121,122,123,125,125,123,124,126,127,129,129,127,128,102,101,131,131,101,130,132,133,135,135,133,134,83,82,137,137,82,136,138,139,141,141,139,140,142,143,145,145,143,144,146,147,149,149,147,148,150,151,154,152,153,151,151,153,154,152,155,153,153,155,156,157,158,161,159,160,158,158,160,161,163,164,162,166,162,165,162,164,165,168,169,167,171,167,170,167,169,170,170,172,171,171,172,173,165,174,166,166,174,175,176,177,161,161,177,157,178,179,181,181,179,180,180,179,183,183,179,182,184,185,187,187,185,186,185,188,186,186,188,189,188,190,189,189,190,191,192,193,195,195,193,194,193,196,194,194,196,197,198,199,201,201,199,200,199,202,200,200,202,203,204,205,207,207,205,206,209,210,208,210,211,208,211,212,208,208,212,215,215,212,214,212,213,214,223,216,222,222,216,221,221,216,220,216,217,220,217,218,220,218,219,220,224,225,227,227,225,226,228,229,231,231,229,230,232,233,235,235,233,234,236,237,239,239,237,238,240,241,243,243,241,242,245,246,244,244,246,247,248,249,251,251,249,250,249,252,250,250,252,253,252,254,253,253,254,255,256,257,259,259,257,258,257,260,258,258,260,261,262,263,265,265,263,264,263,266,264,264,266,267,268,269,271,271,269,270,273,274,272,274,275,272,275,276,272,272,276,279,279,276,278,276,277,278,287,280,286,286,280,285,285,280,284,280,281,284,281,282,284,282,283,284,289,290,288,288,290,291,292,293,295,295,293,294,297,298,296,300,296,299,296,298,299,301,302,304,304,302,303,305,306,308,308,306,307,309,310,312,312,310,311,313,314,316,316,314,315,319,320,318,320,321,318,317,318,321,322,323,327,327,323,326,326,323,325,323,324,325,329,330,328,331,332,330,328,330,332,334,335,333,333,335,338,338,335,337,335,336,337,339,340,342,342,340,341,344,345,343,347,343,346,343,345,346,348,349,353,353,349,352,352,349,351,349,350,351,354,355,358,357,358,356,355,356,358,359,360,363,360,361,363,361,362,363,364,365,367,367,365,366,368,369,371,371,369,370,372,373,375,375,373,374,376,377,379,379,377,378,381,382,380,380,382,385,385,382,384,382,383,384,387,388,386,386,388,389,390,391,393,393,391,392,394,395,397,397,395,396,398,399,401,401,399,400,402,403,405,405,403,404,406,407,409,409,407,408,410,411,413,413,411,412,414,415,417,417,415,416,418,419,425,425,419,424,424,419,423,423,419,422,422,419,421,419,420,421,426,427,434,432,433,431,431,433,430,430,433,429,429,433,428,428,433,427,427,433,434,435,436,438,438,436,437,439,440,442,442,440,441,443,444,446,446,444,445,447,448,450,450,448,449,451,452,454,454,452,453,455,456,458,458,456,457,459,460,462,462,460,461,463,464,466,466,464,465,467,468,470,470,468,469,471,472,474,474,472,473,475,476,478,478,476,477,479,480,482,482,480,481,483,484,490,490,484,489,489,484,488,488,484,487,487,484,486,484,485,486,496,497,495,498,499,497,497,499,495,495,499,494,494,499,493,493,499,492,491,492,499,501,502,500,500,502,503,504,505,507,507,505,506,509,510,508,508,510,511,512,513,515,515,513,514,516,517,519,519,517,518,520,521,523,523,521,522,524,525,527,527,525,526,528,529,531,531,529,530,532,533,535,535,533,534,536,537,539,539,537,538,540,541,543,543,541,542,544,545,547,547,545,546,549,550,548,548,550,551],"normal":[2.02e-06,-8.7e-07,-0.99999994,1.01e-06,-3.7e-07,-0.99999994,1.01e-06,-3.7e-07,-0.99999994,0.0,1.3e-07,-0.99999994,0.0,-0.27563965,0.96126103,0.0,-0.60709059,0.79463255,0.0,-0.27564147,0.96126044,0.0,-0.44314146,0.89645171,0.0,-0.27564186,0.96126026,0.0,-0.60708588,0.79463613,0.0,-0.2756424,0.9612602,0.0,-0.54320884,0.83959758,0.0,0.96126139,0.27563819,0.0,0.96126169,0.27563718,0.0,0.96126163,0.27563739,0.0,0.96126169,0.275637,0.0,0.96126151,0.27563769,0.0,0.96126169,0.27563691,0.0,0.96126157,0.2756376,0.0,0.96126163,0.27563742,0.0,-0.99308532,0.1173939,0.0,-0.99308527,0.11739416,0.0,-0.99308527,0.11739416,0.0,-0.99308532,0.11739442,-0.99999994,1.4e-07,6e-08,-0.99999994,-1.6e-07,2e-08,-0.99999994,7e-08,3e-08,-0.99999994,8.3e-07,0.0,-0.99999994,7e-08,0.0,-0.99999994,1e-07,0.0,0.0,-0.96126151,-0.27563781,0.0,-0.96126163,-0.27563739,0.0,-0.96126163,-0.27563739,0.0,-0.96126175,-0.275637,0.0,-0.9930855,0.11739281,0.0,-0.99308544,0.11739364,0.0,-0.99308544,0.11739364,0.0,-0.99308532,0.11739445,0.0,0.27564228,-0.9612602,0.0,0.07348019,-0.99729657,0.0,0.12491988,-0.99216676,0.0,-0.02875971,-0.99958628,0.0,-0.02875978,-0.99958628,0.99999994,0.0,0.0,0.99999994,-5e-08,0.0,0.99999994,-5e-08,0.0,0.99999994,-1e-07,0.0,0.0,-0.85498959,0.51864481,0.0,-0.85499138,0.51864189,-0.99999994,6.09e-06,1.33e-06,-0.99999994,3.05e-06,3.4e-07,-0.99999994,3.05e-06,3.4e-07,-0.99999994,0.0,-6.5e-07,0.99999994,-1.62e-06,6.5e-07,0.99999994,-2.54e-06,-1.7e-07,0.99999994,-3.52e-06,-3.4e-07,0.99999994,-3.13e-06,0.0,0.99999994,-1.56e-06,0.0,0.99999994,-2.71e-06,-6.6e-07,0.0,-0.85498333,0.5186553,0.0,-0.8549844,0.51865363,0.0,0.27564538,-0.96125925,0.0,0.27564344,-0.96125984,0.0,0.27564329,-0.96125996,0.0,0.27564248,-0.96126008,0.0,0.27564248,-0.96126008,0.0,0.27564314,-0.96125996,0.0,0.27564144,-0.9612605,0.0,0.12492177,-0.99216652,0.0,0.07348307,-0.99729645,0.0,-0.02875501,-0.99958652,0.0,-0.028755,-0.99958652,-5e-07,2.2e-07,0.99999994,-1e-06,3.2e-07,0.99999994,-1e-06,3.2e-07,0.99999994,-1.5e-06,4.3e-07,0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,-2e-08,0.99999994,0.0,-1e-08,0.99999994,0.0,-2e-08,0.99999994,0.0,-0.0,0.99999994,-0.0,0.0,0.99999994,-1e-08,0.0,0.99999994,-1e-08,0.0,0.99999994,0.0,0.0,0.99999994,-0.0,0.99999994,0.0,0.0,0.99999994,0.0,0.0,0.99999994,0.0,0.0,0.99999994,0.0,0.0,0.0,-0.99999994,3e-08,0.0,-0.99999994,3e-08,0.0,-0.99999994,3e-08,0.0,-0.99999994,3e-08,0.0,-0.99999994,3e-08,0.0,-1.0,3e-08,-0.70710671,0.0,0.70710671,-0.70710671,0.0,0.70710671,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,-0.0,0.0,-0.99999994,-0.0,0.0,-0.99999994,-0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,-0.0,0.0,0.99999994,-0.0,0.0,0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999988,0.0,0.0,-1.0,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.99999994,0.0,0.0,0.99999994,0.0,0.0,0.99999994,0.0,0.0,0.99999994,0.0,0.9999997,0.00072339,0.0,0.9999997,0.00072317,0.0,0.9999997,0.00072317,0.0,0.9999997,0.00072295,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,-0.99997944,0.00639288,0.0,-0.99997944,0.00639332,0.0,-0.99997944,0.00639332,0.0,-0.99997944,0.00639377,0.0,0.0,0.99999994,0.0,0.0,0.99999994,0.0,0.9999997,0.00072286,0.0,0.9999997,0.00072308,0.0,0.9999997,0.00072308,0.0,0.9999997,0.0007233,0.0,0.0,-1.0,0.0,0.0,-1.0,0.0,0.0,-1.0,0.0,0.0,-0.99999994,0.0,-0.9999795,0.00639369,0.0,-0.9999795,0.00639369,0.0,-0.9999795,0.00639369,0.0,-0.9999795,0.00639369,0.0,-0.66761529,0.7445063,0.0,-0.66458446,0.74721307,-2.068e-05,-0.66537195,0.74651206,-3.102e-05,-0.6630075,0.74861264,0.0,-0.66306496,0.74856174,-3.102e-05,-0.55394536,-0.83255297,0.0,-0.55269736,-0.83338195,1.661e-05,-0.55269736,-0.83338195,1.661e-05,-0.55144817,-0.83420908,3.321e-05,0.65720534,0.75371152,0.0,0.6606034,0.75073498,4.797e-05,0.65707499,0.75382513,7.195e-05,0.66761661,0.74450517,0.0,0.66229743,0.74924099,7.195e-05,-2.04e-06,0.0,-0.99999994,-4.2e-07,0.0,-0.99999994,-2.8e-07,0.0,-0.99999994,0.0,0.0,-0.99999994,6e-07,0.0,-0.99999994,0.0,0.0,0.99999994,4.6e-07,0.0,0.99999994,3.1e-07,0.0,0.99999994,0.0,0.0,0.99999994,4.6e-07,0.0,0.99999994,-2.93e-06,0.0,0.99999994,-1.46e-06,0.0,0.99999994,-1.46e-06,0.0,0.99999994,0.0,0.0,0.99999994,1.6e-07,0.0,-1.0,8e-08,0.0,-0.99999994,8e-08,0.0,-0.99999994,0.0,0.0,-0.99999994,0.62171501,-0.7832436,-1.54e-06,0.62166464,-0.78328347,-7.7e-07,0.62166464,-0.78328347,-7.7e-07,0.62161434,-0.78332341,0.0,-0.65926081,-0.75191426,-1.827e-05,-0.65956795,-0.75164485,-0.00018372,-0.65956795,-0.75164485,-0.00018372,-0.65987486,-0.75137532,-0.00034917,0.66493088,-0.74690467,-0.00037738,0.66457397,-0.74722236,-0.00018544,0.66457397,-0.74722236,-0.00018544,0.66421688,-0.74753988,6.51e-06,-0.97936845,0.0,0.20208281,-0.59461689,0.0,0.80400908,-0.89154756,0.0,0.45292714,-0.39967829,0.0,0.91665536,0.04117809,0.0,0.99915177,0.28944439,0.0,0.95719481,0.73242235,0.0,0.68085057,0.90930855,0.0,0.41612259,0.99639243,0.0,-0.08486445,0.94902211,0.0,-0.31520951,0.67705852,0.0,-0.73592907,0.42080849,0.0,-0.90714943,-0.08155185,0.0,-0.99666899,-0.32285669,0.0,-0.94644791,-0.76495349,0.0,-0.64408535,-0.93771219,0.0,-0.34741303,0.0,-0.99999994,-1.3e-07,0.0,-0.99999994,3e-08,0.0,-0.99999994,2e-08,0.0,-0.99999994,1e-07,0.0,-0.99999994,-1.1e-07,0.0,-0.99999994,0.0,0.0,-0.99999994,-2.3e-07,0.0,-0.99999994,-4.6e-07,2.68e-06,0.99999994,-5.56e-06,1.7e-07,0.99999994,-2.45e-06,3.4e-07,0.99999994,-4.32e-06,-1e-06,0.99999994,-2.12e-06,-2.7e-07,0.99999994,3.24e-06,9.4e-07,0.99999994,7.05e-06,-5.3e-07,0.99999994,7.05e-06,-2.95e-06,0.99999994,0.0,0.0,-0.1247122,-0.99219298,0.0,-0.1247122,-0.99219298,0.0,-0.1247122,-0.99219298,0.0,-0.1247122,-0.99219298,0.0,0.98939449,-0.14525305,0.0,0.98939449,-0.14525299,0.0,0.98939449,-0.14525299,0.0,0.98939449,-0.14525294,0.0,0.12471168,0.99219286,0.0,0.12471194,0.99219292,0.0,0.12471194,0.99219292,0.0,0.1247122,0.99219298,0.0,-0.98939455,0.14525284,0.0,-0.98939449,0.14525296,0.0,-0.98939449,0.14525296,0.0,-0.98939449,0.14525311,-0.99999988,-4.125e-05,-0.00031676,-0.99999988,-3.94e-05,-0.00031676,-0.99999988,-3.94e-05,-0.00031676,-0.99999988,-3.754e-05,-0.00031676,0.99999988,4.13e-05,0.00031686,0.99999988,4.075e-05,0.00031686,0.99999988,4.075e-05,0.00031686,0.99999988,4.02e-05,0.00031686,-0.97936851,0.0,0.2020825,-0.59461623,0.0,0.80400956,-0.89154732,0.0,0.45292747,-0.39967963,0.0,0.91665483,0.04117827,0.0,0.99915177,0.28944463,0.0,0.95719475,0.73242348,0.0,0.68084937,0.90930802,0.0,0.4161236,0.99639249,0.0,-0.08486489,0.94902211,0.0,-0.31520921,0.67705846,0.0,-0.73592913,0.42080966,0.0,-0.90714902,-0.08155193,0.0,-0.99666911,-0.32285705,0.0,-0.94644779,-0.76495367,0.0,-0.64408523,-0.93771201,0.0,-0.34741354,0.0,-0.99999994,-7e-08,0.0,-0.99999994,6e-08,0.0,-0.99999994,-5e-08,0.0,-0.99999994,1e-07,0.0,-0.99999994,-2e-08,0.0,-0.99999994,-4e-08,0.0,-0.99999994,1.1e-07,0.0,-0.99999994,0.0,2.56e-06,0.99999994,5.56e-06,-2.3e-07,0.99999994,1.68e-06,1.09e-06,0.99999994,2.78e-06,-9.9e-07,0.99999994,5.8e-07,3.7e-07,0.99999994,2.11e-06,-2.91e-06,0.99999994,0.0,2.3e-06,0.99999994,3.64e-06,8.91e-06,0.99999994,7.29e-06,2.7e-07,-2.9e-07,-0.99999994,-5.2e-07,-1.4e-07,-0.99999994,-5.2e-07,-1.4e-07,-0.99999994,-1.31e-06,1e-08,-0.99999994,3.5e-07,0.0,-0.99999994,1.8e-07,0.0,-0.99999994,1.8e-07,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,-3.4e-07,0.0,-0.99999994,-1.01e-06,0.0,-0.99999994,-5.1e-07,0.0,-0.99999994,0.99999106,0.00419864,0.0,0.99999112,0.00419864,0.0,0.99999112,0.00419864,0.0,0.99999112,0.00419865,0.0,0.0,0.99999994,0.0,0.0,0.99999994,0.0,0.0,0.99999994,0.0,0.0,0.99999994,0.0,-0.99999994,-3.53e-06,0.0,-0.99999994,-3.53e-06,0.0,-0.99999994,-3.53e-06,0.0,-1.0,-3.53e-06,0.0,0.00059249,-0.99999976,0.0,0.00059249,-0.99999976,0.0,0.00059249,-0.99999976,0.0,0.00059249,-0.99999976,0.0,0.0,0.0,-0.99999994,3.1e-07,0.0,-0.99999994,2.7e-07,0.0,-0.99999994,4e-07,0.0,-0.99999994,1.7e-07,0.0,-0.99999994,0.0,0.0,-1.0,1e-08,0.0,-0.99999994,1e-08,0.0,-0.99999994,-4e-08,0.0,-0.99999994,2e-08,0.0,-0.99999994,1.4e-07,0.0,-0.99999994,4e-08,0.0,-0.99999994,1e-08,0.0,-0.99999994,2e-08,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,6e-08,0.0,-0.99999994,-4e-08,0.0,-0.99999994,-1.5e-07,0.0,-0.99999994,1.6e-07,0.0,-0.99999994,5.4e-07,0.0,-0.99999994,-3.1e-07,0.0,-0.99999994,-1.6e-07,0.0,-0.99999994,-1.6e-07,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,0.99999994,0.0,0.0,0.99999994,3.7e-07,0.0,0.99999994,1.1e-06,0.0,0.99999994,5.5e-07,0.0,0.99999994,0.0,0.0,1.0,4e-08,0.0,0.99999994,-1.1e-07,0.0,0.99999994,7e-08,0.0,0.99999994,1.8e-07,0.0,0.99999994,0.0,0.0,0.99999994,0.0,0.0,0.99999994,6.2e-07,0.0,0.99999994,3.4e-07,0.0,0.99999994,-2.1e-07,0.0,0.99999994,5.1e-07,0.0,0.99999994,0.0,-0.0,0.99999994,2.2e-07,-0.0,0.99999994,3e-07,-0.0,0.99999994,4.4e-07,0.0,0.99999994,4.6e-07,0.0,0.99999994,1.369e-05,-0.99999994,0.0,1.369e-05,-0.99999994,0.0,1.369e-05,-0.99999994,0.0,1.369e-05,-1.0,0.0,0.9999975,-0.00222845,0.0,0.9999975,-0.00222846,0.0,0.9999975,-0.00222846,0.0,0.99999756,-0.00222847,0.0,-0.99998784,-0.00493533,1e-08,-0.99998784,-0.00493533,1e-08,-0.99998784,-0.00493533,1e-08,-0.99998778,-0.00493532,0.0,-1.44e-06,0.0,0.99999994,-7.2e-07,-2.3e-07,0.99999994,-7.2e-07,-2.3e-07,0.99999994,0.0,-4.6e-07,0.99999994,0.0,0.0,0.99999994,-6e-08,0.0,0.99999994,-3.5e-07,0.0,0.99999994,-1.2e-07,0.0,0.99999994,2.2e-07,0.0,0.99999994,0.0,0.0,1.0,0.0,0.0,1.0,-1.3e-07,0.0,1.0,-1.3e-07,0.0,1.0,-2.7e-07,0.0,0.99999994,0.0,0.0,0.99999994,0.0,0.0,0.99999994,0.0,0.0,0.99999994,0.0,0.0,0.99999994,-0.0,-0.99999994,-2e-08,-0.0,-0.99999994,-1e-08,-0.0,-0.99999994,-1e-08,-0.0,-0.99999994,0.0,0.99999994,0.0,0.0,0.99999994,0.0,0.0,0.99999994,0.0,0.0,0.99999994,0.0,0.0,3e-08,0.99999994,0.0,3e-08,0.99999994,4e-08,3e-08,0.99999994,4e-08,3e-08,0.99999994,9e-08,-0.99999994,0.0,4.1e-07,-0.99999994,0.0,4.1e-07,-0.99999994,0.0,4.1e-07,-0.99999994,0.0,4.1e-07,8.9e-07,0.0,0.99999994,4.5e-07,0.0,0.99999994,4.5e-07,0.0,0.99999994,0.0,0.0,0.99999994,0.99999994,-7.9e-07,0.0,0.99999994,-4e-07,-1.9e-07,0.99999994,-4e-07,-1.9e-07,0.99999994,0.0,-3.8e-07,0.99999994,0.0,-5e-08,0.99999994,-9.5e-07,1e-08,0.99999994,-4.4e-07,-3e-08,0.99999994,-3.38e-06,3.6e-07,0.99999994,-1.58e-06,1.2e-07,0.99999994,5.5e-07,-2.4e-07,0.99999994,-8.1e-07,-5e-08,0.99999994,0.0,-1e-07,1.0,0.0,1e-07,0.99999994,-1.31e-06,3.8e-07,0.99999994,0.0,1e-07,0.99999994,0.0,1.1e-07,0.99999994,5.2e-07,1.8e-07,0.99999994,3.2e-06,-9e-08,0.99999994,3.53e-06,-1.4e-07,0.99999994,3.3e-07,1.2e-07,0.99999994,-1.96e-06,5.9e-07,0.99999994,-3.1e-07,-1e-07,0.99999994,-3e-08,-1e-07,0.99999994,-3e-08,-1e-07,0.99999994,2.6e-07,-1e-07,0.99999994,3e-08,-4.8e-07,1.0,-4.7e-07,-2.4e-07,1.0,-4.7e-07,-2.4e-07,0.99999994,-9.6e-07,-0.0,0.0,-0.99999964,0.00080372,0.0,-0.99999964,0.00080391,0.0,-0.99999964,0.00080391,0.0,-0.99999964,0.0008041,0.0,-0.00651021,-0.99997878,0.0,-0.0065102,-0.99997884,0.0,-0.0065102,-0.99997884,0.0,-0.00651019,-0.99997878,1.49e-06,0.99999946,0.00099956,1.49e-06,0.99999946,0.00099956,1.49e-06,0.99999946,0.00099956,1.49e-06,0.99999946,0.00099955,-2.3e-07,0.00655966,0.99997842,-1.1e-07,0.00655965,0.99997842,-1.1e-07,0.00655965,0.99997842,0.0,0.00655963,0.99997842,0.0,-0.9999997,0.00080303,0.0,-0.9999997,0.00080284,0.0,-0.9999997,0.00080284,0.0,-0.9999997,0.00080266,0.0,-0.00651795,-0.99997872,0.0,-0.00651796,-0.99997872,0.0,-0.00651796,-0.99997872,0.0,-0.00651797,-0.99997872,0.0,0.99999946,0.00099965,3.7e-07,0.99999946,0.00099961,3.7e-07,0.99999946,0.00099961,7.4e-07,0.99999946,0.00099956,0.0,0.00649015,0.9999789,0.0,0.00649015,0.9999789,0.0,0.00649015,0.9999789,0.0,0.00649014,0.9999789,0.99999994,-1.3e-07,2.4e-07,0.99999994,-6e-08,1.2e-07,0.99999994,-6e-08,1.2e-07,0.99999994,0.0,-0.0,0.99999994,-4.1e-07,2.4e-07,0.99999994,-2.1e-07,1.2e-07,0.99999994,-2.1e-07,1.2e-07,0.99999994,0.0,0.0,-0.99999994,0.0,5e-08,-0.99999994,1.9e-07,4e-08,-0.99999994,8.6e-07,7e-08,-0.99999994,3.2e-07,5e-08,-0.99999994,-8e-07,6e-08,-0.99999994,2.6e-07,6e-08,-0.99999994,5.3e-07,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,-7e-08,0.0,-0.99999994,1.5e-07,0.0,-0.99999994,0.0,0.0,-0.99999994,3e-07,0.0,-0.99999994,3.3e-07,0.0,-0.99999994,6.7e-07,0.0,-0.99999994,6.7e-07,0.0,-0.99999994,0.0,0.0,-0.99999994,0.0,0.0,-0.99999994,-8e-08,5e-08,-0.99999994,-8e-08,5e-08,-0.99999994,-1.6e-07,1e-07,-0.99999994,0.0,0.0,-0.99999994,-1.3e-07,0.0,-0.99999994,-1.3e-07,0.0,-0.99999994,-2.6e-07,0.0,-0.99999994,-3.2e-07,-1.2e-07,-0.99999994,-1.3e-07,-1.2e-07,-0.99999994,-1.3e-07,-1.2e-07,-0.99999994,6e-08,-1.2e-07,0.0,-0.9999994,0.00111415,1.34e-06,-0.9999994,0.00111382,1.34e-06,-0.9999994,0.00111382,2.68e-06,-0.9999994,0.00111348,0.0,2.675e-05,0.99999994,0.0,2.675e-05,0.99999994,0.0,2.675e-05,0.99999994,0.0,2.675e-05,0.99999994,0.0,0.99999934,0.00103911,0.0,0.99999934,0.00103928,0.0,0.99999934,0.00103928,0.0,0.99999934,0.00103945,0.0,2.098e-05,-0.99999994,0.0,2.098e-05,-0.99999994,0.0,2.098e-05,-0.99999994,0.0,2.098e-05,-0.99999994,2.68e-06,-0.99999934,0.00111305,2.68e-06,-0.99999934,0.00111288,2.68e-06,-0.99999934,0.00111288,2.68e-06,-0.99999934,0.00111271,0.0,0.00669147,0.99997759,0.0,0.00669146,0.99997759,0.0,0.00669146,0.99997759,0.0,0.00669145,0.99997765,1.34e-06,0.99999934,0.00103931,1.34e-06,0.99999934,0.00103931,1.34e-06,0.99999934,0.00103931,1.34e-06,0.99999934,0.00103931,1.08e-06,-0.00662356,-0.99997801,5.4e-07,-0.00662357,-0.99997801,5.4e-07,-0.00662357,-0.99997801,0.0,-0.00662357,-0.99997801,-0.99999994,-2.1e-07,0.0,-0.99999994,5e-08,0.0,-0.99999994,5e-08,0.0,-1.0,3.2e-07,0.0,-0.99999994,6.3e-07,-0.0,-1.0,3.3e-07,1.2e-07,-1.0,3.3e-07,1.2e-07,-1.0,3e-08,2.4e-07],"uv":[0.3353840410709381,0.11652971059083939,0.2802102565765381,0.11667800694704056,0.28020989894866943,0.016955027356743813,0.3349454998970032,0.016838839277625084,0.12069728225469589,0.9225371479988098,0.12069728225469589,0.9310179352760315,0.11475346982479095,0.9310179352760315,0.11475346982479095,0.9225371479988098,0.11475346982479095,0.7367635369300842,0.11475346982479095,0.7284638285636902,0.12069728225469589,0.7284638285636902,0.12069728225469589,0.7367635369300842,0.18845601379871368,0.9225371479988098,0.18845601379871368,0.9310179352760315,0.12249373644590378,0.9310179352760315,0.12249373644590378,0.9225371479988098,0.12249373644590378,0.7367635369300842,0.12249373644590378,0.7284638285636902,0.18845601379871368,0.7284638285636902,0.18845601379871368,0.7367635369300842,0.23197630047798157,0.9215766191482544,0.2404572069644928,0.9215766191482544,0.2404572069644928,0.977776825428009,0.23197630047798157,0.977776825428009,0.32723838090896606,0.9036546945571899,0.32114437222480774,0.9047026038169861,0.3095172941684723,0.837074339389801,0.3156112730503082,0.8360266089439392,0.34627047181129456,0.8402767777442932,0.333553284406662,0.8954209089279175,0.25594082474708557,0.9142372608184814,0.1899787038564682,0.9142372608184814,0.1899787038564682,0.7284638285636902,0.25594082474708557,0.7284638285636902,0.2166387289762497,0.9780163764953613,0.21663889288902283,0.9218159914016724,0.22493858635425568,0.9218159914016724,0.22493858635425568,0.9780163764953613,0.07683978229761124,0.7367636561393738,0.07089588791131973,0.7284638285636902,0.07683978229761124,0.7284638285636902,0.1077793687582016,0.7284638285636902,0.1077793687582016,0.7367636561393738,0.29489222168922424,0.9846065044403076,0.29849955439567566,0.9160810112953186,0.3057374358177185,0.9235165119171143,0.32484060525894165,0.9767863154411316,0.10937175154685974,0.9310179352760315,0.10937175154685974,0.9225371479988098,0.278520405292511,0.9161390066146851,0.2848883271217346,0.9844632744789124,0.2546491026878357,0.9778571128845215,0.2715882956981659,0.9238601326942444,0.278918981552124,0.901412308216095,0.27353718876838684,0.8925405144691467,0.2668937146663666,0.8363402485847473,0.29783329367637634,0.8354501128196716,0.30377712845802307,0.8371543884277344,0.28486278653144836,0.9031165838241577,0.10937175154685974,0.7367636561393738,0.10937175154685974,0.7284638285636902,0.07683978229761124,0.9225372076034546,0.07089588791131973,0.9310179352760315,0.07089588791131973,0.9225372076034546,0.07089588791131973,0.7367636561393738,0.1077793687582016,0.9225372076034546,0.1077793687582016,0.9310179352760315,0.07683978229761124,0.9310179352760315,0.39452439546585083,0.11694931983947754,0.3401133418083191,0.11694861203432083,0.33987581729888916,0.017110111191868782,0.39505016803741455,0.017110111191868782,0.8560661673545837,0.8996684551239014,0.8560661673545837,0.8508320450782776,0.8600751161575317,0.850857675075531,0.8640841245651245,0.8508833646774292,0.8640841245651245,0.8996684551239014,0.8506497740745544,0.8498370051383972,0.8506497740745544,0.8020020723342896,0.8506497740745544,0.7769581079483032,0.8506497740745544,0.7288510799407959,0.921705961227417,0.7288510799407959,0.921705961227417,0.7779970765113831,0.921705961227417,0.8010004758834839,0.921705961227417,0.8498370051383972,0.8831790089607239,0.9218882322311401,0.8751609921455383,0.9218882322311401,0.8751609921455383,0.8508320450782776,0.8831790089607239,0.8508320450782776,0.7276763319969177,0.7288510799407959,0.8486620783805847,0.7288510799407959,0.8486620783805847,0.9546085000038147,0.8310757875442505,0.9546085000038147,0.8020616173744202,0.9546085000038147,0.7276763319969177,0.9546085000038147,0.8847084641456604,0.8508320450782776,0.8927264213562012,0.8508320450782776,0.8927264213562012,0.9218882322311401,0.8847084641456604,0.9218882322311401,0.9759806990623474,0.9718177318572998,0.9049243927001953,0.9718177318572998,0.9049243927001953,0.9230325818061829,0.9049243927001953,0.899972140789032,0.9049243927001953,0.8508320450782776,0.9759806990623474,0.8508320450782776,0.9288747310638428,0.8498370051383972,0.9288747310638428,0.7288510799407959,0.9368926882743835,0.7288510799407959,0.9368926882743835,0.8498370051383972,0.865613579750061,0.8999781012535095,0.865613579750061,0.8508320450782776,0.8736316561698914,0.8508320450782776,0.8736316561698914,0.8999722599983215,0.8696225881576538,0.8999751806259155,0.8505277037620544,0.8738667964935303,0.8505277037620544,0.8508349657058716,0.8545366525650024,0.8508320450782776,0.8545366525650024,0.8738925457000732,0.8259135484695435,0.9786100387573242,0.8259135484695435,0.9556065201759338,0.8299225568771362,0.9556037187576294,0.8299225568771362,0.9786355495452881,0.8383297324180603,0.9786355495452881,0.8383297324180603,0.9556035995483398,0.8489982485771179,0.9556035995483398,0.8489982485771179,0.9786355495452881,0.8243840932846069,0.9662721157073975,0.8203750848770142,0.9662721157073975,0.8203750848770142,0.9556037187576294,0.8243840932846069,0.9556037187576294,0.8942559957504272,0.9230325818061829,0.8942559957504272,0.899972140789032,0.8148365616798401,0.9556037187576294,0.8188455104827881,0.9556037187576294,0.8188455104827881,0.9662721157073975,0.8148365616798401,0.9662721157073975,0.9270540475845337,0.7779970765113831,0.9270540475845337,0.8010004758834839,0.8133071064949036,0.9609516859054565,0.8092981576919556,0.9609516859054565,0.8092981576919556,0.9556037187576294,0.8133071064949036,0.9556037187576294,0.8368000984191895,0.9556037187576294,0.8368000984191895,0.9786355495452881,0.8314521908760071,0.9786355495452881,0.8314521908760071,0.9556037187576294,0.8037596344947815,0.9556037187576294,0.8077685832977295,0.9556037187576294,0.8077685832977295,0.9609516859054565,0.8037596344947815,0.9609516859054565,0.055985040962696075,0.613791286945343,0.05598992854356766,0.6092767715454102,0.056183673441410065,0.43344321846961975,0.23991400003433228,0.43356865644454956,0.23971521854400635,0.6139166951179504,0.056177832186222076,0.42998769879341125,0.23990797996520996,0.4301303029060364,0.46264293789863586,0.4353397786617279,0.4628441035747528,0.6135311722755432,0.2791161835193634,0.6133925318717957,0.2791113555431366,0.6089884638786316,0.27891501784324646,0.4352010488510132,0.4922352135181427,0.1394166797399521,0.4304230213165283,0.01977570913732052,0.4322809875011444,0.01652112416923046,0.49232056736946106,0.13356409966945648,0.49374690651893616,0.13642317056655884,0.6467593908309937,0.13867484033107758,0.5856760144233704,0.01844889484345913,0.5875005722045898,0.015779441222548485,0.6466783881187439,0.13259844481945038,0.6482418179512024,0.13573063910007477,0.7067109942436218,0.01603822223842144,0.7085714936256409,0.019319823011755943,0.5514980554580688,0.01723143272101879,0.553318440914154,0.019922534003853798,0.2789211571216583,0.42960208654403687,0.46264901757240295,0.42975008487701416,0.6418582201004028,0.6265311241149902,0.5795170664787292,0.6265311241149902,0.5795124173164368,0.42183539271354675,0.6418609619140625,0.42183539271354675,0.5180631875991821,0.6265311241149902,0.5180590748786926,0.42183539271354675,0.5551376342773438,0.7293577790260315,0.5592886209487915,0.7293577790260315,0.5592886209487915,0.9431928396224976,0.5551376342773438,0.9431928396224976,0.5673524737358093,0.7293577790260315,0.5673524737358093,0.9431928396224976,0.5746279358863831,0.7293577790260315,0.5746279358863831,0.9431928396224976,0.5761675238609314,0.7293577790260315,0.5845249891281128,0.7293577790260315,0.5845249891281128,0.9431928396224976,0.5761675238609314,0.9431928396224976,0.5917001366615295,0.7293577790260315,0.5917001366615295,0.9431928396224976,0.6091299653053284,0.9431928396224976,0.6008395552635193,0.9431928396224976,0.6008395552635193,0.7293577790260315,0.6091299653053284,0.7293577790260315,0.5932714343070984,0.9431928396224976,0.5932714343070984,0.7293577790260315,0.6103752851486206,0.7293577790260315,0.6203386783599854,0.7293577790260315,0.6203386783599854,0.9431928396224976,0.6103752851486206,0.9431928396224976,0.6216483116149902,0.7440853118896484,0.6221034526824951,0.7341219186782837,0.6296716928482056,0.7293577790260315,0.6379621624946594,0.7306228280067444,0.6423035264015198,0.7377980947494507,0.6411386132240295,0.7461555004119873,0.6338631510734558,0.7504299283027649,0.625799298286438,0.7488258481025696,0.6438055038452148,0.735702395439148,0.6479564905166626,0.7309618592262268,0.65602046251297,0.7293577790260315,0.6632959246635437,0.7336320877075195,0.6644607186317444,0.7419895529747009,0.660119354724884,0.749164879322052,0.651828944683075,0.7504299283027649,0.6442607641220093,0.7456657886505127,0.9323591589927673,0.4171101152896881,0.9323591589927673,0.6226618885993958,0.9281189441680908,0.6226618885993958,0.9281189441680908,0.4171101152896881,0.8123713135719299,0.41711002588272095,0.8123713135719299,0.6226618885993958,0.7059287428855896,0.6226963400840759,0.7059287428855896,0.41714441776275635,0.926487386226654,0.4171101152896881,0.926487386226654,0.6226618885993958,0.9222474098205566,0.6226618885993958,0.9222474098205566,0.4171101152896881,0.9205553531646729,0.41714441776275635,0.9205553531646729,0.6226963400840759,0.8141124844551086,0.6226618885993958,0.8141124844551086,0.4171101152896881,0.9435003995895386,0.5215221643447876,0.9437095522880554,0.4139387011528015,0.9479820728302002,0.41385841369628906,0.9477730393409729,0.5214418768882751,0.9440131783485413,0.6323269605636597,0.9438182711601257,0.5247434973716736,0.9480910897254944,0.524824321269989,0.948285698890686,0.6324077844619751,0.4235091805458069,0.7290624380111694,0.42766016721725464,0.7290624380111694,0.42766016721725464,0.9428974390029907,0.4235091805458069,0.9428974390029907,0.43572407960891724,0.7290624380111694,0.43572407960891724,0.9428974390029907,0.44299954175949097,0.7290624380111694,0.44299954175949097,0.9428974390029907,0.44453907012939453,0.7290624380111694,0.45289647579193115,0.7290624380111694,0.45289647579193115,0.9428974390029907,0.44453907012939453,0.9428974390029907,0.4600716233253479,0.7290624380111694,0.4600716233253479,0.9428974390029907,0.48877447843551636,0.9428974390029907,0.48048412799835205,0.9428974390029907,0.48048412799835205,0.7290624380111694,0.48877447843551636,0.7290624380111694,0.4729159474372864,0.9428974390029907,0.4729159474372864,0.7290624380111694,0.4616429805755615,0.7290624380111694,0.47160643339157104,0.7290624380111694,0.47160643339157104,0.9428974390029907,0.4616429805755615,0.9428974390029907,0.4900197982788086,0.7437899708747864,0.490475058555603,0.7338263392448425,0.4980432391166687,0.7290624380111694,0.5063336491584778,0.7303274869918823,0.5106750726699829,0.7375026345252991,0.5095101594924927,0.7458599209785461,0.5022347569465637,0.7501344084739685,0.49417078495025635,0.7485304474830627,0.5121771097183228,0.7354068756103516,0.5163280367851257,0.7306662797927856,0.5243920087814331,0.7290624380111694,0.5316674113273621,0.7333367466926575,0.5328322649002075,0.7416941523551941,0.5284909009933472,0.7488692998886108,0.5202004909515381,0.7501344084739685,0.5126323103904724,0.7453704476356506,0.6662313938140869,0.36812928318977356,0.6909191608428955,0.3466287851333618,0.6487945318222046,0.34643101692199707,0.6490768194198608,0.3681108057498932,0.6188055276870728,0.36808645725250244,0.6187970042228699,0.3463149666786194,0.5802930593490601,0.34608644247055054,0.6055288314819336,0.36806419491767883,0.6359173655509949,0.3945295214653015,0.6662313938140869,0.36812928318977356,0.6490768194198608,0.3681108057498932,0.6188055276870728,0.36808645725250244,0.6055288314819336,0.36806419491767883,0.6126387715339661,0.17203205823898315,0.6122698187828064,0.2573859989643097,0.6122698187828064,0.2573859989643097,0.6126387715339661,0.17203205823898315,0.6586955189704895,0.17203205823898315,0.6126387715339661,0.17203205823898315,0.6126387715339661,0.17203205823898315,0.6586955189704895,0.17203205823898315,0.6586953401565552,0.25741273164749146,0.6586955189704895,0.17203205823898315,0.6586955189704895,0.17203205823898315,0.6586953401565552,0.25741273164749146,0.6122698187828064,0.2573859989643097,0.6586953401565552,0.2574126720428467,0.6586953401565552,0.2574126720428467,0.6122698187828064,0.2573859989643097,0.5246685743331909,0.2573356032371521,0.6122698187828064,0.2573859989643097,0.6126387715339661,0.17203205823898315,0.5246685743331909,0.17203205823898315,0.5246685743331909,0.19025564193725586,0.5246685743331909,0.2976432740688324,0.7471662163734436,0.2976432740688324,0.7471662163734436,0.25746357440948486,0.6586953401565552,0.25741273164749146,0.6122698187828064,0.2573859989643097,0.5246685743331909,0.2573356032371521,0.6586953401565552,0.25741273164749146,0.7471662163734436,0.25746357440948486,0.7471662163734436,0.19025254249572754,0.7471662163734436,0.17203205823898315,0.6586955189704895,0.17203205823898315,0.6909191608428955,0.3466287851333618,0.7471662163734436,0.2976432740688324,0.5246685743331909,0.2976432740688324,0.5802930593490601,0.34608644247055054,0.6187970042228699,0.3463149666786194,0.6487945318222046,0.34643101692199707,0.6490768194198608,0.3681108057498932,0.6487945318222046,0.34643101692199707,0.6187970042228699,0.3463149666786194,0.6188055276870728,0.3680863678455353,0.8678228855133057,0.3906107544898987,0.837739109992981,0.36599522829055786,0.8506730794906616,0.36597973108291626,0.8806377053260803,0.3659437894821167,0.8979949355125427,0.3659229576587677,0.9790717363357544,0.2995832860469818,0.7565741539001465,0.2995832860469818,0.7565741539001465,0.2621347904205322,0.8936011791229248,0.26213666796684265,0.946221113204956,0.26213735342025757,0.9790717363357544,0.26213759183883667,0.9790717363357544,0.26213762164115906,0.946221113204956,0.26213735342025757,0.9467294216156006,0.16811326146125793,0.9790717363357544,0.16811326146125793,0.9790717363357544,0.19830791652202606,0.8936011791229248,0.26213666796684265,0.7565741539001465,0.2621347904205322,0.7565741539001465,0.1982957422733307,0.7565741539001465,0.16811326146125793,0.8933715224266052,0.16811326146125793,0.946221113204956,0.26213735342025757,0.8936011791229248,0.26213666796684265,0.8936011791229248,0.26213666796684265,0.946221113204956,0.26213735342025757,0.8936011791229248,0.26213666796684265,0.8933715224266052,0.16811326146125793,0.8933715224266052,0.16811326146125793,0.8936011791229248,0.26213666796684265,0.9467294216156006,0.16811326146125793,0.946221113204956,0.26213735342025757,0.946221113204956,0.26213735342025757,0.9467294216156006,0.16811326146125793,0.8806377053260803,0.3659437894821167,0.8808093070983887,0.34701821208000183,0.9210715889930725,0.3470408618450165,0.8979949355125427,0.3659229576587677,0.8145007491111755,0.3469810485839844,0.7565741539001465,0.2995832860469818,0.9790717363357544,0.2995832860469818,0.9210715889930725,0.3470408618450165,0.8808093070983887,0.34701821208000183,0.8505002856254578,0.34700122475624084,0.837739109992981,0.36599522829055786,0.8145007491111755,0.3469810485839844,0.8505002856254578,0.34700122475624084,0.8506730794906616,0.36597976088523865,0.8933715224266052,0.16811326146125793,0.9467294216156006,0.16811326146125793,0.9467294216156006,0.17391172051429749,0.8933715224266052,0.17391172051429749,0.8933715224266052,0.16811326146125793,0.9467294216156006,0.16811326146125793,0.9467294216156006,0.16811326146125793,0.8933715224266052,0.16811326146125793,0.9467294216156006,0.16811326146125793,0.9467294216156006,0.17391172051429749,0.9467294216156006,0.17391172051429749,0.9467294216156006,0.16811326146125793,0.9467294216156006,0.17391172051429749,0.8933715224266052,0.17391172051429749,0.8933715224266052,0.17391172051429749,0.9467294216156006,0.17391172051429749,0.8933715224266052,0.17391172051429749,0.8933715224266052,0.16811326146125793,0.8933715224266052,0.16811326146125793,0.8933715224266052,0.17391172051429749,0.8501412868499756,0.36597973108291626,0.849968433380127,0.3470011353492737,0.8802775144577026,0.34701821208000183,0.8801056146621704,0.36594370007514954,0.3330121636390686,0.2868155837059021,0.2672167420387268,0.286922425031662,0.2672167420387268,0.20652586221694946,0.3327539563179016,0.20665833353996277,0.5031867027282715,0.3340871334075928,0.2672167420387268,0.3340871334075928,0.2672167420387268,0.286922425031662,0.3330121636390686,0.2868155837059021,0.35943979024887085,0.28677263855934143,0.4120377004146576,0.28668731451034546,0.438724160194397,0.2866438329219818,0.5031867027282715,0.28653913736343384,0.5031867027282715,0.20700278878211975,0.4384653568267822,0.20687198638916016,0.4117806553840637,0.20681804418563843,0.3591827154159546,0.20671173930168152,0.3327539563179016,0.20665833353996277,0.2672167420387268,0.20652586221694946,0.2672167420387268,0.16849413514137268,0.5031867027282715,0.16849413514137268,0.5031867027282715,0.18544088304042816,0.5031867027282715,0.28653913736343384,0.438724160194397,0.2866438329219818,0.4384653568267822,0.20687198638916016,0.5031867027282715,0.20700278878211975,0.4120377004146576,0.28668731451034546,0.35943979024887085,0.28677263855934143,0.3591827154159546,0.20671173930168152,0.4117806553840637,0.20681804418563843,0.438724160194397,0.2866438329219818,0.4120377004146576,0.28668731451034546,0.4120377004146576,0.28668731451034546,0.438724160194397,0.2866438329219818,0.4120377004146576,0.28668731451034546,0.4117806553840637,0.20681804418563843,0.4117806553840637,0.20681804418563843,0.4120377004146576,0.28668731451034546,0.4117806553840637,0.20681804418563843,0.4384653568267822,0.20687198638916016,0.4384653568267822,0.20687198638916016,0.4117806553840637,0.20681804418563843,0.4384653568267822,0.20687198638916016,0.438724160194397,0.2866438329219818,0.438724160194397,0.2866438329219818,0.4384653568267822,0.20687198638916016,0.35943979024887085,0.28677263855934143,0.3330121636390686,0.2868155837059021,0.3330121636390686,0.2868155837059021,0.35943979024887085,0.28677263855934143,0.3330121636390686,0.2868155837059021,0.3327539563179016,0.20665833353996277,0.3327539563179016,0.20665833353996277,0.3330121636390686,0.2868155837059021,0.3327539563179016,0.20665833353996277,0.3591827154159546,0.20671173930168152,0.3591827154159546,0.20671173930168152,0.3327539563179016,0.20665833353996277,0.3591827154159546,0.20671173930168152,0.35943979024887085,0.28677263855934143,0.35943979024887085,0.28677263855934143,0.3591827154159546,0.20671173930168152,0.438724160194397,0.2866438329219818,0.4120377004146576,0.28668731451034546,0.4117806553840637,0.20681804418563843,0.4384653568267822,0.20687198638916016,0.35943979024887085,0.28677263855934143,0.3330121636390686,0.2868155837059021,0.3327539563179016,0.20665833353996277,0.3591827154159546,0.20671173930168152,0.014362253248691559,0.3352991044521332,0.250332236289978,0.33529916405677795,0.250332236289978,0.28759968280792236,0.18591850996017456,0.2877447009086609,0.15911298990249634,0.28780508041381836,0.10655275732278824,0.2879233658313751,0.08014626055955887,0.2879828214645386,0.014362253248691559,0.28813090920448303,0.014362253248691559,0.20772257447242737,0.08014709502458572,0.2078607976436615,0.1065516248345375,0.20791631937026978,0.1588517427444458,0.20802617073059082,0.18565499782562256,0.20808249711990356,0.250332236289978,0.20821842551231384,0.250332236289978,0.18665292859077454,0.250332236289978,0.16970618069171906,0.014362253248691559,0.16970618069171906,0.18591850996017456,0.28774476051330566,0.250332236289978,0.28759968280792236,0.250332236289978,0.20821842551231384,0.18565499782562256,0.20808249711990356,0.014362253248691559,0.2881309986114502,0.08014626055955887,0.2879828214645386,0.08014709502458572,0.2078607976436615,0.014362253248691559,0.20772257447242737,0.10655275732278824,0.2879233658313751,0.15911298990249634,0.28780508041381836,0.1588517427444458,0.20802617073059082,0.1065516248345375,0.20791631937026978,0.08014626055955887,0.2879828214645386,0.10655275732278824,0.2879233658313751,0.10655275732278824,0.2879233658313751,0.08014626055955887,0.2879828214645386,0.10655245929956436,0.2879233658313751,0.1065516248345375,0.20791631937026978,0.1065516248345375,0.20791631937026978,0.10655245929956436,0.2879233658313751,0.1065516248345375,0.20791631937026978,0.08014709502458572,0.2078607976436615,0.08014709502458572,0.2078607976436615,0.1065516248345375,0.20791631937026978,0.08014709502458572,0.2078607976436615,0.08014626055955887,0.2879828214645386,0.08014626055955887,0.2879828214645386,0.08014709502458572,0.2078607976436615,0.15911298990249634,0.28780508041381836,0.18591850996017456,0.2877447009086609,0.18591850996017456,0.28774476051330566,0.15911298990249634,0.28780508041381836,0.18591850996017456,0.28774476051330566,0.18565499782562256,0.20808249711990356,0.18565499782562256,0.20808249711990356,0.18591850996017456,0.28774476051330566,0.18565499782562256,0.20808249711990356,0.1588517427444458,0.20802617073059082,0.1588517427444458,0.20802617073059082,0.18565499782562256,0.20808249711990356,0.1588517427444458,0.2080262303352356,0.15911298990249634,0.28780508041381836,0.15911298990249634,0.28780508041381836,0.1588517427444458,0.20802617073059082,0.08014626055955887,0.2879828214645386,0.10655275732278824,0.2879233658313751,0.1065516248345375,0.20791631937026978,0.08014709502458572,0.2078607976436615,0.15911298990249634,0.28780508041381836,0.18591850996017456,0.28774476051330566,0.18565499782562256,0.20808249711990356,0.1588517427444458,0.20802617073059082],"normalIndices":[0,1,2,2,1,3,4,5,6,5,7,6,6,7,8,9,10,11,10,8,11,7,11,8,12,13,14,13,15,14,14,15,16,17,18,19,18,16,19,15,19,16,20,21,22,22,21,23,24,25,26,27,28,29,29,28,25,28,26,25,30,31,32,32,31,33,34,35,36,36,35,37,38,39,40,40,39,41,39,42,41,43,44,45,45,44,46,7,5,47,47,5,48,49,50,51,51,50,52,53,54,55,56,57,54,57,58,54,58,55,54,9,11,59,59,11,60,61,62,63,64,65,66,63,62,65,62,66,65,67,68,69,68,70,69,70,71,69,72,73,74,74,73,75,76,77,78,77,79,78,79,80,78,81,82,83,83,82,84,82,85,84,84,85,86,87,88,85,85,88,86,89,90,91,91,90,92,93,94,95,95,94,96,96,94,97,94,98,97,99,100,101,101,100,102,103,104,105,104,106,105,106,107,105,107,108,105,99,109,100,100,109,110,111,112,113,112,114,113,114,115,113,116,117,118,118,117,119,120,121,122,122,121,123,124,125,126,126,125,127,128,129,130,130,129,131,107,106,132,132,106,133,134,135,136,136,135,137,84,86,138,138,86,139,140,141,142,142,141,143,144,145,146,146,145,147,148,149,150,150,149,151,152,153,154,155,156,153,153,156,154,157,158,159,159,158,160,161,162,163,164,165,162,162,165,163,166,167,168,169,168,170,168,167,170,171,172,173,174,173,175,173,172,175,176,177,178,178,177,179,180,181,182,182,181,183,184,185,186,186,185,187,188,189,190,190,189,191,192,193,194,194,193,195,196,197,198,198,197,199,197,200,199,199,200,201,200,202,201,201,202,203,202,204,203,203,204,205,204,206,205,205,206,207,206,208,207,207,208,209,208,210,209,209,210,211,210,196,211,211,196,198,212,213,214,213,215,214,215,216,214,214,216,217,217,216,218,216,219,218,220,221,222,222,221,223,223,221,224,221,225,224,225,226,224,226,227,224,228,229,230,230,229,231,232,233,234,234,233,235,236,237,238,238,237,239,240,241,242,242,241,243,244,245,246,246,245,247,248,249,250,250,249,251,252,253,254,254,253,255,253,256,255,255,256,257,256,258,257,257,258,259,258,260,259,259,260,261,260,262,261,261,262,263,262,264,263,263,264,265,264,266,265,265,266,267,266,252,267,267,252,254,268,269,270,269,271,270,271,272,270,270,272,273,273,272,274,272,275,274,276,277,278,278,277,279,279,277,280,277,281,280,281,282,280,282,283,280,284,285,286,286,285,287,288,289,290,290,289,291,292,293,294,295,294,296,294,293,296,297,298,299,299,298,300,301,302,303,303,302,304,305,306,307,307,306,308,309,310,311,311,310,312,313,314,315,314,316,315,317,315,316,318,319,320,320,319,321,321,319,322,319,323,322,324,325,326,327,328,325,326,325,328,329,330,331,331,330,332,332,330,333,330,334,333,335,336,337,337,336,338,339,340,341,342,341,343,341,340,343,344,345,346,346,345,347,347,345,348,345,349,348,350,351,352,353,352,354,351,354,352,355,356,357,356,358,357,358,359,357,360,361,362,362,361,363,364,365,366,366,365,367,368,369,370,370,369,371,372,373,374,374,373,375,376,377,378,378,377,379,379,377,380,377,381,380,382,383,384,384,383,385,386,387,388,388,387,389,390,391,392,392,391,393,394,395,396,396,395,397,398,399,400,400,399,401,402,403,404,404,403,405,406,407,408,408,407,409,410,411,412,412,411,413,414,415,416,416,415,417,417,415,418,418,415,419,419,415,420,415,421,420,422,423,424,425,426,427,427,426,428,428,426,429,429,426,430,430,426,423,423,426,424,431,432,433,433,432,434,435,436,437,437,436,438,439,440,441,441,440,442,443,444,445,445,444,446,447,448,449,449,448,450,451,452,453,453,452,454,455,456,457,457,456,458,459,460,461,461,460,462,463,464,465,465,464,466,467,468,469,469,468,470,471,472,473,473,472,474,475,476,477,477,476,478,479,480,481,481,480,482,482,480,483,483,480,484,484,480,485,480,486,485,487,488,489,490,491,488,488,491,489,489,491,492,492,491,493,493,491,494,495,494,491,496,497,498,498,497,499,500,501,502,502,501,503,504,505,506,506,505,507,508,509,510,510,509,511,512,513,514,514,513,515,516,517,518,518,517,519,520,521,522,522,521,523,524,525,526,526,525,527,528,529,530,530,529,531,532,533,534,534,533,535,536,537,538,538,537,539,540,541,542,542,541,543,544,545,546,546,545,547],"groups":[{"count":1002,"start":0,"materialIndex":1}],"position":[-2.02383804,8.91543961,-8.05499172,1.97121048,8.91780663,-8.05498409,1.97123718,1.35265446,-8.05498505,-1.9920845,1.35265446,-8.05498505,1.82158291,8.75308609,29.12817955,7.07950687,8.75308609,29.12817955,1.82158291,8.90737629,29.17242241,7.07950687,8.90737629,29.17242241,1.82158291,9.39835739,27.46016884,7.07950687,9.39835739,27.46016884,1.82158291,9.24406719,27.41592598,7.07950687,9.24406719,27.41592598,2.04172945,8.75308609,29.12817955,2.04172945,8.90737629,29.17242241,2.04172945,9.39835739,27.46016884,2.04172945,9.24406719,27.41592598,6.86405897,8.75308609,29.12817955,6.86405897,8.90737629,29.17242241,6.86405897,9.39835739,27.46016884,6.86405897,9.24406719,27.41592598,1.82158279,8.44093227,27.43902969,2.04172945,8.44093227,27.43902969,2.04172945,8.6133852,28.89788246,1.82158291,8.6133852,28.89788246,6.86405897,8.44093227,27.43903351,6.86405802,8.61338425,28.89788628,7.07950687,8.44093227,27.43903351,7.07950592,8.61338425,28.89788628,6.75750399,8.95098686,27.23482132,2.22940493,8.95092392,27.23481941,2.20964479,0.08377834,27.23482132,6.80126619,0.08377777,27.23482513,9.5843811,0.08377859,27.46893311,-9.56216049,0.08377859,27.46893311,-9.56216049,0.08377764,-8.25818634,9.5843811,0.08377764,-8.25818634,9.5843811,1.35265446,-8.25818634,-9.56216049,1.35265434,-8.25818634,9.5843811,1.35265446,-19.50315094,-9.56216049,1.35265434,-19.50315094,9.5843811,0.08377764,-19.50315094,-9.56216049,0.08377764,-19.50315094,-1.9920845,1.35265446,-8.25818634,1.97123718,1.35265446,-8.25818634,2.20964432,0.08377859,27.46893311,6.80126572,0.08377859,27.46893311,1.80680919,1.35265446,-19.50315094,1.80772686,0.08377764,-19.50315094,-1.83358598,1.35265446,-19.50315094,-1.84169877,0.08377764,-19.50315094,-1.83764243,0.71821606,-19.50315094,1.80726802,0.71821606,-19.50315094,-1.83764243,0.71821606,-21.19149017,1.80726802,0.71821606,-21.19149017,1.80772686,0.08377764,-21.19149017,-1.84169877,0.08377764,-21.19149017,1.80680919,1.35265446,-20.34950638,-1.83358598,1.35265446,-20.34950638,1.80726802,0.71821606,-20.34950638,-1.83764243,0.71821606,-20.34950638,0.01111199,21.36676788,-9.86599731,-12.05673122,10.67559624,-9.86599731,12.22292233,10.71857262,-9.86599731,0.01111199,21.36676788,29.07674026,-12.05673122,10.67559624,29.07674026,12.22292233,10.71857262,29.07674026,-11.69627476,10.4373188,29.07674026,0.30401906,21.10411072,29.07674026,-0.00486464,20.82556915,29.07674026,11.85535431,10.4268074,29.07674026,11.85587406,10.42729855,-9.86599731,-0.28754967,21.09895134,-9.86599731,-0.00575486,20.84445,-9.86599731,-11.69705677,10.43628407,-9.86599731,-8.3145647,1.17808533,-14.69042206,-8.11359787,1.17808533,-14.4609127,-7.72318745,1.17808533,-14.383255,-7.37095213,1.17808533,-14.59019756,-7.31455612,1.17808533,-14.99481487,-7.5247426,1.17808533,-15.34219551,-7.92611599,1.17808533,-15.40344524,-8.29252434,1.17808533,-15.17279625,-8.3145647,11.53074932,-14.69042206,-8.11359787,11.53074932,-14.4609127,-7.72318745,11.53074837,-14.383255,-7.37095213,11.53074932,-14.59019756,-7.31455612,11.53074932,-14.99481487,-7.5247426,11.53074932,-15.34219551,-7.92611599,11.53074837,-15.40344524,-8.29252434,11.53074932,-15.17279625,9.73587227,10.91997433,-18.19180107,-9.59330368,10.91997433,-18.19180107,9.73587227,11.31868744,-18.24191666,-9.59330368,11.31868744,-18.24191666,9.73264217,12.788167,-8.23252296,-9.59653282,12.788167,-8.23252296,9.73264217,12.38945389,-8.18240738,-9.59653282,12.38945389,-8.18240738,7.18974209,1.17808533,-14.69042206,7.3907094,1.17808533,-14.4609127,7.78111935,1.17808533,-14.383255,8.13335419,1.17808533,-14.59019756,8.18975067,1.17808533,-14.99481487,7.97956419,1.17808533,-15.34219551,7.5781908,1.17808533,-15.40344524,7.21178293,1.17808533,-15.17279625,7.18974209,11.53074932,-14.69042206,7.3907094,11.53074932,-14.4609127,7.78111935,11.53075123,-14.383255,8.13335419,11.53074932,-14.59019756,8.18975067,11.53075123,-14.99481487,7.97956419,11.53075123,-15.34219551,7.5781908,11.53075123,-15.40344524,7.21178293,11.53075123,-15.17279625,2.61970925,18.72784424,-8.25818825,4.74416018,16.82279015,-8.25818825,1.11922073,16.80526924,-8.25818729,1.14352417,18.72620773,-8.25818729,-1.46139908,18.72405243,-8.25818539,-1.46216583,16.79499054,-8.25818539,-4.77552462,16.77473831,-8.25818539,-2.60391235,18.72208214,-8.25818539,0.0111084,21.0670414,-8.25818825,2.61970925,18.72784424,-8.25818825,1.14352429,18.72620773,-8.25818825,-1.4613992,18.72405243,-8.25818825,-2.60391259,18.72208214,-8.25818825,-1.99208438,1.3526547,-8.25818634,-2.02383804,8.91543961,-8.25818634,-2.02383804,8.91543961,-8.05499268,-1.99208438,1.3526547,-8.05498505,1.97123718,1.35265446,-8.25818634,-1.9920845,1.35265446,-8.25818634,-1.9920845,1.35265446,-8.05498505,1.97123718,1.35265446,-8.05498505,1.97121048,8.91780663,-8.25818634,1.97123718,1.35265422,-8.25818634,1.97123718,1.35265422,-8.05498505,1.97121048,8.91780663,-8.05498505,-2.02383804,8.91543865,-8.25818634,1.97121048,8.91780567,-8.25818634,1.97121048,8.91780567,-8.05498505,-2.02383804,8.91543865,-8.05499268,-9.56216145,8.9109726,-8.25818729,-2.02383852,8.91543961,-8.25818634,-1.9920851,1.35265493,-8.25818634,-9.56216145,1.35265481,-8.25818729,-9.56216145,2.96735644,-8.25818729,-9.56216049,12.48243618,-8.25818634,9.5843811,12.48243618,-8.25818634,9.5843811,8.92231655,-8.25818634,1.97121048,8.91780663,-8.25818634,-2.02383804,8.91543961,-8.25818634,-9.56216049,8.91097164,-8.25818634,1.97121096,8.91780663,-8.25818634,9.5843811,8.92231655,-8.25818634,9.5843811,2.96708512,-8.25818634,9.5843811,1.35265422,-8.25818634,1.97123766,1.3526547,-8.25818634,4.7441597,16.82279015,-8.25818634,9.5843811,12.48243618,-8.25818634,-9.56216049,12.48243618,-8.25818634,-4.77552414,16.77473831,-8.25818634,-1.46216583,16.79499054,-8.25818634,1.11922073,16.80526924,-8.25818634,1.19159007,18.76183128,-8.23918056,1.16638994,16.77002335,-8.23918056,-1.51023173,16.75936317,-8.23918056,-1.50943661,18.75959396,-8.23918056,0.0111084,21.0670414,27.46893311,-2.57767868,18.74560547,27.46893311,-1.4646759,18.74414063,27.46893311,1.1138649,18.74074745,27.46893311,2.60750961,18.73878288,27.46893311,9.5843811,12.48243523,27.4689312,-9.56216049,12.48243523,27.4689312,-9.56216049,8.9507494,27.4689312,2.22940445,8.95092392,27.4689312,6.75750351,8.95098686,27.4689312,9.5843811,8.95101357,27.4689312,9.5843811,8.95101452,27.46893311,6.75750351,8.95098782,27.46893311,6.80126572,0.08377858,27.46893311,9.5843811,0.0837786,27.46893311,9.5843811,2.93137431,27.46893311,2.22940493,8.95092487,27.46893311,-9.56216145,8.95075035,27.46893501,-9.56216145,2.9302268,27.46893501,-9.56216145,0.08377957,27.46893501,2.20964479,0.0837791,27.46893311,6.75750399,8.95098686,27.46893311,2.22940421,8.95092487,27.46893311,2.22940421,8.95092487,27.23482132,6.75750399,8.95098686,27.23482132,2.22940445,8.95092487,27.46892548,2.20964432,0.08377884,27.46893311,2.20964432,0.0837786,27.2348175,2.22940445,8.95092487,27.23481369,6.80126619,0.08377889,27.46893311,6.75750351,8.95098782,27.4689312,6.75750351,8.95098782,27.23481941,6.80126619,0.08377817,27.23482132,1.11386478,18.74074745,27.46893692,1.12864292,16.95592117,27.46893692,4.59332275,16.95805168,27.46893501,2.60750937,18.73878288,27.46893692,-4.57739258,16.95241165,27.4689312,-9.56216049,12.48243618,27.4689312,9.5843811,12.48243618,27.4689312,4.59332275,16.95805168,27.4689312,1.12864304,16.95592117,27.4689312,-1.47953033,16.95431709,27.4689312,-2.57767868,18.74560738,27.4689312,-4.57739258,16.95241356,27.4689312,-1.47953045,16.954319,27.4689312,-1.46467602,18.74414253,27.4689312,2.20964479,0.08377859,28.63566208,6.80126572,0.08377859,28.63566208,6.80126572,0.63062155,28.63566208,2.20964479,0.63062155,28.63566208,2.20964456,0.0837786,27.46893311,6.80126572,0.08377859,27.46892929,6.80126572,0.08377859,28.63565826,2.20964503,0.0837786,28.63566208,6.80126524,0.08377856,27.4689312,6.80126524,0.63062155,27.4689312,6.80126524,0.63062143,28.63566017,6.80126524,0.08377856,28.63566017,6.80126572,0.63062143,27.46892929,2.20964456,0.63062155,27.46893311,2.20964503,0.63062155,28.63566208,6.80126572,0.63062143,28.63565826,2.20964456,0.63062155,27.46893311,2.20964456,0.08377858,27.46893311,2.20964503,0.08377858,28.63566208,2.20964503,0.63062155,28.63566208,-1.51949227,18.77190018,27.42794609,-1.53480756,16.92655373,27.42794609,1.15427542,16.9282074,27.42794609,1.13903892,18.7684021,27.42794609,9.58438015,8.94301128,17.50713348,9.58438015,8.95101452,27.46893311,9.58438015,2.93137383,27.46893311,9.58437634,2.94129205,17.5462532,9.58438206,12.48243523,-8.25818634,9.58438396,12.48243618,27.46893311,9.58438396,8.95101452,27.46893311,9.58438301,8.94301128,17.50713348,9.58438301,8.9397974,13.50585938,9.5843792,8.93340397,5.54225159,9.58438206,8.93015575,1.50178146,9.58438206,8.9223156,-8.25818634,9.58438301,2.96708536,-8.25818539,9.58438206,2.95729041,1.5409621,9.58437824,2.95325208,5.58118391,9.58437634,2.94529223,13.54476452,9.58437634,2.94129229,17.5462513,9.5843792,2.93137455,27.4689312,9.5843792,0.08377872,27.4689312,9.58438301,0.08377752,-8.25818539,9.58438301,1.35265434,-8.25818539,9.58438015,8.9223156,-8.25818539,9.5843811,8.93015575,1.50178194,9.5843811,2.95729089,1.54096258,9.58438015,2.96708393,-8.25818634,9.58437729,8.93340397,5.54225111,9.5843811,8.9397974,13.50585842,9.58437729,2.94529247,13.54476452,9.58437729,2.95325232,5.58118391,9.5843811,8.93015575,1.50178146,9.58437729,8.93340397,5.54225159,9.26427841,8.93340397,5.54225159,9.26427841,8.93015575,1.50178146,9.58437729,8.93340397,5.54225254,9.58437729,2.95325232,5.58118534,9.26427841,2.95325279,5.58118534,9.26427841,8.93340397,5.54225254,9.58437729,2.95325232,5.58118486,9.5843811,2.95729065,1.54096258,9.26427841,2.95729113,1.54096258,9.26427841,2.95325279,5.58118486,9.5843811,2.95729065,1.54096234,9.5843811,8.93015575,1.50178158,9.26427841,8.93015575,1.50178158,9.26427841,2.95729113,1.54096234,9.58438015,8.9397974,13.50586033,9.58438015,8.94301033,17.50713348,9.26427746,8.94301033,17.50713348,9.26427746,8.9397974,13.50586033,9.5843811,8.94301128,17.50713539,9.58437729,2.94129205,17.54625511,9.26427841,2.94129205,17.54625511,9.26427841,8.94301128,17.50713539,9.58437634,2.94129205,17.5462532,9.58437634,2.945292,13.54476643,9.26427746,2.94529223,13.54476643,9.26427746,2.94129205,17.5462532,9.58437634,2.94529223,13.54476357,9.58438015,8.9397974,13.50585747,9.26427746,8.9397974,13.50585747,9.26427746,2.94529223,13.54476357,9.49560833,8.93015575,1.50178289,9.49560738,8.93340302,5.54225063,9.49560642,2.95325255,5.58118582,9.49560642,2.95729184,1.54096293,9.49560738,8.9397974,13.50585938,9.49560642,8.94301128,17.50713158,9.49560642,2.94129252,17.5462532,9.49560642,2.94529247,13.54476547,-9.56215858,12.48243427,27.4689312,-9.56216049,12.48243618,-8.25818539,-9.56216049,8.91097164,-8.25818539,-9.56216049,8.92183018,1.49438524,-9.56216049,8.92634773,5.55286789,-9.56215954,8.93520641,13.51081085,-9.56215954,8.93965816,17.50886536,-9.56215858,8.95074844,27.4689312,-9.56216049,2.93022609,27.46893311,-9.56216049,2.94057727,17.50873947,-9.56216049,2.94473219,13.51097107,-9.56216049,2.95296144,5.59243393,-9.56216049,2.95717931,1.53429794,-9.56216049,2.96735597,-8.25818634,-9.56216049,1.35265434,-8.25818634,-9.56216049,0.08377762,-8.25818634,-9.56216049,0.0837786,27.46893311,-9.5621624,8.92183113,1.49438488,-9.5621624,8.91097069,-8.25818634,-9.5621624,2.96735525,-8.25818634,-9.56216145,2.95717931,1.53429818,-9.56216049,8.95075035,27.46893311,-9.56216049,8.93966007,17.50886536,-9.56216049,2.94057703,17.50873947,-9.56216049,2.93022585,27.46893311,-9.56216145,8.93520832,13.5108099,-9.56216049,8.92634869,5.55286694,-9.56216049,2.95296121,5.59243298,-9.56216145,2.94473219,13.51097012,-9.56215954,8.93966007,17.50886345,-9.56215954,8.93520737,13.5108099,-9.20569134,8.93520832,13.5108099,-9.20569134,8.93966007,17.50886345,-9.56216049,8.93520832,13.51081371,-9.56216049,2.9447329,13.51097393,-9.20569229,2.9447329,13.51097393,-9.20569229,8.93520832,13.51081371,-9.56216049,2.94473195,13.51097202,-9.56216049,2.94057703,17.50873947,-9.20569229,2.94057703,17.50873947,-9.20569229,2.94473195,13.51097202,-9.56216049,2.94057703,17.50873947,-9.56216049,8.93966007,17.50886536,-9.20569229,8.93966007,17.50886536,-9.20569229,2.94057703,17.50873947,-9.56216049,8.92634773,5.55286789,-9.56216049,8.92183018,1.49438488,-9.20568848,8.92183113,1.49438488,-9.20568848,8.92634869,5.55286789,-9.56216049,8.92183208,1.49438488,-9.56216049,2.95717907,1.53429806,-9.20569229,2.95717859,1.53429806,-9.20568848,8.92183208,1.49438488,-9.56215954,2.95717883,1.53429782,-9.56215954,2.95296097,5.59243393,-9.20569134,2.95296049,5.59243393,-9.20569134,2.95717835,1.53429782,-9.56216049,2.95296192,5.59243488,-9.56216049,8.92634964,5.55286884,-9.20568848,8.92634964,5.55286884,-9.20569229,2.95296144,5.59243488,-9.52548218,8.93966007,17.50886536,-9.52548218,8.93520832,13.51080894,-9.52548218,2.94473267,13.51097298,-9.52548218,2.94057775,17.50873947,-9.52548122,8.92634869,5.55286837,-9.52548122,8.92183113,1.49438465,-9.52548218,2.95717907,1.53429925,-9.52548122,2.95296144,5.59243345],"positionIndices":[0,1,3,3,1,2,6,4,13,4,12,13,13,12,17,5,7,16,7,17,16,12,16,17,8,6,14,6,13,14,14,13,18,7,9,17,9,18,17,13,17,18,20,21,23,23,21,22,20,23,10,6,8,4,4,8,23,8,10,23,12,15,16,16,15,19,25,24,27,27,24,26,9,11,19,19,11,24,11,26,24,12,22,15,15,22,21,12,4,22,22,4,23,16,19,25,25,19,24,26,11,27,9,7,11,7,5,11,5,27,11,5,16,27,27,16,25,8,14,15,9,19,18,15,14,19,14,18,19,8,15,10,15,21,10,21,20,10,29,30,28,28,30,31,39,48,41,48,50,41,50,49,41,37,42,39,39,42,48,42,43,48,48,43,46,36,38,43,43,38,46,36,35,38,38,35,40,34,35,33,33,35,44,44,35,45,35,32,45,34,37,41,41,37,39,34,41,35,41,49,35,49,47,35,47,40,35,34,35,37,37,35,36,46,38,51,38,40,51,40,47,51,53,54,52,52,54,55,56,58,57,57,58,59,50,51,52,52,51,53,51,47,53,53,47,54,47,49,54,54,49,55,49,50,55,55,50,52,48,46,57,57,46,56,46,51,56,56,51,58,51,50,58,58,50,59,50,48,59,59,48,57,60,71,63,61,64,71,71,64,63,61,73,64,64,73,66,62,60,65,63,67,60,60,67,65,62,70,60,71,60,72,60,70,72,64,66,63,67,63,68,63,66,68,68,69,67,67,69,65,72,73,71,71,73,61,69,70,65,65,70,62,69,68,70,70,68,72,72,68,73,73,68,66,74,75,82,82,75,83,75,76,83,83,76,84,76,77,84,84,77,85,77,78,85,85,78,86,78,79,86,86,79,87,79,80,87,87,80,88,80,81,88,88,81,89,81,74,89,89,74,82,81,80,74,80,79,74,79,78,74,74,78,75,75,78,76,78,77,76,89,82,88,88,82,87,87,82,86,82,83,86,83,84,86,84,85,86,90,91,92,92,91,93,92,93,94,94,93,95,94,95,96,96,95,97,96,97,90,90,97,91,91,97,93,93,97,95,90,92,96,96,92,94,98,99,106,106,99,107,99,100,107,107,100,108,100,101,108,108,101,109,101,102,109,109,102,110,102,103,110,110,103,111,103,104,111,111,104,112,104,105,112,112,105,113,105,98,113,113,98,106,105,104,98,104,103,98,103,102,98,98,102,99,99,102,100,102,101,100,113,106,112,112,106,111,111,106,110,106,107,110,107,108,110,108,109,110,115,116,114,114,116,117,118,119,121,121,119,120,123,124,122,126,122,125,122,124,125,127,128,130,130,128,129,131,132,134,134,132,133,135,136,138,138,136,137,139,140,142,142,140,141,145,146,144,146,147,144,143,144,147,148,149,153,153,149,152,152,149,151,149,150,151,155,156,154,157,158,156,154,156,158,160,161,159,159,161,164,164,161,163,161,162,163,165,166,168,168,166,167,170,171,169,173,169,172,169,171,172,174,175,179,179,175,178,178,175,177,175,176,177,180,181,184,183,184,182,181,182,184,185,186,189,186,187,189,187,188,189,190,191,193,193,191,192,194,195,197,197,195,196,198,199,201,201,199,200,202,203,205,205,203,204,207,208,206,206,208,211,211,208,210,208,209,210,213,214,212,212,214,215,216,217,219,219,217,218,220,221,223,223,221,222,224,225,227,227,225,226,228,229,231,231,229,230,232,233,235,235,233,234,236,237,239,239,237,238,240,241,243,243,241,242,244,245,251,251,245,250,250,245,249,249,245,248,248,245,247,245,246,247,252,253,260,258,259,257,257,259,256,256,259,255,255,259,254,254,259,253,253,259,260,261,262,264,264,262,263,265,266,268,268,266,267,269,270,272,272,270,271,273,274,276,276,274,275,277,278,280,280,278,279,281,282,284,284,282,283,285,286,288,288,286,287,289,290,292,292,290,291,293,294,296,296,294,295,297,298,300,300,298,299,301,302,304,304,302,303,305,306,308,308,306,307,309,310,316,316,310,315,315,310,314,314,310,313,313,310,312,310,311,312,322,323,321,324,325,323,323,325,321,321,325,320,320,325,319,319,325,318,317,318,325,327,328,326,326,328,329,330,331,333,333,331,332,335,336,334,334,336,337,338,339,341,341,339,340,342,343,345,345,343,344,346,347,349,349,347,348,350,351,353,353,351,352,354,355,357,357,355,356,358,359,361,361,359,360,362,363,365,365,363,364,366,367,369,369,367,368,370,371,373,373,371,372,375,376,374,374,376,377]}},"metadata":{"exporter":"maya-json-export","version":0.0}} -------------------------------------------------------------------------------- /demo/app.js: -------------------------------------------------------------------------------- 1 | /* 2 | A generic orbiter ThreeJS app. 3 | */ 4 | const createControls = require('orbit-controls'); 5 | 6 | module.exports = createApp; 7 | function createApp (opt = {}) { 8 | // Scale for retina 9 | const dpr = window.devicePixelRatio; 10 | 11 | // Our WebGL renderer with alpha and device-scaled 12 | const renderer = new THREE.WebGLRenderer(opt); 13 | renderer.setPixelRatio(dpr); 14 | 15 | // Show the on screen 16 | const canvas = renderer.domElement; 17 | document.body.appendChild(canvas); 18 | 19 | // 3D camera looking at [ 0, 0, 0 ] 20 | const target = new THREE.Vector3(); 21 | const camera = new THREE.PerspectiveCamera(50, 1, 0.1, 1000); 22 | camera.position.copy(new THREE.Vector3().fromArray(opt.position || [ 0, 0, 0])); 23 | camera.lookAt(target); 24 | 25 | // 3D scene 26 | const scene = new THREE.Scene(); 27 | 28 | // 3D orbit controller 29 | const controls = createControls({ 30 | distance: 15, 31 | distanceBounds: [0, Infinity], 32 | phi: 1, 33 | theta: 1 34 | }); 35 | 36 | // Update frame size 37 | window.addEventListener('resize', resize); 38 | resize(); 39 | 40 | // Create a requestAnimationFrame loop 41 | return { 42 | renderer, 43 | camera, 44 | controls, 45 | scene, 46 | updateProjectionMatrix 47 | }; 48 | 49 | function updateProjectionMatrix () { 50 | const width = window.innerWidth; 51 | const height = window.innerHeight; 52 | const aspect = width / height; 53 | 54 | // update controls 55 | controls.update(); 56 | camera.position.fromArray(controls.position); 57 | camera.up.fromArray(controls.up); 58 | camera.lookAt(target.fromArray(controls.direction)); 59 | renderer.render(scene, camera); 60 | 61 | // Update camera matrices 62 | camera.aspect = aspect; 63 | camera.updateProjectionMatrix(); 64 | } 65 | 66 | function resize () { 67 | renderer.setSize(window.innerWidth, window.innerHeight); 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /demo/diffuse.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Experience-Monks/maya-json-export/a77debbc24be36e510cf1c385173da5755fea2a7/demo/diffuse.jpg -------------------------------------------------------------------------------- /demo/index.js: -------------------------------------------------------------------------------- 1 | global.THREE = require('three'); 2 | const createApp = require('./app'); 3 | const createLoop = require('raf-loop'); 4 | const loadModel = require('./load'); 5 | 6 | // create our app, passing GL context and canvas along! 7 | const { 8 | renderer, 9 | camera, 10 | scene, 11 | updateProjectionMatrix 12 | } = createApp({ 13 | antialias: true 14 | }); 15 | 16 | renderer.setClearColor('#24bdf4', 1); 17 | 18 | const city = loadModel('demo/House.jsm', (err) => { 19 | if (err) return window.alert(err.message); 20 | }); 21 | scene.add(city); 22 | 23 | city.position.z = 6; 24 | city.rotation.y = -Math.PI / 2; 25 | city.scale.multiplyScalar(0.15); 26 | 27 | // Render loop 28 | createLoop(function () { 29 | updateProjectionMatrix(); 30 | 31 | // Render instanced meshes 32 | renderer.render(scene, camera); 33 | }).start(); 34 | -------------------------------------------------------------------------------- /demo/load.js: -------------------------------------------------------------------------------- 1 | const request = require('xhr-request'); 2 | const noop = function () {}; 3 | 4 | module.exports = function (src, cb) { 5 | cb = cb || noop; 6 | const container = new THREE.Object3D(); 7 | request(src, { json: true }, (err, json) => { 8 | if (err) return cb(err); 9 | const geometries = {}; 10 | Object.keys(json.geometries).forEach(k => { 11 | const buffer = new THREE.BufferGeometry(); 12 | const { 13 | normal, 14 | normalIndices, 15 | uv, 16 | uvIndices, 17 | position, 18 | positionIndices, 19 | groups 20 | } = json.geometries[k]; 21 | 22 | const positionArray = new Float32Array(positionIndices.length * 3); 23 | const normalArray = new Float32Array(positionIndices.length * 3); 24 | const uvArray = new Float32Array(positionIndices.length * 2); 25 | 26 | for (let i = 0; i < positionIndices.length; i++) { 27 | const positionIndex = positionIndices[i]; 28 | const normalIndex = normalIndices[i]; 29 | const uvIndex = uvIndices[i]; 30 | for (let j = 0; j < 3; j++) { 31 | positionArray[i * 3 + j] = position[positionIndex * 3 + j]; 32 | normalArray[i * 3 + j] = normal[normalIndex * 3 + j]; 33 | if (j < 3) uvArray[i * 2 + j] = uv[uvIndex * 2 + j]; 34 | } 35 | } 36 | 37 | buffer.addAttribute('position', new THREE.BufferAttribute(positionArray, 3)); 38 | buffer.addAttribute('normal', new THREE.BufferAttribute(normalArray, 3)); 39 | buffer.addAttribute('uv', new THREE.BufferAttribute(uvArray, 2)); 40 | buffer.name = k; 41 | 42 | groups.forEach(({ start, count, materialIndex }) => { 43 | buffer.addGroup(start, count, materialIndex); 44 | }); 45 | geometries[k] = buffer; 46 | }); 47 | 48 | // A more advanced parser would determine which material 49 | // to use, e.g. MeshStandardMaterial vs MeshLambertMaterial 50 | const materials = json.materials.map(material => { 51 | const loader = new THREE.TextureLoader(); 52 | const map = material.mapDiffuse 53 | ? loader.load(`${material.mapDiffuse}`) 54 | : undefined; 55 | if (map) { 56 | return new THREE.MeshBasicMaterial({ 57 | side: THREE.DoubleSide, 58 | map: map 59 | }); 60 | } else { 61 | return new THREE.MeshBasicMaterial({ 62 | color: 0xd1d1d1 63 | }); 64 | } 65 | }); 66 | 67 | const meshes = json.instances.map(instance => { 68 | if (!(instance.id in geometries)) { 69 | throw new Error(`Could not find geometry ${instance.id} from mesh ${instance.name}`); 70 | } 71 | 72 | const geometry = geometries[instance.id]; 73 | const material = new THREE.MultiMaterial(materials); 74 | const mesh = new THREE.Mesh(geometry, material); 75 | mesh.position.fromArray(instance.position); 76 | mesh.scale.fromArray(instance.scale); 77 | mesh.quaternion.fromArray(instance.quaternion); 78 | mesh.name = instance.name; 79 | return mesh; 80 | }); 81 | meshes.forEach(mesh => container.add(mesh)); 82 | console.log('Geometries', Object.keys(geometries).length); 83 | console.log('Meshes', meshes.length); 84 | 85 | cb(null, container); 86 | }); 87 | return container; 88 | }; 89 | -------------------------------------------------------------------------------- /exporter/plug-ins/SimpleJSON.py: -------------------------------------------------------------------------------- 1 | """ 2 | A generic JSON mesh exporter for Maya. 3 | 4 | Authors: 5 | Sean Griffin 6 | Matt DesLauriers 7 | """ 8 | 9 | import sys 10 | 11 | import os.path 12 | import json 13 | import shutil 14 | 15 | from pymel.core import * 16 | from maya.OpenMaya import * 17 | from maya.OpenMayaMPx import * 18 | 19 | kPluginTranslatorTypeName = 'SimpleJSON.json' 20 | kOptionScript = 'SimpleJSONScript' 21 | kDefaultOptionsString = '0' 22 | 23 | FLOAT_PRECISION = 8 24 | 25 | class SimpleJSONWriter(object): 26 | def __init__(self): 27 | self.componentKeys = [ 28 | 'vertices', 'normals', 'groups', 'uvs', 'dedupe', 29 | 'materials', 'diffuseMaps', 'specularMaps', 'bumpMaps', 30 | 'prettyOutput' 31 | ] 32 | 33 | def write(self, path, optionString, accessMode): 34 | self.path = path 35 | self.accessMode = accessMode 36 | self._parseOptions(optionString) 37 | self.materials = [] 38 | self.geometries = {} 39 | self.instances = [] 40 | 41 | if self.options["materials"]: 42 | print("Exporting All Materials...") 43 | self._exportMaterials() 44 | 45 | self._exportMeshes() 46 | 47 | print("Writing file...") 48 | output = { 49 | 'metadata': { 50 | 'exporter': 'maya-json-export', 51 | 'version': 0.0 52 | }, 53 | 'materials': self.materials, 54 | 'instances': self.instances, 55 | 'geometries': self.geometries 56 | } 57 | 58 | with file(path, 'w') as f: 59 | if self.options['prettyOutput']: 60 | f.write(json.dumps(output, sort_keys=True, indent=4, separators=(',', ': '))) 61 | else: 62 | f.write(json.dumps(output, separators=(",",":"))) 63 | 64 | def _getMeshes(self, nodes): 65 | meshes = [] 66 | for node in nodes: 67 | if nodeType(node) == 'transform' and nodeType(node.getShape()) == 'mesh': 68 | meshes.append(node.getShape()) 69 | else: 70 | for child in listRelatives(node, s=1): 71 | if nodeType(child) == 'transform' and nodeType(node.getShape()) == 'mesh': 72 | meshes.append(child.getShape()) 73 | return meshes 74 | 75 | def _allMeshes(self): 76 | if self.accessMode == MPxFileTranslator.kExportAccessMode: 77 | print('Export all...') 78 | meshes = self._getMeshes(ls()) 79 | elif self.accessMode == MPxFileTranslator.kExportActiveAccessMode: 80 | print('Export selection...') 81 | meshes = self._getMeshes(ls(selection=True)) 82 | 83 | triMeshes = [] 84 | for mesh in meshes: 85 | invalid = any(face.polygonVertexCount() != 3 for face in mesh.faces) 86 | if invalid: 87 | print('WARN: Skipping %s since it is not triangulated' % mesh.name()) 88 | else: 89 | triMeshes.append(mesh) 90 | 91 | print('Exporting %d meshes' % len(triMeshes)) 92 | return triMeshes 93 | 94 | def _parseOptions(self, optionsString): 95 | self.options = dict([(x, False) for x in self.componentKeys]) 96 | for key in self.componentKeys: 97 | self.options[key] = key in optionsString 98 | 99 | def _exportMeshes(self): 100 | for mesh in self._allMeshes(): 101 | name = mesh.name() 102 | underIdx = name.rfind('_') 103 | if self.options['dedupe'] and underIdx != -1: 104 | key = name[ : underIdx] 105 | instanceName = name[underIdx + 1 : ] 106 | if (key not in self.geometries): 107 | self._exportGeometry(mesh, key) 108 | else: 109 | print('Repeating instance %s' % name) 110 | self._exportMeshInstance(mesh, key, name) 111 | else: 112 | self._exportGeometry(mesh, name) 113 | self._exportMeshInstance(mesh, name, name) 114 | 115 | def _exportGeometry(self, mesh, key): 116 | print('Exporting geometry %s' % mesh.name()) 117 | geom = {} 118 | self.geometries[key] = geom 119 | if self.options['vertices']: 120 | geom['position'] = self._getVertices(mesh) 121 | geom['positionIndices'] = self._getFaces(mesh) 122 | if self.options['normals']: 123 | geom['normal'] = self._getNormals(mesh) 124 | geom['normalIndices'] = self._getNormalIndices(mesh) 125 | if self.options['uvs']: 126 | geom['uv'] = self._getUVs(mesh) 127 | geom['uvIndices'] = self._getUVIndices(mesh) 128 | if self.options['groups']: 129 | geom['groups'] = self._getGroups(mesh) 130 | 131 | def _exportMeshInstance(self, mesh, geometryName, instanceName): 132 | parent = mesh.getParent() 133 | translation = parent.getTranslation(space='world') 134 | quaternion = parent.getRotation(space='world', quaternion=True) 135 | scale = parent.getScale() 136 | self.instances.append({ 137 | 'id': geometryName, 138 | 'name': instanceName, 139 | 'position': self._roundPos(translation), 140 | 'scale': scale, 141 | 'quaternion': self._roundQuat(quaternion) 142 | }) 143 | 144 | def _roundPos(self, pos): 145 | return map(lambda x: round(x, FLOAT_PRECISION), [pos.x, pos.y, pos.z]) 146 | 147 | def _roundQuat(self, rot): 148 | return map(lambda x: round(x, FLOAT_PRECISION), [rot.x, rot.y, rot.z, rot.w]) 149 | 150 | def _getGroups(self, mesh): 151 | matIds = [] 152 | groups = [] 153 | numPoints = len(mesh.faces) * 3 154 | for face in mesh.faces: 155 | matIds.append(self._getMaterialIndex(face, mesh)) 156 | # just one material index for whole geometry 157 | if all(x == matIds[0] for x in matIds): 158 | groups.append({ 159 | 'start': 0, 160 | 'count': numPoints, 161 | 'materialIndex': matIds[0] 162 | }) 163 | # needs MultiMaterial 164 | else: 165 | lastId = matIds[0] 166 | start = 0 167 | for idx, matId in enumerate(matIds): 168 | if matId != lastId: 169 | groups.append({ 170 | 'start': start * 3, 171 | 'count': (idx - start) * 3, 172 | 'materialIndex': lastId 173 | }) 174 | lastId = matId 175 | start = idx 176 | # add final group 177 | groups.append({ 178 | 'start': start * 3, 179 | 'count': (len(mesh.faces) - start) * 3, 180 | 'materialIndex': lastId 181 | }) 182 | return groups 183 | 184 | def _getMaterialIndex(self, face, mesh): 185 | if not hasattr(self, '_materialIndices'): 186 | self._materialIndices = dict([(mat['DbgName'], i) for i, mat in enumerate(self.materials)]) 187 | 188 | if self.options['materials']: 189 | for engine in mesh.listConnections(type='shadingEngine'): 190 | if sets(engine, isMember=face) or sets(engine, isMember=mesh): 191 | for material in engine.listConnections(type='lambert'): 192 | if self._materialIndices.has_key(material.name()): 193 | return self._materialIndices[material.name()] 194 | return -1 195 | 196 | def _getFaces(self, mesh): 197 | faces = [] 198 | for face in mesh.faces: 199 | faces += face.getVertices() 200 | return faces 201 | 202 | def _getVertices(self, mesh, indexed=False): 203 | points = mesh.getPoints(space='object') 204 | return [ coord for point in points for coord in self._roundPos(point) ] 205 | 206 | def _getNormals(self, mesh, indexed=False): 207 | normals = [] 208 | for normal in mesh.getNormals(): 209 | normals += self._roundPos(normal) 210 | return normals 211 | 212 | def _getNormalIndices(self, mesh): 213 | indices = [] 214 | for face in mesh.faces: 215 | for i in range(3): 216 | indices.append(face.normalIndex(i)) 217 | return indices 218 | 219 | def _getUVIndices(self, mesh): 220 | indices = [] 221 | for face in mesh.faces: 222 | for i in range(3): 223 | indices.append(face.getUVIndex(i)) 224 | return indices 225 | 226 | def _getUVs(self, mesh, indexed=False): 227 | uvs = [] 228 | us, vs = mesh.getUVs() 229 | for i, u in enumerate(us): 230 | uvs.append(u) 231 | uvs.append(vs[i]) 232 | return uvs 233 | 234 | def _exportMaterials(self): 235 | for mat in ls(type='lambert'): 236 | self.materials.append(self._exportMaterial(mat)) 237 | 238 | def _exportMaterial(self, mat): 239 | result = { 240 | "DbgName": mat.name(), 241 | "blending": "NormalBlending", 242 | "colorDiffuse": map(lambda i: i * mat.getDiffuseCoeff(), mat.getColor().rgb), 243 | "depthTest": True, 244 | "depthWrite": True, 245 | "shading": mat.__class__.__name__, 246 | "opacity": mat.getTransparency().a, 247 | "transparent": mat.getTransparency().a != 1.0, 248 | "vertexColors": False 249 | } 250 | if isinstance(mat, nodetypes.Phong): 251 | result["colorSpecular"] = mat.getSpecularColor().rgb 252 | result["reflectivity"] = mat.getReflectivity() 253 | result["specularCoef"] = mat.getCosPower() 254 | if self.options["specularMaps"]: 255 | self._exportSpecularMap(result, mat) 256 | if self.options["bumpMaps"]: 257 | self._exportBumpMap(result, mat) 258 | if self.options["diffuseMaps"]: 259 | self._exportDiffuseMap(result, mat) 260 | 261 | return result 262 | 263 | def _exportBumpMap(self, result, mat): 264 | for bump in mat.listConnections(type='bump2d'): 265 | for f in bump.listConnections(type='file'): 266 | result["mapNormalFactor"] = 1 267 | self._exportFile(result, f, "Normal") 268 | 269 | def _exportDiffuseMap(self, result, mat): 270 | for f in mat.attr('color').inputs(): 271 | result["colorDiffuse"] = f.attr('defaultColor').get() 272 | self._exportFile(result, f, "Diffuse") 273 | 274 | def _exportSpecularMap(self, result, mat): 275 | for f in mat.attr('specularColor').inputs(): 276 | result["colorSpecular"] = f.attr('defaultColor').get() 277 | self._exportFile(result, f, "Specular") 278 | 279 | def _exportFile(self, result, mapFile, mapType): 280 | src = mapFile.ftn.get() 281 | fName = os.path.basename(src) 282 | result["map" + mapType] = fName 283 | result["map" + mapType + "Repeat"] = [1, 1] 284 | result["map" + mapType + "Wrap"] = ["repeat", "repeat"] 285 | result["map" + mapType + "Anisotropy"] = 4 286 | 287 | class SimpleJSONTranslator(MPxFileTranslator): 288 | def __init__(self): 289 | MPxFileTranslator.__init__(self) 290 | 291 | def haveWriteMethod(self): 292 | return True 293 | 294 | def filter(self): 295 | return '*.js*' 296 | 297 | def defaultExtension(self): 298 | return 'json' 299 | 300 | def writer(self, fileObject, optionString, accessMode): 301 | path = fileObject.fullName() 302 | writer = SimpleJSONWriter() 303 | writer.write(path, optionString, accessMode) 304 | 305 | 306 | def translatorCreator(): 307 | return asMPxPtr(SimpleJSONTranslator()) 308 | 309 | def initializePlugin(mobject): 310 | mplugin = MFnPlugin(mobject) 311 | try: 312 | mplugin.registerFileTranslator(kPluginTranslatorTypeName, None, translatorCreator, kOptionScript, kDefaultOptionsString) 313 | except: 314 | sys.stderr.write('Failed to register translator: %s' % kPluginTranslatorTypeName) 315 | raise 316 | 317 | def uninitializePlugin(mobject): 318 | mplugin = MFnPlugin(mobject) 319 | try: 320 | mplugin.deregisterFileTranslator(kPluginTranslatorTypeName) 321 | except: 322 | sys.stderr.write('Failed to deregister translator: %s' % kPluginTranslatorTypeName) 323 | raise 324 | -------------------------------------------------------------------------------- /exporter/scripts/SimpleJSONScript.mel: -------------------------------------------------------------------------------- 1 | // JSONScript.mel 2 | // Author: Sean Griffin 3 | // Modified by: Matt DesLauriers 4 | // Email: sean@thoughtbot.com 5 | 6 | global proc int SimpleJSONScript(string $parent, string $action, string $settings, string $callback) 7 | { 8 | if ($action == "post") 9 | { 10 | setParent $parent; 11 | columnLayout -adj true; 12 | 13 | frameLayout -cll true -cl false -bv true -l "General Export Options"; 14 | columnLayout -adj true; 15 | checkBox -v true -l "Vertices" vertsCb; 16 | checkBox -v true -l "Normals" normalsCb; 17 | checkBox -v true -l "UVs" uvsCb; 18 | checkBox -v true -l "Groups" groupsCb; 19 | checkBox -v false -l "Dedupe" dedupeCb; 20 | setParent ..; // columnLayout 21 | setParent ..; // frameLayout 22 | 23 | frameLayout -cll true -cl false -bv true -l "Skinning Options"; 24 | columnLayout -adj true; 25 | checkBox -v true -l "Materials" materialsCb; 26 | checkBox -v true -l "Diffuse Maps" diffuseMapsCb; 27 | checkBox -v true -l "Specular Maps" specularMapsCb; 28 | checkBox -v true -l "Bump Maps" bumpMapsCb; 29 | setParent ..; // columnLayout 30 | setParent ..; // frameLayout 31 | 32 | frameLayout -cll true -cl false -bv true -l "Debug Options"; 33 | columnLayout -adj true; 34 | checkBox -v false -l "Pretty Output" prettyOutputCb; 35 | setParent ..; // columnLayout 36 | setParent ..; // frameLayout 37 | 38 | } 39 | else if ($action == "query") 40 | { 41 | string $option = "\""; 42 | if (`checkBox -q -v vertsCb`) 43 | $option += "vertices "; 44 | if (`checkBox -q -v normalsCb`) 45 | $option += "normals "; 46 | if (`checkBox -q -v uvsCb`) 47 | $option += "uvs "; 48 | if (`checkBox -q -v groupsCb`) 49 | $option += "groups "; 50 | if (`checkBox -q -v dedupeCb`) 51 | $option += "dedupe "; 52 | if (`checkBox -q -v materialsCb`) 53 | $option += "materials "; 54 | if (`checkBox -q -v diffuseMapsCb`) 55 | $option += "diffuseMaps "; 56 | if (`checkBox -q -v specularMapsCb`) 57 | $option += "specularMaps "; 58 | if (`checkBox -q -v bumpMapsCb`) 59 | $option += "bumpMaps "; 60 | if (`checkBox -q -v prettyOutputCb`) 61 | $option += "prettyOutput "; 62 | $option += "\""; 63 | eval($callback + $option); 64 | } 65 | return 1; 66 | } 67 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | maya-json-export 7 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "maya-json-export", 3 | "version": "1.0.0", 4 | "description": "a generic Maya to JSON exporter for triangle meshes", 5 | "main": "index.js", 6 | "license": "MIT", 7 | "author": { 8 | "name": "Matt DesLauriers", 9 | "email": "dave.des@gmail.com", 10 | "url": "https://github.com/mattdesl" 11 | }, 12 | "dependencies": { 13 | "orbit-controls": "^1.0.4", 14 | "raf-loop": "^1.1.3", 15 | "three": "^0.74.0", 16 | "three-orbit-viewer": "^69.3.0", 17 | "xhr-request": "^1.0.1" 18 | }, 19 | "devDependencies": { 20 | "babel-preset-es2015": "^6.5.0", 21 | "babelify": "^7.2.0", 22 | "browserify": "^13.0.0", 23 | "budo": "^8.0.4", 24 | "uglify-js": "^2.6.2" 25 | }, 26 | "private": true, 27 | "scripts": { 28 | "test": "node test.js", 29 | "start": "budo demo/:bundle.js --live -- -t babelify", 30 | "build": "browserify demo/index.js -t babelify | uglifyjs -m -c warnings=false > bundle.js" 31 | }, 32 | "keywords": [ 33 | "maya", 34 | "json", 35 | "three", 36 | "js", 37 | "threejs", 38 | "three.js", 39 | "export", 40 | "2016", 41 | "mesh", 42 | "geometry", 43 | "parse", 44 | "parser" 45 | ], 46 | "repository": { 47 | "type": "git", 48 | "url": "git://github.com/Jam3/maya-json-export.git" 49 | }, 50 | "homepage": "https://github.com/Jam3/maya-json-export", 51 | "bugs": { 52 | "url": "https://github.com/Jam3/maya-json-export/issues" 53 | } 54 | } --------------------------------------------------------------------------------