3D Asset Store Propsplanet upgrades from Unity to PlayCanvas | PlayCanvas Blog
-
+
diff --git a/404.html b/404.html
index 2855183de..99e56c468 100644
--- a/404.html
+++ b/404.html
@@ -5,7 +5,7 @@
Page Not Found | PlayCanvas Blog
-
+
diff --git a/a-graph-rendering-library-for-the-web-pcui-graph/index.html b/a-graph-rendering-library-for-the-web-pcui-graph/index.html
index 74ad2ec9d..d28d9f3d8 100644
--- a/a-graph-rendering-library-for-the-web-pcui-graph/index.html
+++ b/a-graph-rendering-library-for-the-web-pcui-graph/index.html
@@ -5,13 +5,13 @@
A Graph Rendering Library for the Web: PCUI Graph | PlayCanvas Blog
-
+
Today, we are excited to announce a new open source library: PCUI Graph. It’s a graph rendering framework for the browser which can be used to build and view various types of node-based graphs.
-
- PCUI Graph in action
+
+PCUI Graph in action
Last year, we open sourced PCUI, a front-end framework for building web-based tools like the PlayCanvas Editor. This was subsequently used as the foundation for a new family of open source tools: the glTF Viewer and the PlayCanvas Examples Browser. However, some of our more recent tools projects have had requirements related to the creation and editing of node-based graphs. As a result, we set about developing a new plugin to PCUI called PCUI Graph. This plugin is already in use today since it powers both the PlayCanvas Shader Editor and Animation State Graph Editor:
You can rapidly map out key parts of your project’s workflow using pcui-graph, as it supports both directed and visual programming graphs. Here are some of the key features that PCUI Graph provides:
diff --git a/a-multiplayer-3rd-person-shooter-in-html5/index.html b/a-multiplayer-3rd-person-shooter-in-html5/index.html
index 95d192bea..91ed901cb 100644
--- a/a-multiplayer-3rd-person-shooter-in-html5/index.html
+++ b/a-multiplayer-3rd-person-shooter-in-html5/index.html
@@ -5,16 +5,16 @@
Making a multiplayer 3rd-person shooter in HTML5 | PlayCanvas Blog
-
+
-
+D.E.M.O. Multiplayer 3rd-person shooter running in the browser
PlayCanvas were lucky enough to show a demo of our collaborative HTML5 game development toolset at Google I/O a few months back. We had a few existing demos of simple games that we had made in order to test the platform.
However, we really wanted to show something a little more high-end, to showcase the possibilities that HTML5 offers for next-generation browser games. With a little under two weeks to go we started work on the demo we'd feature on the show floor. A networked multiplayer 3rd-person shooter we descriptively called 'scifi'. We’ve since renamed it to the slightly less descriptive D.E.M.O.
-
Try playing D.E.M.O. now.
-Firefox: Hiding the mouse cursor only works in Fullscreen mode, press SPACE to toggle fullscreen.
Firefox: Hiding the mouse cursor only works in Fullscreen mode, press SPACE to toggle fullscreen.
We think the result is something is pretty special so we’re sharing it with you today. We think you’ll agree that it heralds the beginning of a new generation of HTML5 games.
We also wanted to talk about how using PlayCanvas allowed us to make D.E.M.O. in around 2 weeks. A staggeringly short time for any game, and it really shows off the power of collaborative development and great tools.
The game and the PlayCanvas Engine are written entirely in JavaScript. It’s pushing at the boundaries of the browser gaming using the latest HTML5 APIs, including:
Two weeks is very short time to build an app like D.E.M.O. and along with lots of long hours coding we were only able to do this thanks to the PlayCanvas platform that we’ve built, so we want to share with some of the ways which it saved us time, and can save you time too.
- Side-by-side rendering in 3DS Max and PlayCanvas Engine
+
+Side-by-side rendering in 3DS Max and PlayCanvas Engine
We’ve made a beautiful looking game in 3D in next to no time. We could do this because the PlayCanvas asset tools are built to ingest a wide range of model formats and set up to ensure that default materials from popular 3D packages appear identical in engine as they do for the artist.
The sci-fi levels and the SWAT character and animations were all created using 3D Studio Max default materials. With no effort on our part we could export the source assets into the PlayCanvas format and be sure they would look nearly identical at runtime. If you were to get assets from a site like Turbo Squid you need to know that it will just work in PlayCanvas without modification. Within minutes of receiving 3D assets from a 3rd party you can have characters and environments in game.
Traditionally, this would consist of building out the level in low detail (often called grey-boxing) and running about it in to get feel for the how the game plays, where the choke points are and how the spawn points should be placed. Unfortunately, we didn’t have the art resources to design the level in this way but we did have a set of 5 or 6 components which fitted together like jigsaw pieces.
Even though there was a limited choice of level design, both Will and I wanted to be involved in the discussion over the how level should look. As we were working around 50 miles apart, getting together around a laptop screen wasn’t going to be possible. Fortunately the PlayCanvas Designer is the perfect solution for this type of collaborative work. We are able to simultaneously view the same level and while talking face-to-face over Skype, we could both position the pieces in real-time and discuss the pros and cons of each configuration.
We had a pretty simple task to complete but we were miles apart and using the Designer meant that we had no problem collaborating despite this. It’s clear to us that scaling this up to a design team would be incredibly liberating and will really change the way that games are made.
diff --git a/a-new-ui-for-the-playcanvas-editor/index.html b/a-new-ui-for-the-playcanvas-editor/index.html
index 3cb9940d3..97f4d1d47 100644
--- a/a-new-ui-for-the-playcanvas-editor/index.html
+++ b/a-new-ui-for-the-playcanvas-editor/index.html
@@ -5,7 +5,7 @@
A New UI for the PlayCanvas Editor | PlayCanvas Blog
-
+
diff --git a/a-wild-designer-appears/index.html b/a-wild-designer-appears/index.html
index a4c801681..06d9d9cdb 100644
--- a/a-wild-designer-appears/index.html
+++ b/a-wild-designer-appears/index.html
@@ -5,13 +5,13 @@
A wild designer appears! | PlayCanvas Blog
-
+
To kick off 2014 with a bang, we're welcoming a brand new member to the PlayCanvas family.
-
- Kevin's image doesn't appear on film, so we've used this instead.
+
+Kevin's image doesn't appear on film, so we've used this instead.
Kevin Rooney joins us as Creative Director, check out his amazing portfolio. Kevin is an experienced designer who has sampled the start-up life before at Memrise.
What does this mean? Kevin brings a much needed designer's touch to the PlayCanvas team, so look out for big changes to the look and feel of the PlayCanvas site in the coming weeks. Currently we have a kick-ass tool for creating HTML5 and WebGL games in the browser, but very soon we're going to have a beautiful one as well.
It's a big day over at PlayCanvas towers. We have a new programmer. In fact, our first full-time staffer after the founding team.
-
- Humouring the idiot with the camera phone
+
+Humouring the idiot with the camera phone
Vaios joins us from sunny Athens, land of gods, fine olive oil and greeks bearing gifts [Best you could come up with!? - Ed]. More importantly he's got loads of experience writing games and tools for game developers. He spent a number of years working at Sony Computer Entertainment in London on the sadly un-released AAA action title Eight Days, and the ground-breaking console virtual world PlayStation Home. Since then he's been working another virtual world title in Athens.
Join us in welcoming Vaios on twitter. He's going to play a big part in helping PlayCanvas become the game development platform of the future.
diff --git a/anim-layer-masks-and-blending/index.html b/anim-layer-masks-and-blending/index.html
index 43e87af2b..e7a4cfc7d 100644
--- a/anim-layer-masks-and-blending/index.html
+++ b/anim-layer-masks-and-blending/index.html
@@ -5,12 +5,12 @@
Anim Layer Masks and Blending | PlayCanvas Blog
-
+
-
Today, we are releasing the latest anim component feature: the masking and blending of anim layers.
This is a versatile feature that has been hotly requested by PlayCanvas developers that wish to get even more creative with their animations. We’re excited to be able to share how it works in this blog.
Previously when using the anim component, you could play any number of animations on top of each other by creating multiple anim layers. However, any animations from subsequent layers that animate the same bones as previous ones will completely overwrite those previous animations.
That meant that even if you were to add a shooting animation to the top half of a character, it would always be playing over a walking animation that was placed on a previous layer.
Now with anim layer blending, it is possible to smoothly blend subsequent layers in and out, changing the weight each layer contributes to the characters animation in real time.
-
- Animation layer blending in the PlayCanvas examples browser
+
+Animation layer blending in the PlayCanvas examples browser
When editing an AnimStateGraph asset, you’re now presented with two Blend Type options in each layer. The Overwrite option is set by default and works as before, each subsequent layer completely overwrites the animation values of previous layers.
However, now, if you select the ‘Additive’ option, the anim system will take the weight of each additive layer into account and blend the layered animations accordingly. This is a great way to blend one animation on top of another.
diff --git a/announcing-playcanvas-answers/index.html b/announcing-playcanvas-answers/index.html
index b6873c4fb..f73a1726c 100644
--- a/announcing-playcanvas-answers/index.html
+++ b/announcing-playcanvas-answers/index.html
@@ -5,7 +5,7 @@
PlayCanvas Community Part 1 - Announcing PlayCanvas Answers | PlayCanvas Blog
-
+
diff --git a/announcing-the-new-playcanvas-asset-store/index.html b/announcing-the-new-playcanvas-asset-store/index.html
index 9ec09494f..4e013ce62 100644
--- a/announcing-the-new-playcanvas-asset-store/index.html
+++ b/announcing-the-new-playcanvas-asset-store/index.html
@@ -5,7 +5,7 @@
Announcing the New PlayCanvas Asset Store | PlayCanvas Blog
-
+
diff --git a/apple-embraces-webgl/index.html b/apple-embraces-webgl/index.html
index e872c5a72..d1251d385 100644
--- a/apple-embraces-webgl/index.html
+++ b/apple-embraces-webgl/index.html
@@ -5,7 +5,7 @@
Apple Embraces WebGL | PlayCanvas Blog
-
+
diff --git a/archive/index.html b/archive/index.html
index 163575482..f358b039c 100644
--- a/archive/index.html
+++ b/archive/index.html
@@ -5,7 +5,7 @@
Archive | PlayCanvas Blog
-
+
diff --git a/arm-and-playcanvas-open-source-seemore-webgl-demo/index.html b/arm-and-playcanvas-open-source-seemore-webgl-demo/index.html
index 996a81603..0ec66d5d9 100644
--- a/arm-and-playcanvas-open-source-seemore-webgl-demo/index.html
+++ b/arm-and-playcanvas-open-source-seemore-webgl-demo/index.html
@@ -5,7 +5,7 @@
Arm and PlayCanvas Open Source Seemore WebGL Demo | PlayCanvas Blog
-
+
diff --git a/assets/js/03aad2ae.61fb8795.js b/assets/js/03aad2ae.61fb8795.js
deleted file mode 100644
index 2808e04ba..000000000
--- a/assets/js/03aad2ae.61fb8795.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[20014],{68253:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>r,toc:()=>d});var n=t(74848),s=t(28453);const i={authors:"dave",slug:"a-wild-designer-appears",title:"A wild designer appears!",tags:["team"]},o=void 0,r={permalink:"/a-wild-designer-appears",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2014-01-09-a-wild-designer-appears.md",source:"@site/blog/2014-01-09-a-wild-designer-appears.md",title:"A wild designer appears!",description:"To kick off 2014 with a bang, we're welcoming a brand new member to the PlayCanvas family.",date:"2014-01-09T00:00:00.000Z",tags:[{label:"team",permalink:"/tags/team"}],readingTime:.615,hasTruncateMarker:!1,authors:[{name:"Dave Evans",title:"CTO",url:"https://twitter.com/daredevildave",imageURL:"https://pbs.twimg.com/profile_images/1271233580430053376/-OHHBJ2Z_400x400.jpg",key:"dave"}],frontMatter:{authors:"dave",slug:"a-wild-designer-appears",title:"A wild designer appears!",tags:["team"]},unlisted:!1,prevItem:{title:"Primitives are Dead! Long Live the Model!",permalink:"/primitives-are-dead-long-live-the-model"},nextItem:{title:"Ludum Dare 28: PlayCanvas Round-Up",permalink:"/ludum-dare-28-playcanvas-round-up"}},l={authorsImageUrls:[void 0]},d=[];function c(e){const a={a:"a",em:"em",img:"img",p:"p",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"To kick off 2014 with a bang, we're welcoming a brand new member to the PlayCanvas family."}),"\n",(0,n.jsxs)(a.p,{children:[(0,n.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(82335).A+"",children:(0,n.jsx)(a.img,{alt:"Roonio logo",src:t(10945).A+"",width:"600",height:"567"})}),"\n",(0,n.jsx)("br",{}),(0,n.jsx)(a.em,{children:"Kevin's image doesn't appear on film, so we've used this instead."})]}),"\n",(0,n.jsxs)(a.p,{children:["Kevin Rooney joins us as Creative Director, check out his ",(0,n.jsx)(a.a,{href:"https://roonio.com/",children:"amazing portfolio"}),". Kevin is an experienced designer who has sampled the start-up life before at ",(0,n.jsx)(a.a,{href:"https://memrise.com",children:"Memrise"}),"."]}),"\n",(0,n.jsx)(a.p,{children:"What does this mean? Kevin brings a much needed designer's touch to the PlayCanvas team, so look out for big changes to the look and feel of the PlayCanvas site in the coming weeks. Currently we have a kick-ass tool for creating HTML5 and WebGL games in the browser, but very soon we're going to have a beautiful one as well."}),"\n",(0,n.jsxs)(a.p,{children:["Welcome Kevin on his ",(0,n.jsx)(a.a,{href:"https://twitter.com/4roonio",children:"twitter"}),"."]})]})}function m(e={}){const{wrapper:a}={...(0,s.R)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},82335:(e,a,t)=>{t.d(a,{A:()=>n});const n=t.p+"assets/files/roonio-b5dade17966fd144bac301db6118a8d6.png"},10945:(e,a,t)=>{t.d(a,{A:()=>n});const n=t.p+"assets/images/roonio-b5dade17966fd144bac301db6118a8d6.png"},28453:(e,a,t)=>{t.d(a,{R:()=>o,x:()=>r});var n=t(96540);const s={},i=n.createContext(s);function o(e){const a=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),n.createElement(i.Provider,{value:a},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/03aad2ae.c99a1833.js b/assets/js/03aad2ae.c99a1833.js
new file mode 100644
index 000000000..1797d8357
--- /dev/null
+++ b/assets/js/03aad2ae.c99a1833.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[20014],{68253:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>o,toc:()=>d});var n=t(74848),s=t(28453);const i={authors:"dave",slug:"a-wild-designer-appears",title:"A wild designer appears!",tags:["team"]},r=void 0,o={permalink:"/a-wild-designer-appears",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2014-01-09-a-wild-designer-appears.md",source:"@site/blog/2014-01-09-a-wild-designer-appears.md",title:"A wild designer appears!",description:"To kick off 2014 with a bang, we're welcoming a brand new member to the PlayCanvas family.",date:"2014-01-09T00:00:00.000Z",tags:[{label:"team",permalink:"/tags/team"}],readingTime:.61,hasTruncateMarker:!1,authors:[{name:"Dave Evans",title:"CTO",url:"https://twitter.com/daredevildave",imageURL:"https://pbs.twimg.com/profile_images/1271233580430053376/-OHHBJ2Z_400x400.jpg",key:"dave"}],frontMatter:{authors:"dave",slug:"a-wild-designer-appears",title:"A wild designer appears!",tags:["team"]},unlisted:!1,prevItem:{title:"Primitives are Dead! Long Live the Model!",permalink:"/primitives-are-dead-long-live-the-model"},nextItem:{title:"Ludum Dare 28: PlayCanvas Round-Up",permalink:"/ludum-dare-28-playcanvas-round-up"}},l={authorsImageUrls:[void 0]},d=[];function c(e){const a={a:"a",br:"br",em:"em",img:"img",p:"p",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.p,{children:"To kick off 2014 with a bang, we're welcoming a brand new member to the PlayCanvas family."}),"\n",(0,n.jsxs)(a.p,{children:[(0,n.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(82335).A+"",children:(0,n.jsx)(a.img,{alt:"Roonio logo",src:t(10945).A+"",width:"600",height:"567"})}),(0,n.jsx)(a.br,{}),"\n",(0,n.jsx)(a.em,{children:"Kevin's image doesn't appear on film, so we've used this instead."})]}),"\n",(0,n.jsxs)(a.p,{children:["Kevin Rooney joins us as Creative Director, check out his ",(0,n.jsx)(a.a,{href:"https://roonio.com/",children:"amazing portfolio"}),". Kevin is an experienced designer who has sampled the start-up life before at ",(0,n.jsx)(a.a,{href:"https://memrise.com",children:"Memrise"}),"."]}),"\n",(0,n.jsx)(a.p,{children:"What does this mean? Kevin brings a much needed designer's touch to the PlayCanvas team, so look out for big changes to the look and feel of the PlayCanvas site in the coming weeks. Currently we have a kick-ass tool for creating HTML5 and WebGL games in the browser, but very soon we're going to have a beautiful one as well."}),"\n",(0,n.jsxs)(a.p,{children:["Welcome Kevin on his ",(0,n.jsx)(a.a,{href:"https://twitter.com/4roonio",children:"twitter"}),"."]})]})}function m(e={}){const{wrapper:a}={...(0,s.R)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},82335:(e,a,t)=>{t.d(a,{A:()=>n});const n=t.p+"assets/files/roonio-b5dade17966fd144bac301db6118a8d6.png"},10945:(e,a,t)=>{t.d(a,{A:()=>n});const n=t.p+"assets/images/roonio-b5dade17966fd144bac301db6118a8d6.png"},28453:(e,a,t)=>{t.d(a,{R:()=>r,x:()=>o});var n=t(96540);const s={},i=n.createContext(s);function r(e){const a=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function o(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),n.createElement(i.Provider,{value:a},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/09733303.984abc48.js b/assets/js/09733303.984abc48.js
new file mode 100644
index 000000000..b8ddd43ad
--- /dev/null
+++ b/assets/js/09733303.984abc48.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[6941],{29558:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>r,toc:()=>d});var t=n(74848),s=n(28453);const i={authors:"christy",slug:"playcanvas-in-2014-a-year-in-review",title:"PlayCanvas in 2014: A Year In Review"},o=void 0,r={permalink:"/playcanvas-in-2014-a-year-in-review",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2014-12-22-playcanvas-in-2014-a-year-in-review.md",source:"@site/blog/2014-12-22-playcanvas-in-2014-a-year-in-review.md",title:"PlayCanvas in 2014: A Year In Review",description:"In 2011, PlayCanvas started its journey as the world's first cloud-hosted game development platform, and over three years later we\u2019re still giving you the next generation toolset to build, share and play video games.",date:"2014-12-22T00:00:00.000Z",tags:[],readingTime:4.025,hasTruncateMarker:!1,authors:[{name:"Christy O'Connor",title:"Community Manager",url:"https://www.linkedin.com/in/christy-o-connor-76aa2239/",key:"christy"}],frontMatter:{authors:"christy",slug:"playcanvas-in-2014-a-year-in-review",title:"PlayCanvas in 2014: A Year In Review"},unlisted:!1,prevItem:{title:"PLAYHACK - We challenge you to a jewel!",permalink:"/playhack-we-challenge-you-to-a-jewel"},nextItem:{title:"PLAYHACK December - Collecting Presents",permalink:"/playhack-december-collecting-presents"}},l={authorsImageUrls:[void 0]},d=[{value:"Features",id:"features",level:2},{value:"Open-source",id:"open-source",level:3},{value:"Asset Store",id:"asset-store",level:3},{value:"Physically Based Rendering",id:"physically-based-rendering",level:3},{value:"Complete Website Redesign",id:"complete-website-redesign",level:3},{value:"DevLogs",id:"devlogs",level:3},{value:"Watch and Star Projects",id:"watch-and-star-projects",level:3},{value:"Particle System",id:"particle-system",level:3},{value:"iOS Export",id:"ios-export",level:3},{value:"Material Editing",id:"material-editing",level:3},{value:"SWOOOP",id:"swooop",level:3},{value:"TANX",id:"tanx",level:3},{value:"PLAYHACK",id:"playhack",level:3},{value:"Things to look forward to in 2015",id:"things-to-look-forward-to-in-2015",level:2},{value:"Physically-Based Rendering Workflow",id:"physically-based-rendering-workflow",level:3},{value:"Massive Editor Improvements",id:"massive-editor-improvements",level:3},{value:"Enhanced Store",id:"enhanced-store",level:3},{value:"What Do You Want To See?",id:"what-do-you-want-to-see",level:2}];function h(e){const a={a:"a",br:"br",em:"em",h2:"h2",h3:"h3",img:"img",p:"p",strong:"strong",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.p,{children:(0,t.jsx)(a.strong,{children:"In 2011, PlayCanvas started its journey as the world's first cloud-hosted game development platform, and over three years later we\u2019re still giving you the next generation toolset to build, share and play video games."})}),"\n",(0,t.jsx)(a.p,{children:"In 2014 our community has grown from roughly 2,000 to over 20,000 users and there has been over 2,000,000 views of PlayCanvas projects. There really has never been a better time to join us! So without further ado, here\u2019s a look back at PlayCanvas and the Games industry in 2014 and glance ahead into the new year."}),"\n",(0,t.jsx)(a.h2,{id:"features",children:"Features"}),"\n",(0,t.jsx)(a.p,{children:(0,t.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(92199).A+"",children:(0,t.jsx)(a.img,{alt:"SWOOOP background",src:n(70173).A+"",width:"800",height:"353"})})}),"\n",(0,t.jsx)(a.h3,{id:"open-source",children:"Open-source"}),"\n",(0,t.jsxs)(a.p,{children:["The entire runtime engine is available right now on ",(0,t.jsx)(a.a,{href:"https://github.com/playcanvas/engine",children:"GitHub"})," under the lovely ",(0,t.jsx)(a.a,{href:"https://opensource.org/license/mit/",children:"MIT license"}),". Which means you can download it, fork it, and generally use it for anything you like."]}),"\n",(0,t.jsx)(a.h3,{id:"asset-store",children:"Asset Store"}),"\n",(0,t.jsxs)(a.p,{children:["We recently announced the PlayCanvas Asset Store, which is a huge deal for us. As the PlayCanvas Store grows we should hope to see thousands of game ready assets become available to our community. Try the beta for free at ",(0,t.jsx)(a.a,{href:"https://store.playcanvas.com/",children:"https://store.playcanvas.com/"}),"."]}),"\n",(0,t.jsx)(a.h3,{id:"physically-based-rendering",children:"Physically Based Rendering"}),"\n",(0,t.jsx)(a.p,{children:"Up until now PBR has only been available in the domain of AAA console and PC gaming. We\u2019re excited to announce that PBR is coming to PlayCanvas."}),"\n",(0,t.jsx)(a.p,{children:"Right now, it is possible for all PlayCanvas users to create this kind of content, but some of the steps need to performed in code. Our next goal is to integrate these steps directly into the toolset to allow you to build and iterate even faster."}),"\n",(0,t.jsxs)(a.p,{children:[(0,t.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(89192).A+"",children:(0,t.jsx)(a.img,{alt:"Star Lord Fan art using PBR in PlayCanvas",src:n(57902).A+"",width:"720",height:"373"})}),(0,t.jsx)(a.br,{}),"\n",(0,t.jsx)(a.em,{children:"Star Lord Fan art using PBR in PlayCanvas"})]}),"\n",(0,t.jsx)(a.h3,{id:"complete-website-redesign",children:"Complete Website Redesign"}),"\n",(0,t.jsx)(a.p,{children:"Over the past year we have also been busy redesigning our virtual home, playcanvas.com. We\u2019ve focused on increasing the speed of browsing on the site and functionality. Now it\u2019s fast and intuitive to use, giving you more time to work on your game!"}),"\n",(0,t.jsx)(a.h3,{id:"devlogs",children:"DevLogs"}),"\n",(0,t.jsx)(a.p,{children:"Every PlayCanvas project now has a DevLog. Think of the DevLog as part commit message, part blog and part twitter stream. Use it to let other people know what you\u2019ve been working on."}),"\n",(0,t.jsx)(a.h3,{id:"watch-and-star-projects",children:"Watch and Star Projects"}),"\n",(0,t.jsx)(a.p,{children:"Watching a project shows your interest, and your news feed will feature updates from any watched projects. With Starring you won\u2019t receive any information, but it just tells the project owner that you think it\u2019s cool."}),"\n",(0,t.jsx)(a.h3,{id:"particle-system",children:"Particle System"}),"\n",(0,t.jsx)(a.p,{children:"The particle component is our newest engine component type. Our new particle system runs on the GPU for blazing performance on all devices including mobiles. It's all packaged up into an artist friendly editor panel where you can modify the curves to create the exact effect you want. From explosions and smoke to magical effects."}),"\n",(0,t.jsx)(a.h3,{id:"ios-export",children:"iOS Export"}),"\n",(0,t.jsx)(a.p,{children:"It\u2019s just one click to get a XCode project which is easy to build into a iPhone application. This feature allows our Pro Account holders to make their projects as viral and shareable as they are fun to play."}),"\n",(0,t.jsx)(a.h3,{id:"material-editing",children:"Material Editing"}),"\n",(0,t.jsx)(a.p,{children:"Hard to remember a time before we had Material Editing. This year we deploy the Material Editing feature in the PlayCanvas Designer. This lets you customize the look of your models. And recently it's getting more and more advanced in particular with our new Physical Material type."}),"\n",(0,t.jsx)(a.h3,{id:"swooop",children:"SWOOOP"}),"\n",(0,t.jsx)(a.p,{children:"Way back in March we unveiled SWOOOP, an endless flying game created by 2 team members in 4 weeks. This is our flagship game showing the capabilities of WebGL, but following our new PBR feature the sky really is the limit with PlayCanvas."}),"\n",(0,t.jsxs)(a.p,{children:[(0,t.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(50556).A+"",children:(0,t.jsx)(a.img,{alt:"SWOOOP in Designer",src:n(4586).A+"",width:"575",height:"386"})}),(0,t.jsx)(a.br,{}),"\n",(0,t.jsx)(a.em,{children:"The SWOOOP project is open to everyone"})]}),"\n",(0,t.jsx)(a.h3,{id:"tanx",children:"TANX"}),"\n",(0,t.jsx)(a.p,{children:"In July, a PlayCanvas user walked away a prize winner in a game jam with his game ColorTanks. In around 8 hours the developer had created an incredibly addictive multi player game, that has been played by over 12,000 gamers."}),"\n",(0,t.jsx)(a.h3,{id:"playhack",children:"PLAYHACK"}),"\n",(0,t.jsx)(a.p,{children:"Towards the end of this year we started our own game jam, the PLAYHACK. Running the competition monthly, we provide you the model, you make a game with it and our favorite is featured on the PlayCanvas site."}),"\n",(0,t.jsx)(a.h2,{id:"things-to-look-forward-to-in-2015",children:"Things to look forward to in 2015"}),"\n",(0,t.jsx)(a.h3,{id:"physically-based-rendering-workflow",children:"Physically-Based Rendering Workflow"}),"\n",(0,t.jsx)(a.p,{children:"As we progress the new PBR feature in the PlayCanvas Engine, making visually stunning games with 'AAA grade' graphics will become easier than ever before. Pretty exciting stuff!"}),"\n",(0,t.jsx)(a.h3,{id:"massive-editor-improvements",children:"Massive Editor Improvements"}),"\n",(0,t.jsx)(a.p,{children:"We have a lot planned with regards to the Editor, so stay tuned. If PlayCanvas wasn't your favorite engine before it will be next year."}),"\n",(0,t.jsx)(a.h3,{id:"enhanced-store",children:"Enhanced Store"}),"\n",(0,t.jsx)(a.p,{children:"Though the current iteration of the PlayCanvas Store only has around 40 models, soon\xa0we\u2019ll be giving all of our PlayCanvas users the chance to become vendors, opening up their assets to over 20,000 PlayCanvas game developers. In time, the PlayCanvas Store will be a fully functioning marketplace for the PlayCanvas Community."}),"\n",(0,t.jsx)(a.h2,{id:"what-do-you-want-to-see",children:"What Do You Want To See?"})]})}function c(e={}){const{wrapper:a}={...(0,s.R)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},92199:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/files/background-small-f9d65562d797bed028c08782805a6eee.png"},50556:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/files/designer-swooop-1e6b4e26b7015128a6a4cb981c26358f.png"},89192:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/files/shadingComparison2-50d75da523c38f7f5467f2f84307f8d8.jpg"},70173:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/background-small-f9d65562d797bed028c08782805a6eee.png"},4586:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/designer-swooop-1e6b4e26b7015128a6a4cb981c26358f.png"},57902:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/shadingComparison2-50d75da523c38f7f5467f2f84307f8d8.jpg"},28453:(e,a,n)=>{n.d(a,{R:()=>o,x:()=>r});var t=n(96540);const s={},i=t.createContext(s);function o(e){const a=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(i.Provider,{value:a},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/09733303.e3c42d91.js b/assets/js/09733303.e3c42d91.js
deleted file mode 100644
index b8403ed3f..000000000
--- a/assets/js/09733303.e3c42d91.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[6941],{29558:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>i,metadata:()=>r,toc:()=>d});var t=n(74848),s=n(28453);const i={authors:"christy",slug:"playcanvas-in-2014-a-year-in-review",title:"PlayCanvas in 2014: A Year In Review"},o=void 0,r={permalink:"/playcanvas-in-2014-a-year-in-review",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2014-12-22-playcanvas-in-2014-a-year-in-review.md",source:"@site/blog/2014-12-22-playcanvas-in-2014-a-year-in-review.md",title:"PlayCanvas in 2014: A Year In Review",description:"In 2011, PlayCanvas started its journey as the world's first cloud-hosted game development platform, and over three years later we\u2019re still giving you the next generation toolset to build, share and play video games.",date:"2014-12-22T00:00:00.000Z",tags:[],readingTime:4.035,hasTruncateMarker:!1,authors:[{name:"Christy O'Connor",title:"Community Manager",url:"https://www.linkedin.com/in/christy-o-connor-76aa2239/",key:"christy"}],frontMatter:{authors:"christy",slug:"playcanvas-in-2014-a-year-in-review",title:"PlayCanvas in 2014: A Year In Review"},unlisted:!1,prevItem:{title:"PLAYHACK - We challenge you to a jewel!",permalink:"/playhack-we-challenge-you-to-a-jewel"},nextItem:{title:"PLAYHACK December - Collecting Presents",permalink:"/playhack-december-collecting-presents"}},l={authorsImageUrls:[void 0]},d=[{value:"Features",id:"features",level:2},{value:"Open-source",id:"open-source",level:3},{value:"Asset Store",id:"asset-store",level:3},{value:"Physically Based Rendering",id:"physically-based-rendering",level:3},{value:"Complete Website Redesign",id:"complete-website-redesign",level:3},{value:"DevLogs",id:"devlogs",level:3},{value:"Watch and Star Projects",id:"watch-and-star-projects",level:3},{value:"Particle System",id:"particle-system",level:3},{value:"iOS Export",id:"ios-export",level:3},{value:"Material Editing",id:"material-editing",level:3},{value:"SWOOOP",id:"swooop",level:3},{value:"TANX",id:"tanx",level:3},{value:"PLAYHACK",id:"playhack",level:3},{value:"Things to look forward to in 2015",id:"things-to-look-forward-to-in-2015",level:2},{value:"Physically-Based Rendering Workflow",id:"physically-based-rendering-workflow",level:3},{value:"Massive Editor Improvements",id:"massive-editor-improvements",level:3},{value:"Enhanced Store",id:"enhanced-store",level:3},{value:"What Do You Want To See?",id:"what-do-you-want-to-see",level:2}];function h(e){const a={a:"a",em:"em",h2:"h2",h3:"h3",img:"img",p:"p",strong:"strong",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.p,{children:(0,t.jsx)(a.strong,{children:"In 2011, PlayCanvas started its journey as the world's first cloud-hosted game development platform, and over three years later we\u2019re still giving you the next generation toolset to build, share and play video games."})}),"\n",(0,t.jsx)(a.p,{children:"In 2014 our community has grown from roughly 2,000 to over 20,000 users and there has been over 2,000,000 views of PlayCanvas projects. There really has never been a better time to join us! So without further ado, here\u2019s a look back at PlayCanvas and the Games industry in 2014 and glance ahead into the new year."}),"\n",(0,t.jsx)(a.h2,{id:"features",children:"Features"}),"\n",(0,t.jsx)(a.p,{children:(0,t.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(92199).A+"",children:(0,t.jsx)(a.img,{alt:"SWOOOP background",src:n(70173).A+"",width:"800",height:"353"})})}),"\n",(0,t.jsx)(a.h3,{id:"open-source",children:"Open-source"}),"\n",(0,t.jsxs)(a.p,{children:["The entire runtime engine is available right now on ",(0,t.jsx)(a.a,{href:"https://github.com/playcanvas/engine",children:"GitHub"})," under the lovely ",(0,t.jsx)(a.a,{href:"https://opensource.org/license/mit/",children:"MIT license"}),". Which means you can download it, fork it, and generally use it for anything you like."]}),"\n",(0,t.jsx)(a.h3,{id:"asset-store",children:"Asset Store"}),"\n",(0,t.jsxs)(a.p,{children:["We recently announced the PlayCanvas Asset Store, which is a huge deal for us. As the PlayCanvas Store grows we should hope to see thousands of game ready assets become available to our community. Try the beta for free at ",(0,t.jsx)(a.a,{href:"https://store.playcanvas.com/",children:"https://store.playcanvas.com/"}),"."]}),"\n",(0,t.jsx)(a.h3,{id:"physically-based-rendering",children:"Physically Based Rendering"}),"\n",(0,t.jsx)(a.p,{children:"Up until now PBR has only been available in the domain of AAA console and PC gaming. We\u2019re excited to announce that PBR is coming to PlayCanvas."}),"\n",(0,t.jsx)(a.p,{children:"Right now, it is possible for all PlayCanvas users to create this kind of content, but some of the steps need to performed in code. Our next goal is to integrate these steps directly into the toolset to allow you to build and iterate even faster."}),"\n",(0,t.jsxs)(a.p,{children:[(0,t.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(89192).A+"",children:(0,t.jsx)(a.img,{alt:"Star Lord Fan art using PBR in PlayCanvas",src:n(57902).A+"",width:"720",height:"373"})}),"\n",(0,t.jsx)("br",{}),(0,t.jsx)(a.em,{children:"Star Lord Fan art using PBR in PlayCanvas"})]}),"\n",(0,t.jsx)(a.h3,{id:"complete-website-redesign",children:"Complete Website Redesign"}),"\n",(0,t.jsx)(a.p,{children:"Over the past year we have also been busy redesigning our virtual home, playcanvas.com. We\u2019ve focused on increasing the speed of browsing on the site and functionality. Now it\u2019s fast and intuitive to use, giving you more time to work on your game!"}),"\n",(0,t.jsx)(a.h3,{id:"devlogs",children:"DevLogs"}),"\n",(0,t.jsx)(a.p,{children:"Every PlayCanvas project now has a DevLog. Think of the DevLog as part commit message, part blog and part twitter stream. Use it to let other people know what you\u2019ve been working on."}),"\n",(0,t.jsx)(a.h3,{id:"watch-and-star-projects",children:"Watch and Star Projects"}),"\n",(0,t.jsx)(a.p,{children:"Watching a project shows your interest, and your news feed will feature updates from any watched projects. With Starring you won\u2019t receive any information, but it just tells the project owner that you think it\u2019s cool."}),"\n",(0,t.jsx)(a.h3,{id:"particle-system",children:"Particle System"}),"\n",(0,t.jsx)(a.p,{children:"The particle component is our newest engine component type. Our new particle system runs on the GPU for blazing performance on all devices including mobiles. It's all packaged up into an artist friendly editor panel where you can modify the curves to create the exact effect you want. From explosions and smoke to magical effects."}),"\n",(0,t.jsx)(a.h3,{id:"ios-export",children:"iOS Export"}),"\n",(0,t.jsx)(a.p,{children:"It\u2019s just one click to get a XCode project which is easy to build into a iPhone application. This feature allows our Pro Account holders to make their projects as viral and shareable as they are fun to play."}),"\n",(0,t.jsx)(a.h3,{id:"material-editing",children:"Material Editing"}),"\n",(0,t.jsx)(a.p,{children:"Hard to remember a time before we had Material Editing. This year we deploy the Material Editing feature in the PlayCanvas Designer. This lets you customize the look of your models. And recently it's getting more and more advanced in particular with our new Physical Material type."}),"\n",(0,t.jsx)(a.h3,{id:"swooop",children:"SWOOOP"}),"\n",(0,t.jsx)(a.p,{children:"Way back in March we unveiled SWOOOP, an endless flying game created by 2 team members in 4 weeks. This is our flagship game showing the capabilities of WebGL, but following our new PBR feature the sky really is the limit with PlayCanvas."}),"\n",(0,t.jsxs)(a.p,{children:[(0,t.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(50556).A+"",children:(0,t.jsx)(a.img,{alt:"SWOOOP in Designer",src:n(4586).A+"",width:"575",height:"386"})}),"\n",(0,t.jsx)("br",{}),(0,t.jsx)(a.em,{children:"The SWOOOP project is open to everyone"})]}),"\n",(0,t.jsx)(a.h3,{id:"tanx",children:"TANX"}),"\n",(0,t.jsx)(a.p,{children:"In July, a PlayCanvas user walked away a prize winner in a game jam with his game ColorTanks. In around 8 hours the developer had created an incredibly addictive multi player game, that has been played by over 12,000 gamers."}),"\n",(0,t.jsx)(a.h3,{id:"playhack",children:"PLAYHACK"}),"\n",(0,t.jsx)(a.p,{children:"Towards the end of this year we started our own game jam, the PLAYHACK. Running the competition monthly, we provide you the model, you make a game with it and our favorite is featured on the PlayCanvas site."}),"\n",(0,t.jsx)(a.h2,{id:"things-to-look-forward-to-in-2015",children:"Things to look forward to in 2015"}),"\n",(0,t.jsx)(a.h3,{id:"physically-based-rendering-workflow",children:"Physically-Based Rendering Workflow"}),"\n",(0,t.jsx)(a.p,{children:"As we progress the new PBR feature in the PlayCanvas Engine, making visually stunning games with 'AAA grade' graphics will become easier than ever before. Pretty exciting stuff!"}),"\n",(0,t.jsx)(a.h3,{id:"massive-editor-improvements",children:"Massive Editor Improvements"}),"\n",(0,t.jsx)(a.p,{children:"We have a lot planned with regards to the Editor, so stay tuned. If PlayCanvas wasn't your favorite engine before it will be next year."}),"\n",(0,t.jsx)(a.h3,{id:"enhanced-store",children:"Enhanced Store"}),"\n",(0,t.jsx)(a.p,{children:"Though the current iteration of the PlayCanvas Store only has around 40 models, soon\xa0we\u2019ll be giving all of our PlayCanvas users the chance to become vendors, opening up their assets to over 20,000 PlayCanvas game developers. In time, the PlayCanvas Store will be a fully functioning marketplace for the PlayCanvas Community."}),"\n",(0,t.jsx)(a.h2,{id:"what-do-you-want-to-see",children:"What Do You Want To See?"})]})}function c(e={}){const{wrapper:a}={...(0,s.R)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},92199:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/files/background-small-f9d65562d797bed028c08782805a6eee.png"},50556:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/files/designer-swooop-1e6b4e26b7015128a6a4cb981c26358f.png"},89192:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/files/shadingComparison2-50d75da523c38f7f5467f2f84307f8d8.jpg"},70173:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/background-small-f9d65562d797bed028c08782805a6eee.png"},4586:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/designer-swooop-1e6b4e26b7015128a6a4cb981c26358f.png"},57902:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/shadingComparison2-50d75da523c38f7f5467f2f84307f8d8.jpg"},28453:(e,a,n)=>{n.d(a,{R:()=>o,x:()=>r});var t=n(96540);const s={},i=t.createContext(s);function o(e){const a=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(i.Provider,{value:a},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/09ac0ae1.3c93b6d1.js b/assets/js/09ac0ae1.3c93b6d1.js
deleted file mode 100644
index 5d3a57004..000000000
--- a/assets/js/09ac0ae1.3c93b6d1.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[64629],{36437:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>m,contentTitle:()=>l,default:()=>p,frontMatter:()=>r,metadata:()=>h,toc:()=>d});var i=n(74848),t=n(28453),s=n(13554),o=n.n(s);const r={authors:"elliott",slug:"anim-layer-masks-and-blending",title:"Anim Layer Masks and Blending",tags:["animation","editor","workflow"]},l=void 0,h={permalink:"/anim-layer-masks-and-blending",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2021-11-08-anim-layer-masks-and-blending.md",source:"@site/blog/2021-11-08-anim-layer-masks-and-blending.md",title:"Anim Layer Masks and Blending",description:"RUN DEMO",date:"2021-11-08T00:00:00.000Z",tags:[{label:"animation",permalink:"/tags/animation"},{label:"editor",permalink:"/tags/editor"},{label:"workflow",permalink:"/tags/workflow"}],readingTime:3.385,hasTruncateMarker:!1,authors:[{name:"Elliott Thompson",title:"Software Engineer",url:"https://twitter.com/elliott_thomps",imageURL:"https://pbs.twimg.com/profile_images/1408030180497633290/42LxVCtq_400x400.jpg",key:"elliott"}],frontMatter:{authors:"elliott",slug:"anim-layer-masks-and-blending",title:"Anim Layer Masks and Blending",tags:["animation","editor","workflow"]},unlisted:!1,prevItem:{title:"Editor API Beta Release",permalink:"/editor-api-beta-release"},nextItem:{title:"Changes to our Editor and Engine Releases",permalink:"/changes-to-our-editor-and-engine-releases"}},m={authorsImageUrls:[void 0]},d=[{value:"Animating characters",id:"animating-characters",level:2},{value:"Anim Layer Masks",id:"anim-layer-masks",level:2},{value:"Anim Layer Blending",id:"anim-layer-blending",level:2},{value:"Useful Links",id:"useful-links",level:2}];function c(e){const a={a:"a",code:"code",em:"em",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(a.p,{children:[(0,i.jsx)(a.img,{src:n(88179).A+"",width:"909",height:"718"}),"\n",(0,i.jsx)("br",{}),(0,i.jsx)(a.em,{children:(0,i.jsx)(a.a,{href:"https://playcanvas.github.io/#/animation/layer-masks",children:"RUN DEMO"})})]}),"\n",(0,i.jsx)(a.p,{children:"Today, we are releasing the latest anim component feature: the masking and blending of anim layers."}),"\n",(0,i.jsx)(a.p,{children:"This is a versatile feature that has been hotly requested by PlayCanvas developers that wish to get even more creative with their animations. We\u2019re excited to be able to share how it works in this blog."}),"\n",(0,i.jsx)(a.h2,{id:"animating-characters",children:"Animating characters"}),"\n",(0,i.jsx)(a.p,{children:"When creating complex animation behavior for games, it is often necessary to make a character carry out multiple actions at once. For instance, you might want to create a character that can pick up and carry an item, or shoot a weapon while freely moving around a scene."}),"\n",(0,i.jsx)(a.p,{children:"To perform these actions at the same time, the upper and lower body of the character must be animated independently. The upper body should be able to move from an idle stance to a shooting stance, and then shoot on demand, all while the lower body moves between idling, walking, running based on the player's command."}),"\n",(0,i.jsx)(o(),{playing:!0,controls:!0,url:"/img/anim-masked-locomotion.mp4"}),"\n",(0,i.jsx)(a.p,{children:(0,i.jsx)(a.em,{children:"A character with two animation layers. A movement layer and a shooting layer masked to the upper body"})}),"\n",(0,i.jsx)(a.p,{children:"This effect can be difficult to achieve in most 3D engines, as it usually requires removing certain animated bones in the animation files themselves, before importing those assets into a game project. Only then would a developer be able to create two animation layers, one for movement and another for shooting."}),"\n",(0,i.jsx)(a.p,{children:"A shooting animation might have all of its lower body bones removed, which would free up the lower body to be animated by the movement layer. In large projects, this can start to become really cumbersome. Adding or removing bones from an animation would require a rebuild of the animation asset in whichever modelling software the developer is using, followed by a reimport of the asset into the PlayCanvas project."}),"\n",(0,i.jsx)(a.h2,{id:"anim-layer-masks",children:"Anim Layer Masks"}),"\n",(0,i.jsx)(a.p,{children:"Masks can streamline this workflow by enabling developers to add or remove a model\u2019s bones from an animation layer directly. This means you can select which part of a character a particular set of animations should animate directly in the PlayCanvas editor. Testing out different combinations of character bones now becomes as simple as toggling a few checkboxes."}),"\n",(0,i.jsx)(o(),{playing:!0,controls:!0,url:"/img/anim-layer-masking.mp4"}),"\n",(0,i.jsx)(a.p,{children:(0,i.jsx)(a.em,{children:"Creating layer masks in the PlayCanvas editor"})}),"\n",(0,i.jsx)(a.p,{children:"By selecting only the bones in the upper body of the character model for an anim layer, you can free up the lower body to be animated by previous layers which would have been overwritten without this upper body mask."}),"\n",(0,i.jsx)(a.h2,{id:"anim-layer-blending",children:"Anim Layer Blending"}),"\n",(0,i.jsx)(a.p,{children:"Previously when using the anim component, you could play any number of animations on top of each other by creating multiple anim layers. However, any animations from subsequent layers that animate the same bones as previous ones will completely overwrite those previous animations."}),"\n",(0,i.jsx)(a.p,{children:"That meant that even if you were to add a shooting animation to the top half of a character, it would always be playing over a walking animation that was placed on a previous layer."}),"\n",(0,i.jsx)(a.p,{children:"Now with anim layer blending, it is possible to smoothly blend subsequent layers in and out, changing the weight each layer contributes to the characters animation in real time."}),"\n",(0,i.jsxs)(a.p,{children:[(0,i.jsx)(a.img,{src:n(61563).A+"",width:"909",height:"717"}),"\n",(0,i.jsx)("br",{}),(0,i.jsx)(a.em,{children:"Animation layer blending in the PlayCanvas examples browser"})]}),"\n",(0,i.jsxs)(a.p,{children:["When editing an AnimStateGraph asset, you\u2019re now presented with two ",(0,i.jsx)(a.code,{children:"Blend Type"})," options in each layer. The ",(0,i.jsx)(a.code,{children:"Overwrite"})," option is set by default and works as before, each subsequent layer completely overwrites the animation values of previous layers."]}),"\n",(0,i.jsx)(a.p,{children:"However, now, if you select the \u2018Additive\u2019 option, the anim system will take the weight of each additive layer into account and blend the layered animations accordingly. This is a great way to blend one animation on top of another."}),"\n",(0,i.jsx)(a.h2,{id:"useful-links",children:"Useful Links"}),"\n",(0,i.jsx)(a.p,{children:"We\u2019re really keen to see what you can create in PlayCanvas using this feature, so be sure to check out the links below so you can begin working with layer masks and blending."}),"\n",(0,i.jsxs)(a.ul,{children:["\n",(0,i.jsx)(a.li,{children:(0,i.jsx)(a.a,{href:"https://developer.playcanvas.com/user-manual/animation/anim-layer-masking/",children:"Anim Layer Masks User Manual"})}),"\n",(0,i.jsx)(a.li,{children:(0,i.jsx)(a.a,{href:"https://developer.playcanvas.com/user-manual/animation/anim-state-graph-assets/#layer-blending",children:"Anim Layer Blending User Manual"})}),"\n",(0,i.jsx)(a.li,{children:(0,i.jsx)(a.a,{href:"https://playcanvas.github.io/#/animation/layer-masks",children:"Layer Masks Engine Example"})}),"\n"]})]})}function p(e={}){const{wrapper:a}={...(0,t.R)(),...e.components};return a?(0,i.jsx)(a,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},88179:(e,a,n)=>{n.d(a,{A:()=>i});const i=n.p+"assets/images/anim-layer-blending-e2e237916fd6dcdd7f28498402c6f7a4.gif"},61563:(e,a,n)=>{n.d(a,{A:()=>i});const i=n.p+"assets/images/anim-layer-blending2-410f76335389d415bcb3f298f66210e0.gif"}}]);
\ No newline at end of file
diff --git a/assets/js/09ac0ae1.d400b5b0.js b/assets/js/09ac0ae1.d400b5b0.js
new file mode 100644
index 000000000..9b3f11f48
--- /dev/null
+++ b/assets/js/09ac0ae1.d400b5b0.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[64629],{36437:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>m,contentTitle:()=>l,default:()=>p,frontMatter:()=>r,metadata:()=>h,toc:()=>d});var i=n(74848),t=n(28453),s=n(13554),o=n.n(s);const r={authors:"elliott",slug:"anim-layer-masks-and-blending",title:"Anim Layer Masks and Blending",tags:["animation","editor","workflow"]},l=void 0,h={permalink:"/anim-layer-masks-and-blending",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2021-11-08-anim-layer-masks-and-blending.md",source:"@site/blog/2021-11-08-anim-layer-masks-and-blending.md",title:"Anim Layer Masks and Blending",description:"RUN DEMO",date:"2021-11-08T00:00:00.000Z",tags:[{label:"animation",permalink:"/tags/animation"},{label:"editor",permalink:"/tags/editor"},{label:"workflow",permalink:"/tags/workflow"}],readingTime:3.375,hasTruncateMarker:!1,authors:[{name:"Elliott Thompson",title:"Software Engineer",url:"https://twitter.com/elliott_thomps",imageURL:"https://pbs.twimg.com/profile_images/1408030180497633290/42LxVCtq_400x400.jpg",key:"elliott"}],frontMatter:{authors:"elliott",slug:"anim-layer-masks-and-blending",title:"Anim Layer Masks and Blending",tags:["animation","editor","workflow"]},unlisted:!1,prevItem:{title:"Editor API Beta Release",permalink:"/editor-api-beta-release"},nextItem:{title:"Changes to our Editor and Engine Releases",permalink:"/changes-to-our-editor-and-engine-releases"}},m={authorsImageUrls:[void 0]},d=[{value:"Animating characters",id:"animating-characters",level:2},{value:"Anim Layer Masks",id:"anim-layer-masks",level:2},{value:"Anim Layer Blending",id:"anim-layer-blending",level:2},{value:"Useful Links",id:"useful-links",level:2}];function c(e){const a={a:"a",br:"br",code:"code",em:"em",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(a.p,{children:[(0,i.jsx)(a.img,{src:n(88179).A+"",width:"909",height:"718"}),(0,i.jsx)(a.br,{}),"\n",(0,i.jsx)(a.em,{children:(0,i.jsx)(a.a,{href:"https://playcanvas.github.io/#/animation/layer-masks",children:"RUN DEMO"})})]}),"\n",(0,i.jsx)(a.p,{children:"Today, we are releasing the latest anim component feature: the masking and blending of anim layers."}),"\n",(0,i.jsx)(a.p,{children:"This is a versatile feature that has been hotly requested by PlayCanvas developers that wish to get even more creative with their animations. We\u2019re excited to be able to share how it works in this blog."}),"\n",(0,i.jsx)(a.h2,{id:"animating-characters",children:"Animating characters"}),"\n",(0,i.jsx)(a.p,{children:"When creating complex animation behavior for games, it is often necessary to make a character carry out multiple actions at once. For instance, you might want to create a character that can pick up and carry an item, or shoot a weapon while freely moving around a scene."}),"\n",(0,i.jsx)(a.p,{children:"To perform these actions at the same time, the upper and lower body of the character must be animated independently. The upper body should be able to move from an idle stance to a shooting stance, and then shoot on demand, all while the lower body moves between idling, walking, running based on the player's command."}),"\n",(0,i.jsx)(o(),{playing:!0,controls:!0,url:"/img/anim-masked-locomotion.mp4"}),"\n",(0,i.jsx)(a.p,{children:(0,i.jsx)(a.em,{children:"A character with two animation layers. A movement layer and a shooting layer masked to the upper body"})}),"\n",(0,i.jsx)(a.p,{children:"This effect can be difficult to achieve in most 3D engines, as it usually requires removing certain animated bones in the animation files themselves, before importing those assets into a game project. Only then would a developer be able to create two animation layers, one for movement and another for shooting."}),"\n",(0,i.jsx)(a.p,{children:"A shooting animation might have all of its lower body bones removed, which would free up the lower body to be animated by the movement layer. In large projects, this can start to become really cumbersome. Adding or removing bones from an animation would require a rebuild of the animation asset in whichever modelling software the developer is using, followed by a reimport of the asset into the PlayCanvas project."}),"\n",(0,i.jsx)(a.h2,{id:"anim-layer-masks",children:"Anim Layer Masks"}),"\n",(0,i.jsx)(a.p,{children:"Masks can streamline this workflow by enabling developers to add or remove a model\u2019s bones from an animation layer directly. This means you can select which part of a character a particular set of animations should animate directly in the PlayCanvas editor. Testing out different combinations of character bones now becomes as simple as toggling a few checkboxes."}),"\n",(0,i.jsx)(o(),{playing:!0,controls:!0,url:"/img/anim-layer-masking.mp4"}),"\n",(0,i.jsx)(a.p,{children:(0,i.jsx)(a.em,{children:"Creating layer masks in the PlayCanvas editor"})}),"\n",(0,i.jsx)(a.p,{children:"By selecting only the bones in the upper body of the character model for an anim layer, you can free up the lower body to be animated by previous layers which would have been overwritten without this upper body mask."}),"\n",(0,i.jsx)(a.h2,{id:"anim-layer-blending",children:"Anim Layer Blending"}),"\n",(0,i.jsx)(a.p,{children:"Previously when using the anim component, you could play any number of animations on top of each other by creating multiple anim layers. However, any animations from subsequent layers that animate the same bones as previous ones will completely overwrite those previous animations."}),"\n",(0,i.jsx)(a.p,{children:"That meant that even if you were to add a shooting animation to the top half of a character, it would always be playing over a walking animation that was placed on a previous layer."}),"\n",(0,i.jsx)(a.p,{children:"Now with anim layer blending, it is possible to smoothly blend subsequent layers in and out, changing the weight each layer contributes to the characters animation in real time."}),"\n",(0,i.jsxs)(a.p,{children:[(0,i.jsx)(a.img,{src:n(61563).A+"",width:"909",height:"717"}),(0,i.jsx)(a.br,{}),"\n",(0,i.jsx)(a.em,{children:"Animation layer blending in the PlayCanvas examples browser"})]}),"\n",(0,i.jsxs)(a.p,{children:["When editing an AnimStateGraph asset, you\u2019re now presented with two ",(0,i.jsx)(a.code,{children:"Blend Type"})," options in each layer. The ",(0,i.jsx)(a.code,{children:"Overwrite"})," option is set by default and works as before, each subsequent layer completely overwrites the animation values of previous layers."]}),"\n",(0,i.jsx)(a.p,{children:"However, now, if you select the \u2018Additive\u2019 option, the anim system will take the weight of each additive layer into account and blend the layered animations accordingly. This is a great way to blend one animation on top of another."}),"\n",(0,i.jsx)(a.h2,{id:"useful-links",children:"Useful Links"}),"\n",(0,i.jsx)(a.p,{children:"We\u2019re really keen to see what you can create in PlayCanvas using this feature, so be sure to check out the links below so you can begin working with layer masks and blending."}),"\n",(0,i.jsxs)(a.ul,{children:["\n",(0,i.jsx)(a.li,{children:(0,i.jsx)(a.a,{href:"https://developer.playcanvas.com/user-manual/animation/anim-layer-masking/",children:"Anim Layer Masks User Manual"})}),"\n",(0,i.jsx)(a.li,{children:(0,i.jsx)(a.a,{href:"https://developer.playcanvas.com/user-manual/animation/anim-state-graph-assets/#layer-blending",children:"Anim Layer Blending User Manual"})}),"\n",(0,i.jsx)(a.li,{children:(0,i.jsx)(a.a,{href:"https://playcanvas.github.io/#/animation/layer-masks",children:"Layer Masks Engine Example"})}),"\n"]})]})}function p(e={}){const{wrapper:a}={...(0,t.R)(),...e.components};return a?(0,i.jsx)(a,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},88179:(e,a,n)=>{n.d(a,{A:()=>i});const i=n.p+"assets/images/anim-layer-blending-e2e237916fd6dcdd7f28498402c6f7a4.gif"},61563:(e,a,n)=>{n.d(a,{A:()=>i});const i=n.p+"assets/images/anim-layer-blending2-410f76335389d415bcb3f298f66210e0.gif"}}]);
\ No newline at end of file
diff --git a/assets/js/09bfe2a8.05573aa3.js b/assets/js/09bfe2a8.05573aa3.js
new file mode 100644
index 000000000..e5cd542d3
--- /dev/null
+++ b/assets/js/09bfe2a8.05573aa3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[42532],{90931:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=a(74848),o=a(28453);const r={authors:"dave",slug:"platform-game-starter-kit",title:"Platform Game Starter Kit"},s=void 0,l={permalink:"/platform-game-starter-kit",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2014-06-13-platform-game-starter-kit.md",source:"@site/blog/2014-06-13-platform-game-starter-kit.md",title:"Platform Game Starter Kit",description:"PlayBot",date:"2014-06-13T00:00:00.000Z",tags:[],readingTime:1.35,hasTruncateMarker:!1,authors:[{name:"Dave Evans",title:"CTO",url:"https://twitter.com/daredevildave",imageURL:"https://pbs.twimg.com/profile_images/1271233580430053376/-OHHBJ2Z_400x400.jpg",key:"dave"}],frontMatter:{authors:"dave",slug:"platform-game-starter-kit",title:"Platform Game Starter Kit"},unlisted:!1,prevItem:{title:"Meet the PlayCanvas team: Will Eastcott",permalink:"/meet-the-playcanvas-team-will-eastcott"},nextItem:{title:"PlayCanvas Update 13/06/14",permalink:"/playcanvas-update"}},i={authorsImageUrls:[void 0]},c=[{value:"Contents",id:"contents",level:2}];function d(e){const t={a:"a",br:"br",em:"em",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:a(89960).A+"",children:(0,n.jsx)(t.img,{alt:"PlayBot",src:a(56290).A+"",width:"824",height:"700"})}),(0,n.jsx)(t.br,{}),"\n",(0,n.jsx)(t.em,{children:"Our new hero"})]}),"\n",(0,n.jsxs)(t.p,{children:["Today we're pleased to introduce the updated, all new and fancy Platform Game Starter Kit. We've worked hard with the\xa0",(0,n.jsx)(t.a,{href:"http://www.philippamoore.com",children:"talented artist"}),"\xa0from ",(0,n.jsx)(t.a,{href:"https://blog.playcanvas.com/swooop/",children:"SWOOOP"}),"\xa0to provide a complete set of code and assets for you to build your own platform games."]}),"\n",(0,n.jsx)(t.p,{children:"From today, when you choose to create a new project\xa0you'll be given the option to start using\xa0the\xa0new Platform Game Starter Kit. Your new project will contain a short, but full, platform game."}),"\n",(0,n.jsx)(t.h2,{id:"contents",children:"Contents"}),"\n",(0,n.jsx)(t.p,{children:"The Starter Kit contains the following assets:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Our hero Playbot - a fully rigged and animated robot character for you to use."}),"\n",(0,n.jsx)(t.li,{children:"Idle, Run, Jump and Die animations for Playbot"}),"\n",(0,n.jsx)(t.li,{children:"A set of platforms in various shapes and sizes from 1x1 up to 4x4"}),"\n",(0,n.jsx)(t.li,{children:"Spike, our dumb and stupid AI bot"}),"\n",(0,n.jsx)(t.li,{children:"Punch, still pretty dumb, but don't get too close or he'll shoot."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"We're also supplying all the code for the game:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Platform Character Controller -\xa0the player"}),"\n",(0,n.jsx)(t.li,{children:"Enemy - a\xa0simple enemy AI"}),"\n",(0,n.jsx)(t.li,{children:"Enemy Punch - a simple enemy AI which can shoot at you"}),"\n",(0,n.jsx)(t.li,{children:"Mover - a moving platform"}),"\n",(0,n.jsx)(t.li,{children:"Goal - the target for the level"}),"\n",(0,n.jsx)(t.li,{children:"Damageable -\xa0add health and damage to an Entity"}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"We'll be writing more about the Platform Game Starter Kit in the next week to give you tips and challenges so that you can make the best use out of it. But before they arrive, create a new project using the kit, try it out and dig into the code to see how it was made."}),"\n",(0,n.jsx)(t.p,{children:"Have fun, and look out for Punch!"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:a(26978).A+"",children:(0,n.jsx)(t.img,{alt:"Punch",src:a(27884).A+"",width:"800",height:"800"})}),(0,n.jsx)(t.br,{}),"\n",(0,n.jsx)(t.em,{children:"Punch - the bad guy"})]})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},26978:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/files/PlayCanvas-2-e5cdbfacb29674ee32430de66e116215.jpg"},89960:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/files/playbot-2f28f7a2b89597e85a2be13d4e7ef9dc.png"},27884:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/images/PlayCanvas-2-e5cdbfacb29674ee32430de66e116215.jpg"},56290:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/images/playbot-2f28f7a2b89597e85a2be13d4e7ef9dc.png"},28453:(e,t,a)=>{a.d(t,{R:()=>s,x:()=>l});var n=a(96540);const o={},r=n.createContext(o);function s(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/09bfe2a8.c28f9fbe.js b/assets/js/09bfe2a8.c28f9fbe.js
deleted file mode 100644
index d2a4a3550..000000000
--- a/assets/js/09bfe2a8.c28f9fbe.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[42532],{90931:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=a(74848),o=a(28453);const r={authors:"dave",slug:"platform-game-starter-kit",title:"Platform Game Starter Kit"},s=void 0,l={permalink:"/platform-game-starter-kit",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2014-06-13-platform-game-starter-kit.md",source:"@site/blog/2014-06-13-platform-game-starter-kit.md",title:"Platform Game Starter Kit",description:"PlayBot",date:"2014-06-13T00:00:00.000Z",tags:[],readingTime:1.36,hasTruncateMarker:!1,authors:[{name:"Dave Evans",title:"CTO",url:"https://twitter.com/daredevildave",imageURL:"https://pbs.twimg.com/profile_images/1271233580430053376/-OHHBJ2Z_400x400.jpg",key:"dave"}],frontMatter:{authors:"dave",slug:"platform-game-starter-kit",title:"Platform Game Starter Kit"},unlisted:!1,prevItem:{title:"Meet the PlayCanvas team: Will Eastcott",permalink:"/meet-the-playcanvas-team-will-eastcott"},nextItem:{title:"PlayCanvas Update 13/06/14",permalink:"/playcanvas-update"}},i={authorsImageUrls:[void 0]},c=[{value:"Contents",id:"contents",level:2}];function d(e){const t={a:"a",em:"em",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:a(89960).A+"",children:(0,n.jsx)(t.img,{alt:"PlayBot",src:a(56290).A+"",width:"824",height:"700"})}),"\n",(0,n.jsx)("br",{}),(0,n.jsx)(t.em,{children:"Our new hero"})]}),"\n",(0,n.jsxs)(t.p,{children:["Today we're pleased to introduce the updated, all new and fancy Platform Game Starter Kit. We've worked hard with the\xa0",(0,n.jsx)(t.a,{href:"http://www.philippamoore.com",children:"talented artist"}),"\xa0from ",(0,n.jsx)(t.a,{href:"https://blog.playcanvas.com/swooop/",children:"SWOOOP"}),"\xa0to provide a complete set of code and assets for you to build your own platform games."]}),"\n",(0,n.jsx)(t.p,{children:"From today, when you choose to create a new project\xa0you'll be given the option to start using\xa0the\xa0new Platform Game Starter Kit. Your new project will contain a short, but full, platform game."}),"\n",(0,n.jsx)(t.h2,{id:"contents",children:"Contents"}),"\n",(0,n.jsx)(t.p,{children:"The Starter Kit contains the following assets:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Our hero Playbot - a fully rigged and animated robot character for you to use."}),"\n",(0,n.jsx)(t.li,{children:"Idle, Run, Jump and Die animations for Playbot"}),"\n",(0,n.jsx)(t.li,{children:"A set of platforms in various shapes and sizes from 1x1 up to 4x4"}),"\n",(0,n.jsx)(t.li,{children:"Spike, our dumb and stupid AI bot"}),"\n",(0,n.jsx)(t.li,{children:"Punch, still pretty dumb, but don't get too close or he'll shoot."}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"We're also supplying all the code for the game:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"Platform Character Controller -\xa0the player"}),"\n",(0,n.jsx)(t.li,{children:"Enemy - a\xa0simple enemy AI"}),"\n",(0,n.jsx)(t.li,{children:"Enemy Punch - a simple enemy AI which can shoot at you"}),"\n",(0,n.jsx)(t.li,{children:"Mover - a moving platform"}),"\n",(0,n.jsx)(t.li,{children:"Goal - the target for the level"}),"\n",(0,n.jsx)(t.li,{children:"Damageable -\xa0add health and damage to an Entity"}),"\n"]}),"\n",(0,n.jsx)(t.p,{children:"We'll be writing more about the Platform Game Starter Kit in the next week to give you tips and challenges so that you can make the best use out of it. But before they arrive, create a new project using the kit, try it out and dig into the code to see how it was made."}),"\n",(0,n.jsx)(t.p,{children:"Have fun, and look out for Punch!"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:a(26978).A+"",children:(0,n.jsx)(t.img,{alt:"Punch",src:a(27884).A+"",width:"800",height:"800"})}),"\n",(0,n.jsx)("br",{}),(0,n.jsx)(t.em,{children:"Punch - the bad guy"})]})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},26978:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/files/PlayCanvas-2-e5cdbfacb29674ee32430de66e116215.jpg"},89960:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/files/playbot-2f28f7a2b89597e85a2be13d4e7ef9dc.png"},27884:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/images/PlayCanvas-2-e5cdbfacb29674ee32430de66e116215.jpg"},56290:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/images/playbot-2f28f7a2b89597e85a2be13d4e7ef9dc.png"},28453:(e,t,a)=>{a.d(t,{R:()=>s,x:()=>l});var n=a(96540);const o={},r=n.createContext(o);function s(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/0d5e4874.2fd28ba0.js b/assets/js/0d5e4874.2fd28ba0.js
deleted file mode 100644
index 5bc405899..000000000
--- a/assets/js/0d5e4874.2fd28ba0.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[60044],{56992:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>r,contentTitle:()=>s,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>h});var n=a(74848),o=a(28453);const i={authors:"dave",slug:"a-multiplayer-3rd-person-shooter-in-html5",title:"Making a multiplayer 3rd-person shooter in HTML5",tags:["game","networking"]},s=void 0,l={permalink:"/a-multiplayer-3rd-person-shooter-in-html5",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2012-08-08-a-multiplayer-3rd-person-shooter-in-html5.md",source:"@site/blog/2012-08-08-a-multiplayer-3rd-person-shooter-in-html5.md",title:"Making a multiplayer 3rd-person shooter in HTML5",description:"D.E.M.O.",date:"2012-08-08T00:00:00.000Z",tags:[{label:"game",permalink:"/tags/game"},{label:"networking",permalink:"/tags/networking"}],readingTime:5.14,hasTruncateMarker:!1,authors:[{name:"Dave Evans",title:"CTO",url:"https://twitter.com/daredevildave",imageURL:"https://pbs.twimg.com/profile_images/1271233580430053376/-OHHBJ2Z_400x400.jpg",key:"dave"}],frontMatter:{authors:"dave",slug:"a-multiplayer-3rd-person-shooter-in-html5",title:"Making a multiplayer 3rd-person shooter in HTML5",tags:["game","networking"]},unlisted:!1,prevItem:{title:"HTML5 APIs for game developers",permalink:"/html5-apis-for-game-developers"},nextItem:{title:"New Feature: GitHub and private repository support",permalink:"/new-feature-github-and-private-repository-support"}},r={authorsImageUrls:[void 0]},h=[{value:"How was it built?",id:"how-was-it-built",level:2},{value:"Asset wrangling",id:"asset-wrangling",level:3},{value:"Building the level",id:"building-the-level",level:3},{value:"Cloud Development",id:"cloud-development",level:3},{value:"Help us, help you",id:"help-us-help-you",level:3},{value:"Play the game",id:"play-the-game",level:3}];function d(e){const t={a:"a",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.img,{alt:"D.E.M.O.",src:a(73391).A+"",width:"575",height:"374"}),"\n",(0,n.jsx)("br",{}),(0,n.jsx)(t.em,{children:"D.E.M.O. Multiplayer 3rd-person shooter running in the browser"})]}),"\n",(0,n.jsx)(t.p,{children:"PlayCanvas were lucky enough to show a demo of our collaborative HTML5 game development toolset at Google I/O a few months back. We had a few existing demos of simple games that we had made in order to test the platform."}),"\n",(0,n.jsx)(t.p,{children:"However, we really wanted to show something a little more high-end, to showcase the possibilities that HTML5 offers for next-generation browser games. With a little under two weeks to go we started work on the demo we'd feature on the show floor. A networked multiplayer 3rd-person shooter we descriptively called 'scifi'. We\u2019ve since renamed it to the slightly less descriptive D.E.M.O."}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://playcanv.as/p/UAR6UQNM/",children:"Try playing D.E.M.O. now"}),".\n",(0,n.jsxs)(t.em,{children:[(0,n.jsx)(t.strong,{children:"Firefox:"})," Hiding the mouse cursor only works in Fullscreen mode, press SPACE to toggle fullscreen."]})]}),"\n",(0,n.jsx)(t.p,{children:"We think the result is something is pretty special so we\u2019re sharing it with you today. We think you\u2019ll agree that it heralds the beginning of a new generation of HTML5 games."}),"\n",(0,n.jsx)(t.p,{children:"We also wanted to talk about how using PlayCanvas allowed us to make D.E.M.O. in around 2 weeks. A staggeringly short time for any game, and it really shows off the power of collaborative development and great tools."}),"\n",(0,n.jsx)(t.p,{children:"The game and the PlayCanvas Engine are written entirely in JavaScript. It\u2019s pushing at the boundaries of the browser gaming using the latest HTML5 APIs, including:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"WebGL for the graphics;"}),"\n",(0,n.jsx)(t.li,{children:"Web Audio API for sound;"}),"\n",(0,n.jsx)(t.li,{children:"WebSockets for networking;"}),"\n",(0,n.jsx)(t.li,{children:"Gamepad API for controller input;"}),"\n",(0,n.jsx)(t.li,{children:"PointerLock API to hide the mouse cursor;"}),"\n",(0,n.jsx)(t.li,{children:"Fullscreen API to give you an immersive experience;"}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["D.E.M.O. was built on top of the ",(0,n.jsx)(t.a,{href:"https://github.com/playcanvas/engine",children:"PlayCanvas Engine"}),", which provides graphics, audio, input handling, etc. The game itself is a few thousand lines of JavaScript, the ",(0,n.jsx)(t.a,{href:"http://bitbucket.org/playcanvas/scifi",children:"source code"})," is available if you want to take a closer look. We also wrote a simple server which runs a WebSocket server powered by ",(0,n.jsx)(t.a,{href:"https://nodejs.org/",children:"NodeJS"})," to set up games and redirect messages to connected clients. The ",(0,n.jsx)(t.a,{href:"http://bitbucket.org/playcanvas/scifi-server",children:"source code"})," for this is available too."]}),"\n",(0,n.jsx)(t.h2,{id:"how-was-it-built",children:"How was it built?"}),"\n",(0,n.jsx)(t.p,{children:"Two weeks is very short time to build an app like D.E.M.O. and along with lots of long hours coding we were only able to do this thanks to the PlayCanvas platform that we\u2019ve built, so we want to share with some of the ways which it saved us time, and can save you time too."}),"\n",(0,n.jsx)(t.h3,{id:"asset-wrangling",children:"Asset wrangling"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.img,{alt:"SWAT Model",src:a(98134).A+"",width:"575",height:"323"}),"\n",(0,n.jsx)("br",{}),(0,n.jsx)(t.em,{children:"Side-by-side rendering in 3DS Max and PlayCanvas Engine"})]}),"\n",(0,n.jsx)(t.p,{children:"We\u2019ve made a beautiful looking game in 3D in next to no time. We could do this because the PlayCanvas asset tools are built to ingest a wide range of model formats and set up to ensure that default materials from popular 3D packages appear identical in engine as they do for the artist."}),"\n",(0,n.jsxs)(t.p,{children:["The sci-fi levels and the SWAT character and animations were all created using 3D Studio Max default materials. With no effort on our part we could export the source assets into the PlayCanvas format and be sure they would look nearly identical at runtime. If you were to get assets from a site like ",(0,n.jsx)(t.a,{href:"https://www.turbosquid.com/",children:"Turbo Squid"})," you need to know that it will ",(0,n.jsx)(t.em,{children:"just work"})," in PlayCanvas without modification. Within minutes of receiving 3D assets from a 3rd party you can have characters and environments in game."]}),"\n",(0,n.jsx)(t.h3,{id:"building-the-level",children:"Building the level"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.img,{alt:"D.E.M.O.",src:a(59698).A+"",width:"575",height:"193"}),"\n",(0,n.jsx)("br",{}),(0,n.jsx)(t.em,{children:"Building the D.E.M.O. in PlayCanvas Designer"})]}),"\n",(0,n.jsx)(t.p,{children:"Traditionally, this would consist of building out the level in low detail (often called grey-boxing) and running about it in to get feel for the how the game plays, where the choke points are and how the spawn points should be placed. Unfortunately, we didn\u2019t have the art resources to design the level in this way but we did have a set of 5 or 6 components which fitted together like jigsaw pieces."}),"\n",(0,n.jsx)(t.p,{children:"Even though there was a limited choice of level design, both Will and I wanted to be involved in the discussion over the how level should look. As we were working around 50 miles apart, getting together around a laptop screen wasn\u2019t going to be possible. Fortunately the PlayCanvas Designer is the perfect solution for this type of collaborative work. We are able to simultaneously view the same level and while talking face-to-face over Skype, we could both position the pieces in real-time and discuss the pros and cons of each configuration."}),"\n",(0,n.jsx)(t.p,{children:"We had a pretty simple task to complete but we were miles apart and using the Designer meant that we had no problem collaborating despite this. It\u2019s clear to us that scaling this up to a design team would be incredibly liberating and will really change the way that games are made."}),"\n",(0,n.jsx)(t.h3,{id:"cloud-development",children:"Cloud Development"}),"\n",(0,n.jsx)(t.p,{children:"By the time of the conference, development on the demo had nearly finished and we had a few hours to set up our booth. Google kindly provided a MacBook Pro and one of their new fancy Chromebooks for us to demo on. Our plan was to run the PlayCanvas Designer on each machine along with a live running build of the game. That way we could demonstrate how editing data on one machine would update instantly in both the Designer view on the other machine and the live games running on each machine."}),"\n",(0,n.jsx)(t.p,{children:"Total set up time for installing tools and getting up and running on both machines? Under a minute, simply open Chrome and navigate to a url. This is possible because of cloud development. Every part of the process is based in the cloud: the tools, the assets and the code."}),"\n",(0,n.jsx)(t.h3,{id:"help-us-help-you",children:"Help us, help you"}),"\n",(0,n.jsx)(t.p,{children:"The service we\u2019re building at PlayCanvas is designed to make creating games faster and more accessible. We're building games ourselves in ways that we wouldn\u2019t have thought possible a few years ago and we want you to do that too."}),"\n",(0,n.jsxs)(t.p,{children:["If you are interested in trying out PlayCanvas to build your games, get in touch, email us at ",(0,n.jsx)(t.a,{href:"mailto:info@playcanvas.com",children:"info@playcanvas.com"})," to join the Beta trial."]}),"\n",(0,n.jsx)(t.h3,{id:"play-the-game",children:(0,n.jsx)(t.a,{href:"https://playcanv.as/p/UAR6UQNM/",children:"Play the game"})}),"\n",(0,n.jsx)(t.p,{children:"Try out D.E.M.O for yourselves. We\u2019ve divided it into multiple 3-player games, you will join the first free game. It should run in any browser that supports WebGL."})]})}function c(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},59698:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/images/demo-designer-f45494bb669be9aeeecfae32cfda5644.jpg"},73391:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/images/demo-game-59ac819b64255f2b5c03605100b5e461.jpg"},98134:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/images/swat_in_tools-e4501e8cefcc25819b45542c4a2ea315.jpg"},28453:(e,t,a)=>{a.d(t,{R:()=>s,x:()=>l});var n=a(96540);const o={},i=n.createContext(o);function s(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/0d5e4874.8633d26c.js b/assets/js/0d5e4874.8633d26c.js
new file mode 100644
index 000000000..c3ca7ffcb
--- /dev/null
+++ b/assets/js/0d5e4874.8633d26c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[60044],{56992:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>r,contentTitle:()=>s,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>h});var n=a(74848),o=a(28453);const i={authors:"dave",slug:"a-multiplayer-3rd-person-shooter-in-html5",title:"Making a multiplayer 3rd-person shooter in HTML5",tags:["game","networking"]},s=void 0,l={permalink:"/a-multiplayer-3rd-person-shooter-in-html5",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2012-08-08-a-multiplayer-3rd-person-shooter-in-html5.md",source:"@site/blog/2012-08-08-a-multiplayer-3rd-person-shooter-in-html5.md",title:"Making a multiplayer 3rd-person shooter in HTML5",description:"D.E.M.O.",date:"2012-08-08T00:00:00.000Z",tags:[{label:"game",permalink:"/tags/game"},{label:"networking",permalink:"/tags/networking"}],readingTime:5.125,hasTruncateMarker:!1,authors:[{name:"Dave Evans",title:"CTO",url:"https://twitter.com/daredevildave",imageURL:"https://pbs.twimg.com/profile_images/1271233580430053376/-OHHBJ2Z_400x400.jpg",key:"dave"}],frontMatter:{authors:"dave",slug:"a-multiplayer-3rd-person-shooter-in-html5",title:"Making a multiplayer 3rd-person shooter in HTML5",tags:["game","networking"]},unlisted:!1,prevItem:{title:"HTML5 APIs for game developers",permalink:"/html5-apis-for-game-developers"},nextItem:{title:"New Feature: GitHub and private repository support",permalink:"/new-feature-github-and-private-repository-support"}},r={authorsImageUrls:[void 0]},h=[{value:"How was it built?",id:"how-was-it-built",level:2},{value:"Asset wrangling",id:"asset-wrangling",level:3},{value:"Building the level",id:"building-the-level",level:3},{value:"Cloud Development",id:"cloud-development",level:3},{value:"Help us, help you",id:"help-us-help-you",level:3},{value:"Play the game",id:"play-the-game",level:3}];function d(e){const t={a:"a",br:"br",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.img,{alt:"D.E.M.O.",src:a(73391).A+"",width:"575",height:"374"}),(0,n.jsx)(t.br,{}),"\n",(0,n.jsx)(t.em,{children:"D.E.M.O. Multiplayer 3rd-person shooter running in the browser"})]}),"\n",(0,n.jsx)(t.p,{children:"PlayCanvas were lucky enough to show a demo of our collaborative HTML5 game development toolset at Google I/O a few months back. We had a few existing demos of simple games that we had made in order to test the platform."}),"\n",(0,n.jsx)(t.p,{children:"However, we really wanted to show something a little more high-end, to showcase the possibilities that HTML5 offers for next-generation browser games. With a little under two weeks to go we started work on the demo we'd feature on the show floor. A networked multiplayer 3rd-person shooter we descriptively called 'scifi'. We\u2019ve since renamed it to the slightly less descriptive D.E.M.O."}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://playcanv.as/p/UAR6UQNM/",children:"Try playing D.E.M.O. now"}),"."]}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsxs)(t.em,{children:[(0,n.jsx)(t.strong,{children:"Firefox:"})," Hiding the mouse cursor only works in Fullscreen mode, press SPACE to toggle fullscreen."]})}),"\n",(0,n.jsx)(t.p,{children:"We think the result is something is pretty special so we\u2019re sharing it with you today. We think you\u2019ll agree that it heralds the beginning of a new generation of HTML5 games."}),"\n",(0,n.jsx)(t.p,{children:"We also wanted to talk about how using PlayCanvas allowed us to make D.E.M.O. in around 2 weeks. A staggeringly short time for any game, and it really shows off the power of collaborative development and great tools."}),"\n",(0,n.jsx)(t.p,{children:"The game and the PlayCanvas Engine are written entirely in JavaScript. It\u2019s pushing at the boundaries of the browser gaming using the latest HTML5 APIs, including:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:"WebGL for the graphics;"}),"\n",(0,n.jsx)(t.li,{children:"Web Audio API for sound;"}),"\n",(0,n.jsx)(t.li,{children:"WebSockets for networking;"}),"\n",(0,n.jsx)(t.li,{children:"Gamepad API for controller input;"}),"\n",(0,n.jsx)(t.li,{children:"PointerLock API to hide the mouse cursor;"}),"\n",(0,n.jsx)(t.li,{children:"Fullscreen API to give you an immersive experience;"}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["D.E.M.O. was built on top of the ",(0,n.jsx)(t.a,{href:"https://github.com/playcanvas/engine",children:"PlayCanvas Engine"}),", which provides graphics, audio, input handling, etc. The game itself is a few thousand lines of JavaScript, the ",(0,n.jsx)(t.a,{href:"http://bitbucket.org/playcanvas/scifi",children:"source code"})," is available if you want to take a closer look. We also wrote a simple server which runs a WebSocket server powered by ",(0,n.jsx)(t.a,{href:"https://nodejs.org/",children:"NodeJS"})," to set up games and redirect messages to connected clients. The ",(0,n.jsx)(t.a,{href:"http://bitbucket.org/playcanvas/scifi-server",children:"source code"})," for this is available too."]}),"\n",(0,n.jsx)(t.h2,{id:"how-was-it-built",children:"How was it built?"}),"\n",(0,n.jsx)(t.p,{children:"Two weeks is very short time to build an app like D.E.M.O. and along with lots of long hours coding we were only able to do this thanks to the PlayCanvas platform that we\u2019ve built, so we want to share with some of the ways which it saved us time, and can save you time too."}),"\n",(0,n.jsx)(t.h3,{id:"asset-wrangling",children:"Asset wrangling"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.img,{alt:"SWAT Model",src:a(98134).A+"",width:"575",height:"323"}),(0,n.jsx)(t.br,{}),"\n",(0,n.jsx)(t.em,{children:"Side-by-side rendering in 3DS Max and PlayCanvas Engine"})]}),"\n",(0,n.jsx)(t.p,{children:"We\u2019ve made a beautiful looking game in 3D in next to no time. We could do this because the PlayCanvas asset tools are built to ingest a wide range of model formats and set up to ensure that default materials from popular 3D packages appear identical in engine as they do for the artist."}),"\n",(0,n.jsxs)(t.p,{children:["The sci-fi levels and the SWAT character and animations were all created using 3D Studio Max default materials. With no effort on our part we could export the source assets into the PlayCanvas format and be sure they would look nearly identical at runtime. If you were to get assets from a site like ",(0,n.jsx)(t.a,{href:"https://www.turbosquid.com/",children:"Turbo Squid"})," you need to know that it will ",(0,n.jsx)(t.em,{children:"just work"})," in PlayCanvas without modification. Within minutes of receiving 3D assets from a 3rd party you can have characters and environments in game."]}),"\n",(0,n.jsx)(t.h3,{id:"building-the-level",children:"Building the level"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.img,{alt:"D.E.M.O.",src:a(59698).A+"",width:"575",height:"193"}),(0,n.jsx)(t.br,{}),"\n",(0,n.jsx)(t.em,{children:"Building the D.E.M.O. in PlayCanvas Designer"})]}),"\n",(0,n.jsx)(t.p,{children:"Traditionally, this would consist of building out the level in low detail (often called grey-boxing) and running about it in to get feel for the how the game plays, where the choke points are and how the spawn points should be placed. Unfortunately, we didn\u2019t have the art resources to design the level in this way but we did have a set of 5 or 6 components which fitted together like jigsaw pieces."}),"\n",(0,n.jsx)(t.p,{children:"Even though there was a limited choice of level design, both Will and I wanted to be involved in the discussion over the how level should look. As we were working around 50 miles apart, getting together around a laptop screen wasn\u2019t going to be possible. Fortunately the PlayCanvas Designer is the perfect solution for this type of collaborative work. We are able to simultaneously view the same level and while talking face-to-face over Skype, we could both position the pieces in real-time and discuss the pros and cons of each configuration."}),"\n",(0,n.jsx)(t.p,{children:"We had a pretty simple task to complete but we were miles apart and using the Designer meant that we had no problem collaborating despite this. It\u2019s clear to us that scaling this up to a design team would be incredibly liberating and will really change the way that games are made."}),"\n",(0,n.jsx)(t.h3,{id:"cloud-development",children:"Cloud Development"}),"\n",(0,n.jsx)(t.p,{children:"By the time of the conference, development on the demo had nearly finished and we had a few hours to set up our booth. Google kindly provided a MacBook Pro and one of their new fancy Chromebooks for us to demo on. Our plan was to run the PlayCanvas Designer on each machine along with a live running build of the game. That way we could demonstrate how editing data on one machine would update instantly in both the Designer view on the other machine and the live games running on each machine."}),"\n",(0,n.jsx)(t.p,{children:"Total set up time for installing tools and getting up and running on both machines? Under a minute, simply open Chrome and navigate to a url. This is possible because of cloud development. Every part of the process is based in the cloud: the tools, the assets and the code."}),"\n",(0,n.jsx)(t.h3,{id:"help-us-help-you",children:"Help us, help you"}),"\n",(0,n.jsx)(t.p,{children:"The service we\u2019re building at PlayCanvas is designed to make creating games faster and more accessible. We're building games ourselves in ways that we wouldn\u2019t have thought possible a few years ago and we want you to do that too."}),"\n",(0,n.jsxs)(t.p,{children:["If you are interested in trying out PlayCanvas to build your games, get in touch, email us at ",(0,n.jsx)(t.a,{href:"mailto:info@playcanvas.com",children:"info@playcanvas.com"})," to join the Beta trial."]}),"\n",(0,n.jsx)(t.h3,{id:"play-the-game",children:(0,n.jsx)(t.a,{href:"https://playcanv.as/p/UAR6UQNM/",children:"Play the game"})}),"\n",(0,n.jsx)(t.p,{children:"Try out D.E.M.O for yourselves. We\u2019ve divided it into multiple 3-player games, you will join the first free game. It should run in any browser that supports WebGL."})]})}function c(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},59698:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/images/demo-designer-f45494bb669be9aeeecfae32cfda5644.jpg"},73391:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/images/demo-game-59ac819b64255f2b5c03605100b5e461.jpg"},98134:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/images/swat_in_tools-e4501e8cefcc25819b45542c4a2ea315.jpg"},28453:(e,t,a)=>{a.d(t,{R:()=>s,x:()=>l});var n=a(96540);const o={},i=n.createContext(o);function s(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/116ac02d.64131bfe.js b/assets/js/116ac02d.64131bfe.js
new file mode 100644
index 000000000..6604c77ed
--- /dev/null
+++ b/assets/js/116ac02d.64131bfe.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[11745],{25218:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>r,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>h});var t=n(74848),s=n(28453);const i={authors:"christy",slug:"playcanvas-update-040714",title:"PlayCanvas Update 04/07/14"},o=void 0,l={permalink:"/playcanvas-update-040714",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2014-07-04-playcanvas-update-040714.md",source:"@site/blog/2014-07-04-playcanvas-update-040714.md",title:"PlayCanvas Update 04/07/14",description:"There has been plenty going on at HQ since our last update and it is all making game development on our engine that little bit easier. Here\u2019s a run down of engine optimizations, new features\xa0and what happened behind the scenes at\xa0PlayCanvas\xa0this week.",date:"2014-07-04T00:00:00.000Z",tags:[],readingTime:1.89,hasTruncateMarker:!1,authors:[{name:"Christy O'Connor",title:"Community Manager",url:"https://www.linkedin.com/in/christy-o-connor-76aa2239/",key:"christy"}],frontMatter:{authors:"christy",slug:"playcanvas-update-040714",title:"PlayCanvas Update 04/07/14"},unlisted:!1,prevItem:{title:"Great British Summer Game Jam",permalink:"/great-british-summer-game-jam"},nextItem:{title:"PlayCanvas Voted the Leading WebGL Engine",permalink:"/playcanvas-voted-number-1-webgl-engine-by-develop-magazine"}},r={authorsImageUrls:[void 0]},h=[{value:"Asset Lists",id:"asset-lists",level:3},{value:"Ranks and Nominations",id:"ranks-and-nominations",level:3},{value:"Events",id:"events",level:3},{value:"LizziP and her Team Slam the MalmoJammo",id:"lizzip-and-her-team-slam-the-malmojammo",level:3},{value:"Stay In The Loop",id:"stay-in-the-loop",level:3}];function c(e){const a={a:"a",br:"br",em:"em",h3:"h3",img:"img",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(a.p,{children:["There has been plenty going on at HQ since our last update and it is all making game development on our engine that little bit easier. Here\u2019s a run down of engine optimizations, new features\xa0and what happened behind the scenes at\xa0",(0,t.jsx)(a.a,{href:"https://playcanvas.com/",children:"PlayCanvas"}),"\xa0this week."]}),"\n",(0,t.jsxs)(a.p,{children:[(0,t.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(48301).A+"",children:(0,t.jsx)(a.img,{alt:"Spacetifacts",src:n(44239).A+"",width:"800",height:"459"})}),(0,t.jsx)(a.br,{}),"\n",(0,t.jsx)(a.em,{children:"Team HexPenguin's PlayCanvas game 'Spacetifacts' won the Malmo Game Jam"})]}),"\n",(0,t.jsx)(a.h3,{id:"asset-lists",children:"Asset Lists"}),"\n",(0,t.jsx)(a.p,{children:"We now include Assets lists for each Pack when running your game, allowing you to\xa0load a Pack with all Assets. This means you can make multiple levels, each as a Pack and load them at runtime, reducing the amount of data you have to download upfront."}),"\n",(0,t.jsx)(a.h3,{id:"ranks-and-nominations",children:"Ranks and Nominations"}),"\n",(0,t.jsxs)(a.p,{children:["We have been paid some incredible compliments in the last week or so. In particular Develop Magazine ranked us as the top WebGL game engine in their ",(0,t.jsx)(a.a,{href:"http://content.yudu.com/A2xcc7/Dev100TechList2014/resources/index.htm?referrerUrl=",children:"Develop 100"})," gaming tech list. We have also been nominated for a ",(0,t.jsx)(a.a,{href:"https://mcvuk.com/business-news/publishing/develop-awards-2014-the-finalists-revealed/",children:"Technical Innovation award"}),"\xa0by Develop Magazine as they placed in the same category as products like the Oculus Rift Development Kit 2. Although these accolades from Develop\xa0have left\xa0us feeling particularly grateful, it is great that the game development industry in general is recognizing our recent efforts."]}),"\n",(0,t.jsx)(a.h3,{id:"events",children:"Events"}),"\n",(0,t.jsxs)(a.p,{children:["On Tuesday we hosted \xa0the ",(0,t.jsx)(a.a,{href:"http://www.meetup.com/London-HTML5-Game-Developers/events/188693262/",children:"London HTML5 Game Development Meet Up"})," at\xa0the London HQ of Mozilla. There were some great talks from Jesse Freeman (on HTML5 vs Unity), Karl Bunyan (who spoke on wrapping games with his app PhoneGap) and our very own Senior Engineer Max (who spoke about creating colorTanks in a game jam). At one point during his talk, Max edited his game 'colorTanks' in the PlayCanvas Editor live and had most of the attendees playing the game at the same time. Can't wait for the next meet up!"]}),"\n",(0,t.jsx)(a.p,{children:(0,t.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(46321).A+"",children:(0,t.jsx)(a.img,{alt:"MaksTalk-001",src:n(14115).A+"",width:"800",height:"600"})})}),"\n",(0,t.jsx)(a.h3,{id:"lizzip-and-her-team-slam-the-malmojammo",children:"LizziP and her Team Slam the MalmoJammo"}),"\n",(0,t.jsxs)(a.p,{children:["Team ",(0,t.jsx)(a.a,{href:"https://twitter.com/HexPenguin",children:"HexPenguin"})," used PlayCanvas in the Malmo Gam Jam to create their winning game. We love seeing progress in our\xa0communities projects but to hear that\xa0PlayCanvas users are using the engine to win (in the intense conditions of a game jam) is incredible. Why not play team HexPenguins award winning game ",(0,t.jsx)(a.a,{href:"https://playcanvas.com/project/12400/overview/malmojammo",children:"here"}),"?"]}),"\n",(0,t.jsx)(a.h3,{id:"stay-in-the-loop",children:"Stay In The Loop"}),"\n",(0,t.jsxs)(a.ul,{children:["\n",(0,t.jsxs)(a.li,{children:["Follow us on Twitter,\xa0",(0,t.jsx)(a.a,{href:"https://twitter.com/playcanvas",children:"@playcanvas"}),", for updates on PlayCanvas."]}),"\n",(0,t.jsxs)(a.li,{children:["Like the\xa0",(0,t.jsx)(a.a,{href:"https://facebook.com/playcanvas",children:"PlayCanvas Facebook"}),"\xa0page for our whimsical views on the game dev scene."]}),"\n",(0,t.jsxs)(a.li,{children:["Join and start discussions on the\xa0",(0,t.jsx)(a.a,{href:"https://forum.playcanvas.com/",children:"PlayCanvas Forum"}),"."]}),"\n"]})]})}function d(e={}){const{wrapper:a}={...(0,s.R)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},46321:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/files/MaksTalk-001-d2fde38a70960d86584569b0132c0904.jpg"},48301:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/files/Spacetifacts-33e448093bc44cced7fee33bea8c2fab.jpg"},14115:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/MaksTalk-001-d2fde38a70960d86584569b0132c0904.jpg"},44239:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/Spacetifacts-33e448093bc44cced7fee33bea8c2fab.jpg"},28453:(e,a,n)=>{n.d(a,{R:()=>o,x:()=>l});var t=n(96540);const s={},i=t.createContext(s);function o(e){const a=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function l(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(i.Provider,{value:a},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/116ac02d.c198368e.js b/assets/js/116ac02d.c198368e.js
deleted file mode 100644
index 651a9a451..000000000
--- a/assets/js/116ac02d.c198368e.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[11745],{25218:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>r,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>h});var t=n(74848),s=n(28453);const i={authors:"christy",slug:"playcanvas-update-040714",title:"PlayCanvas Update 04/07/14"},o=void 0,l={permalink:"/playcanvas-update-040714",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2014-07-04-playcanvas-update-040714.md",source:"@site/blog/2014-07-04-playcanvas-update-040714.md",title:"PlayCanvas Update 04/07/14",description:"There has been plenty going on at HQ since our last update and it is all making game development on our engine that little bit easier. Here\u2019s a run down of engine optimizations, new features\xa0and what happened behind the scenes at\xa0PlayCanvas\xa0this week.",date:"2014-07-04T00:00:00.000Z",tags:[],readingTime:1.895,hasTruncateMarker:!1,authors:[{name:"Christy O'Connor",title:"Community Manager",url:"https://www.linkedin.com/in/christy-o-connor-76aa2239/",key:"christy"}],frontMatter:{authors:"christy",slug:"playcanvas-update-040714",title:"PlayCanvas Update 04/07/14"},unlisted:!1,prevItem:{title:"Great British Summer Game Jam",permalink:"/great-british-summer-game-jam"},nextItem:{title:"PlayCanvas Voted the Leading WebGL Engine",permalink:"/playcanvas-voted-number-1-webgl-engine-by-develop-magazine"}},r={authorsImageUrls:[void 0]},h=[{value:"Asset Lists",id:"asset-lists",level:3},{value:"Ranks and Nominations",id:"ranks-and-nominations",level:3},{value:"Events",id:"events",level:3},{value:"LizziP and her Team Slam the MalmoJammo",id:"lizzip-and-her-team-slam-the-malmojammo",level:3},{value:"Stay In The Loop",id:"stay-in-the-loop",level:3}];function c(e){const a={a:"a",em:"em",h3:"h3",img:"img",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(a.p,{children:["There has been plenty going on at HQ since our last update and it is all making game development on our engine that little bit easier. Here\u2019s a run down of engine optimizations, new features\xa0and what happened behind the scenes at\xa0",(0,t.jsx)(a.a,{href:"https://playcanvas.com/",children:"PlayCanvas"}),"\xa0this week."]}),"\n",(0,t.jsxs)(a.p,{children:[(0,t.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(48301).A+"",children:(0,t.jsx)(a.img,{alt:"Spacetifacts",src:n(44239).A+"",width:"800",height:"459"})}),"\n",(0,t.jsx)("br",{}),(0,t.jsx)(a.em,{children:"Team HexPenguin's PlayCanvas game 'Spacetifacts' won the Malmo Game Jam"})]}),"\n",(0,t.jsx)(a.h3,{id:"asset-lists",children:"Asset Lists"}),"\n",(0,t.jsx)(a.p,{children:"We now include Assets lists for each Pack when running your game, allowing you to\xa0load a Pack with all Assets. This means you can make multiple levels, each as a Pack and load them at runtime, reducing the amount of data you have to download upfront."}),"\n",(0,t.jsx)(a.h3,{id:"ranks-and-nominations",children:"Ranks and Nominations"}),"\n",(0,t.jsxs)(a.p,{children:["We have been paid some incredible compliments in the last week or so. In particular Develop Magazine ranked us as the top WebGL game engine in their ",(0,t.jsx)(a.a,{href:"http://content.yudu.com/A2xcc7/Dev100TechList2014/resources/index.htm?referrerUrl=",children:"Develop 100"})," gaming tech list. We have also been nominated for a ",(0,t.jsx)(a.a,{href:"https://mcvuk.com/business-news/publishing/develop-awards-2014-the-finalists-revealed/",children:"Technical Innovation award"}),"\xa0by Develop Magazine as they placed in the same category as products like the Oculus Rift Development Kit 2. Although these accolades from Develop\xa0have left\xa0us feeling particularly grateful, it is great that the game development industry in general is recognizing our recent efforts."]}),"\n",(0,t.jsx)(a.h3,{id:"events",children:"Events"}),"\n",(0,t.jsxs)(a.p,{children:["On Tuesday we hosted \xa0the ",(0,t.jsx)(a.a,{href:"http://www.meetup.com/London-HTML5-Game-Developers/events/188693262/",children:"London HTML5 Game Development Meet Up"})," at\xa0the London HQ of Mozilla. There were some great talks from Jesse Freeman (on HTML5 vs Unity), Karl Bunyan (who spoke on wrapping games with his app PhoneGap) and our very own Senior Engineer Max (who spoke about creating colorTanks in a game jam). At one point during his talk, Max edited his game 'colorTanks' in the PlayCanvas Editor live and had most of the attendees playing the game at the same time. Can't wait for the next meet up!"]}),"\n",(0,t.jsx)(a.p,{children:(0,t.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(46321).A+"",children:(0,t.jsx)(a.img,{alt:"MaksTalk-001",src:n(14115).A+"",width:"800",height:"600"})})}),"\n",(0,t.jsx)(a.h3,{id:"lizzip-and-her-team-slam-the-malmojammo",children:"LizziP and her Team Slam the MalmoJammo"}),"\n",(0,t.jsxs)(a.p,{children:["Team ",(0,t.jsx)(a.a,{href:"https://twitter.com/HexPenguin",children:"HexPenguin"})," used PlayCanvas in the Malmo Gam Jam to create their winning game. We love seeing progress in our\xa0communities projects but to hear that\xa0PlayCanvas users are using the engine to win (in the intense conditions of a game jam) is incredible. Why not play team HexPenguins award winning game ",(0,t.jsx)(a.a,{href:"https://playcanvas.com/project/12400/overview/malmojammo",children:"here"}),"?"]}),"\n",(0,t.jsx)(a.h3,{id:"stay-in-the-loop",children:"Stay In The Loop"}),"\n",(0,t.jsxs)(a.ul,{children:["\n",(0,t.jsxs)(a.li,{children:["\n",(0,t.jsxs)(a.p,{children:["Follow us on Twitter,\xa0",(0,t.jsx)(a.a,{href:"https://twitter.com/playcanvas",children:"@playcanvas"}),", for updates on PlayCanvas."]}),"\n"]}),"\n",(0,t.jsxs)(a.li,{children:["\n",(0,t.jsxs)(a.p,{children:["Like the\xa0",(0,t.jsx)(a.a,{href:"https://facebook.com/playcanvas",children:"PlayCanvas Facebook"}),"\xa0page for our whimsical views on the game dev scene."]}),"\n"]}),"\n",(0,t.jsxs)(a.li,{children:["\n",(0,t.jsxs)(a.p,{children:["Join and start discussions on the\xa0",(0,t.jsx)(a.a,{href:"https://forum.playcanvas.com/",children:"PlayCanvas Forum"}),"."]}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:a}={...(0,s.R)(),...e.components};return a?(0,t.jsx)(a,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},46321:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/files/MaksTalk-001-d2fde38a70960d86584569b0132c0904.jpg"},48301:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/files/Spacetifacts-33e448093bc44cced7fee33bea8c2fab.jpg"},14115:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/MaksTalk-001-d2fde38a70960d86584569b0132c0904.jpg"},44239:(e,a,n)=>{n.d(a,{A:()=>t});const t=n.p+"assets/images/Spacetifacts-33e448093bc44cced7fee33bea8c2fab.jpg"},28453:(e,a,n)=>{n.d(a,{R:()=>o,x:()=>l});var t=n(96540);const s={},i=t.createContext(s);function o(e){const a=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function l(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),t.createElement(i.Provider,{value:a},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/11c91ff1.2f3bc9a1.js b/assets/js/11c91ff1.2f3bc9a1.js
deleted file mode 100644
index 848932bde..000000000
--- a/assets/js/11c91ff1.2f3bc9a1.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[99039],{18862:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>i,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>l,toc:()=>c});var s=t(74848),r=t(28453);const n={authors:"steven",slug:"plan-updates-more-storage-more-features-same-price",title:"Plan Updates: More Storage, More Features, Same Price",tags:["plans"]},o=void 0,l={permalink:"/plan-updates-more-storage-more-features-same-price",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2020-07-21-plan-updates-more-storage-more-features-same-price.md",source:"@site/blog/2020-07-21-plan-updates-more-storage-more-features-same-price.md",title:"Plan Updates: More Storage, More Features, Same Price",description:"Creativity makes our world a better place. PlayCanvas unlocks creativity through collaborative, frictionless tools that enable everybody to build, share and play together.",date:"2020-07-21T00:00:00.000Z",tags:[{label:"plans",permalink:"/tags/plans"}],readingTime:1.38,hasTruncateMarker:!1,authors:[{name:"Steven Yau",title:"Partner Relations Manager",url:"https://twitter.com/yaustar",imageURL:"https://pbs.twimg.com/profile_images/1675831859756908545/E60-0cNq_400x400.jpg",key:"steven"}],frontMatter:{authors:"steven",slug:"plan-updates-more-storage-more-features-same-price",title:"Plan Updates: More Storage, More Features, Same Price",tags:["plans"]},unlisted:!1,prevItem:{title:"PlayCanvas launches glTF 2.0 Viewer Tool",permalink:"/playcanvas-launches-gltf-2-0-viewer-tool"},nextItem:{title:"Porting a Large ES5 JavaScript Library to ES6 Modules and Rollup",permalink:"/porting-a-large-es5-javascript-library-to-es6-modules-and-rollup"}},i={authorsImageUrls:[void 0]},c=[];function p(e){const a={a:"a",em:"em",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a.p,{children:"Creativity makes our world a better place. PlayCanvas unlocks creativity through collaborative, frictionless tools that enable everybody to build, share and play together."}),"\n",(0,s.jsx)(a.p,{children:"With PlayCanvas, getting started with game development is as simple as clicking on a hyperlink. No installation, available wherever you have access to a browser and easily shareable for a real-time collaborative workspace."}),"\n",(0,s.jsxs)(a.p,{children:[(0,s.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(36405).A+"",children:(0,s.jsx)(a.img,{alt:"Super Snappy Bowling",src:t(79027).A+"",width:"2560",height:"1402"})}),"\n",(0,s.jsx)("br",{}),(0,s.jsx)(a.em,{children:"Super Snappy Bowling from NOWWA"})]}),"\n",(0,s.jsxs)(a.p,{children:["Until today, some aspects of the platform have been limited or restricted. This just holds back the creativity of our community. So today, we have some incredibly exciting news. We have updated our ",(0,s.jsx)(a.a,{href:"https://playcanvas.com/plans",children:"plans"})," to make our tools even more accessible for everyone at all levels!"]}),"\n",(0,s.jsx)(a.p,{children:(0,s.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(14412).A+"",children:(0,s.jsx)(a.img,{alt:"New Plans",src:t(642).A+"",width:"1920",height:"1080"})})}),"\n",(0,s.jsx)(a.p,{children:"We are now giving everyone:"}),"\n",(0,s.jsxs)(a.ul,{children:["\n",(0,s.jsxs)(a.li,{children:["5-10x increase on storage for all tiers","\n",(0,s.jsxs)(a.ul,{children:["\n",(0,s.jsx)(a.li,{children:"Free: 200MB \u2192 1GB"}),"\n",(0,s.jsx)(a.li,{children:"Personal: 1GB \u2192 10GB"}),"\n",(0,s.jsx)(a.li,{children:"Organization: 10GB \u2192 50GB"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.a,{href:"https://developer.playcanvas.com/user-manual/designer/loading-screen/",children:"Customize the loading screen"})," - remove PlayCanvas branding"]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.a,{href:"https://developer.playcanvas.com/user-manual/publishing/web/self-hosting/",children:"Download your apps"})," - to host your game/app to your own server"]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.a,{href:"https://developer.playcanvas.com/user-manual/profile/projects/#export-project-archive",children:"Export and import project archives"})," - for making offline backups of your projects"]}),"\n"]}),"\n",(0,s.jsxs)(a.p,{children:["Best of all, this comes at ",(0,s.jsx)(a.strong,{children:"no extra cost"}),"! \ud83c\udf89\ud83c\udf89\ud83c\udf89"]}),"\n",(0,s.jsx)(a.p,{children:"If you're new to PlayCanvas, now is the perfect time to get started! We hope you enjoy these new features and updates."}),"\n",(0,s.jsx)(a.p,{children:"One last thing! We are super-excited to spread the word - can you help us with a retweet?"}),"\n",(0,s.jsxs)("blockquote",{class:"twitter-tweet",children:[(0,s.jsxs)("p",{lang:"en",dir:"ltr",children:["HUGE announcement! We're giving you more! Much more:",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"\u2705 5-10X Storage",(0,s.jsx)("br",{}),"\u2705 Download your apps for self-hosting",(0,s.jsx)("br",{}),"\u2705 Customize PlayCanvas loading screen",(0,s.jsx)("br",{}),"\u2705 Archive your projects offline",(0,s.jsx)("a",{href:"https://t.co/78jf9U3YkM",children:(0,s.jsx)(a.a,{href:"https://t.co/78jf9U3YkM",children:"https://t.co/78jf9U3YkM"})}),(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"Get started with ",(0,s.jsx)("a",{href:"https://twitter.com/hashtag/gamedev?src=hash&ref_src=twsrc%5Etfw",children:"#gamedev"})," today!"]}),"\u2014 PlayCanvas (@playcanvas) ",(0,s.jsx)("a",{href:"https://twitter.com/playcanvas/status/1285598408787582977?ref_src=twsrc%5Etfw",children:"July 21, 2020"})]}),"\n",(0,s.jsx)("script",{async:!0,src:"https://platform.twitter.com/widgets.js",charset:"utf-8"})]})}function d(e={}){const{wrapper:a}={...(0,r.R)(),...e.components};return a?(0,s.jsx)(a,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},36405:(e,a,t)=>{t.d(a,{A:()=>s});const s=t.p+"assets/files/editor-super-snappy-bowling-c4ae0a030ad4c1dd43b15093ec03249d.png"},14412:(e,a,t)=>{t.d(a,{A:()=>s});const s=t.p+"assets/files/plans-2020-07c684b8d16c6cc0e5751067f1a603ad.jpg"},79027:(e,a,t)=>{t.d(a,{A:()=>s});const s=t.p+"assets/images/editor-super-snappy-bowling-c4ae0a030ad4c1dd43b15093ec03249d.png"},642:(e,a,t)=>{t.d(a,{A:()=>s});const s=t.p+"assets/images/plans-2020-07c684b8d16c6cc0e5751067f1a603ad.jpg"},28453:(e,a,t)=>{t.d(a,{R:()=>o,x:()=>l});var s=t(96540);const r={},n=s.createContext(r);function o(e){const a=s.useContext(n);return s.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function l(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(n.Provider,{value:a},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/11c91ff1.6e681b91.js b/assets/js/11c91ff1.6e681b91.js
new file mode 100644
index 000000000..40a84ecd9
--- /dev/null
+++ b/assets/js/11c91ff1.6e681b91.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[99039],{18862:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>i,contentTitle:()=>o,default:()=>d,frontMatter:()=>n,metadata:()=>l,toc:()=>c});var s=t(74848),r=t(28453);const n={authors:"steven",slug:"plan-updates-more-storage-more-features-same-price",title:"Plan Updates: More Storage, More Features, Same Price",tags:["plans"]},o=void 0,l={permalink:"/plan-updates-more-storage-more-features-same-price",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2020-07-21-plan-updates-more-storage-more-features-same-price.md",source:"@site/blog/2020-07-21-plan-updates-more-storage-more-features-same-price.md",title:"Plan Updates: More Storage, More Features, Same Price",description:"Creativity makes our world a better place. PlayCanvas unlocks creativity through collaborative, frictionless tools that enable everybody to build, share and play together.",date:"2020-07-21T00:00:00.000Z",tags:[{label:"plans",permalink:"/tags/plans"}],readingTime:1.375,hasTruncateMarker:!1,authors:[{name:"Steven Yau",title:"Partner Relations Manager",url:"https://twitter.com/yaustar",imageURL:"https://pbs.twimg.com/profile_images/1675831859756908545/E60-0cNq_400x400.jpg",key:"steven"}],frontMatter:{authors:"steven",slug:"plan-updates-more-storage-more-features-same-price",title:"Plan Updates: More Storage, More Features, Same Price",tags:["plans"]},unlisted:!1,prevItem:{title:"PlayCanvas launches glTF 2.0 Viewer Tool",permalink:"/playcanvas-launches-gltf-2-0-viewer-tool"},nextItem:{title:"Porting a Large ES5 JavaScript Library to ES6 Modules and Rollup",permalink:"/porting-a-large-es5-javascript-library-to-es6-modules-and-rollup"}},i={authorsImageUrls:[void 0]},c=[];function p(e){const a={a:"a",br:"br",em:"em",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a.p,{children:"Creativity makes our world a better place. PlayCanvas unlocks creativity through collaborative, frictionless tools that enable everybody to build, share and play together."}),"\n",(0,s.jsx)(a.p,{children:"With PlayCanvas, getting started with game development is as simple as clicking on a hyperlink. No installation, available wherever you have access to a browser and easily shareable for a real-time collaborative workspace."}),"\n",(0,s.jsxs)(a.p,{children:[(0,s.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(36405).A+"",children:(0,s.jsx)(a.img,{alt:"Super Snappy Bowling",src:t(79027).A+"",width:"2560",height:"1402"})}),(0,s.jsx)(a.br,{}),"\n",(0,s.jsx)(a.em,{children:"Super Snappy Bowling from NOWWA"})]}),"\n",(0,s.jsxs)(a.p,{children:["Until today, some aspects of the platform have been limited or restricted. This just holds back the creativity of our community. So today, we have some incredibly exciting news. We have updated our ",(0,s.jsx)(a.a,{href:"https://playcanvas.com/plans",children:"plans"})," to make our tools even more accessible for everyone at all levels!"]}),"\n",(0,s.jsx)(a.p,{children:(0,s.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(14412).A+"",children:(0,s.jsx)(a.img,{alt:"New Plans",src:t(642).A+"",width:"1920",height:"1080"})})}),"\n",(0,s.jsx)(a.p,{children:"We are now giving everyone:"}),"\n",(0,s.jsxs)(a.ul,{children:["\n",(0,s.jsxs)(a.li,{children:["5-10x increase on storage for all tiers","\n",(0,s.jsxs)(a.ul,{children:["\n",(0,s.jsx)(a.li,{children:"Free: 200MB \u2192 1GB"}),"\n",(0,s.jsx)(a.li,{children:"Personal: 1GB \u2192 10GB"}),"\n",(0,s.jsx)(a.li,{children:"Organization: 10GB \u2192 50GB"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.a,{href:"https://developer.playcanvas.com/user-manual/designer/loading-screen/",children:"Customize the loading screen"})," - remove PlayCanvas branding"]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.a,{href:"https://developer.playcanvas.com/user-manual/publishing/web/self-hosting/",children:"Download your apps"})," - to host your game/app to your own server"]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.a,{href:"https://developer.playcanvas.com/user-manual/profile/projects/#export-project-archive",children:"Export and import project archives"})," - for making offline backups of your projects"]}),"\n"]}),"\n",(0,s.jsxs)(a.p,{children:["Best of all, this comes at ",(0,s.jsx)(a.strong,{children:"no extra cost"}),"! \ud83c\udf89\ud83c\udf89\ud83c\udf89"]}),"\n",(0,s.jsx)(a.p,{children:"If you're new to PlayCanvas, now is the perfect time to get started! We hope you enjoy these new features and updates."}),"\n",(0,s.jsx)(a.p,{children:"One last thing! We are super-excited to spread the word - can you help us with a retweet?"}),"\n",(0,s.jsxs)("blockquote",{class:"twitter-tweet",children:[(0,s.jsxs)("p",{lang:"en",dir:"ltr",children:["HUGE announcement! We're giving you more! Much more:",(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"\u2705 5-10X Storage",(0,s.jsx)("br",{}),"\u2705 Download your apps for self-hosting",(0,s.jsx)("br",{}),"\u2705 Customize PlayCanvas loading screen",(0,s.jsx)("br",{}),"\u2705 Archive your projects offline",(0,s.jsx)("a",{href:"https://t.co/78jf9U3YkM",children:(0,s.jsx)(a.a,{href:"https://t.co/78jf9U3YkM",children:"https://t.co/78jf9U3YkM"})}),(0,s.jsx)("br",{}),(0,s.jsx)("br",{}),"Get started with ",(0,s.jsx)("a",{href:"https://twitter.com/hashtag/gamedev?src=hash&ref_src=twsrc%5Etfw",children:"#gamedev"})," today!"]}),"\u2014 PlayCanvas (@playcanvas) ",(0,s.jsx)("a",{href:"https://twitter.com/playcanvas/status/1285598408787582977?ref_src=twsrc%5Etfw",children:"July 21, 2020"})]}),"\n",(0,s.jsx)("script",{async:!0,src:"https://platform.twitter.com/widgets.js",charset:"utf-8"})]})}function d(e={}){const{wrapper:a}={...(0,r.R)(),...e.components};return a?(0,s.jsx)(a,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},36405:(e,a,t)=>{t.d(a,{A:()=>s});const s=t.p+"assets/files/editor-super-snappy-bowling-c4ae0a030ad4c1dd43b15093ec03249d.png"},14412:(e,a,t)=>{t.d(a,{A:()=>s});const s=t.p+"assets/files/plans-2020-07c684b8d16c6cc0e5751067f1a603ad.jpg"},79027:(e,a,t)=>{t.d(a,{A:()=>s});const s=t.p+"assets/images/editor-super-snappy-bowling-c4ae0a030ad4c1dd43b15093ec03249d.png"},642:(e,a,t)=>{t.d(a,{A:()=>s});const s=t.p+"assets/images/plans-2020-07c684b8d16c6cc0e5751067f1a603ad.jpg"},28453:(e,a,t)=>{t.d(a,{R:()=>o,x:()=>l});var s=t(96540);const r={},n=s.createContext(r);function o(e){const a=s.useContext(n);return s.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function l(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(n.Provider,{value:a},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/1d3d52b2.5e71d246.js b/assets/js/1d3d52b2.5e71d246.js
deleted file mode 100644
index 9338b6b08..000000000
--- a/assets/js/1d3d52b2.5e71d246.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[42512],{46737:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var n=a(74848),r=a(28453);const s={authors:"dave",slug:"featured-games-featured-projects-and-activity-stream",title:"Featured games, featured projects and activity stream"},o=void 0,i={permalink:"/featured-games-featured-projects-and-activity-stream",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2013-08-27-featured-games-featured-projects-and-activity-stream.md",source:"@site/blog/2013-08-27-featured-games-featured-projects-and-activity-stream.md",title:"Featured games, featured projects and activity stream",description:"The all new front-page shows an overview of all PlayCanvas activity.",date:"2013-08-27T00:00:00.000Z",tags:[],readingTime:.825,hasTruncateMarker:!1,authors:[{name:"Dave Evans",title:"CTO",url:"https://twitter.com/daredevildave",imageURL:"https://pbs.twimg.com/profile_images/1271233580430053376/-OHHBJ2Z_400x400.jpg",key:"dave"}],frontMatter:{authors:"dave",slug:"featured-games-featured-projects-and-activity-stream",title:"Featured games, featured projects and activity stream"},unlisted:!1,prevItem:{title:"Introduction to ammo.js",permalink:"/introduction-to-ammo-js"},nextItem:{title:"Making an HTML5 Game: Pong",permalink:"/making-an-html5-game-pong"}},c={authorsImageUrls:[void 0]},l=[{value:"Feature Games and Projects",id:"feature-games-and-projects",level:2},{value:"Activity",id:"activity",level:2},{value:"Announcements",id:"announcements",level:2}];function u(e){const t={a:"a",em:"em",h2:"h2",img:"img",p:"p",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"The all new front-page shows an overview of all PlayCanvas activity."}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://www.flickr.com/photos/josh/414896/",children:(0,n.jsx)(t.img,{src:"https://farm1.staticflickr.com/1/414896_925f2c7a1c.jpg",alt:"Cloud Gate (The Bean)"})}),"\n",(0,n.jsx)("br",{}),(0,n.jsx)(t.em,{children:"New shiny thing"})]}),"\n",(0,n.jsxs)(t.p,{children:["Today we're launching the new front-page for PlayCanvas users. When you log in and visit ",(0,n.jsx)(t.a,{href:"https://playcanvas.com",children:"playcanvas.com"})," you'll now get a nice overview of activity across the whole PlayCanvas community."]}),"\n",(0,n.jsx)(t.h2,{id:"feature-games-and-projects",children:"Feature Games and Projects"}),"\n",(0,n.jsxs)(t.p,{children:["We're highlighting the more interesting public projects and games so that you can get inspiration from what other people are building. If you want to get your project in the featured section make sure it's got nice image uploaded for the project, and let us know about it via the ",(0,n.jsx)(t.a,{href:"https://forum.playcanvas.com",children:"forums"})," or ",(0,n.jsx)(t.a,{href:"https://twitter.com/playcanvas",children:"twitter"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"activity",children:"Activity"}),"\n",(0,n.jsx)(t.p,{children:"The activity stream shows recent changes to projects that you own. So you can see your team's activity or just remember what you were last working on."}),"\n",(0,n.jsx)(t.h2,{id:"announcements",children:"Announcements"}),"\n",(0,n.jsx)(t.p,{children:"Finally, we've included a little space for announcements from us. Check here when you log in, and we'll keep you up-to-date with the latest new features we've deployed."})]})}function d(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},28453:(e,t,a)=>{a.d(t,{R:()=>o,x:()=>i});var n=a(96540);const r={},s=n.createContext(r);function o(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/1d3d52b2.8daad09b.js b/assets/js/1d3d52b2.8daad09b.js
new file mode 100644
index 000000000..badef7293
--- /dev/null
+++ b/assets/js/1d3d52b2.8daad09b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[42512],{46737:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var n=a(74848),r=a(28453);const s={authors:"dave",slug:"featured-games-featured-projects-and-activity-stream",title:"Featured games, featured projects and activity stream"},o=void 0,i={permalink:"/featured-games-featured-projects-and-activity-stream",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2013-08-27-featured-games-featured-projects-and-activity-stream.md",source:"@site/blog/2013-08-27-featured-games-featured-projects-and-activity-stream.md",title:"Featured games, featured projects and activity stream",description:"The all new front-page shows an overview of all PlayCanvas activity.",date:"2013-08-27T00:00:00.000Z",tags:[],readingTime:.82,hasTruncateMarker:!1,authors:[{name:"Dave Evans",title:"CTO",url:"https://twitter.com/daredevildave",imageURL:"https://pbs.twimg.com/profile_images/1271233580430053376/-OHHBJ2Z_400x400.jpg",key:"dave"}],frontMatter:{authors:"dave",slug:"featured-games-featured-projects-and-activity-stream",title:"Featured games, featured projects and activity stream"},unlisted:!1,prevItem:{title:"Introduction to ammo.js",permalink:"/introduction-to-ammo-js"},nextItem:{title:"Making an HTML5 Game: Pong",permalink:"/making-an-html5-game-pong"}},c={authorsImageUrls:[void 0]},l=[{value:"Feature Games and Projects",id:"feature-games-and-projects",level:2},{value:"Activity",id:"activity",level:2},{value:"Announcements",id:"announcements",level:2}];function u(e){const t={a:"a",br:"br",em:"em",h2:"h2",img:"img",p:"p",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"The all new front-page shows an overview of all PlayCanvas activity."}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{href:"https://www.flickr.com/photos/josh/414896/",children:(0,n.jsx)(t.img,{src:"https://farm1.staticflickr.com/1/414896_925f2c7a1c.jpg",alt:"Cloud Gate (The Bean)"})}),(0,n.jsx)(t.br,{}),"\n",(0,n.jsx)(t.em,{children:"New shiny thing"})]}),"\n",(0,n.jsxs)(t.p,{children:["Today we're launching the new front-page for PlayCanvas users. When you log in and visit ",(0,n.jsx)(t.a,{href:"https://playcanvas.com",children:"playcanvas.com"})," you'll now get a nice overview of activity across the whole PlayCanvas community."]}),"\n",(0,n.jsx)(t.h2,{id:"feature-games-and-projects",children:"Feature Games and Projects"}),"\n",(0,n.jsxs)(t.p,{children:["We're highlighting the more interesting public projects and games so that you can get inspiration from what other people are building. If you want to get your project in the featured section make sure it's got nice image uploaded for the project, and let us know about it via the ",(0,n.jsx)(t.a,{href:"https://forum.playcanvas.com",children:"forums"})," or ",(0,n.jsx)(t.a,{href:"https://twitter.com/playcanvas",children:"twitter"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"activity",children:"Activity"}),"\n",(0,n.jsx)(t.p,{children:"The activity stream shows recent changes to projects that you own. So you can see your team's activity or just remember what you were last working on."}),"\n",(0,n.jsx)(t.h2,{id:"announcements",children:"Announcements"}),"\n",(0,n.jsx)(t.p,{children:"Finally, we've included a little space for announcements from us. Check here when you log in, and we'll keep you up-to-date with the latest new features we've deployed."})]})}function d(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},28453:(e,t,a)=>{a.d(t,{R:()=>o,x:()=>i});var n=a(96540);const r={},s=n.createContext(r);function o(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function i(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/25decf4d.405ad7f6.js b/assets/js/25decf4d.405ad7f6.js
new file mode 100644
index 000000000..8e96c6d65
--- /dev/null
+++ b/assets/js/25decf4d.405ad7f6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[27406],{45566:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>c,frontMatter:()=>s,metadata:()=>r,toc:()=>h});var n=a(74848),o=a(28453);const s={authors:"dave",slug:"nottingham-gamecity-and-mozfest",title:"Nottingham GameCity and MozFest",tags:["event"]},i=void 0,r={permalink:"/nottingham-gamecity-and-mozfest",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2013-10-28-nottingham-gamecity-and-mozfest.md",source:"@site/blog/2013-10-28-nottingham-gamecity-and-mozfest.md",title:"Nottingham GameCity and MozFest",description:"This last week was a frenzy of activity from the PlayCanvas founders. We trekked all over the UK to teach new people about PlayCanvas with demos and workshops.",date:"2013-10-28T00:00:00.000Z",tags:[{label:"event",permalink:"/tags/event"}],readingTime:1.415,hasTruncateMarker:!1,authors:[{name:"Dave Evans",title:"CTO",url:"https://twitter.com/daredevildave",imageURL:"https://pbs.twimg.com/profile_images/1271233580430053376/-OHHBJ2Z_400x400.jpg",key:"dave"}],frontMatter:{authors:"dave",slug:"nottingham-gamecity-and-mozfest",title:"Nottingham GameCity and MozFest",tags:["event"]},unlisted:!1,prevItem:{title:"Light and Collision Component API",permalink:"/light-and-collision-component-api"},nextItem:{title:"Leap Motion + PlayCanvas = Physics Playground",permalink:"/leap-motion-playcanvas-physics-playground"}},d={authorsImageUrls:[void 0]},h=[{value:"Thursday",id:"thursday",level:3},{value:"Friday",id:"friday",level:3},{value:"Sunday",id:"sunday",level:3}];function l(e){const t={a:"a",br:"br",em:"em",h3:"h3",hr:"hr",img:"img",p:"p",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"This last week was a frenzy of activity from the PlayCanvas founders. We trekked all over the UK to teach new people about PlayCanvas with demos and workshops."}),"\n",(0,n.jsx)(t.h3,{id:"thursday",children:"Thursday"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:a(52735).A+"",children:(0,n.jsx)(t.img,{alt:"Dave Running a Workshop",src:a(42249).A+"",width:"1024",height:"768"})}),(0,n.jsx)(t.br,{}),"\n",(0,n.jsx)(t.em,{children:"Co-founder Dave running a workshop on HTML5 Game Development"})]}),"\n",(0,n.jsxs)(t.p,{children:["On Thursday, I went up to the ",(0,n.jsx)(t.a,{href:"https://confetti.ac.uk/",children:"Confetti Institute of Creative Technologies"})," in Nottingham and gave a workshop to a room full of interested developers. We covered the basics of a 3D engine, some quick samples of how Graphics, Cameras, Physics and Audio can be used, and then we ended the 3 hour session with the entire group building the ",(0,n.jsx)(t.a,{href:"https://www.youtube.com/watch?v=zQQCfd1xEKg",children:"Luna Lander"})," demo that we showed you a few weeks ago."]}),"\n",(0,n.jsx)(t.p,{children:"At the end of the session, everyone had had a great time and had a playable game to show for it."}),"\n",(0,n.jsx)(t.h3,{id:"friday",children:"Friday"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:a(54116).A+"",children:(0,n.jsx)(t.img,{alt:"Open Arcade",src:a(53278).A+"",width:"3264",height:"2448"})}),(0,n.jsx)(t.br,{}),"\n",(0,n.jsx)(t.em,{children:"The Open Arcade at Nottingham GameCity"})]}),"\n",(0,n.jsx)(t.p,{children:"On Friday, we were demoing at the Open Arcade in Nottingham town centre. The Open Arcade was an amazing space put together by the GameCity organizers to let game developers show off their work and also provided a communal place for playing the latest and upcoming independent game releases."}),"\n",(0,n.jsx)(t.h3,{id:"sunday",children:"Sunday"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://www.flickr.com/photos/mozillaeu/10513561445/",children:(0,n.jsx)(t.img,{src:"https://farm8.staticflickr.com/7342/10513561445_076e91c2b9_z.jpg",alt:"MozFest"})})}),"\n",(0,n.jsxs)(t.p,{children:["On Sunday, our other co-founder Will held a short session at the ",(0,n.jsx)(t.a,{href:"https://www.mozillafestival.org/",children:"Mozilla Festival"})," in London."]}),"\n",(0,n.jsxs)(t.p,{children:["Again, a room full of people got a quick introduction to HTML5 Game Engines and 3D game development. They then dived in and this time built a working version of Pong, like in our other ",(0,n.jsx)(t.a,{href:"https://www.youtube.com/watch?v=oeR-flW-ojw",children:"tutorial video"}),"."]}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsxs)(t.p,{children:["If you run a university CS or gamedev society or a programming meetup and you'd like us to come and do session with your group, let us know via ",(0,n.jsx)(t.a,{href:"mailto:info@playcanvas.com",children:"email"})," or ",(0,n.jsx)(t.a,{href:"https://twitter.com/playcanvas",children:"Twitter"}),"."]})]})}function c(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},52735:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/files/confetti-workshop-990c3244452537a37245c1a0ba947a55.jpg"},54116:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/files/open-arcade-fd1449867e7d36edd18ecf4f7623a3a7.jpg"},42249:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/images/confetti-workshop-990c3244452537a37245c1a0ba947a55.jpg"},53278:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/images/open-arcade-fd1449867e7d36edd18ecf4f7623a3a7.jpg"},28453:(e,t,a)=>{a.d(t,{R:()=>i,x:()=>r});var n=a(96540);const o={},s=n.createContext(o);function i(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/25decf4d.6d20320c.js b/assets/js/25decf4d.6d20320c.js
deleted file mode 100644
index 6b3f25814..000000000
--- a/assets/js/25decf4d.6d20320c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[27406],{45566:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>c,frontMatter:()=>s,metadata:()=>r,toc:()=>h});var n=a(74848),o=a(28453);const s={authors:"dave",slug:"nottingham-gamecity-and-mozfest",title:"Nottingham GameCity and MozFest",tags:["event"]},i=void 0,r={permalink:"/nottingham-gamecity-and-mozfest",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2013-10-28-nottingham-gamecity-and-mozfest.md",source:"@site/blog/2013-10-28-nottingham-gamecity-and-mozfest.md",title:"Nottingham GameCity and MozFest",description:"This last week was a frenzy of activity from the PlayCanvas founders. We trekked all over the UK to teach new people about PlayCanvas with demos and workshops.",date:"2013-10-28T00:00:00.000Z",tags:[{label:"event",permalink:"/tags/event"}],readingTime:1.425,hasTruncateMarker:!1,authors:[{name:"Dave Evans",title:"CTO",url:"https://twitter.com/daredevildave",imageURL:"https://pbs.twimg.com/profile_images/1271233580430053376/-OHHBJ2Z_400x400.jpg",key:"dave"}],frontMatter:{authors:"dave",slug:"nottingham-gamecity-and-mozfest",title:"Nottingham GameCity and MozFest",tags:["event"]},unlisted:!1,prevItem:{title:"Light and Collision Component API",permalink:"/light-and-collision-component-api"},nextItem:{title:"Leap Motion + PlayCanvas = Physics Playground",permalink:"/leap-motion-playcanvas-physics-playground"}},d={authorsImageUrls:[void 0]},h=[{value:"Thursday",id:"thursday",level:3},{value:"Friday",id:"friday",level:3},{value:"Sunday",id:"sunday",level:3}];function l(e){const t={a:"a",em:"em",h3:"h3",hr:"hr",img:"img",p:"p",...(0,o.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.p,{children:"This last week was a frenzy of activity from the PlayCanvas founders. We trekked all over the UK to teach new people about PlayCanvas with demos and workshops."}),"\n",(0,n.jsx)(t.h3,{id:"thursday",children:"Thursday"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:a(52735).A+"",children:(0,n.jsx)(t.img,{alt:"Dave Running a Workshop",src:a(42249).A+"",width:"1024",height:"768"})}),"\n",(0,n.jsx)("br",{}),(0,n.jsx)(t.em,{children:"Co-founder Dave running a workshop on HTML5 Game Development"})]}),"\n",(0,n.jsxs)(t.p,{children:["On Thursday, I went up to the ",(0,n.jsx)(t.a,{href:"https://confetti.ac.uk/",children:"Confetti Institute of Creative Technologies"})," in Nottingham and gave a workshop to a room full of interested developers. We covered the basics of a 3D engine, some quick samples of how Graphics, Cameras, Physics and Audio can be used, and then we ended the 3 hour session with the entire group building the ",(0,n.jsx)(t.a,{href:"https://www.youtube.com/watch?v=zQQCfd1xEKg",children:"Luna Lander"})," demo that we showed you a few weeks ago."]}),"\n",(0,n.jsx)(t.p,{children:"At the end of the session, everyone had had a great time and had a playable game to show for it."}),"\n",(0,n.jsx)(t.h3,{id:"friday",children:"Friday"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:a(54116).A+"",children:(0,n.jsx)(t.img,{alt:"Open Arcade",src:a(53278).A+"",width:"3264",height:"2448"})}),"\n",(0,n.jsx)("br",{}),(0,n.jsx)(t.em,{children:"The Open Arcade at Nottingham GameCity"})]}),"\n",(0,n.jsx)(t.p,{children:"On Friday, we were demoing at the Open Arcade in Nottingham town centre. The Open Arcade was an amazing space put together by the GameCity organizers to let game developers show off their work and also provided a communal place for playing the latest and upcoming independent game releases."}),"\n",(0,n.jsx)(t.h3,{id:"sunday",children:"Sunday"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.a,{href:"https://www.flickr.com/photos/mozillaeu/10513561445/",children:(0,n.jsx)(t.img,{src:"https://farm8.staticflickr.com/7342/10513561445_076e91c2b9_z.jpg",alt:"MozFest"})})}),"\n",(0,n.jsxs)(t.p,{children:["On Sunday, our other co-founder Will held a short session at the ",(0,n.jsx)(t.a,{href:"https://www.mozillafestival.org/",children:"Mozilla Festival"})," in London."]}),"\n",(0,n.jsxs)(t.p,{children:["Again, a room full of people got a quick introduction to HTML5 Game Engines and 3D game development. They then dived in and this time built a working version of Pong, like in our other ",(0,n.jsx)(t.a,{href:"https://www.youtube.com/watch?v=oeR-flW-ojw",children:"tutorial video"}),"."]}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsxs)(t.p,{children:["If you run a university CS or gamedev society or a programming meetup and you'd like us to come and do session with your group, let us know via ",(0,n.jsx)(t.a,{href:"mailto:info@playcanvas.com",children:"email"})," or ",(0,n.jsx)(t.a,{href:"https://twitter.com/playcanvas",children:"Twitter"}),"."]})]})}function c(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},52735:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/files/confetti-workshop-990c3244452537a37245c1a0ba947a55.jpg"},54116:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/files/open-arcade-fd1449867e7d36edd18ecf4f7623a3a7.jpg"},42249:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/images/confetti-workshop-990c3244452537a37245c1a0ba947a55.jpg"},53278:(e,t,a)=>{a.d(t,{A:()=>n});const n=a.p+"assets/images/open-arcade-fd1449867e7d36edd18ecf4f7623a3a7.jpg"},28453:(e,t,a)=>{a.d(t,{R:()=>i,x:()=>r});var n=a(96540);const o={},s=n.createContext(o);function i(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/286b3243.083450bd.js b/assets/js/286b3243.083450bd.js
new file mode 100644
index 000000000..60ba0c5de
--- /dev/null
+++ b/assets/js/286b3243.083450bd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[925],{7042:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var s=t(74848),n=t(28453);const o={authors:"christy",slug:"playcanvas-update-27-06-14",title:"PlayCanvas Update 27/06/14"},i=void 0,r={permalink:"/playcanvas-update-27-06-14",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2014-06-27-playcanvas-update-27-06-14.md",source:"@site/blog/2014-06-27-playcanvas-update-27-06-14.md",title:"PlayCanvas Update 27/06/14",description:"No\xa0one ever called us inactive, we've had a busy week and we want to tell you all about it. Here\u2019s a run down on improvements to the engine and what happened behind the scenes at\xa0PlayCanvas\xa0this week.",date:"2014-06-27T00:00:00.000Z",tags:[],readingTime:1.125,hasTruncateMarker:!1,authors:[{name:"Christy O'Connor",title:"Community Manager",url:"https://www.linkedin.com/in/christy-o-connor-76aa2239/",key:"christy"}],frontMatter:{authors:"christy",slug:"playcanvas-update-27-06-14",title:"PlayCanvas Update 27/06/14"},unlisted:!1,prevItem:{title:"Meet the PlayCanvas team: Dave Evans",permalink:"/meet-the-playcanvas-team-dave-evans"},nextItem:{title:"New Custom and Built-in Post Effects",permalink:"/new-custom-and-built-in-post-effects"}},c={authorsImageUrls:[void 0]},l=[{value:"New Custom and Built-In Post Effects",id:"new-custom-and-built-in-post-effects",level:3},{value:"Events",id:"events",level:3},{value:"PlayCanvas Projects",id:"playcanvas-projects",level:3},{value:"Stay In The Loop",id:"stay-in-the-loop",level:3}];function h(e){const a={a:"a",br:"br",em:"em",h3:"h3",img:"img",li:"li",p:"p",ul:"ul",...(0,n.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(a.p,{children:["No\xa0one ever called us inactive, we've had a busy week and we want to tell you all about it. Here\u2019s a run down on improvements to the engine and what happened behind the scenes at\xa0",(0,s.jsx)(a.a,{href:"https://playcanvas.com/",children:"PlayCanvas"}),"\xa0this week."]}),"\n",(0,s.jsxs)(a.p,{children:[(0,s.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(13590).A+"",children:(0,s.jsx)(a.img,{alt:"ColorTanks",src:t(64148).A+"",width:"959",height:"496"})}),(0,s.jsx)(a.br,{}),"\n",(0,s.jsx)(a.em,{children:"The award winning colorTanks"})]}),"\n",(0,s.jsx)(a.h3,{id:"new-custom-and-built-in-post-effects",children:"New Custom and Built-In Post Effects"}),"\n",(0,s.jsxs)(a.p,{children:["Now you can select ",(0,s.jsx)(a.a,{href:"https://developer.playcanvas.com/user-manual/graphics/posteffects/",children:"new modifications"})," for your entity or you can create your own. we even have a ",(0,s.jsx)(a.a,{href:"https://developer.playcanvas.com/tutorials/custom-posteffect/",children:"step by step guide"})," to help you write the custom script."]}),"\n",(0,s.jsxs)(a.p,{children:[(0,s.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(43931).A+"",children:(0,s.jsx)(a.img,{alt:"Post Effects",src:t(67933).A+"",width:"786",height:"443"})}),(0,s.jsx)(a.br,{}),"\n",(0,s.jsx)(a.em,{children:"Beautiful Post Effects on Playbot"})]}),"\n",(0,s.jsx)(a.h3,{id:"events",children:"Events"}),"\n",(0,s.jsxs)(a.p,{children:[(0,s.jsx)(a.a,{href:"https://blog.playcanvas.com/meet-the-playcanvas-team-will-eastcott/",children:"Will"})," made a trip to Spain as he showed off some Cloud Game Development at ",(0,s.jsx)(a.a,{href:"https://twitter.com/playcanvas/status/481798129730457600",children:"ARM's Booth"})," in Barcelona and ",(0,s.jsx)(a.a,{href:"https://blog.playcanvas.com/meet-the-playcanvas-team-dave-evans/",children:"Dave"})," gave attendees an introduction to PlayCanvas at\xa0a London event warming up to the ",(0,s.jsx)(a.a,{href:"https://twitter.com/GBSGameJam",children:"GBSG Jam"}),"."]}),"\n",(0,s.jsxs)(a.p,{children:[(0,s.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(55663).A+"",children:(0,s.jsx)(a.img,{alt:"Arm Booth",src:t(91853).A+"",width:"600",height:"600"})}),(0,s.jsx)(a.br,{}),"\n",(0,s.jsx)(a.em,{children:"Showing off in Barcelona"})]}),"\n",(0,s.jsx)(a.h3,{id:"playcanvas-projects",children:"PlayCanvas Projects"}),"\n",(0,s.jsxs)(a.p,{children:["Some members of the PlayCanvas Community made real strides with their ",(0,s.jsx)(a.a,{href:"https://playcanvas.com/explore/active",children:"projects"})," too. Check out ",(0,s.jsx)(a.a,{href:"https://playcanv.as/p/thL3phaK/",children:"this"})," great game by PlayCanvas user ",(0,s.jsx)(a.a,{href:"https://playcanvas.com/user/rerofumi",children:"rerofumi"}),"."]}),"\n",(0,s.jsxs)(a.p,{children:[(0,s.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(23933).A+"",children:(0,s.jsx)(a.img,{alt:"Tamaaanya",src:t(57399).A+"",width:"700",height:"404"})}),(0,s.jsx)(a.br,{}),"\n",(0,s.jsx)(a.em,{children:"One of your five a day: 'Tamaaanya' a cute carrot munching game made by PlayCanvas user rerofumi"})]}),"\n",(0,s.jsxs)(a.p,{children:["Also, PlayCanvas Senior Engineer ",(0,s.jsx)(a.a,{href:"https://blog.playcanvas.com/meet-the-playcanvas-team-maksims-mihejevs/",children:"Max"})," gave his award winning game colorTanks\xa0a facelift too. Give it a try ",(0,s.jsx)(a.a,{href:"https://tanx.io/",children:"here"}),"!"]}),"\n",(0,s.jsx)(a.h3,{id:"stay-in-the-loop",children:"Stay In The Loop"}),"\n",(0,s.jsxs)(a.ul,{children:["\n",(0,s.jsxs)(a.li,{children:["Follow us on Twitter,\xa0",(0,s.jsx)(a.a,{href:"https://twitter.com/playcanvas",children:"@playcanvas"}),", for updates on PlayCanvas."]}),"\n",(0,s.jsxs)(a.li,{children:["Like the\xa0",(0,s.jsx)(a.a,{href:"https://facebook.com/playcanvas",children:"PlayCanvas Facebook"}),"\xa0page for our whimsical views on the game dev scene."]}),"\n",(0,s.jsxs)(a.li,{children:["Join and start discussions on the\xa0",(0,s.jsx)(a.a,{href:"https://forum.playcanvas.com/",children:"PlayCanvas Forum"}),"."]}),"\n"]})]})}function d(e={}){const{wrapper:a}={...(0,n.R)(),...e.components};return a?(0,s.jsx)(a,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},23933:(e,a,t)=>{t.d(a,{A:()=>s});const s=t.p+"assets/files/Tamaanya-26d36152ce49015e9e3510f6bb796aa0.jpg"},55663:(e,a,t)=>{t.d(a,{A:()=>s});const s=t.p+"assets/files/armbooth-fce2842c7d301e7b1734ba7591ffd795.jpg"},43931:(e,a,t)=>{t.d(a,{A:()=>s});const s=t.p+"assets/files/posteffects2-72d9ae9eeb27a6fab4df333b7f2c8374.png"},13590:(e,a,t)=>{t.d(a,{A:()=>s});const s=t.p+"assets/files/tanks-a4736ed86c9cf27c2b3a8de799ad6b2b.jpg"},57399:(e,a,t)=>{t.d(a,{A:()=>s});const s=t.p+"assets/images/Tamaanya-26d36152ce49015e9e3510f6bb796aa0.jpg"},91853:(e,a,t)=>{t.d(a,{A:()=>s});const s=t.p+"assets/images/armbooth-fce2842c7d301e7b1734ba7591ffd795.jpg"},67933:(e,a,t)=>{t.d(a,{A:()=>s});const s=t.p+"assets/images/posteffects2-72d9ae9eeb27a6fab4df333b7f2c8374.png"},64148:(e,a,t)=>{t.d(a,{A:()=>s});const s=t.p+"assets/images/tanks-a4736ed86c9cf27c2b3a8de799ad6b2b.jpg"},28453:(e,a,t)=>{t.d(a,{R:()=>i,x:()=>r});var s=t(96540);const n={},o=s.createContext(n);function i(e){const a=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),s.createElement(o.Provider,{value:a},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/286b3243.b2f5a233.js b/assets/js/286b3243.b2f5a233.js
deleted file mode 100644
index d572fe93f..000000000
--- a/assets/js/286b3243.b2f5a233.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[925],{7042:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>r,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var n=t(74848),s=t(28453);const o={authors:"christy",slug:"playcanvas-update-27-06-14",title:"PlayCanvas Update 27/06/14"},i=void 0,c={permalink:"/playcanvas-update-27-06-14",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2014-06-27-playcanvas-update-27-06-14.md",source:"@site/blog/2014-06-27-playcanvas-update-27-06-14.md",title:"PlayCanvas Update 27/06/14",description:"No\xa0one ever called us inactive, we've had a busy week and we want to tell you all about it. Here\u2019s a run down on improvements to the engine and what happened behind the scenes at\xa0PlayCanvas\xa0this week.",date:"2014-06-27T00:00:00.000Z",tags:[],readingTime:1.145,hasTruncateMarker:!1,authors:[{name:"Christy O'Connor",title:"Community Manager",url:"https://www.linkedin.com/in/christy-o-connor-76aa2239/",key:"christy"}],frontMatter:{authors:"christy",slug:"playcanvas-update-27-06-14",title:"PlayCanvas Update 27/06/14"},unlisted:!1,prevItem:{title:"Meet the PlayCanvas team: Dave Evans",permalink:"/meet-the-playcanvas-team-dave-evans"},nextItem:{title:"New Custom and Built-in Post Effects",permalink:"/new-custom-and-built-in-post-effects"}},r={authorsImageUrls:[void 0]},l=[{value:"New Custom and Built-In Post Effects",id:"new-custom-and-built-in-post-effects",level:3},{value:"Events",id:"events",level:3},{value:"PlayCanvas Projects",id:"playcanvas-projects",level:3},{value:"Stay In The Loop",id:"stay-in-the-loop",level:3}];function h(e){const a={a:"a",em:"em",h3:"h3",img:"img",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(a.p,{children:["No\xa0one ever called us inactive, we've had a busy week and we want to tell you all about it. Here\u2019s a run down on improvements to the engine and what happened behind the scenes at\xa0",(0,n.jsx)(a.a,{href:"https://playcanvas.com/",children:"PlayCanvas"}),"\xa0this week."]}),"\n",(0,n.jsxs)(a.p,{children:[(0,n.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(13590).A+"",children:(0,n.jsx)(a.img,{alt:"ColorTanks",src:t(64148).A+"",width:"959",height:"496"})}),"\n",(0,n.jsx)("br",{}),(0,n.jsx)(a.em,{children:"The award winning colorTanks"})]}),"\n",(0,n.jsx)(a.h3,{id:"new-custom-and-built-in-post-effects",children:"New Custom and Built-In Post Effects"}),"\n",(0,n.jsxs)(a.p,{children:["Now you can select ",(0,n.jsx)(a.a,{href:"https://developer.playcanvas.com/user-manual/graphics/posteffects/",children:"new modifications"})," for your entity or you can create your own. we even have a ",(0,n.jsx)(a.a,{href:"https://developer.playcanvas.com/tutorials/custom-posteffect/",children:"step by step guide"})," to help you write the custom script."]}),"\n",(0,n.jsxs)(a.p,{children:[(0,n.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(43931).A+"",children:(0,n.jsx)(a.img,{alt:"Post Effects",src:t(67933).A+"",width:"786",height:"443"})}),"\n",(0,n.jsx)("br",{}),(0,n.jsx)(a.em,{children:"Beautiful Post Effects on Playbot"})]}),"\n",(0,n.jsx)(a.h3,{id:"events",children:"Events"}),"\n",(0,n.jsxs)(a.p,{children:[(0,n.jsx)(a.a,{href:"https://blog.playcanvas.com/meet-the-playcanvas-team-will-eastcott/",children:"Will"})," made a trip to Spain as he showed off some Cloud Game Development at ",(0,n.jsx)(a.a,{href:"https://twitter.com/playcanvas/status/481798129730457600",children:"ARM's Booth"})," in Barcelona and ",(0,n.jsx)(a.a,{href:"https://blog.playcanvas.com/meet-the-playcanvas-team-dave-evans/",children:"Dave"})," gave attendees an introduction to PlayCanvas at\xa0a London event warming up to the ",(0,n.jsx)(a.a,{href:"https://twitter.com/GBSGameJam",children:"GBSG Jam"}),"."]}),"\n",(0,n.jsxs)(a.p,{children:[(0,n.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(55663).A+"",children:(0,n.jsx)(a.img,{alt:"Arm Booth",src:t(91853).A+"",width:"600",height:"600"})}),"\n",(0,n.jsx)("br",{}),(0,n.jsx)(a.em,{children:"Showing off in Barcelona"})]}),"\n",(0,n.jsx)(a.h3,{id:"playcanvas-projects",children:"PlayCanvas Projects"}),"\n",(0,n.jsxs)(a.p,{children:["Some members of the PlayCanvas Community made real strides with their ",(0,n.jsx)(a.a,{href:"https://playcanvas.com/explore/active",children:"projects"})," too. Check out ",(0,n.jsx)(a.a,{href:"https://playcanv.as/p/thL3phaK/",children:"this"})," great game by PlayCanvas user ",(0,n.jsx)(a.a,{href:"https://playcanvas.com/user/rerofumi",children:"rerofumi"}),"."]}),"\n",(0,n.jsxs)(a.p,{children:[(0,n.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:t(23933).A+"",children:(0,n.jsx)(a.img,{alt:"Tamaaanya",src:t(57399).A+"",width:"700",height:"404"})}),"\n",(0,n.jsx)("br",{}),(0,n.jsx)(a.em,{children:"One of your five a day: 'Tamaaanya' a cute carrot munching game made by PlayCanvas user rerofumi"})]}),"\n",(0,n.jsxs)(a.p,{children:["Also, PlayCanvas Senior Engineer ",(0,n.jsx)(a.a,{href:"https://blog.playcanvas.com/meet-the-playcanvas-team-maksims-mihejevs/",children:"Max"})," gave his award winning game colorTanks\xa0a facelift too. Give it a try ",(0,n.jsx)(a.a,{href:"https://tanx.io/",children:"here"}),"!"]}),"\n",(0,n.jsx)(a.h3,{id:"stay-in-the-loop",children:"Stay In The Loop"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsxs)(a.li,{children:["\n",(0,n.jsxs)(a.p,{children:["Follow us on Twitter,\xa0",(0,n.jsx)(a.a,{href:"https://twitter.com/playcanvas",children:"@playcanvas"}),", for updates on PlayCanvas."]}),"\n"]}),"\n",(0,n.jsxs)(a.li,{children:["\n",(0,n.jsxs)(a.p,{children:["Like the\xa0",(0,n.jsx)(a.a,{href:"https://facebook.com/playcanvas",children:"PlayCanvas Facebook"}),"\xa0page for our whimsical views on the game dev scene."]}),"\n"]}),"\n",(0,n.jsxs)(a.li,{children:["\n",(0,n.jsxs)(a.p,{children:["Join and start discussions on the\xa0",(0,n.jsx)(a.a,{href:"https://forum.playcanvas.com/",children:"PlayCanvas Forum"}),"."]}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:a}={...(0,s.R)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},23933:(e,a,t)=>{t.d(a,{A:()=>n});const n=t.p+"assets/files/Tamaanya-26d36152ce49015e9e3510f6bb796aa0.jpg"},55663:(e,a,t)=>{t.d(a,{A:()=>n});const n=t.p+"assets/files/armbooth-fce2842c7d301e7b1734ba7591ffd795.jpg"},43931:(e,a,t)=>{t.d(a,{A:()=>n});const n=t.p+"assets/files/posteffects2-72d9ae9eeb27a6fab4df333b7f2c8374.png"},13590:(e,a,t)=>{t.d(a,{A:()=>n});const n=t.p+"assets/files/tanks-a4736ed86c9cf27c2b3a8de799ad6b2b.jpg"},57399:(e,a,t)=>{t.d(a,{A:()=>n});const n=t.p+"assets/images/Tamaanya-26d36152ce49015e9e3510f6bb796aa0.jpg"},91853:(e,a,t)=>{t.d(a,{A:()=>n});const n=t.p+"assets/images/armbooth-fce2842c7d301e7b1734ba7591ffd795.jpg"},67933:(e,a,t)=>{t.d(a,{A:()=>n});const n=t.p+"assets/images/posteffects2-72d9ae9eeb27a6fab4df333b7f2c8374.png"},64148:(e,a,t)=>{t.d(a,{A:()=>n});const n=t.p+"assets/images/tanks-a4736ed86c9cf27c2b3a8de799ad6b2b.jpg"},28453:(e,a,t)=>{t.d(a,{R:()=>i,x:()=>c});var n=t(96540);const s={},o=n.createContext(s);function i(e){const a=n.useContext(o);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function c(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),n.createElement(o.Provider,{value:a},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/2a019466.44d3f18a.js b/assets/js/2a019466.44d3f18a.js
deleted file mode 100644
index d6f81fcb5..000000000
--- a/assets/js/2a019466.44d3f18a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[59242],{86287:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var s=n(74848),t=n(28453);const o={authors:"dave",slug:"playcanvas-game-jam",title:"PlayCanvas Game Jam",tags:["event"]},r=void 0,i={permalink:"/playcanvas-game-jam",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2013-09-12-playcanvas-game-jam.md",source:"@site/blog/2013-09-12-playcanvas-game-jam.md",title:"PlayCanvas Game Jam",description:"Yesterday, at PlayCanvas we hosted our first physical Game Jam. By physical, I mean we had all the developers in the same location, not that we made them run around and do push-ups!",date:"2013-09-12T00:00:00.000Z",tags:[{label:"event",permalink:"/tags/event"}],readingTime:1.085,hasTruncateMarker:!1,authors:[{name:"Dave Evans",title:"CTO",url:"https://twitter.com/daredevildave",imageURL:"https://pbs.twimg.com/profile_images/1271233580430053376/-OHHBJ2Z_400x400.jpg",key:"dave"}],frontMatter:{authors:"dave",slug:"playcanvas-game-jam",title:"PlayCanvas Game Jam",tags:["event"]},unlisted:!1,prevItem:{title:"New Look Designer",permalink:"/new-look-designer"},nextItem:{title:"Making an HTML5 Game: Lunar Lander",permalink:"/making-an-html5-game-lunar-lander"}},l={authorsImageUrls:[void 0]},c=[];function h(e){const a={a:"a",em:"em",img:"img",p:"p",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a.p,{children:"Yesterday, at PlayCanvas we hosted our first physical Game Jam. By physical, I mean we had all the developers in the same location, not that we made them run around and do push-ups!"}),"\n",(0,s.jsxs)(a.p,{children:[(0,s.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(12712).A+"",children:(0,s.jsx)(a.img,{alt:"Game Jammers",src:n(27598).A+"",width:"600",height:"336"})}),"\n",(0,s.jsx)("br",{}),(0,s.jsx)(a.em,{children:"The PlayCanvas Game Jam Dungeon"})]}),"\n",(0,s.jsx)(a.p,{children:"Based out of the 80s sci-fi haven that is the Virgin Media Game Space, a group of 9 of us spent the day hacking on brand new games, modelling manga robots, and techno beats."}),"\n",(0,s.jsx)(a.p,{children:"Yes, I know you wish you were there."}),"\n",(0,s.jsxs)(a.p,{children:[(0,s.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(29607).A+"",children:(0,s.jsx)(a.img,{alt:"nebulousflynn",src:n(4693).A+"",width:"600",height:"800"})}),"\n",(0,s.jsx)("br",{}),(0,s.jsx)(a.em,{children:"nebulousflynn making strange noises"})]}),"\n",(0,s.jsx)(a.p,{children:"For us this is an excellent opportunity to see developers at work, using our tools together to prototype ideas and build stuff."}),"\n",(0,s.jsx)(a.p,{children:"Your feedback is what makes PlayCanvas great."}),"\n",(0,s.jsxs)(a.p,{children:[(0,s.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(92222).A+"",children:(0,s.jsx)(a.img,{alt:"roseninja and jellycakes",src:n(2552).A+"",width:"600",height:"338"})}),"\n",(0,s.jsx)("br",{}),(0,s.jsx)(a.em,{children:'roseninja and jellycakes working on platformer "Squeaky Wheel"'})]}),"\n",(0,s.jsxs)(a.p,{children:["Go check out users ",(0,s.jsx)(a.a,{href:"https://playcanvas.com/user/roseninja",children:"roseninja"}),", ",(0,s.jsx)(a.a,{href:"https://playcanvas.com/user/jellycakes",children:"jellycakes"}),", ",(0,s.jsx)(a.a,{href:"https://playcanvas.com/user/wilbefast",children:"wilbefast"}),", ",(0,s.jsx)(a.a,{href:"https://playcanvas.com/user/nebulousflynn",children:"nebulousflynn"})," and ",(0,s.jsx)(a.a,{href:"https://playcanvas.com/user/balkango",children:"balkango"})," who were all building games yesterday. It's early days for ",(0,s.jsx)(a.a,{href:"https://playcanvas.com/project/1322/overview/test",children:"Flying robots of Death"})," and ",(0,s.jsx)(a.a,{href:"https://playcanvas.com/project/1326/overview/blah",children:"Squeaky Wheel"}),", but terrific work for an afternoon of coding and modelling."]}),"\n",(0,s.jsxs)(a.p,{children:[(0,s.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(32510).A+"",children:(0,s.jsx)(a.img,{alt:"Concentration",src:n(74904).A+"",width:"600",height:"338"})}),"\n",(0,s.jsx)("br",{}),(0,s.jsx)(a.em,{children:"wilbefast concentrating on make robots kill each other"})]}),"\n",(0,s.jsxs)(a.p,{children:["We've got more Game Jams coming up. Will is at ",(0,s.jsx)(a.a,{href:"http://ongamestart.com",children:"onGameStart"})," in Poland next week."]}),"\n",(0,s.jsx)(a.p,{children:"Here's a little vine of Flying robots of Death for those who don't have two GamePads to plug-in and play."}),"\n",(0,s.jsxs)(a.p,{children:['[iframe class="vine-embed" src="',(0,s.jsx)(a.a,{href:"https://vine.co/v/h1FUVHi3mmK/embed/simple",children:"https://vine.co/v/h1FUVHi3mmK/embed/simple"}),'"',' width="600" height="600"]']})]})}function d(e={}){const{wrapper:a}={...(0,t.R)(),...e.components};return a?(0,s.jsx)(a,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},29607:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/files/audio-8b4ac1c50812e7f091ef041ee115de39.jpg"},32510:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/files/concentration-65dfa9b43bcb541f41b2bc9f71c9e548.jpg"},12712:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/files/group-ac030370cc7244d04e2910e3ed3f1262.jpg"},92222:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/files/roseninja-451c8f588f8d308327fa11efe67adaf9.jpg"},4693:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/images/audio-8b4ac1c50812e7f091ef041ee115de39.jpg"},74904:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/images/concentration-65dfa9b43bcb541f41b2bc9f71c9e548.jpg"},27598:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/images/group-ac030370cc7244d04e2910e3ed3f1262.jpg"},2552:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/images/roseninja-451c8f588f8d308327fa11efe67adaf9.jpg"},28453:(e,a,n)=>{n.d(a,{R:()=>r,x:()=>i});var s=n(96540);const t={},o=s.createContext(t);function r(e){const a=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function i(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(o.Provider,{value:a},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/2a019466.cbdc1a66.js b/assets/js/2a019466.cbdc1a66.js
new file mode 100644
index 000000000..3837c10cf
--- /dev/null
+++ b/assets/js/2a019466.cbdc1a66.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[59242],{86287:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var s=n(74848),t=n(28453);const r={authors:"dave",slug:"playcanvas-game-jam",title:"PlayCanvas Game Jam",tags:["event"]},o=void 0,i={permalink:"/playcanvas-game-jam",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2013-09-12-playcanvas-game-jam.md",source:"@site/blog/2013-09-12-playcanvas-game-jam.md",title:"PlayCanvas Game Jam",description:"Yesterday, at PlayCanvas we hosted our first physical Game Jam. By physical, I mean we had all the developers in the same location, not that we made them run around and do push-ups!",date:"2013-09-12T00:00:00.000Z",tags:[{label:"event",permalink:"/tags/event"}],readingTime:1.065,hasTruncateMarker:!1,authors:[{name:"Dave Evans",title:"CTO",url:"https://twitter.com/daredevildave",imageURL:"https://pbs.twimg.com/profile_images/1271233580430053376/-OHHBJ2Z_400x400.jpg",key:"dave"}],frontMatter:{authors:"dave",slug:"playcanvas-game-jam",title:"PlayCanvas Game Jam",tags:["event"]},unlisted:!1,prevItem:{title:"New Look Designer",permalink:"/new-look-designer"},nextItem:{title:"Making an HTML5 Game: Lunar Lander",permalink:"/making-an-html5-game-lunar-lander"}},l={authorsImageUrls:[void 0]},c=[];function h(e){const a={a:"a",br:"br",em:"em",img:"img",p:"p",...(0,t.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a.p,{children:"Yesterday, at PlayCanvas we hosted our first physical Game Jam. By physical, I mean we had all the developers in the same location, not that we made them run around and do push-ups!"}),"\n",(0,s.jsxs)(a.p,{children:[(0,s.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(12712).A+"",children:(0,s.jsx)(a.img,{alt:"Game Jammers",src:n(27598).A+"",width:"600",height:"336"})}),(0,s.jsx)(a.br,{}),"\n",(0,s.jsx)(a.em,{children:"The PlayCanvas Game Jam Dungeon"})]}),"\n",(0,s.jsx)(a.p,{children:"Based out of the 80s sci-fi haven that is the Virgin Media Game Space, a group of 9 of us spent the day hacking on brand new games, modelling manga robots, and techno beats."}),"\n",(0,s.jsx)(a.p,{children:"Yes, I know you wish you were there."}),"\n",(0,s.jsxs)(a.p,{children:[(0,s.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(29607).A+"",children:(0,s.jsx)(a.img,{alt:"nebulousflynn",src:n(4693).A+"",width:"600",height:"800"})}),(0,s.jsx)(a.br,{}),"\n",(0,s.jsx)(a.em,{children:"nebulousflynn making strange noises"})]}),"\n",(0,s.jsx)(a.p,{children:"For us this is an excellent opportunity to see developers at work, using our tools together to prototype ideas and build stuff."}),"\n",(0,s.jsx)(a.p,{children:"Your feedback is what makes PlayCanvas great."}),"\n",(0,s.jsxs)(a.p,{children:[(0,s.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(92222).A+"",children:(0,s.jsx)(a.img,{alt:"roseninja and jellycakes",src:n(2552).A+"",width:"600",height:"338"})}),(0,s.jsx)(a.br,{}),"\n",(0,s.jsx)(a.em,{children:'roseninja and jellycakes working on platformer "Squeaky Wheel"'})]}),"\n",(0,s.jsxs)(a.p,{children:["Go check out users ",(0,s.jsx)(a.a,{href:"https://playcanvas.com/user/roseninja",children:"roseninja"}),", ",(0,s.jsx)(a.a,{href:"https://playcanvas.com/user/jellycakes",children:"jellycakes"}),", ",(0,s.jsx)(a.a,{href:"https://playcanvas.com/user/wilbefast",children:"wilbefast"}),", ",(0,s.jsx)(a.a,{href:"https://playcanvas.com/user/nebulousflynn",children:"nebulousflynn"})," and ",(0,s.jsx)(a.a,{href:"https://playcanvas.com/user/balkango",children:"balkango"})," who were all building games yesterday. It's early days for ",(0,s.jsx)(a.a,{href:"https://playcanvas.com/project/1322/overview/test",children:"Flying robots of Death"})," and ",(0,s.jsx)(a.a,{href:"https://playcanvas.com/project/1326/overview/blah",children:"Squeaky Wheel"}),", but terrific work for an afternoon of coding and modelling."]}),"\n",(0,s.jsxs)(a.p,{children:[(0,s.jsx)(a.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(32510).A+"",children:(0,s.jsx)(a.img,{alt:"Concentration",src:n(74904).A+"",width:"600",height:"338"})}),(0,s.jsx)(a.br,{}),"\n",(0,s.jsx)(a.em,{children:"wilbefast concentrating on make robots kill each other"})]}),"\n",(0,s.jsxs)(a.p,{children:["We've got more Game Jams coming up. Will is at ",(0,s.jsx)(a.a,{href:"http://ongamestart.com",children:"onGameStart"})," in Poland next week."]}),"\n",(0,s.jsx)(a.p,{children:"Here's a little vine of Flying robots of Death for those who don't have two GamePads to plug-in and play."}),"\n",(0,s.jsxs)(a.p,{children:['[iframe class="vine-embed" src="',(0,s.jsx)(a.a,{href:"https://vine.co/v/h1FUVHi3mmK/embed/simple",children:"https://vine.co/v/h1FUVHi3mmK/embed/simple"}),'"',' width="600" height="600"]']})]})}function d(e={}){const{wrapper:a}={...(0,t.R)(),...e.components};return a?(0,s.jsx)(a,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},29607:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/files/audio-8b4ac1c50812e7f091ef041ee115de39.jpg"},32510:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/files/concentration-65dfa9b43bcb541f41b2bc9f71c9e548.jpg"},12712:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/files/group-ac030370cc7244d04e2910e3ed3f1262.jpg"},92222:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/files/roseninja-451c8f588f8d308327fa11efe67adaf9.jpg"},4693:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/images/audio-8b4ac1c50812e7f091ef041ee115de39.jpg"},74904:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/images/concentration-65dfa9b43bcb541f41b2bc9f71c9e548.jpg"},27598:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/images/group-ac030370cc7244d04e2910e3ed3f1262.jpg"},2552:(e,a,n)=>{n.d(a,{A:()=>s});const s=n.p+"assets/images/roseninja-451c8f588f8d308327fa11efe67adaf9.jpg"},28453:(e,a,n)=>{n.d(a,{R:()=>o,x:()=>i});var s=n(96540);const t={},r=s.createContext(t);function o(e){const a=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function i(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(r.Provider,{value:a},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/2b505dac.0fcedc02.js b/assets/js/2b505dac.0fcedc02.js
new file mode 100644
index 000000000..05c36b90f
--- /dev/null
+++ b/assets/js/2b505dac.0fcedc02.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[45483],{5206:(A,t,E)=>{E.r(t),E.d(t,{assets:()=>r,contentTitle:()=>s,default:()=>o,frontMatter:()=>n,metadata:()=>a,toc:()=>I});var e=E(74848),i=E(28453);const n={authors:"dave",slug:"starter-kits",title:"Starter Kits"},s=void 0,a={permalink:"/starter-kits",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2013-09-05-starter-kits.md",source:"@site/blog/2013-09-05-starter-kits.md",title:"Starter Kits",description:"Get hacking on a game instantly with our Platformer and FPS starter kits.",date:"2013-09-05T00:00:00.000Z",tags:[],readingTime:.57,hasTruncateMarker:!1,authors:[{name:"Dave Evans",title:"CTO",url:"https://twitter.com/daredevildave",imageURL:"https://pbs.twimg.com/profile_images/1271233580430053376/-OHHBJ2Z_400x400.jpg",key:"dave"}],frontMatter:{authors:"dave",slug:"starter-kits",title:"Starter Kits"},unlisted:!1,prevItem:{title:"Making an HTML5 Game: Lunar Lander",permalink:"/making-an-html5-game-lunar-lander"},nextItem:{title:"Introduction to ammo.js",permalink:"/introduction-to-ammo-js"}},r={authorsImageUrls:[void 0]},I=[];function C(A){const t={a:"a",br:"br",em:"em",img:"img",p:"p",strong:"strong",...(0,i.R)(),...A.components};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(t.p,{children:"Get hacking on a game instantly with our Platformer and FPS starter kits."}),"\n",(0,e.jsx)(t.p,{children:"Today we've launched a new feature to help get you up and running in PlayCanvas super-quick. Instead of starting with the dreaded blank project, now you can instantly get yourself a game to start hacking on."}),"\n",(0,e.jsx)(t.p,{children:"We've got two styles of game to start with."}),"\n",(0,e.jsxs)(t.p,{children:[(0,e.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:E(27369).A+"",children:(0,e.jsx)(t.img,{alt:"Platform Game Starter Kit",src:E(32559).A+"",width:"600",height:"338"})}),(0,e.jsx)(t.br,{}),"\n",(0,e.jsx)(t.em,{children:"The Platform Game Starter Kit"})]}),"\n",(0,e.jsxs)(t.p,{children:[(0,e.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:E(8596).A+"",children:(0,e.jsx)(t.img,{alt:"FPS Game Starter kit",src:E(83166).A+"",width:"600",height:"338"})}),(0,e.jsx)(t.br,{}),"\n",(0,e.jsx)(t.em,{children:"The FPS Game Starter Kit"})]}),"\n",(0,e.jsxs)(t.p,{children:["You can select a starter kit via the ",(0,e.jsx)(t.strong,{children:"New Project"})," dialog. This is just the first two we've got up and running, with more improvements to come. Head over to the ",(0,e.jsx)(t.a,{href:"https://forum.playcanvas.com",children:"forum"})," with suggestions for more starter kits."]})]})}function o(A={}){const{wrapper:t}={...(0,i.R)(),...A.components};return t?(0,e.jsx)(t,{...A,children:(0,e.jsx)(C,{...A})}):C(A)}},8596:(A,t,E)=>{E.d(t,{A:()=>e});const e=E.p+"assets/files/fps_small-70ef6ad73aa61a5f700b3b2c82fd5f6d.png"},27369:(A,t,E)=>{E.d(t,{A:()=>e});const e=E.p+"assets/files/platformer_small-6937db687b5b91a6a85f8dfd80b4ab4f.png"},83166:(A,t,E)=>{E.d(t,{A:()=>e});const e=E.p+"assets/images/fps_small-70ef6ad73aa61a5f700b3b2c82fd5f6d.png"},32559:(A,t,E)=>{E.d(t,{A:()=>e});const e="data:image/png;base64,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"},28453:(A,t,E)=>{E.d(t,{R:()=>s,x:()=>a});var e=E(96540);const i={},n=e.createContext(i);function s(A){const t=e.useContext(n);return e.useMemo((function(){return"function"==typeof A?A(t):{...t,...A}}),[t,A])}function a(A){let t;return t=A.disableParentContext?"function"==typeof A.components?A.components(i):A.components||i:s(A.components),e.createElement(n.Provider,{value:t},A.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/2b505dac.d5b2264c.js b/assets/js/2b505dac.d5b2264c.js
deleted file mode 100644
index f318d3b2c..000000000
--- a/assets/js/2b505dac.d5b2264c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[45483],{5206:(A,t,E)=>{E.r(t),E.d(t,{assets:()=>I,contentTitle:()=>s,default:()=>o,frontMatter:()=>n,metadata:()=>a,toc:()=>r});var e=E(74848),i=E(28453);const n={authors:"dave",slug:"starter-kits",title:"Starter Kits"},s=void 0,a={permalink:"/starter-kits",editUrl:"https://github.com/playcanvas/blog/tree/main/blog/2013-09-05-starter-kits.md",source:"@site/blog/2013-09-05-starter-kits.md",title:"Starter Kits",description:"Get hacking on a game instantly with our Platformer and FPS starter kits.",date:"2013-09-05T00:00:00.000Z",tags:[],readingTime:.58,hasTruncateMarker:!1,authors:[{name:"Dave Evans",title:"CTO",url:"https://twitter.com/daredevildave",imageURL:"https://pbs.twimg.com/profile_images/1271233580430053376/-OHHBJ2Z_400x400.jpg",key:"dave"}],frontMatter:{authors:"dave",slug:"starter-kits",title:"Starter Kits"},unlisted:!1,prevItem:{title:"Making an HTML5 Game: Lunar Lander",permalink:"/making-an-html5-game-lunar-lander"},nextItem:{title:"Introduction to ammo.js",permalink:"/introduction-to-ammo-js"}},I={authorsImageUrls:[void 0]},r=[];function C(A){const t={a:"a",em:"em",img:"img",p:"p",strong:"strong",...(0,i.R)(),...A.components};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(t.p,{children:"Get hacking on a game instantly with our Platformer and FPS starter kits."}),"\n",(0,e.jsx)(t.p,{children:"Today we've launched a new feature to help get you up and running in PlayCanvas super-quick. Instead of starting with the dreaded blank project, now you can instantly get yourself a game to start hacking on."}),"\n",(0,e.jsx)(t.p,{children:"We've got two styles of game to start with."}),"\n",(0,e.jsxs)(t.p,{children:[(0,e.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:E(27369).A+"",children:(0,e.jsx)(t.img,{alt:"Platform Game Starter Kit",src:E(32559).A+"",width:"600",height:"338"})}),"\n",(0,e.jsx)("br",{}),(0,e.jsx)(t.em,{children:"The Platform Game Starter Kit"})]}),"\n",(0,e.jsxs)(t.p,{children:[(0,e.jsx)(t.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:E(8596).A+"",children:(0,e.jsx)(t.img,{alt:"FPS Game Starter kit",src:E(83166).A+"",width:"600",height:"338"})}),"\n",(0,e.jsx)("br",{}),(0,e.jsx)(t.em,{children:"The FPS Game Starter Kit"})]}),"\n",(0,e.jsxs)(t.p,{children:["You can select a starter kit via the ",(0,e.jsx)(t.strong,{children:"New Project"})," dialog. This is just the first two we've got up and running, with more improvements to come. Head over to the ",(0,e.jsx)(t.a,{href:"https://forum.playcanvas.com",children:"forum"})," with suggestions for more starter kits."]})]})}function o(A={}){const{wrapper:t}={...(0,i.R)(),...A.components};return t?(0,e.jsx)(t,{...A,children:(0,e.jsx)(C,{...A})}):C(A)}},8596:(A,t,E)=>{E.d(t,{A:()=>e});const e=E.p+"assets/files/fps_small-70ef6ad73aa61a5f700b3b2c82fd5f6d.png"},27369:(A,t,E)=>{E.d(t,{A:()=>e});const e=E.p+"assets/files/platformer_small-6937db687b5b91a6a85f8dfd80b4ab4f.png"},83166:(A,t,E)=>{E.d(t,{A:()=>e});const e=E.p+"assets/images/fps_small-70ef6ad73aa61a5f700b3b2c82fd5f6d.png"},32559:(A,t,E)=>{E.d(t,{A:()=>e});const e="data:image/png;base64,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"},28453:(A,t,E)=>{E.d(t,{R:()=>s,x:()=>a});var e=E(96540);const i={},n=e.createContext(i);function s(A){const t=e.useContext(n);return e.useMemo((function(){return"function"==typeof A?A(t):{...t,...A}}),[t,A])}function a(A){let t;return t=A.disableParentContext?"function"==typeof A.components?A.components(i):A.components||i:s(A.components),e.createElement(n.Provider,{value:t},A.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/2e801cce.14ce718d.js b/assets/js/2e801cce.14ce718d.js
new file mode 100644
index 000000000..7357d15b3
--- /dev/null
+++ b/assets/js/2e801cce.14ce718d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk_playcanvas_blog=self.webpackChunk_playcanvas_blog||[]).push([[67636],{61422:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"build-webgpu-apps-today-with-playcanvas","metadata":{"permalink":"/build-webgpu-apps-today-with-playcanvas","editUrl":"https://github.com/playcanvas/blog/tree/main/blog/2024-04-18-build-webgpu-apps-today-with-playcanvas.md","source":"@site/blog/2024-04-18-build-webgpu-apps-today-with-playcanvas.md","title":"Build WebGPU Apps Today with PlayCanvas","description":"It\'s here! \ud83e\udd73 Today, we\'re excited to announce that WebGPU support has officially arrived in the PlayCanvas Editor.","date":"2024-04-18T00:00:00.000Z","tags":[{"label":"webgpu","permalink":"/tags/webgpu"},{"label":"graphics","permalink":"/tags/graphics"},{"label":"editor","permalink":"/tags/editor"}],"readingTime":2.09,"hasTruncateMarker":false,"authors":[{"name":"Will Eastcott","title":"CEO","url":"https://twitter.com/willeastcott","imageURL":"https://pbs.twimg.com/profile_images/2635146631/edcd8b6dc4a34625770095941519ca8a_400x400.png","key":"will"}],"frontMatter":{"authors":"will","slug":"build-webgpu-apps-today-with-playcanvas","title":"Build WebGPU Apps Today with PlayCanvas","tags":["webgpu","graphics","editor"]},"unlisted":false,"nextItem":{"title":"Using Visual Studio Code with PlayCanvas","permalink":"/using-visual-studio-code-with-playcanvas"}},"content":"It\'s here! \ud83e\udd73 Today, we\'re excited to announce that WebGPU support has officially arrived in the PlayCanvas Editor.\\n\\n![Editor with WebGPU Scene](/img/editor-webgpu.png)\\n\\n## WebGPU on the Rise\\n\\nSince its inception back in 2010, PlayCanvas has been layered on top of WebGL. In 2017, we were proud to launch support for [WebGL 2.0](https://blog.playcanvas.com/mozilla-launches-webgl-2-with-playcanvas/) in partnership with our friends at Mozilla. April 2023 marked the beginning of a new era for web graphics when Google enabled WebGPU by default in Chrome 113. Since then, WebGPU adoption has exploded and today, [Web3D Survey](https://web3dsurvey.com/webgpu) reports that **62.19% of end users can now run WebGPU**. With [Firefox and Safari due to launch their WebGPU support](https://caniuse.com/webgpu) in the not-too-distant future, expect this number to rise dramatically in 2024.\\n\\n## Why WebGPU Matters\\n\\nIf you enable WebGPU for your PlayCanvas project, you may not notice much difference to begin with. In fact, we have put a great deal of effort into ensuring your WebGL projects look identical under WebGPU. But over time, there is are a great deal of opportunities to achieve performance improvements due to WebGPU\'s reduced driver overhead.\\n\\nAnother key feature unique to WebGPU is support for Compute Shaders which allow for general computation on the GPU. Support for Compute Shaders landed in [Engine v1.70.0](https://github.com/playcanvas/engine/releases/tag/v1.70.0). Here you can see Computer Shaders in action simulating 1 million particles on the GPU:\\n\\n
\\n \\n
\\n\\n[Click here](https://playcanvas.github.io/#/compute/particles) to run it for yourself in a WebGPU-enabled browser (i.e. Chrome or Edge).\\n\\nIn short, WebGPU represents the future for PlayCanvas and you can expect some incredible advances in performance and functionality over the coming months.\\n\\n## Getting Started with WebGPU\\n\\nWebGPU support in PlayCanvas is still considered \'Beta\'. There are still some unimplemented features (for example, the run-time lightmapper is still not supported). Therefore, you have to currently \'opt in\' to WebGPU support. To do this, open your Project\'s Settings in the Inspector and expand the `RENDERING` section. Then update `Graphics Devices` to include `WebGPU (beta)`.\\n\\n![Editor with WebGPU Scene](/img/editor-settings-webgpu.png)\\n\\nOnce we are satisfied WebGPU support has matured enough, it will become the default.\\n\\n## Your Feedback is Important\\n\\nSince WebGPU support is new, we rely on the community for feedback. What works and what doesn\'t? Please [submit an issue](https://github.com/playcanvas/editor/issues) if you discover any problems or kick off a new thread on the [forum](https://forum.playcanvas.com/) if you want to discuss WebGPU support in more detail. We want to hear what your opinions! \ud83d\udc42"},{"id":"using-visual-studio-code-with-playcanvas","metadata":{"permalink":"/using-visual-studio-code-with-playcanvas","editUrl":"https://github.com/playcanvas/blog/tree/main/blog/2024-04-15-using-visual-studio-code-with-playcanvas.md","source":"@site/blog/2024-04-15-using-visual-studio-code-with-playcanvas.md","title":"Using Visual Studio Code with PlayCanvas","description":"Visual Studio Code is massively popular. In the Stack Overflow 2023 Developer Survey, Visual Studio Code was ranked the most popular developer environment tool among 86,544 respondents, with 73.71% reporting that they use it.","date":"2024-04-15T00:00:00.000Z","tags":[{"label":"javascript","permalink":"/tags/javascript"},{"label":"open-source","permalink":"/tags/open-source"},{"label":"scripting","permalink":"/tags/scripting"},{"label":"workflow","permalink":"/tags/workflow"}],"readingTime":1.31,"hasTruncateMarker":false,"authors":[{"name":"Will Eastcott","title":"CEO","url":"https://twitter.com/willeastcott","imageURL":"https://pbs.twimg.com/profile_images/2635146631/edcd8b6dc4a34625770095941519ca8a_400x400.png","key":"will"}],"frontMatter":{"authors":"will","slug":"using-visual-studio-code-with-playcanvas","title":"Using Visual Studio Code with PlayCanvas","tags":["javascript","open-source","scripting","workflow"]},"unlisted":false,"prevItem":{"title":"Build WebGPU Apps Today with PlayCanvas","permalink":"/build-webgpu-apps-today-with-playcanvas"},"nextItem":{"title":"Massive Upgrade for the PlayCanvas Developer Site","permalink":"/massive-upgrade-for-the-playcanvas-developer-site"}},"content":"[Visual Studio Code](https://code.visualstudio.com/) is massively popular. In the Stack Overflow 2023 Developer Survey, Visual Studio Code was ranked the most popular developer environment tool among 86,544 respondents, with **73.71%** reporting that they use it.\\n\\nAny PlayCanvas developer building directly on top of the Engine will very likely opt to use VS Code. But if you use the PlayCanvas Editor, you will normally rely on the built-in, browser-based Code Editor. Today, we\'re excited to give you another option by launching an open-source **Visual Studio Code Extension for PlayCanvas**.\\n\\n![VS Code Extension](/img/vscode-extension.webp)\\n\\n## Benefits\\n\\nThe PlayCanvas Code Editor is actually built on the [Monaco Editor](https://github.com/microsoft/monaco-editor), the beating heart of VS Code. So why use VS Code instead of the PlayCanvas Code Editor?\\n\\n* [GitHub Copilot](https://github.com/features/copilot) - leverage AI to help you write PlayCanvas code faster.\\n* Powerful IntelliSense tools (code completion, parameter info, quick info, and member lists).\\n* Leverage a huge library of other extensions to accelerate your development.\\n\\n## We \u2764\ufe0f Open Source\\n\\nAs you might expect, we have open sourced the VS Code extension under a liberal MIT license!\\n\\n* [VS Code Extension on GitHub](https://github.com/playcanvas/vscode-extension)\\n\\nSo if you find a bug or have a suggestion, please do [log an issue](https://github.com/playcanvas/vscode-extension/issues). And for the more adventurous, consider making a code contribution!\\n\\nWe want you to feel empowered to make these tools your own. Let\'s make them awesome together! \ud83d\ude4c\\n\\n## Get Started Now\\n\\nIf this all sounds great to you, why not give it a try? Head over to the User Manual for instructions on how to get started:\\n\\n[READ THE DOCS](https://developer.playcanvas.com/user-manual/scripting/vscode-extension/)"},{"id":"massive-upgrade-for-the-playcanvas-developer-site","metadata":{"permalink":"/massive-upgrade-for-the-playcanvas-developer-site","editUrl":"https://github.com/playcanvas/blog/tree/main/blog/2024-02-08-massive-upgrade-for-playcanvas-developer-site.md","source":"@site/blog/2024-02-08-massive-upgrade-for-playcanvas-developer-site.md","title":"Massive Upgrade for the PlayCanvas Developer Site","description":"Today, we are excited to announce the brand new PlayCanvas Developer Site and API Reference Manual!","date":"2024-02-08T00:00:00.000Z","tags":[{"label":"documentation","permalink":"/tags/documentation"},{"label":"tutorial","permalink":"/tags/tutorial"},{"label":"open-source","permalink":"/tags/open-source"}],"readingTime":3.42,"hasTruncateMarker":false,"authors":[{"name":"Will Eastcott","title":"CEO","url":"https://twitter.com/willeastcott","imageURL":"https://pbs.twimg.com/profile_images/2635146631/edcd8b6dc4a34625770095941519ca8a_400x400.png","key":"will"}],"frontMatter":{"authors":"will","slug":"massive-upgrade-for-the-playcanvas-developer-site","title":"Massive Upgrade for the PlayCanvas Developer Site","tags":["documentation","tutorial","open-source"]},"unlisted":false,"prevItem":{"title":"Using Visual Studio Code with PlayCanvas","permalink":"/using-visual-studio-code-with-playcanvas"},"nextItem":{"title":"Compressing Gaussian Splats","permalink":"/compressing-gaussian-splats"}},"content":"Today, we are excited to announce the brand new [PlayCanvas Developer Site](https://developer.playcanvas.com/) and [API Reference Manual](https://api.playcanvas.com/)!\\n\\n## Developer Site\\n\\nLet\'s start by taking a look at the new Developer Site, home of the PlayCanvas User Manual and Tutorials.\\n\\n![Developer Site Landing Page](/img/developer-site-landing-page.png)\\n\\n### Migrating from Metalsmith to Docusaurus\\n\\nSince PlayCanvas was born in 2011, the basic look of the Developer Site has changed little. The content was written in Markdown and converted to a static HTML site using a tool called [Metalsmith](https://metalsmith.io/). Customizing the site to our needs meant we had to write many Metalsmith plugins (for localization, navigation and more) and a lot of HTML and CSS to style the pages as we wanted.\\n\\n13 years later, the world of static site generators has moved on with lots of exciting new options! We evaluated [Docusaurus](https://docusaurus.io/) and decided to migrate over to it.\\n\\n### What\'s New\\n\\nSo what made Docusaurus so compelling? First up, the migration was going to be straightforward because, like Metalsmith, Docusaurus consumes Markdown and outputs a static site. And much of the customization we did for Metalsmith is supplied \'out-of-the-box\' with Docusaurus. So that\'s all great. But the new site comes with lots of cool new features we known you\'re going to love:\\n\\n#### \ud83d\udd0d Powerful Search\\n\\nThe site now integrates [Algolia](https://www.algolia.com/) for advanced searching of the documentation.\\n\\n![Developer Site Search](/img/developer-site-search.png)\\n\\nThis is a quantum leap over what came before. Try it (by pressing `CTRL + K`) - you\'ll be amazed. \ud83e\udd2f\\n\\n#### \ud83c\udf12 Light and Dark Modes\\n\\nEasily switch between light and dark themes (by clicking on the sun/moon icon top-right).\\n\\n![Developer Site Light and Dark Modes](/img/developer-site-light-dark.png)\\n\\n#### \ud83c\udf0f Language Selection\\n\\nSwitch language from the nav-bar. At the moment, we\'re shipping with Japanese translations.\\n\\n![Developer Site Localization](/img/developer-site-localization.png)\\n\\n#### \ud83d\udc69\u200d\ud83d\udcbb Edit on GitHub\\n\\nAs you might expect, [the Developer Site is Open Source (MIT)](https://github.com/playcanvas/developer.playcanvas.com). Every page now has a handy link to the content on GitHub. Spot a mistake? Now can you fix it yourself and improve the docs for the community!\\n\\n#### \ud83e\udded Easier Navigation\\n\\nAt the top of each page, you\'ll find \'Sidebar Breadcrumbs\' which allow you to click back up the page hierarchy.\\n\\n![Developer Site Breadcrumbs](/img/developer-site-breadcrumbs.png)\\n\\nTo the right of each page, you\'ll find a table of contents which can be a big help, especially for long pages.\\n\\n![Developer Site Table of Contents](/img/developer-site-toc.png)\\n\\nAnd at the bottom of each page, you\'ll find \'Previous\' and \'Next\' links that allow you to read through the User Manual sequentially.\\n\\n![Developer Site Previous and Next Links](/img/developer-site-previous-next.png)\\n\\n## API Reference\\n\\nWe are not just launching a new Developer Site today. We are also launching our brand new, upgraded [API Reference Manual](https://api.playcanvas.com/)!\\n\\n![API Reference Site](/img/api-reference-site.png)\\n\\n### Migrating from JSDoc to TypeDoc\\n\\nSince the start, we have relied on [JSDoc](https://jsdoc.app/) to generate our API reference manual. But since then, we have seen the introduction of [TypeDoc](https://typedoc.org/) which offers some major advantages over JSDoc.\\n\\n#### \ud83c\udfa8 High Quality Default Theme\\n\\nWhile it\'s not perfect, the default TypeDoc theme is gorgeous and a big improvement over our custom JSDoc theme. It provides:\\n\\n* Light and dark modes (like the main developer site)\\n* Links to the source code on GitHub\\n* Grouping of API into related categories\\n* Powerful search (press `/` to activate it)\\n* ...and much more!\\n\\nIt\'s a great foundation for us to begin with and we can customize the default theme to our requirements as needed.\\n\\n#### \ud83d\udd17 Easy Combining of APIs\\n\\nDid you know that PlayCanvas develops frameworks and libraries other than the PlayCanvas Engine? There\'s [PCUI](https://github.com/playcanvas/pcui), a front-end framework for web-based tools. There\'s the [PlayCanvas Editor API](https://github.com/playcanvas/editor-api) for automating the interface. And more! The new API reference collects all of the PlayCanvas APIs into a single manual.\\n\\n![API Reference Site APIs](/img/api-reference-site-apis.png)\\n\\n## Open Source FTW\\n\\nEverything we are announcing today is 100% open source.\\n\\n* [Developer Site on GitHub](https://github.com/playcanvas/developer.playcanvas.com)\\n* [API Reference Site on GitHub](https://github.com/playcanvas/api-reference)\\n\\nWe want to empower to community to get involved and make PlayCanvas better for everybody. It\'s never been easier to submit your first pull request on GitHub. So why wait - get started today! \u2764\ufe0f"},{"id":"compressing-gaussian-splats","metadata":{"permalink":"/compressing-gaussian-splats","editUrl":"https://github.com/playcanvas/blog/tree/main/blog/2023-12-05-compressing-gaussian-splats.md","source":"@site/blog/2023-12-05-compressing-gaussian-splats.md","title":"Compressing Gaussian Splats","description":"Introduction","date":"2023-12-05T00:00:00.000Z","tags":[{"label":"gaussian-splats","permalink":"/tags/gaussian-splats"},{"label":"compression","permalink":"/tags/compression"},{"label":"supersplat","permalink":"/tags/supersplat"}],"readingTime":3.61,"hasTruncateMarker":false,"authors":[{"name":"Donovan Hutchence","title":"Staff Software Engineer","url":"https://twitter.com/slimbuck7","imageURL":"https://pbs.twimg.com/profile_images/1727369755231727616/ukKVbC9b_400x400.png","key":"donovan"}],"frontMatter":{"authors":"donovan","slug":"compressing-gaussian-splats","title":"Compressing Gaussian Splats","tags":["gaussian-splats","compression","supersplat"]},"unlisted":false,"prevItem":{"title":"Massive Upgrade for the PlayCanvas Developer Site","permalink":"/massive-upgrade-for-the-playcanvas-developer-site"},"nextItem":{"title":"Boost Your Efficiency: Editor gets Support for AVIF and WebP","permalink":"/avif-webp-land-in-editor"}},"content":"### Introduction\\n\\n[**3D Gaussian Splatting**](https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/) is a new method for digitizing and rendering real world objects. With gaussian splatting, you can digitize a scene from a few photos using services like [Luma Labs](https://lumalabs.ai/) or [Polycam](https://poly.cam/). These services take the set of photos and generate a 3d Gaussian Splat scene in [PLY format]().\\n\\nFor example, this is a Gaussian Splat scene rendered in PlayCanvas.\\n
\\n \\n
\\n\\n### What is a Splat?\\n\\nGaussian Splat Scenes are not made up of polygons and textures. Instead, they are made up of many (up to millions) of individual, unconnected blobs called _splats_. A splat is just a particle in space with size, orientation, color and opacity.\\n\\nBelow you can see a single brown splat selected. The splat bounding box shows its orientation and size:\\n\\n![Splat Example](/img/splat-example.gif)\\n\\nThe gaussian part of the name comes from the shape of splat itself: the splat opacity has a gaussian falloff from its center to its edge.\\n\\n### Engine Support\\n\\nThe PlayCanvas team has been adding support to the engine for loading and rendering Gaussian Splat PLY files:\\n\\n[![Engine Example](/img/gaussian-splat-example.gif)](https://playcanvas.github.io/#/loaders/splat-many)\\n\\nSince the resulting files are often messy and require cleaning, we released [SuperSplat](https://playcanvas.com/super-splat), a tool for cleaning and processing gaussian splat PLY files:\\n\\n[![SuperSplat Example](/img/super-splat-example.gif)](https://playcanvas.com/super-splat?load=https://code.playcanvas.com/viewer/guitar-cleaned.ply)\\n\\n### PLY Format\\n\\nHowever, the default gaussian splat PLY format as exported by training tools is large.\\n\\nThis is because the uncompressed format stores a large amount of data _per splat_:\\n\\n| Name | Data Format | Bytes |\\n| --------------------------- | ----------- | ----- |\\n| Position | 3 x float | 12 |\\n| Orientation | 4 x float | 16 |\\n| Scale | 3 x float | 12 |\\n| Spherical harmonics / color | 48 x float | 192 |\\n| Total | | 232 |\\n\\nFor example, the original `guitar.ply` scene file takes **132.8 MB** (**32 MB** excluding spherical harmonic data).\\n\\n### Compressed PLY Format\\n\\nSo we introduced a _compressed PLY_ format for use in runtime applications. The compressed PLY file format ignores the unused spherical harmonic data and stores the rest of the elements in quantized integers.\\n\\nThe format can be summarized as follows:\\n\\n- Split the scene into chunks of 256 splats\\n- For each chunk, store the min and max (x, y, z) for position and scale in floating point\\n- For each splat in the chunk, store a normalized and quantized value for position and scale (relative to chunk extents) and orientation and color\\n\\nThis data layout results in the following data _per chunk_:\\n\\n| Name | Data Format | Bytes |\\n| -------------- | ----------- | ----- |\\n| Position bound | 6 x float | 24 |\\n| Scale bound | 6 x float | 24 |\\n| Total | | 48 |\\n\\nAnd the following data _per splat_:\\n\\n| Name | Data Format | Bytes |\\n| ----------- | ---------------------- | ----- |\\n| Position | uint32 (11, 10, 11) | 4 |\\n| Orientation | uint32 (2, 10, 10, 10) | 4 |\\n| Scale | uint32 (11, 10, 11) | 4 |\\n| Color | uint32 (8, 8, 8, 8) | 4 |\\n| Total | | 16 |\\n\\nAs a result, the compressed version of `guitar.ply` takes only **8.7 MB**.\\n\\n### Do It Yourself\\n\\nThe easiest way to generate a compressed PLY file yourself is using the [SuperSplat tool](https://playcanvas.com/super-splat). Load the PLY file into SuperSplat and export it again using the \'Compressed Ply File\' option:\\n\\n[![SuperSplat Export](/img/super-splat-export.png)](https://playcanvas.com/super-splat)\\n\\nIf you are interested in the file format specifics, see [this code](https://github.com/playcanvas/engine/blob/a86bd8be0cfd4e39e9ba5e5466acb6875ab9906e/extras/splat/splat-data.js#L257) which demonstrates how to decompress the file data.\\n\\nSee [this editor project](https://playcanvas.com/project/1165904/overview/gaussiansplatdemo) for an example of loading and rendering a compressed gaussian splat PLY file. Or you can [run it here](https://playcanv.as/p/69cnpevQ/).\\n\\n### Summary and Future\\n\\nWe have introduced a new compressed PLY format for gaussian splatting which is roughly 4x smaller than uncompressed data and can be used in realtime applications.\\n\\nIn future we hope to:\\n\\n- store splats hierarchically for optimized rendering and culling\\n- implement realtime splat LOD\\n- test skinning and animation of gaussian splats\\n- further compress gaussian splat data\\n- optimize WebGPU rendering\\n\\n### References\\n\\nThe compressed format is largely based on the fine work of Aras Pranckevi\u010dius and his [blog posts](https://aras-p.info/)."},{"id":"avif-webp-land-in-editor","metadata":{"permalink":"/avif-webp-land-in-editor","editUrl":"https://github.com/playcanvas/blog/tree/main/blog/2023-10-11-avif-webp-lands-in-editor.md","source":"@site/blog/2023-10-11-avif-webp-lands-in-editor.md","title":"Boost Your Efficiency: Editor gets Support for AVIF and WebP","description":"AVIF + WebP Support","date":"2023-10-11T00:00:00.000Z","tags":[{"label":"editor","permalink":"/tags/editor"},{"label":"textures","permalink":"/tags/textures"},{"label":"workflow","permalink":"/tags/workflow"},{"label":"compression","permalink":"/tags/compression"}],"readingTime":2.2,"hasTruncateMarker":false,"authors":[{"name":"Mark Lundin","title":"Software Engineer","url":"https://twitter.com/mark_lundin","imageURL":"https://pbs.twimg.com/profile_images/1281491980707598336/wW0BoD7T_400x400.jpg","key":"mark"}],"frontMatter":{"authors":"mark","slug":"avif-webp-land-in-editor","title":"Boost Your Efficiency: Editor gets Support for AVIF and WebP","tags":["editor","textures","workflow","compression"]},"unlisted":false,"prevItem":{"title":"Compressing Gaussian Splats","permalink":"/compressing-gaussian-splats"},"nextItem":{"title":"glTF Viewer 4.0 Adds WebGPU Support","permalink":"/gltf-viewer-adds-webgpu-support"}},"content":"![AVIF + WebP Support](/img/avif-webp-icons.png)\\n\\n**Today we\'re excited to announce that PlayCanvas now supports WebP and AVIF images natively in the editor. Two new, efficient image formats built for the web.**\\n\\nThis is not just an exciting update for us but a game-changer for anyone looking to optimize their projects for faster load times and better quality.\\n\\nJPGs and PNGs have served us well. They\'re reliable and you can use them everywhere. AVIF and WebP are the new kids on the block. They offer better compression with a wider range of features like alpha channels, HDR and wide color gamut. But how do these formats work in practice and are they really that good? Let\'s dive in.\\n\\n_Take a look at the following images:_\\n\\n\\n\\nThey look strikingly similar, but the file size tells a different story. The AVIF image on the left has a file size of just 276Kb, almost half the size of its JPG counterpart at 508Kb! This level of compression is not just impressive on its own. When you\'re working on a project with multiple textures, switching to AVIF and WebP formats could considerably reduce your overall load time.\\n\\nWhat does this mean for you? Well, that\'s simple: it\'s all about efficiency and speed without sacrificing quality. Textures are one of the biggest assets in a 3D project and AVIF and WebP significantly reduce image sizes compared to traditional JPEGs and PNGs and that means faster load times and happier users. \ud83d\ude4c\\n\\n#### AVIF all the things?\\n\\nOk, so browser support for AVIF is good, but not great according to [caniuse](https://caniuse.com/?search=avif), so always [check support](https://dev.to/nucliweb/detect-avif-image-support-to-use-in-your-css-4pen) and use the right format for your users. Different formats are better suited for different content. It\'s not a one-size-fits-all solution, so we encourage you to explore various options and choose the one best for you.\\n\\n#### Getting Started\\n\\nEasy! Just start uploading your AVIF and WebP files into the Asset Panel, and for those of you wanting to convert your existing assets, you can now right-click on your asset in the Asset Panel and quickly convert your asset into a PNG, JPG, WebP or an AVIF.\\n\\n![Quick Convert](/img/convert-animation.gif)\\n\\nSo there you have it! This is not just a feature release; it\'s our way of saying we\'re listening and we care. We\'re excited to hear your thoughts on these new features. Give them a try and share your experiences with us.\\n\\nTill then, keep creating, keep innovating!"},{"id":"gltf-viewer-adds-webgpu-support","metadata":{"permalink":"/gltf-viewer-adds-webgpu-support","editUrl":"https://github.com/playcanvas/blog/tree/main/blog/2023-10-10-gltf-viewer-adds-webgpu-support.md","source":"@site/blog/2023-10-10-gltf-viewer-adds-webgpu-support.md","title":"glTF Viewer 4.0 Adds WebGPU Support","description":"We\'re thrilled to announce the launch of the open source glTF Viewer 4.0, an update that supercharges your 3D model viewing experience with powerful features and support for the latest web technologies!","date":"2023-10-10T00:00:00.000Z","tags":[{"label":"ar","permalink":"/tags/ar"},{"label":"gltf","permalink":"/tags/gltf"},{"label":"viewer","permalink":"/tags/viewer"},{"label":"webgpu","permalink":"/tags/webgpu"},{"label":"webxr","permalink":"/tags/webxr"}],"readingTime":3.64,"hasTruncateMarker":false,"authors":[{"name":"Will Eastcott","title":"CEO","url":"https://twitter.com/willeastcott","imageURL":"https://pbs.twimg.com/profile_images/2635146631/edcd8b6dc4a34625770095941519ca8a_400x400.png","key":"will"}],"frontMatter":{"authors":"will","slug":"gltf-viewer-adds-webgpu-support","title":"glTF Viewer 4.0 Adds WebGPU Support","tags":["ar","gltf","viewer","webgpu","webxr"]},"unlisted":false,"prevItem":{"title":"Boost Your Efficiency: Editor gets Support for AVIF and WebP","permalink":"/avif-webp-land-in-editor"},"nextItem":{"title":"PlayCanvas Adds Sketchfab Integration","permalink":"/playcanvas-adds-sketchfab-itegration"}},"content":"We\'re thrilled to announce the launch of the [open source](https://github.com/playcanvas/model-viewer) **glTF Viewer 4.0**, an update that supercharges your 3D model viewing experience with powerful features and support for the latest web technologies!\\n\\n[![glTF Viewer 4.0](/img/gltf-viewer-4.png)](/img/gltf-viewer-4.png)\\n\\n_[\\"Cyber Samurai\\"](https://skfb.ly/ooZKG) by KhoaMinh is licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)._\\n\\n[**TRY IT NOW**](https://playcanvas.com/viewer?load=https://s3.eu-west-1.amazonaws.com/static.playcanvas.com/models/IridescentDishWithOlives.glb&default&skybox.value=Abandoned%20Tank%20Farm&skybox.background=Projective%20Dome&debug.grid=false&shadowCatcher.enabled=true&default)\\n\\nThis new release is chock-full with enhancements aimed at providing more realistic, insightful, and versatile viewing options for your glTF files. Let\'s dive into the headline features of glTF Viewer 4.0.\\n\\n#### New WebGPU Renderer\\n\\n![WebGPU Logo](/img/webgpu-logo.svg)\\n\\nTopping the list of today\'s updates is support for WebGPU! WebGPU heralds a new era in graphics and compute capabilities, offering enhanced performance and efficiency. Users can now select WebGPU as their default renderer, and don\'t worry if your platform doesn\'t support it yet - the viewer gracefully falls back to WebGL 2, and subsequently WebGL 1, depending on API availability. Note that WebGPU support is considered beta for the moment and you\'ll need to proactively enable it and refresh the viewer to check it out:\\n\\n[![Enable WebGPU for glTF Viewer](/img/gltf-viewer-webgpu-toggle.gif)](/img/gltf-viewer-webgpu-toggle.gif)\\n\\nAlso make sure you\'re running the viewer in a browser that supports WebGPU. At time of writing, this means Google Chrome!\\n\\n#### Enhanced WebXR AR Mode\\n\\n
\\n \\n
\\n\\nTake your 3D models into the real world with our revamped WebXR Augmented Reality (AR) mode! Available currently on Android devices, this enhanced AR mode lets you view any model in your actual environment, complete with intuitive new controls that allow you to accurately position and rotate objects in the real world. Let\'s hope Apple decides to roll out WebXR support on iOS soon! \ud83d\ude4f\\n\\n#### Frame Selected Node\\n\\n
\\n \\n
\\n\\nNavigating large scenes can be a pain - Viewer 4.0 addresses this by allowing you to select a node in the scene via the hierarchy panel on the left. You can then press \'F\' on the keyboard to frame that node and recenter the orbit camera on that node\'s position.\\n\\n#### Better Immersion with Projective Sky Dome\\n\\n
\\n \\n
\\n\\n_[\\"130\\"](https://skfb.ly/6R9Ow) by mononofu is licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)._\\n\\nExperience realistic photographic skies with our new projective sky dome! While previous versions allowed for skyboxex with an infinite projection, 4.0 introduces a dome-shaped skybox projection that incorporates a flat ground plane. This warps the skybox texture to have a more believable appearance, delivering a more authentic and immersive perspective, melding your 3D models with strikingly realistic backdrops.\\n\\n#### Debug and Inspect with Render Mode\\n\\n[![glTF Viewer Render Mode](/img/gltf-viewer-render-mode.gif)](/img/gltf-viewer-render-mode.gif)\\n\\nEnsuring that developers can seamlessly troubleshoot and inspect glTF files, the new render mode allows you to select and display individual inputs/outputs of the render pipeline, including albedo, emissive, normals, gloss, AO, and more. This new level of insight is invaluable for debugging, making it even easier to work with your glTF data.\\n\\n#### Enhanced Realism with VSM Shadows\\n\\nThe addition of Variance Shadow Mapping (VSM) casts your 3D scenes in a new light, literally! Shadows aren\'t merely aesthetic; they provide context and depth, especially in AR mode, assisting to ground your object naturally within its real-world environment. Explore scenes with a newfound depth and realism that draws viewers into the experience, both in standard and AR viewing modes. Find the new shadow controls in the Light Settings panel:\\n\\n[![glTF Viewer Light Settings](/img/gltf-viewer-light-settings.png)](/img/gltf-viewer-light-settings.png)\\n\\n### Join Our Open Source Community\\n\\nWe\'re not just excited to share these innovations with you; we\'re eager to hear your thoughts and welcome your contributions! If there\'s a feature you\'re longing for, please don\'t hesitate to [submit your requests](https://github.com/playcanvas/model-viewer/issues).\\n\\nBetter yet, become an active contributor to our codebase! Our open-source community thrives on collaboration and fresh perspectives. So, dive right in, [explore the code](https://github.com/playcanvas/model-viewer), and let\'s shape the future of 3D model viewing together! Your expertise and insights could help shape the next release.\\n\\n[**GO TO GITHUB NOW**](https://github.com/playcanvas/model-viewer)\\n\\n### Conclusion\\n\\nWith glTF Viewer 4.0, we\'re redefining the standards of 3D model viewing. From WebGPU-powered rendering to WebXR-powered AR, this update is designed to inspire, assist, and elevate your work with glTF data.\\n\\nSo stay creative, friends, and we\'ll see you on the [forums](https://forum.playcanvas.com/)! \ud83d\udc4b"},{"id":"playcanvas-adds-sketchfab-itegration","metadata":{"permalink":"/playcanvas-adds-sketchfab-itegration","editUrl":"https://github.com/playcanvas/blog/tree/main/blog/2023-06-26-playcanvas-adds-sketchfab-itegration.md","source":"@site/blog/2023-06-26-playcanvas-adds-sketchfab-itegration.md","title":"PlayCanvas Adds Sketchfab Integration","description":"Today, we\'re excited to announce the integration of Sketchfab into the PlayCanvas Editor!","date":"2023-06-26T00:00:00.000Z","tags":[{"label":"asset-store","permalink":"/tags/asset-store"},{"label":"editor","permalink":"/tags/editor"},{"label":"sketchfab","permalink":"/tags/sketchfab"},{"label":"workflow","permalink":"/tags/workflow"}],"readingTime":2.15,"hasTruncateMarker":false,"authors":[{"name":"Will Eastcott","title":"CEO","url":"https://twitter.com/willeastcott","imageURL":"https://pbs.twimg.com/profile_images/2635146631/edcd8b6dc4a34625770095941519ca8a_400x400.png","key":"will"}],"frontMatter":{"authors":"will","slug":"playcanvas-adds-sketchfab-itegration","title":"PlayCanvas Adds Sketchfab Integration","tags":["asset-store","editor","sketchfab","workflow"]},"unlisted":false,"prevItem":{"title":"glTF Viewer 4.0 Adds WebGPU Support","permalink":"/gltf-viewer-adds-webgpu-support"},"nextItem":{"title":"Moving from WordPress to Jekyll - A Case Study","permalink":"/moving-from-wordpress-to-jekyll-a-case-study"}},"content":"Today, we\'re excited to announce the integration of Sketchfab into the PlayCanvas Editor!\\n\\n
\\n \\n
\\n\\n_[\\"Spartan Armour\\"](https://skfb.ly/6QVvM) by McCarthy3D is licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)._\\n\\nWith today\'s launch you\'ll have instant access to Sketchfab\'s enormous library of high quality 3D content right inside the Editor.\\n\\n### What Is Sketchfab?\\n\\n[Sketchfab](https://sketchfab.com/) is a platform that allows users to publish, share and discover 3D content on the web. You can think of it as a sort of \\"YouTube for 3D models\\". The platform hosts millions of 3D models in various formats, including glTF, OBJ, STL, and more.\\n\\nUsers can upload their 3D models to Sketchfab and embed them in other websites much like one would embed a YouTube video. This has made it popular for showcasing 3D models for a wide range of uses including game assets, 3D scans, architectural models, and educational content.\\n\\n### Accessing Sketchfab from the Asset Store\\n\\nEarlier this month, we [announced](https://blog.playcanvas.com/announcing-the-new-playcanvas-asset-store/) the brand new PlayCanvas Asset Store. The Asset Store is an in-Editor panel of useful assets that you can use in your projects. With a few clicks, you can browse, discover and import various types of content. So it is the obvious place to incorporate the vast Sketchfab content library.\\n\\nTo access the Sketchfab library, simply hit the Asset Store button on the Asset Panel header and select the SKETCHFAB filter on the left.\\n\\n[![Open Sketchfab](/img/asset-store-sketchfab-open.gif)](/img/asset-store-sketchfab-open.gif)\\n\\n### Authorizing PlayCanvas to Access Sketchfab\\n\\nIf you want to import models from Sketchfab into PlayCanvas, you first need to create a Sketchfab account. Then, the first time you try to import a Sketchfab model in the Asset Store, you will be asked to authorize PlayCanvas to access your Sketchfab account.\\n\\n[![Authorize Sketchfab](/img/asset-store-sketchfab-authorize.gif)](/img/asset-store-sketchfab-authorize.gif)\\n\\nIt\'s so quick and easy!\\n\\n### New License and Author Info for Assets\\n\\nSketchfab assets are all tagged with a license and an author. When you import Sketchfab content into your PlayCanvas projects, it\'s important that we preserve this information. Now, when you click on any imported asset, you\'ll see we\'ve added links to license and author information in the Inspector panel.\\n\\n[![Sketchfab Licenses](/img/asset-store-sketchfab-license.gif)](/img/asset-store-sketchfab-license.gif)\\n\\nThis ensures that the author\'s licensing wishes are respected and that they recieve credit for their work.\\n\\n### Go Forth and Create\\n\\nWith today\'s release, it\'s never been easier to create interactive 3D experiences for the web. We hope you love the new Sketchfab integration. But, as always, we _love_ to hear your opinions so head over to the [forum](https://forum.playcanvas.com/t/playcanvas-integrates-sketchfab/31885) and join the conversation. Happy creating! \ud83d\udea7\ud83d\udc77"},{"id":"moving-from-wordpress-to-jekyll-a-case-study","metadata":{"permalink":"/moving-from-wordpress-to-jekyll-a-case-study","editUrl":"https://github.com/playcanvas/blog/tree/main/blog/2023-06-07-moving-from-wordpress-to-jekyll-a-case-study.md","source":"@site/blog/2023-06-07-moving-from-wordpress-to-jekyll-a-case-study.md","title":"Moving from WordPress to Jekyll - A Case Study","description":"Welcome to the new PlayCanvas blog! \ud83d\ude0e","date":"2023-06-07T00:00:00.000Z","tags":[{"label":"jekyll","permalink":"/tags/jekyll"},{"label":"wordpress","permalink":"/tags/wordpress"},{"label":"github","permalink":"/tags/github"}],"readingTime":6.73,"hasTruncateMarker":false,"authors":[{"name":"Will Eastcott","title":"CEO","url":"https://twitter.com/willeastcott","imageURL":"https://pbs.twimg.com/profile_images/2635146631/edcd8b6dc4a34625770095941519ca8a_400x400.png","key":"will"}],"frontMatter":{"authors":"will","slug":"moving-from-wordpress-to-jekyll-a-case-study","title":"Moving from WordPress to Jekyll - A Case Study","tags":["jekyll","wordpress","github"]},"unlisted":false,"prevItem":{"title":"PlayCanvas Adds Sketchfab Integration","permalink":"/playcanvas-adds-sketchfab-itegration"},"nextItem":{"title":"Announcing the New PlayCanvas Asset Store","permalink":"/announcing-the-new-playcanvas-asset-store"}},"content":"Welcome to the new PlayCanvas blog! \ud83d\ude0e\\n\\n![PlayCanvas To Jekyll](/img/playcanvas-to-jekyll.png)\\n\\nWe have made the decision to move from WordPress to [Jekyll](https://jekyllrb.com/) and although it\'s early days, so far, we are very pleased with the results. Therefore, we thought it might be useful to explain the reasons why we did this and describe the process we followed.\\n\\n### Some History\\n\\nWe originally started our blog back in February 2012 with a very [low-key post](https://blog.playcanvas.com/hello-world/). We installed our own instance of WordPress and that functioned fine for a few years. However, in 2015, we decided that we didn\'t want to deal with managing a WordPress instance ourselves and so we signed up for [WPEngine](https://wpengine.com/), a WordPress hosting service. And there we stayed until today.\\n\\n### A Better Way?\\n\\nOver the years, some frustrations over WordPress did start to materialize. Customizing styling was tricky, bulk editing posts was not an option, managing media through the media library was quite inconvenient, and so on. On top of that, our blog was continuing to grow in popularity and WPEngine costs were rising. A team member suggested Jekyll as an alternative so we ran some tests to see what would be involved in a migration.\\n\\n### Migrating from WordPress to Jekyll\\n\\nFirst up, I should say that you should make use of ChatGPT when you attempt something like this. It made it a smooth and pleasant experience for me. But so you can see how straightforward it was, here are the key steps:\\n\\n1. **Export Your WordPress Content.** On your WordPress Dashboard, navigate to Tools > Export and select \'All Content\'. Click \'Download Export File\'. You should receive an XML file that contains all of your site\u2019s content.\\n2. **Convert WordPress Export to Jekyll Format.** To convert your WordPress export file to a Jekyll-friendly format, you can use a tool called `exitwp`. Here are the steps:\\n\\n - Clone or download `exitwp` from its [GitHub repository](https://github.com/thomasf/exitwp).\\n - Put your WordPress XML file in the `wordpress-xml` directory in the `exitwp` directory.\\n - Run `exitwp` (requires Python and some libraries, see the repo\'s `README` for details).\\n - This will generate a `_posts` directory containing all your blog posts converted into markdown format that Jekyll understands.\\n\\n3. **Setting Up Jekyll.**\\n\\n - Install Ruby and Jekyll. For installation guide refer to [Jekyll\'s official site](https://jekyllrb.com/docs/installation/).\\n - Create a new Jekyll site by typing `jekyll new my-awesome-site` in the command line.\\n - Replace the `_posts` directory in your new Jekyll site with the `_posts` directory that `exitwp` generated.\\n - You can run your site locally to see how it looks by using the command `bundle exec jekyll serve`.\\n - Then, open your browser to http://localhost:4000.\\n\\nOnce I had our blog post content successfully exported to a basic Jekyll site, I checked everything in to a new [GitHub repository](https://github.com/playcanvas/blog). From this point, I wanted any change I made to the content to be tracked via Git version control - I mean, why wouldn\'t you?\\n\\nThe initial migration to Markdown worked OK but it wasn\'t perfect. There was a lot of superfluous whitespace in the generated Markdown and syntax was broken in places. So I took the opportunity to do a wholesale spring clean of the Markdown content.\\n\\n#### Prettier\\n\\n[Prettier](https://prettier.io/) is a great code formatter but you may not know that it also has built-in support for Markdown formatting. I installed Prettier via NPM and ran it over all Markdown files:\\n\\n```shell\\nprettier --write _posts\\n```\\n\\nAll formatting was now beautifully consistent.\\n\\n#### Linkinator\\n\\n[Linkinator](https://github.com/JustinBeckwith/linkinator) is a tool for reporting broken hyperlinks in both Markdown and HTML. I scanned the locally generated Jekyll site with it using the following command:\\n\\n```shell\\nlinkinator . --server-root _site --recurse --verbosity error\\n```\\n\\nI fixed well over 100 dead links. The older the post, the more dead links there tended to be (as you might expect). While I was always able to use Linkinator on the published WordPress site, it was never convenient to skip from post to post and edit hyperlinks in the WordPress UI (we have over 220 posts). So I never made the time for it. Now I was able to quickly search and replace links in Visual Studio Code and it was a breeze.\\n\\nAside from giving your readers a better experience, here\'s what ChatGPT has to say about dead links:\\n\\n> While Google\'s algorithms are complex and multifaceted, it is generally understood that having too many broken or dead links on your site can negatively affect your website\'s SEO ranking, albeit indirectly.\\n\\nSo this step was definitely worth doing!\\n\\n#### Media Library\\n\\nEvery WordPress blog has a Media Library that contains all of the images and videos referenced by your posts. The PlayCanvas Media Library had over 1GB of content. However, I noticed that a large amount of content was not actually referenced by any post. I wanted to ensure that I exported only the _used_ media (since I didn\'t want to bloat the GitHub repository).\\n\\n- **Step 1:** Install WordPress plugin [Media Cleaner](https://wordpress.org/plugins/media-cleaner/) and use it to delete unused media files.\\n- **Step 2:** Install WordPress plugin [Export Media Library](https://wordpress.org/plugins/export-media-library/) to download all remaining media files in a ZIP.\\n\\nThis process cut the Media Library from 1GB to about 550MB. I simply extracted the ZIP contents to `assets/media` (relative to the root folder of my Jekyll site) and then did a search and replace of all media embed links to use the new file location. Easy!\\n\\n### Hosting on GitHub Pages\\n\\nI now had a fully exported and functional Jekyll blog. But where to host it? One option was to throw the static site onto a file server and put it behind a CDN. But wait, the file-set of the Jekyll blog now sits in GitHub, so why not use [GitHub Pages](https://pages.github.com/) to host the site? There are some great benefits:\\n\\n- Deployment is a breeze to set up.\\n- It\'s a managed platform so you just don\'t need to worry about maintenance and security as you would with your own infra.\\n- And, oh yeah, **it\'s free!**\\n\\n### The Pros and Cons\\n\\nSo now that we\'re migrated over, let\'s quickly summarize the key benefits:\\n\\n- **Free:** Costs for our blog are now a pleasing $0.\\n- **Secure:** We have eliminated a potential attack vector. No more password reset confirmation emails!\\n- **Powerful Tooling:** There\'s a vast array of free and open source tools to lint and format Markdown.\\n- **Easy Editing:** Choose any editor you like such as the awesome Visual Studio Code.\\n- **Versioned:** All content is now under version control providing revision history, diffing and so on.\\n- **Collaborative:** We can take contributions to the blog via GitHub\'s pull request mechanism.\\n- **Customizable:** We have fine-grain control over the HTML and styling of posts using Jekyll themes.\\n- **Platform Agnostic:** Markdown makes it trivial to migrate to any other platform in the future.\\n\\nOK, but what about the cons? \ud83e\udd14 I have to tell you - I genuinely can\'t think of any! Sure, we don\'t have comments enabled now but as I understand it, Disqus has a [Jekyll integration](https://help.disqus.com/en/articles/1935528-jekyll-installation-instructions) that we can turn on at some point. Seriously, feel free to ping me on [Twitter](https://twitter.com/willeastcott/) if you think I\'m missing something here. But I wish we had taken this step years ago.\\n\\n### Open Source and Open to Contributions\\n\\nAs mentioned, the blog is now on [GitHub](https://github.com/playcanvas/blog). Take a moment to go check out the repository and hit that Star button if you like what we\'ve done here. \u2b50 We\'ve taken the step to open source the blog\'s content under an [Attribution-NonCommercial 4.0 International](https://github.com/playcanvas/blog/blob/main/LICENSE.md) license. This is part of our continuing drive to open source most of what we do.\\n\\nUltimately, we want **you** to get involved and help us make the blog better and better over time. Consider submitting issues and pull requests yourself.\\n\\n- Submit spelling and grammar fixes.\\n- Submit design tweaks and improvements.\\n- Submit your own posts showcasing your PlayCanvas projects.\\n\\nIt\'s your blog! \ud83d\ude0a\\n\\nThat\'s all from me. Looking forward to many-a-future blogs posts on this new platform. \ud83d\udc4b"},{"id":"announcing-the-new-playcanvas-asset-store","metadata":{"permalink":"/announcing-the-new-playcanvas-asset-store","editUrl":"https://github.com/playcanvas/blog/tree/main/blog/2023-04-26-announcing-the-new-playcanvas-asset-store.md","source":"@site/blog/2023-04-26-announcing-the-new-playcanvas-asset-store.md","title":"Announcing the New PlayCanvas Asset Store","description":"The PlayCanvas Asset Store is the first place that users tend to go to find content for their projects. This is especially true for new users who want to get started as quickly as possible. Up until now, the Store has not been particularly easy to use and the content has not changed in quite a long time. In short, a complete overhaul and refresh has been long overdue. So today, we are incredibly excited to announce a major upgrade for the PlayCanvas Asset Store!","date":"2023-04-26T00:00:00.000Z","tags":[{"label":"asset-store","permalink":"/tags/asset-store"},{"label":"editor","permalink":"/tags/editor"},{"label":"news","permalink":"/tags/news"},{"label":"workflow","permalink":"/tags/workflow"}],"readingTime":3.425,"hasTruncateMarker":false,"authors":[{"name":"Will Eastcott","title":"CEO","url":"https://twitter.com/willeastcott","imageURL":"https://pbs.twimg.com/profile_images/2635146631/edcd8b6dc4a34625770095941519ca8a_400x400.png","key":"will"}],"frontMatter":{"authors":"will","slug":"announcing-the-new-playcanvas-asset-store","title":"Announcing the New PlayCanvas Asset Store","tags":["asset-store","editor","news","workflow"]},"unlisted":false,"prevItem":{"title":"Moving from WordPress to Jekyll - A Case Study","permalink":"/moving-from-wordpress-to-jekyll-a-case-study"},"nextItem":{"title":"Initial WebGPU support lands in PlayCanvas Engine 1.62!","permalink":"/initial-webgpu-support-lands-in-playcanvas-engine-1-62"}},"content":"The PlayCanvas Asset Store is the first place that users tend to go to find content for their projects. This is especially true for new users who want to get started as quickly as possible. Up until now, the Store has not been particularly easy to use and the content has not changed in quite a long time. In short, a complete overhaul and refresh has been long overdue. So today, we are incredibly excited to announce a major upgrade for the PlayCanvas Asset Store!\\n\\nFirst up, check out a little example of building a city scene using content taken from the Asset Store. A skybox, a pack of 3D city block meshes and a camera control script are imported and the city is built via drag and drop. And _not one single line of code is needed_!\\n\\n
\\n \\n
\\n\\nNow, let\'s examine some of the key highlights that make the new Asset Store so special.\\n\\n### Built Right In To The Editor\\n\\nIt should be possible to grab assets quickly, right from within the Editor itself. Why should you have to open a new tab and go hunting around the web? So to keep things as convenient as possible, the ASSET STORE button (in the Editor\'s Assets Panel) now opens a nicely designed, responsive Asset Store panel.\\n\\n[![Asset Store Panel](/img/asset-store-open.gif)](/img/asset-store-open.gif)\\n\\nOne really cool benefit of selecting assets from within the Editor is that the currently selected Asset folder is known. This means you have compete control over where your imported assets will be saved.\\n\\n### Preview Store Assets Before Import\\n\\nSometimes, an asset thumbnail just isn\'t sufficient to tell if a particular asset is what you want.\\n\\n[![Asset Store Viewer](/img/asset-store-viewer.gif)](/img/asset-store-viewer.gif)\\n\\nOur new Store allows you to select a Store Item and preview it in an appropriate viewer (glTF Viewer for 3D models, Texture Viewer for textures and cubemaps).\\n\\n### Find What You Want Quickly\\n\\nAs the number of store items continues to grow, it\'s going to be incredibly important for you to be able to narrow down your assets searches. As a result, the new Store comes with powerful searching, sorting and filtering capabilities.\\n\\n[![Asset Store Search](/img/asset-store-search.gif)](/img/asset-store-search.gif)\\n\\nYou can filter by asset type, search asset names and descriptions and then order search results on a host of criteria.\\n\\n### Fresh New Content\\n\\nRecently, the Asset Store content was, let\'s just say, beginning to show its age. We are now in a world of HDR skyboxes, PBR materials and high polygon meshes. So it made sense to erase old store items and refresh the Store with better, more modern content. We have selected a broad variety of Creative Commons assets from fantastic content sources such as [kenney.nl](https://kenney.nl/), [HDRi Haven](https://hdri-haven.com/), [Sketchfab](https://sketchfab.com/) and Khronos\' [glTF Sample Models](https://github.com/KhronosGroup/glTF-Sample-Models).\\n\\n[![Asset Store Content](/img/asset-store-content.gif)](/img/asset-store-content.gif)\\n\\nIf you would have any suggestions for content you would like to be added to the Store, please do let us know!\\n\\n### The Future\\n\\nThere\'s still so much we want to do with the new Asset Store! But here are some things we have in mind:\\n\\n1. **More Content.** The important thing to say about today\'s update is that it delivers the core infrastructure on which we can iterate. It is now exceptionally easy for us to populate the store with more content. So, in the near term, you can expect to see the range of content expand quite rapidly.\\n\\n2. **Third Party Stores.** Now that we have a solid foundation in place for the Store, we have the ability to host third party stores within the same UI and maximize your choice.\\n\\n3. **More Asset Types.** Today\'s launch offers models, fonts, textures, skyboxes and scripts. Next, we want to add audio assets and template assets (AKA prefabs). Template assets in particular are very exciting because you would be able to import fully interactive, visual entities into your projects (such as a drivable vehicle or a controllable character).\\n\\nWhat would _you_ like to see us add to the Asset Store next? Let us know on the [forum](https://forum.playcanvas.com/).\\n\\nHappy creating, friends!"},{"id":"initial-webgpu-support-lands-in-playcanvas-engine-1-62","metadata":{"permalink":"/initial-webgpu-support-lands-in-playcanvas-engine-1-62","editUrl":"https://github.com/playcanvas/blog/tree/main/blog/2023-03-31-initial-webgpu-support-lands-in-playcanvas-engine-1-62.md","source":"@site/blog/2023-03-31-initial-webgpu-support-lands-in-playcanvas-engine-1-62.md","title":"Initial WebGPU support lands in PlayCanvas Engine 1.62!","description":"WebGPU is a cutting-edge technology that promises to revolutionize the way 3D graphics are handled on the web. As the successor to WebGL, WebGPU provides faster and more efficient rendering capabilities for complex 3D graphics and simulations.","date":"2023-03-31T00:00:00.000Z","tags":[{"label":"webgpu","permalink":"/tags/webgpu"}],"readingTime":3.095,"hasTruncateMarker":false,"authors":[{"name":"Martin Valigursky","title":"Software Engineer","url":"https://twitter.com/ValigurskyM","imageURL":"https://pbs.twimg.com/profile_images/1262848991982690305/gUUoHdk1_400x400.jpg","key":"martin"}],"frontMatter":{"authors":"martin","slug":"initial-webgpu-support-lands-in-playcanvas-engine-1-62","title":"Initial WebGPU support lands in PlayCanvas Engine 1.62!","tags":["webgpu"]},"unlisted":false,"prevItem":{"title":"Announcing the New PlayCanvas Asset Store","permalink":"/announcing-the-new-playcanvas-asset-store"},"nextItem":{"title":"WebXR AR Made Easy with PlayCanvas","permalink":"/webxr-ar-made-easy-with-playcanvas"}},"content":"WebGPU is a cutting-edge technology that promises to revolutionize the way 3D graphics are handled on the web. As the successor to WebGL, WebGPU provides faster and more efficient rendering capabilities for complex 3D graphics and simulations.\\n\\nPlayCanvas has been at the forefront of this new technology and has been working on adding WebGPU support to its platform.\\n\\nWith WebGPU, we can expect to see more immersive and interactive 3D experiences on the web in the future.\\n\\n[![WebGPU Area Lights](/img/webgpu-area-lights-demo.jpg)](/img/webgpu-area-lights-demo.jpg) \\n[_PlayCanvas WebGPU Clustered Area Lights Demo_](https://playcanvas.com/demos/arealights/)\\n\\n## Refactoring of WebGL engine\\n\\nBefore adding support for WebGPU, it\'s important to discuss the significant amount of refactoring work that was required on our existing WebGL engine. Implementing deeper architectural changes while preserving backwards compatibility required a significant amount of meticulous care.\\n\\n- To enable support for WebGPU, we needed to establish a clear separation of graphics technology that could be shared between WebGL and WebGPU. This involved a significant refactoring effort to extract WebGL-specific code into a separate set of classes.\\n\\n- PlayCanvas utilizes a collection of shader chunks to produce GLSL shaders that implement advanced material properties and lighting modes, as well as custom shader chunks defined by users. However, since WebGPU employs the WGSL language, we used glslang and tint WASM modules to dynamically convert these shaders on-the-fly with injecting support for uniform buffers and other modifications.\\n\\n- The PlayCanvas engine lacked explicit render passes, making the rendering process more rigid and harder to extend. This was solved by implementing a FrameGraph that allowed us to describe the rendering process as a set of render passes, their dependencies, and associated targets, which created a more flexible and performant rendering architecture.\\n\\n- Unlike WebGL, which sets render state and shaders using a custom API, WebGPU specifies all those through render pipelines. To support both rendering APIs with optimal performance, we needed to refactor the render states into standalone objects that are efficient to compare and set up.\\n\\n- To support the WebGPU platform, we need to undergo a significant refactoring to organize uniforms into uniform buffers.\\n\\n- To facilitate the asynchronous creation of WebGPU device, we have introduced a new async API to create a graphics device, which is the primary breaking change required to adopt WebGPU.\\n\\n## What is left to do\\n\\n- Our primary objective is to align the WebGPU implementation with that of WebGL, and while we have made significant progress towards this goal, there are still some features that are missing. Furthermore, several smaller details require cleanup and rectification.\\n\\n- We need to incorporate it into the Editor environment for both launched and published applications. Currently, only WebGL is available in this environment.\\n\\n- Our primary objective is to achieve full parity with WebGL, but initially, we are focusing on basic implementations of some concepts to deliver a working implementation, which will need to be extended to meet our performance objectives.\\n\\n- WebGPU provides developers with access to Compute Shaders, which enables more efficient parallel processing of data on the GPU. This feature can significantly improve the performance of complex algorithms and simulations, which may have been impractical to run on the CPU. With access to Compute Shaders, we can bring new visual features to the next level, such as advanced particle systems, post-processing and global illumination techniques.\\n\\n## Engine examples\\n\\nAs an early pre-release of WebGPU, we have updated several engine examples to use it, which can be accessed on [https://playcanvas.github.io](https://playcanvas.github.io/). To use WebGPU, the Chrome Canary browser is required, with the \'chrome://flags/#enable-unsafe-webgpu\' flag enabled.\\n\\n[![Examples Browser WebGPU](/img/playcanvas-examples-browser-webgpu.jpg)](/img/playcanvas-examples-browser-webgpu.jpg)\\n\\n[PlayCanvas Examples Browser](https://playcanvas.github.io/)\\n\\nLet us know what you think in the [forums](https://forum.playcanvas.com/t/engine-release-v1-62/30360)!\\n\\n### Attributions\\n\\n[Oldsmobile Cutlass Supreme Sedan \'71](https://sketchfab.com/3d-models/oldsmobile-cutlass-supreme-sedan-71-78f76d386a4341b0b71745bdc50fd5ab) by Barbo is licensed under [Creative Commons Attribution](https://creativecommons.org/licenses/by/4.0/)"},{"id":"webxr-ar-made-easy-with-playcanvas","metadata":{"permalink":"/webxr-ar-made-easy-with-playcanvas","editUrl":"https://github.com/playcanvas/blog/tree/main/blog/2023-03-16-webxr-ar-made-easy-with-playcanvas.md","source":"@site/blog/2023-03-16-webxr-ar-made-easy-with-playcanvas.md","title":"WebXR AR Made Easy with PlayCanvas","description":"We are excited to announce the launch of our WebXR AR Starter Kit, available in the New Project dialog today!","date":"2023-03-16T00:00:00.000Z","tags":[{"label":"ar","permalink":"/tags/ar"},{"label":"webxr","permalink":"/tags/webxr"}],"readingTime":0.8,"hasTruncateMarker":false,"authors":[{"name":"Steven Yau","title":"Partner Relations Manager","url":"https://twitter.com/yaustar","imageURL":"https://pbs.twimg.com/profile_images/1675831859756908545/E60-0cNq_400x400.jpg","key":"steven"}],"frontMatter":{"authors":"steven","slug":"webxr-ar-made-easy-with-playcanvas","title":"WebXR AR Made Easy with PlayCanvas","tags":["ar","webxr"]},"unlisted":false,"prevItem":{"title":"Initial WebGPU support lands in PlayCanvas Engine 1.62!","permalink":"/initial-webgpu-support-lands-in-playcanvas-engine-1-62"},"nextItem":{"title":"Draco Mesh Compression Arrives in the PlayCanvas Editor","permalink":"/draco-mesh-compression-arrives-in-the-playcanvas-editor"}},"content":"We are excited to announce the launch of our WebXR AR Starter Kit, available in the New Project dialog today!\\n\\n[![New Project WebXR](/img/webar-xr-starterkit-project-dialog.jpg)](/img/webar-xr-starterkit-project-dialog.jpg)\\n\\n[WebXR](https://immersiveweb.dev/) is a technology that powers immersive and interactive AR and VR experiences to be accessed through supported web browsers. This allows us to build memorable, engaging content and share them with just a URL. No installs needed!\\n\\nThe starter kit comes with all you need to kickstart your AR experience for WebXR including:\\n\\n- Real world light estimation\\n- AR shadow renderer\\n- AR object resizing and positioning controls\\n- Physics raycasting\\n- And more!\\n\\nLook how quickly you can create AR experiences below!\\n\\n
\\n \\n
\\n\\n[Pacman Arcade + animation](https://sketchfab.com/3d-models/pacman-arcade-animation-0b43f85af5384ea4bac5d6e2d3cbd008) by Daniel Br\xfcck is licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)\\n\\n[Try it on your device](https://playcanv.as/p/inoDeWOQ/)\\n\\nGive the Starter Kit a try today at [playcanvas.com](https://playcanvas.com) where you can use it for free!"},{"id":"draco-mesh-compression-arrives-in-the-playcanvas-editor","metadata":{"permalink":"/draco-mesh-compression-arrives-in-the-playcanvas-editor","editUrl":"https://github.com/playcanvas/blog/tree/main/blog/2023-02-28-draco-mesh-compression-arrives-in-the-playcanvas-editor.md","source":"@site/blog/2023-02-28-draco-mesh-compression-arrives-in-the-playcanvas-editor.md","title":"Draco Mesh Compression Arrives in the PlayCanvas Editor","description":"We are thrilled to announce the immediate availability of Draco Mesh Compression in the PlayCanvas Editor! Our latest feature allows developers to compress meshes using Google\'s Draco technology, reducing file sizes and enhancing the end-user experience.","date":"2023-02-28T00:00:00.000Z","tags":[{"label":"compression","permalink":"/tags/compression"},{"label":"editor","permalink":"/tags/editor"},{"label":"gltf","permalink":"/tags/gltf"},{"label":"performance","permalink":"/tags/performance"}],"readingTime":1.64,"hasTruncateMarker":false,"authors":[{"name":"Will Eastcott","title":"CEO","url":"https://twitter.com/willeastcott","imageURL":"https://pbs.twimg.com/profile_images/2635146631/edcd8b6dc4a34625770095941519ca8a_400x400.png","key":"will"}],"frontMatter":{"authors":"will","slug":"draco-mesh-compression-arrives-in-the-playcanvas-editor","title":"Draco Mesh Compression Arrives in the PlayCanvas Editor","tags":["compression","editor","gltf","performance"]},"unlisted":false,"prevItem":{"title":"WebXR AR Made Easy with PlayCanvas","permalink":"/webxr-ar-made-easy-with-playcanvas"},"nextItem":{"title":"How to make your HTML5 Games Awesome!","permalink":"/how-to-make-your-html5-games-awesome"}},"content":"We are thrilled to announce the immediate availability of Draco Mesh Compression in the PlayCanvas Editor! Our latest feature allows developers to compress meshes using Google\'s Draco technology, reducing file sizes and enhancing the end-user experience.\\n\\nAt its core, [Draco Mesh Compression](https://google.github.io/draco/) reduces the amount of data needed to represent 3D graphics without compromising visual quality. The technology achieves this by applying a lossy compression algorithm to the mesh data. With less data to transfer, the result is faster load times and lower bandwidth costs for your applications.\\n\\nThe open source [PlayCanvas Engine](https://github.com/playcanvas/engine) has been able to load Draco-compressed glTF 2.0 files for quite some time now. But now you can generate these Draco-compressed glTF files in the Editor at import time. Check out how easy it is to use:\\n\\n
\\n \\n
\\n\\n_[\\"1972 Datsun 240k GT\\"](https://skfb.ly/6VtZu) by Karol Miklas is licensed under [Creative Commons Attribution-ShareAlike](https://creativecommons.org/licenses/by-sa/4.0/)._\\n\\nIn the example above, a **49.9MB** GLB file is crunched down to only **3.67MB**. That\'s a **92.6% reduction is file size**! And for the majority of scenes, you should notice _no difference in terms of visual quality_. The only cost is decompression time when the compressed GLB is downloaded by an end user, but this should be significantly less than what is saved in terms of download time.\\n\\nTo enable the feature, open your Project Settings in the Inspector, expand the Asset Tasks panel and edit the Mesh Compression setting. Then, simply Re-Import any existing FBX or GLB and compression will be applied. Any FBX or GLB subsequently imported will also respect your mesh compression setting. Read more on the [Developer Site](https://developer.playcanvas.com/user-manual/assets/import-pipeline/#mesh-compression).\\n\\nWe believe that mesh compression is going to take many types of applications to the next level, particularly e-commerce applications like product configurators, which need to load detailed meshes as fast as possible.\\n\\nGet started with PlayCanvas today and make your WebGL dreams a reality!"},{"id":"how-to-make-your-html5-games-awesome","metadata":{"permalink":"/how-to-make-your-html5-games-awesome","editUrl":"https://github.com/playcanvas/blog/tree/main/blog/2023-02-07-how-to-make-your-html5-games-awesome.md","source":"@site/blog/2023-02-07-how-to-make-your-html5-games-awesome.md","title":"How to make your HTML5 Games Awesome!","description":"How To Make Your HTML5 Games Awesome","date":"2023-02-07T00:00:00.000Z","tags":[{"label":"gamedev","permalink":"/tags/gamedev"},{"label":"html5","permalink":"/tags/html-5"},{"label":"webgl","permalink":"/tags/webgl"}],"readingTime":11.625,"hasTruncateMarker":false,"authors":[{"name":"Paulo Oliveira","title":"Associate Partner Support Engineer","url":"https://www.linkedin.com/in/paulo-oliveira-ninitoph/","key":"paulo"}],"frontMatter":{"authors":"paulo","slug":"how-to-make-your-html5-games-awesome","title":"How to make your HTML5 Games Awesome!","tags":["gamedev","html5","webgl"]},"unlisted":false,"prevItem":{"title":"Draco Mesh Compression Arrives in the PlayCanvas Editor","permalink":"/draco-mesh-compression-arrives-in-the-playcanvas-editor"},"nextItem":{"title":"PlayCanvas now supports Microsoft volumetric video playback","permalink":"/playcanvas-now-supports-microsoft-volumetric-video-playback"}},"content":"import ReactPlayer from \'react-player\'\\n\\n![How To Make Your HTML5 Games Awesome](/img/Space-Rocks-thumbnail.jpeg)\\n\\nThe quality of a video game is often determined by how polished it is. It\'s the attention to detail and the finishing touches that can make a good game great. In this article, we\'ll take a look at the importance of polish in game development and how it can significantly enhance the overall experience.\\n\\nWe\'ll use [Space Rocks!](https://playcanvas.com/project/1029772/overview/space-rocks), a simple Asteroids game created with the PlayCanvas game engine to showcase how even the smallest details can make a big impact.\\n\\n> [Game juice](https://www.youtube.com/watch?v=Fy0aCDmgnxg) is a design term to refer to the small visual and audio effects that are added to a game to make it feel more satisfying to play. This can include things like screen shakes, particle effects, and sound effects that are triggered when the player takes certain actions. Game juice is all about enhancing the overall feel of a game and making it more immersive and enjoyable.\\n\\nParticularly, we\'ll explore how game polish can be achieved through **game juice**.\\n\\n\\n\\n[Play it here!](https://playcanvas.com/project/1014332/overview/space-rocks)\\n\\n## How it started\\n\\n\\n\\nThis was our starting point before we added game juice. While the game is fully functional and plays well, it lacks the visual and audio effects that would make it truly engaging. As a result, it feels a bit dull and uninteresting.\\n\\nHowever, with the right attention to detail and some careful implementation of game juice, we can transform this basic Asteroids game into something much more exciting and satisfying to play.\\n\\n## What can we improve?\\n\\nTo think about what should have game juice, I always try to narrow down the most common interaction or core mechanic of the game. In our case, that would probably be:\\n\\n- Shooting\\n- Destroying asteroids\\n- Colliding with asteroids\\n\\nWith those three key pieces in mind, let\'s start thinking about how we can improve them.\\n\\n## For shooting\\n\\nIt\'s not very interesting right now:\\n\\n![Basic Shooting](/img/Space-Rocks-image9.gif)\\n\\nIf we want to change that, there\'s a few key things we can do. We can increase the fire rate through a script that allows us to easily control by decreasing the fire cooldown.\\n\\n```javascript\\nGun.attributes.add(\'cooldown\', {\\n type: \'number\',\\n default: 0.25,\\n title: \'Cooldown\',\\n description: \'How long the gun has to wait between firing each bullet\'\\n});\\n\\nGun.prototype.update = function (dt) {\\n this._cooldownTimer -= dt;\\n\\n if (this.app.mouse.isPressed(pc.MOUSEBUTTON_LEFT) && this.canFire()) {\\n this.fireBullet();\\n }\\n};\\n```\\n\\nIn fact, while we\'re at it, let\'s make shooting a bit more unpredictable. Let\'s add some spread to our shots!\\n\\n```javascript\\nGun.attributes.add(\'spread\', {\\n type: \'number\',\\n default: 10,\\n title: \'Bullet Spread\',\\n description: \'Up to how many degrees each bullet should vary in Y rotation.\'\\n});\\n\\nGun.prototype.applySpreadOn = function (bullet) {\\n var rotation = this.entity.getEulerAngles();\\n rotation.y += getRandomDeviation(this.spread);\\n bullet.setEulerAngles(rotation);\\n};\\n```\\n\\nA simple but impactful change! Here\'s how it looks with values I put in for some fun:\\n\\n![Shooting Spread Effect](/img/Space-Rocks-image7.gif)\\n\\nI highly encourage you to play with these values to see what\'s fun for you!\\n\\nIt\'s getting better, but still not there. Let\'s think about more visual aspects now. What more can we do to make it more visually appealing?\\n\\nPlayCanvas has a nice feature that allows you to have tons of lights in your scene with very little performance impact! It\'s called \u2728 Clustered Lighting \u2728.\\n\\n
Cannes Lions is the world's biggest annual awards show and festival for professionals in the creative communications industry.
-
- Passers-by playing the world's biggest space invaders on their smartphones
+
+Passers-by playing the world's biggest space invaders on their smartphones
Dominating the sea-front is the Grand Cannes, a vast 18 meter wide LED screen that sits atop the Grand Hotel. DOOH, a world leader in Digital Out Of Home experiences, wanted to create a gaming experience people could play on that screen to wow the world of advertising.
"At DOOH, we're constantly devising new and refreshing ways to engage consumers as they go about their lives." said Andrew Newman, CEO of DOOH. "Gaming has a key role in that. So at Cannes Lions, we're enabling passers by to play the world's largest game of Space Invaders. And since everybody has a smartphone, everybody can play. Just visit a web link to load up the DOOHpad, our virtual controller. To build DOOH Invaders, we needed a partner who understands the intersection of gaming and advertising. The natural choice was PlayCanvas and they've built something truly special."
-
- DOOH Invaders: Running on the 20m wide Grand Cannes
-
- The DOOHPad that runs on your smartphone
+
+DOOH Invaders: Running on the 20m wide Grand Cannes
+
+The DOOHPad that runs on your smartphone
"We're absolutely delighted to have worked with DOOH on this campaign." says Will Eastcott, PlayCanvas' CEO. "DOOH are the masters of high profile, head-turning marketing campaigns and this one marks a new high. PlayCanvas technology enables super-accessible, frictionless gaming experiences that are delivered over the web and can be played by all. No need to visit an app store. Just instant fun. PlayCanvas opens the door to a whole new world of interactive possibilities for advertisers."
DOOH Invaders is playable throughout the Cannes Lions festival. So if you're in the area, swing by the Grand Hotel and see if you can beat the latest high score and impress everybody on the beach!