{"id":826541,"date":"2020-04-22T06:44:52","date_gmt":"2020-04-22T13:44:52","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=826541"},"modified":"2020-06-17T06:14:44","modified_gmt":"2020-06-17T13:14:44","slug":"low-poly-ski-resort-map-1","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1","title":{"rendered":"A low poly ski resort map &#8211; part I: generating the terrain"},"author":9302,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[23771],"tags":[549072],"industry":[],"product":[36831],"class_list":["post-826541","blog","type-blog","status-publish","format-standard","hentry","category-3d-gis","tag-esrirdzurich","product-js-api-arcgis"],"acf":{"short_description":"This is the first part of a blog series explaining how to create a ski resort map in a low poly style with ArcGIS API for JavaScript.","flexible_content":[{"acf_fc_layout":"content","content":"<p>In a <a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/3d-maps-in-low-poly-style\/\">previous blog<\/a> post Raluca describes how low poly is a style for 3D maps using abstraction, sharp edges and artistic design. Let&#8217;s have a look how we can apply such techniques to a scene using the <a href=\"https:\/\/developers.arcgis.com\/javascript\/\">ArcGIS API for JavaScript<\/a>.<\/p>\n<p>As a playground we chose <a href=\"https:\/\/www.mammothmountain.com\/\">Mammoth Mountain<\/a>, a ski resort in Northern California. It&#8217;s one example of how well the low poly style works to emphasize on ski slopes, lifts and point of interests, while simplifying the terrain and exaggerating the size of objects. The <a href=\"https:\/\/github.com\/RalucaNicola\/ski-resort-map\">source code<\/a> together with a <a href=\"https:\/\/ralucanicola.github.io\/ski-resort-map\/\">live demo<\/a> are available online.<\/p>\n"},{"acf_fc_layout":"youtube","start_time":"0","end_time":"","youtube_video_url":"<iframe title=\"Creating a low poly map with the ArcGIS API for JavaScript\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/4ilMefmgb0Q?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>"},{"acf_fc_layout":"content","content":"<p>In this first of two blogs we will focus on creating the terrain. It lays out the foundation for the look and feel of our sample of Mammoth Mountain. We will highlight the iconic shape of the mountains by generating a triangulated irregular network (TIN) directly in the browser.<\/p>\n<h2>Step 1: Irregular grid<\/h2>\n<p>Once we have defined the extent in Web Mercator, the first step of creating a TIN is placing the vertices at which we want to sample the elevation. Before creating an irregular grid, we will start by evenly distributing vertices within the extent. We decided to use an average distance of 200 meters, resulting in roughly 1.5k vertices.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":827991,"id":827991,"title":"01-grid-regular","filename":"01-grid-regular.png","filesize":416169,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/01-grid-regular.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1\/01-grid-regular","alt":"","author":"9302","description":"","caption":"","name":"01-grid-regular","status":"inherit","uploaded_to":826541,"date":"2020-04-21 08:50:16","modified":"2020-04-21 08:50:16","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":960,"height":540,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/01-grid-regular-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/01-grid-regular.png","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/01-grid-regular.png","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/01-grid-regular.png","large-width":960,"large-height":540,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/01-grid-regular.png","1536x1536-width":960,"1536x1536-height":540,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/01-grid-regular.png","2048x2048-width":960,"2048x2048-height":540,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/01-grid-regular-826x465.png","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/01-grid-regular.png","wide_image-width":960,"wide_image-height":540}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>We introduce irregularity by randomly deviating each of the vertices within their grid cell. In addition, we reduce the deviation range to make sure the points always keep a certain distance to each other.<\/p>\n<p>A side note on randomness: in our app we replaced Math.random() with a library called <a href=\"https:\/\/github.com\/davidbau\/seedrandom\">seedrandom.js<\/a>. It also generates floating-point numbers between 0 and less than 1, but allows us to define a seed so we always receive the same numbers each time we run the app. It\u00a0has the advantage that we always end up with the same pattern. This is helpful when debugging and as we will see later, also required for aligning the thematic data along the terrain. While this doesn&#8217;t sound random at all anymore it works perfectly for our use case. In the end we just want our vertices to be placed irregularly.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":828001,"id":828001,"title":"02-grid-irregular","filename":"02-grid-irregular.png","filesize":226246,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/02-grid-irregular.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1\/02-grid-irregular","alt":"","author":"9302","description":"","caption":"","name":"02-grid-irregular","status":"inherit","uploaded_to":826541,"date":"2020-04-21 08:50:28","modified":"2020-04-21 08:50:28","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":960,"height":540,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/02-grid-irregular-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/02-grid-irregular.png","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/02-grid-irregular.png","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/02-grid-irregular.png","large-width":960,"large-height":540,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/02-grid-irregular.png","1536x1536-width":960,"1536x1536-height":540,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/02-grid-irregular.png","2048x2048-width":960,"2048x2048-height":540,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/02-grid-irregular-826x465.png","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/02-grid-irregular.png","wide_image-width":960,"wide_image-height":540}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2>Step 2: Triangulation<\/h2>\n<p>The next step in creating a TIN is connecting all vertices so that the extent is completely covered with adjacent triangles. An algorithm that solves this problem is called <a href=\"https:\/\/en.wikipedia.org\/wiki\/Delaunay_triangulation\">Delaunay triangulation<\/a>.<\/p>\n<p>You can find several JavaScript implementations of it online and we will also rely on the library <a href=\"https:\/\/github.com\/mapbox\/delaunator\">Delaunator<\/a> created by Vladimir Agafonkin (check out his <a href=\"https:\/\/github.com\/mourner\">GitHub profile<\/a> for a range of spatial libraries). Delaunator is very efficient but assumes that the input vertices represent a convex area, which is the case for our rectangular extent.<\/p>\n<pre><code style=\"padding: 0.5em; color: #333; background: #f8f8f8;\"><span style=\"color: #333; font-weight: bold;\">const<\/span> delaunay = <span style=\"color: #333; font-weight: bold;\">new<\/span> Delaunator(vertices);\r\n<span style=\"color: #333; font-weight: bold;\">const<\/span> triangles = delaunay.triangles;\r\n<\/code><\/pre>\n<p>Note how the outer edge is now made up of triangle faces but still perfectly straight. That&#8217;s because we only deviated the vertex coordinates inside and along the extent.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":828011,"id":828011,"title":"03-grid-delaunay","filename":"03-grid-delaunay.png","filesize":337737,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/03-grid-delaunay.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1\/03-grid-delaunay","alt":"","author":"9302","description":"","caption":"","name":"03-grid-delaunay","status":"inherit","uploaded_to":826541,"date":"2020-04-21 08:50:40","modified":"2020-04-21 08:50:40","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":960,"height":540,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/03-grid-delaunay-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/03-grid-delaunay.png","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/03-grid-delaunay.png","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/03-grid-delaunay.png","large-width":960,"large-height":540,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/03-grid-delaunay.png","1536x1536-width":960,"1536x1536-height":540,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/03-grid-delaunay.png","2048x2048-width":960,"2048x2048-height":540,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/03-grid-delaunay-826x465.png","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/03-grid-delaunay.png","wide_image-width":960,"wide_image-height":540}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2>Step 3: Elevate the triangles<\/h2>\n<p>At this point we are ready to create a 3D visualization of our TIN. All we need to do is add a z-component to each of the triangle vertices. Using the ArcGIS API for JavaScript&#8217;s <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-layers-ElevationLayer.html#queryElevation\">ElevationLayer.queryElevation()<\/a> method we can obtain all required real-world heights with a single request.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":828021,"id":828021,"title":"04-terrain-mesh","filename":"04-terrain-mesh.png","filesize":60088,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/04-terrain-mesh.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1\/04-terrain-mesh","alt":"","author":"9302","description":"","caption":"","name":"04-terrain-mesh","status":"inherit","uploaded_to":826541,"date":"2020-04-21 08:50:48","modified":"2020-04-21 08:50:48","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1920,"height":1080,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/04-terrain-mesh-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/04-terrain-mesh.png","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/04-terrain-mesh.png","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/04-terrain-mesh.png","large-width":1920,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/04-terrain-mesh-1536x864.png","1536x1536-width":1536,"1536x1536-height":864,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/04-terrain-mesh.png","2048x2048-width":1920,"2048x2048-height":1080,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/04-terrain-mesh-826x465.png","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/04-terrain-mesh.png","wide_image-width":1920,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>Visualizing client-side 3D shapes is where the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-geometry-Mesh.html\">Mesh<\/a> class of the JavaScript API comes in. It&#8217;s a mere wrapper around simple primitives made up of vertices and triangles before they are passed to the graphics card for rendering. As this is what we have been producing so far, we can directly use them to create a new Mesh geometry.<\/p>\n<pre><code style=\"padding: 0.5em; color: #333; background: #f8f8f8;\"><span style=\"color: #333; font-weight: bold;\">new<\/span> <span style=\"color: #458; font-weight: bold;\">Mesh<\/span>({\r\n  components: [\r\n    <span style=\"color: #333; font-weight: bold;\">new<\/span> <span style=\"color: #458; font-weight: bold;\">MeshComponent<\/span>({\r\n      faces: triangles,\r\n      shading: <span style=\"color: #d14;\">\"flat\"<\/span>,\r\n    })\r\n  ],\r\n  vertexAttributes: {\r\n    position: vertices,\r\n  },\r\n  spatialReference: SpatialReference.WebMercator\r\n});\r\n<\/code><\/pre>\n<p>So far we have been applying real-world heights for our 3D terrain. In order to emphasize the shape of the mountain we can double the values returned by the elevation query, exaggerating the final terrain.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":828031,"id":828031,"title":"05-terrain-exaggerated","filename":"05-terrain-exaggerated.png","filesize":76280,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/05-terrain-exaggerated.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1\/05-terrain-exaggerated","alt":"","author":"9302","description":"","caption":"","name":"05-terrain-exaggerated","status":"inherit","uploaded_to":826541,"date":"2020-04-21 08:50:53","modified":"2020-04-21 08:50:53","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1920,"height":1080,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/05-terrain-exaggerated-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/05-terrain-exaggerated.png","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/05-terrain-exaggerated.png","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/05-terrain-exaggerated.png","large-width":1920,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/05-terrain-exaggerated-1536x864.png","1536x1536-width":1536,"1536x1536-height":864,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/05-terrain-exaggerated.png","2048x2048-width":1920,"2048x2048-height":1080,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/05-terrain-exaggerated-826x465.png","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/05-terrain-exaggerated.png","wide_image-width":1920,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2>Step 4: Add foundation<\/h2>\n<p>To give the low poly map a volumetric touch we added a foundation to the terrain. It is in fact represented by a wall connecting each of the border vertices with another vertex at a predefined height. Taking the exaggeration into account we placed the bottom vertices at a height of 4000 meters.<br \/>\nWe created the wall by combining four neighboring vertices using two triangles. As previously done with the terrain, the additional vertices and triangles are passed into the same Mesh geometry using an additional <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-geometry-support-MeshComponent.html\">MeshComponent<\/a>.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":828041,"id":828041,"title":"06-terrain-wall","filename":"06-terrain-wall.png","filesize":83348,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/06-terrain-wall.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1\/06-terrain-wall","alt":"","author":"9302","description":"","caption":"","name":"06-terrain-wall","status":"inherit","uploaded_to":826541,"date":"2020-04-21 08:50:58","modified":"2020-04-21 08:50:58","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1920,"height":1080,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/06-terrain-wall-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/06-terrain-wall.png","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/06-terrain-wall.png","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/06-terrain-wall.png","large-width":1920,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/06-terrain-wall-1536x864.png","1536x1536-width":1536,"1536x1536-height":864,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/06-terrain-wall.png","2048x2048-width":1920,"2048x2048-height":1080,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/06-terrain-wall-826x465.png","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/06-terrain-wall.png","wide_image-width":1920,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2>Step 5: Colors and materials<\/h2>\n<p>The Mesh class provides various properties affecting how the 3D surface is rendered. Besides simple color values, it supports concepts commonly used in computer graphics, such as materials, texture- and normal maps. Thanks to them we can make our 3D terrain look more like a winter landscape.<\/p>\n<p>First we add a color value for each vertex of the mesh. The elevation values we previously queried are used to interpolate between predefined colors. The resulting color values are also passed to the Mesh class using an array and make up the fill color for each triangle.<\/p>\n<pre><code style=\"padding: 0.5em; color: #33333355; background: #f8f8f8;\"><span style=\"color: #33333340; font-weight: bold;\">new<\/span> <span style=\"color: #44558840; font-weight: bold;\">Mesh<\/span>({\r\n  components: [\r\n    <span style=\"color: #33333340; font-weight: bold;\">new<\/span> <span style=\"color: #44558840; font-weight: bold;\">MeshComponent<\/span>({\r\n      faces: triangles,\r\n      shading: <span style=\"color: #dd114440;\">\"flat\"<\/span>,<span style=\"color: #333333;\">\r\n      material: <span style=\"color: #333333; font-weight: bold;\">new<\/span> <span style=\"color: #445588; font-weight: bold;\">MeshMaterialMetallicRoughness<\/span>({\r\n         metallic: <span style=\"color: #008080;\">0.5<\/span>,\r\n         roughness: <span style=\"color: #008080;\">0.8<\/span>,\r\n      })<\/span>\r\n    })\r\n  ],\r\n  vertexAttributes: {\r\n    position: vertices,<span style=\"color: #333333;\">\r\n    color: colorValues,<\/span>\r\n  },\r\n  spatialReference: SpatialReference.WebMercator\r\n});\r\n<\/code><\/pre>\n<p>Besides color we also make use of material properties defined on the mesh component. A new type called <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/api-reference\/esri-geometry-support-MeshMaterialMetallicRoughness.html\">MeshMaterialMetallicRoughness<\/a> supports settings for physical based rendering (PBR), allowing us to model surfaces with metal- or plastic characteristics.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":828051,"id":828051,"title":"07-terrain-materials","filename":"07-terrain-materials.png","filesize":165589,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/07-terrain-materials.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1\/07-terrain-materials","alt":"","author":"9302","description":"","caption":"","name":"07-terrain-materials","status":"inherit","uploaded_to":826541,"date":"2020-04-21 08:51:04","modified":"2020-04-21 08:51:04","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1920,"height":1080,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/07-terrain-materials-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/07-terrain-materials.png","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/07-terrain-materials.png","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/07-terrain-materials.png","large-width":1920,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/07-terrain-materials-1536x864.png","1536x1536-width":1536,"1536x1536-height":864,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/07-terrain-materials.png","2048x2048-width":1920,"2048x2048-height":1080,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/07-terrain-materials-826x465.png","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/07-terrain-materials.png","wide_image-width":1920,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>Thanks to the added effects our terrain now looks like it was truly chiseled out from an ice block. Especially when navigating in the scene you can see the specular reflections added by the metallic material.<\/p>\n<p>This is it for the first part! In the <a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-2\/\">second part of this blog<\/a> Raluca will finish our winter wonderland adding the thematic data: ski lifts, slopes and points of interests.<\/p>\n"}],"authors":[{"ID":9302,"user_firstname":"Arno","user_lastname":"Fiva","nickname":"Arno Fiva","user_nicename":"afiva","display_name":"Arno Fiva","user_email":"afiva@esri.com","user_url":"http:\/\/js.arcgis.com","user_registered":"2019-03-26 21:36:58","user_description":"Developer Evangelist at the Esri R&amp;D Center Z\u00fcrich, creating 3D web apps using the ArcGIS Maps SDK for JavaScript.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_1603-213x200.jpg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"},{"ID":7011,"user_firstname":"Raluca","user_lastname":"Nicola","nickname":"Raluca Nicola","user_nicename":"raluca_zurich","display_name":"Raluca Nicola","user_email":"RNicola@esri.com","user_url":"https:\/\/raluca-nicola.net\/","user_registered":"2018-03-02 00:19:07","user_description":"Raluca works as a web cartographer with the Geo Experience Center team at Esri. She loves to play around with web technologies and visualization styles. If she's not in front of the computer, she's probably somewhere up in the mountains.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/7VkWXsZ3_400x400.jpg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"related_articles":[{"ID":819831,"post_author":"7011","post_date":"2020-04-22 06:46:47","post_date_gmt":"2020-04-22 13:46:47","post_content":"","post_title":"A low poly ski resort map - part II: add thematic data","post_excerpt":"","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"low-poly-ski-resort-map-2","to_ping":"","pinged":"","post_modified":"2020-06-17 05:25:33","post_modified_gmt":"2020-06-17 12:25:33","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=819831","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":806491,"post_author":"7011","post_date":"2020-04-10 12:02:20","post_date_gmt":"2020-04-10 19:02:20","post_content":"","post_title":"Thoughts on creating 3D maps in low poly\u00a0style","post_excerpt":"","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"3d-maps-in-low-poly-style","to_ping":"","pinged":"","post_modified":"2020-06-17 06:16:37","post_modified_gmt":"2020-06-17 13:16:37","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=806491","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"3","filter":"raw"}],"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/ski-card.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/ski-banner.png"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>A low poly ski resort map - part I: generating the terrain<\/title>\n<meta name=\"description\" content=\"First part of a blog series explaining how to create a ski resort map of Mammoth Mountain in a low poly style with ArcGIS API for JavaScript.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A low poly ski resort map - part I: generating the terrain\" \/>\n<meta property=\"og:description\" content=\"First part of a blog series explaining how to create a ski resort map of Mammoth Mountain in a low poly style with ArcGIS API for JavaScript.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1\" \/>\n<meta property=\"og:site_name\" content=\"ArcGIS Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/esrigis\/\" \/>\n<meta property=\"article:modified_time\" content=\"2020-06-17T13:14:44+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1\"},\"author\":{\"name\":\"Arno Fiva\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/781a6e1e56d59223e7af5e76cefab224\"},\"headline\":\"A low poly ski resort map &#8211; part I: generating the terrain\",\"datePublished\":\"2020-04-22T13:44:52+00:00\",\"dateModified\":\"2020-06-17T13:14:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1\"},\"wordCount\":12,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"EsriRDZurich\"],\"articleSection\":[\"3D Visualization &amp; Analytics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1\",\"name\":\"A low poly ski resort map - part I: generating the terrain\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2020-04-22T13:44:52+00:00\",\"dateModified\":\"2020-06-17T13:14:44+00:00\",\"description\":\"First part of a blog series explaining how to create a ski resort map of Mammoth Mountain in a low poly style with ArcGIS API for JavaScript.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A low poly ski resort map &#8211; part I: generating the terrain\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"name\":\"ArcGIS Blog\",\"description\":\"Get insider info from Esri product teams\",\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\",\"name\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"width\":400,\"height\":400,\"caption\":\"Esri\"},\"image\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/esrigis\/\",\"https:\/\/x.com\/ESRI\",\"https:\/\/www.linkedin.com\/company\/5311\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/781a6e1e56d59223e7af5e76cefab224\",\"name\":\"Arno Fiva\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_1603-213x200.jpg\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_1603-213x200.jpg\",\"caption\":\"Arno Fiva\"},\"description\":\"Developer Evangelist at the Esri R&amp;D Center Z\u00fcrich, creating 3D web apps using the ArcGIS Maps SDK for JavaScript.\",\"sameAs\":[\"http:\/\/js.arcgis.com\",\"https:\/\/www.linkedin.com\/in\/arnofiva\/\",\"https:\/\/x.com\/arnofiva\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/afiva\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"A low poly ski resort map - part I: generating the terrain","description":"First part of a blog series explaining how to create a ski resort map of Mammoth Mountain in a low poly style with ArcGIS API for JavaScript.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1","og_locale":"en_US","og_type":"article","og_title":"A low poly ski resort map - part I: generating the terrain","og_description":"First part of a blog series explaining how to create a ski resort map of Mammoth Mountain in a low poly style with ArcGIS API for JavaScript.","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2020-06-17T13:14:44+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1"},"author":{"name":"Arno Fiva","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/781a6e1e56d59223e7af5e76cefab224"},"headline":"A low poly ski resort map &#8211; part I: generating the terrain","datePublished":"2020-04-22T13:44:52+00:00","dateModified":"2020-06-17T13:14:44+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1"},"wordCount":12,"commentCount":1,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["EsriRDZurich"],"articleSection":["3D Visualization &amp; Analytics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1","name":"A low poly ski resort map - part I: generating the terrain","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2020-04-22T13:44:52+00:00","dateModified":"2020-06-17T13:14:44+00:00","description":"First part of a blog series explaining how to create a ski resort map of Mammoth Mountain in a low poly style with ArcGIS API for JavaScript.","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"A low poly ski resort map &#8211; part I: generating the terrain"}]},{"@type":"WebSite","@id":"https:\/\/www.esri.com\/arcgis-blog\/#website","url":"https:\/\/www.esri.com\/arcgis-blog\/","name":"ArcGIS Blog","description":"Get insider info from Esri product teams","publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization","name":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","width":400,"height":400,"caption":"Esri"},"image":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/esrigis\/","https:\/\/x.com\/ESRI","https:\/\/www.linkedin.com\/company\/5311\/"]},{"@type":"Person","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/781a6e1e56d59223e7af5e76cefab224","name":"Arno Fiva","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_1603-213x200.jpg","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_1603-213x200.jpg","caption":"Arno Fiva"},"description":"Developer Evangelist at the Esri R&amp;D Center Z\u00fcrich, creating 3D web apps using the ArcGIS Maps SDK for JavaScript.","sameAs":["http:\/\/js.arcgis.com","https:\/\/www.linkedin.com\/in\/arnofiva\/","https:\/\/x.com\/arnofiva"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/afiva"}]}},"text_date":"April 22, 2020","author_name":"Multiple Authors","author_page":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/3d-gis\/low-poly-ski-resort-map-1","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/ski-banner.png","primary_product":"ArcGIS Maps SDK for JavaScript","tag_data":[{"term_id":549072,"name":"EsriRDZurich","slug":"esrirdzurich","term_group":0,"term_taxonomy_id":549072,"taxonomy":"post_tag","description":"","parent":0,"count":96,"filter":"raw"}],"category_data":[{"term_id":23771,"name":"3D Visualization &amp; Analytics","slug":"3d-gis","term_group":0,"term_taxonomy_id":23771,"taxonomy":"category","description":"","parent":0,"count":687,"filter":"raw"}],"product_data":[{"term_id":36831,"name":"ArcGIS Maps SDK for JavaScript","slug":"js-api-arcgis","term_group":0,"term_taxonomy_id":36831,"taxonomy":"product","description":"","parent":36601,"count":363,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=js-api-arcgis","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/826541","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/users\/9302"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=826541"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/826541\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=826541"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=826541"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=826541"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=826541"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=826541"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}