{"id":372,"date":"2021-08-05T12:57:33","date_gmt":"2021-08-05T12:57:33","guid":{"rendered":"https:\/\/www.mooneyestudios.com\/news\/?p=372"},"modified":"2021-12-16T15:26:15","modified_gmt":"2021-12-16T15:26:15","slug":"behind-the-scenes-of-haven-park","status":"publish","type":"post","link":"https:\/\/www.mooneyestudios.com\/news\/games\/havenpark\/behind-the-scenes-of-haven-park\/","title":{"rendered":"A closer look behind the scenes of Haven Park"},"content":{"rendered":"\n<p>Today we want to give the developer of our first published game &#8220;Haven Park&#8221; the stage and let him tell you about the development process of his game and what neat little tricks helped him organize his first game project! So without further ado: here&#8217;s Fabien Weibel!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Short Intro<\/h2>\n\n\n\n<p>Hi! My name is Fabien Weibel and in this article I am going to present my first game made with Blender + Unity and the experience I got from doing it. I have been using Blender for more than 16 years now, I remember rushing back from school to check if my renders came out correctly, good times! I studied art and animation in Lyon (FR) for 5 years, I worked in Paris at Cube Creative Company as a director then moved to Luxembourg where I had the opportunity to develop my own animated TV series called \u201cBarababor\u201d which is currently broadcasted in 60 countries! About two years ago, I decided to start a new journey towards real time rendering, such as VR and video games. I learned Unity and started a few VR projects and now I am releasing my first indie game as a solo developer!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What is Haven Park?<\/h2>\n\n\n\n<p>Haven Park is a small exploration game where you need to take care of a natural park. Find and build nice little campsites, meet and make friends with the campers. The game was inspired by A Short Hike and Animal Crossing. You can play at your own pace, discover quests and meet cute characters along the way. So get ready for a big little journey and enjoy the view!<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Haven Park - OUT NOW - Official Game Trailer\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/AqTT2_PXWNA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Here you can explore a small Diorama on Sketchfab inspired by the game:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-sketchfab wp-block-embed-sketchfab\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"sketchfab-embed-wrapper\">    <iframe loading=\"lazy\" title=\"Haven Park - A Small Exploration Game [Diorama]\" id=\"\" class=\"\" width=\"640\" height=\"360\" src=\"https:\/\/sketchfab.com\/models\/60e07d19a6554c8f83e1523c8eef321f\/embed\" frameborder=\"0\" allow=\"autoplay; fullscreen; xr-spatial-tracking\" allowfullscreen=\"\" mozallowfullscreen=\"true\" webkitallowfullscreen=\"true\" xr-spatial-tracking=\"true\" execution-while-out-of-viewport=\"true\" execution-while-not-rendered=\"true\" web-share=\"true\"><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">My Goal<\/h2>\n\n\n\n<p>When I started this project, my main goal was to get the full game developer experience. From A (concepts, prototyping) to Z (release to market, promotion, support). I wanted to explore the whole spectrum and every aspect of an indie game project.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Organization<\/h2>\n\n\n\n<p>I have some experience with project management for animated short films and series, but none for video games production. There was a lot I needed to learn, technical stuff of course, but more importantly organisational aspects. I tried to make the best use of my limited time on the project (1 day per week + some weekends and evenings), so I had to plan ahead. I made a simple spreadsheet to keep up with all the tasks to do.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"164\" src=\"https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park-1024x164.jpg\" alt=\"\" class=\"wp-image-376\" srcset=\"https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park-1024x164.jpg 1024w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park-300x48.jpg 300w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park-768x123.jpg 768w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park.jpg 1216w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>I wanted it to stay very simple. For every task, I added arbitrary values to help me evaluate them: Difficulty, duration and importance. This was helpful to see the health of the project and the specific aspects where I needed to put more effort. I separated the project in 2 main folders:<\/p>\n\n\n\n<p>\u25cf The Unity project folder, on my m.2 drive for fast RW access. That had a significant impact on the build and import times.<br>\u25cf The asset production folder, on my Synology NAS. It contained all source file with increments (.blend, PSD, etc)<\/p>\n\n\n\n<p>This separation allowed me to keep the Unity project folder as lightweight as possible and to gain time on imports. It was also important because I used Git to track the file changes and I didn\u2019t want to end up with a too heavy repository (it currently weighs 2.3Gb, which is good). The source files for the assets were versioned with the hyper backup tool on Synology.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"307\" src=\"https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park2-1024x307.jpg\" alt=\"\" class=\"wp-image-377\" srcset=\"https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park2-1024x307.jpg 1024w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park2-300x90.jpg 300w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park2-768x230.jpg 768w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park2-1536x460.jpg 1536w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park2.jpg 2035w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Discipline<\/h2>\n\n\n\n<p>When working \u201cfor yourself\u201d, a strong self discipline is required to keep going forward. And that is not always my greatest strength\u2026 Aware of that, I decided to take a few actions to help me stay on tracks:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Setting up short and realistic milestones. Everyday I was working on this project, I would start by setting daily objectives. Not too challenging, but also not too easy. Every week or month I would also do that but on a larger scope.<\/li><li>Involving people. Having a close circle of people following my project really helped me to keep going, as I had \u201cpeople to report to\u201d. I would like to thank them for their support (my family, my friends, the community on the discord!)<\/li><li>Setting the bar at the right height. I wanted to make something I was proud of, and yet not out of reach. I knew I had to overcome a lot of things, so I started very simple and added more layers of complexity as the project was moving forward.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"960\" src=\"https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park3-1024x960.jpg\" alt=\"\" class=\"wp-image-378\" srcset=\"https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park3-1024x960.jpg 1024w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park3-300x281.jpg 300w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park3-768x720.jpg 768w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park3-1536x1440.jpg 1536w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park3.jpg 2040w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Workflow<\/h2>\n\n\n\n<p>In order to reach my goals, I needed to set up a workflow that allowed me to quickly iterate and not lose time with annoying and repetitive technical tasks. Fortunately, Blender is a wonderful tool when it comes to this: It is easy to write scripts to make life easier and to set up an efficient work environment. Also an important time-saving strength that we sometimes forget to appreciate: It\u2019s SO FAST to load compared to <em>ahem<\/em> other tools that I won\u2019t name.<br>I also needed a \u201cwhat you see is what you get\u201d tool. I set up Blender\u2019s viewport to look as close as possible as what I would get in Unity. That helped me avoid bad surprises.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"322\" src=\"https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park4-1024x322.jpg\" alt=\"\" class=\"wp-image-379\" srcset=\"https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park4-1024x322.jpg 1024w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park4-300x94.jpg 300w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park4-768x241.jpg 768w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park4-1536x483.jpg 1536w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park4-2048x644.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Blender &#8211; Eevee<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"315\" src=\"https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park5-1024x315.jpg\" alt=\"\" class=\"wp-image-380\" srcset=\"https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park5-1024x315.jpg 1024w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park5-300x92.jpg 300w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park5-768x236.jpg 768w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park5-1536x473.jpg 1536w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park5.jpg 1989w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Unity &#8211; URP<\/figcaption><\/figure>\n\n\n\n<p><strong>Pipeline Blender to Unity<\/strong><\/p>\n\n\n\n<p>The pipeline I used is not revolutionary, but it did the job well. In order to keep things simple, I went for a low poly art style. To give the objects their colors, I used vertex colors. That way I didn\u2019t have to use diffuse textures for each asset, saving on memory usage. Most objects have a visible pattern, like wood or rocks. It is a simple map that is used across objects and blended with the vertex colors like so:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"655\" height=\"496\" src=\"https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park6.jpg\" alt=\"\" class=\"wp-image-381\" srcset=\"https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park6.jpg 655w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park6-300x227.jpg 300w\" sizes=\"auto, (max-width: 655px) 100vw, 655px\" \/><figcaption>Notice the \u201cpower\u201d node? It is necessary to convert the color space between Blender and Unity, as the project was set in linear. Without it, the vertex colors would appear all pale and greyish.<\/figcaption><\/figure>\n\n\n\n<p>I used this equivalent node setup on Blender:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"643\" src=\"https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park7-1024x643.jpg\" alt=\"\" class=\"wp-image-382\" srcset=\"https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park7-1024x643.jpg 1024w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park7-300x188.jpg 300w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park7-768x482.jpg 768w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park7.jpg 1055w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>I also added a soft grain effect on these pattern textures to add more visual interest.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"828\" src=\"https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park8-1024x828.jpg\" alt=\"\" class=\"wp-image-383\" srcset=\"https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park8-1024x828.jpg 1024w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park8-300x242.jpg 300w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park8-768x621.jpg 768w, https:\/\/www.mooneyestudios.com\/news\/wp-content\/uploads\/2021\/07\/Behind-the-Scenes_-Haven-Park8.jpg 1205w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>To export the object from Blender to Unity, I wrote a small script that sets up the FBX exporter with the right settings. For example, Unity and Blender use a different coordinate system, so the \u201capply transformation\u201d option needs to be set to True. The script also sets the correct export location. So basically, using one shortcut, I could export the selected asset to an FBX in the right folder, and that would instantly update it in Unity. I tried to keep the number of Blender scenes as minimum as possible, and instead made use of the collection system. I had only 4 main files<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>For nature elements,<\/li><li>For manmade objects (cabins, bridges, fences, props\u2026)<\/li><li>For characters<\/li><li>For characters animations<br>This allowed me to easily check the objects against the others to make sure I kept a good consistency across them. The exporter I wrote used each element\u2019s collection name to properly name the FBX file and place it directly in the right Unity folder. I thought about importing .blend files directly into Unity, but I prefered to keep the asset creation business separated.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Publishing<\/h2>\n\n\n\n<p>At the beginning of this journey, I was committed to publish the game all by myself. But a few weeks before the initial planned release, I was contacted by Mooneye Studios. They offered to partner and help me publish Haven Park. After some discussion, and seeing that the feeling was good, I decided to trust them with their experience. I\u2019m really happy with our collaboration, they truly helped the game reach a new level in terms of visibility and quality! Thank you guys!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion &amp; next steps<\/h2>\n\n\n\n<p>Overall, I\u2019m extremely happy with this experience. I met all my objectives. Game development is definitely something I will keep pursuing. I already started to think about the next game I\u2019ll make! I will conclude with 5 points about what I learned:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Keep your eyes on the target. Don\u2019t lose focus along the way. Don\u2019t fall to the temptation to restart over and over until it\u2019s \u201cthe perfect concept\u201d. There is no such thing. Start with a strong idea, then make it better as you move forward. Keep going!<\/li><li>When stuck on a specific aspect, put it aside and come back at it later.<\/li><li>Find a workflow that allows you to make fast iterations. From an update in a character rig to a build, it needs to be really fast<\/li><li>Fail fast. Challenge your ideas and try to \u201cbreak\u201d them as early as possible. If something has to fail, it must be quick, so you can move on to a better version of it.<\/li><li>Enjoy the journey! It\u2019s clich\u00e9 to say, but it really is more important than the destination. Find your routines to help you get out of the bed and start the day with precise goals! It\u2019s a strong way to keep you motivated!<\/li><\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Bio<\/h2>\n\n\n\n<p>I was born in Switzerland. I discovered Blender when I was 15 and immediately got hooked. I did a few animation shorts as an autodidact, then I moved to France to study 3D animation in an Art School. I obtained a Master degree in Art Direction. After that, I worked as a director at Cube in Paris, then on my animated series Barababor, in Luxembourg. I am now starting to develop games as an indie developer.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today we want to give the developer of our first published game &#8220;Haven Park&#8221; the stage and let him tell &hellip; <a href=\"https:\/\/www.mooneyestudios.com\/news\/games\/havenpark\/behind-the-scenes-of-haven-park\/\" class=\"btn btn-readmore\">Read More <span class=\"screen-reader-text\"> &#8220;A closer look behind the scenes of Haven Park&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":520,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-372","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-havenpark"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.mooneyestudios.com\/news\/wp-json\/wp\/v2\/posts\/372","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mooneyestudios.com\/news\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mooneyestudios.com\/news\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mooneyestudios.com\/news\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mooneyestudios.com\/news\/wp-json\/wp\/v2\/comments?post=372"}],"version-history":[{"count":12,"href":"https:\/\/www.mooneyestudios.com\/news\/wp-json\/wp\/v2\/posts\/372\/revisions"}],"predecessor-version":[{"id":519,"href":"https:\/\/www.mooneyestudios.com\/news\/wp-json\/wp\/v2\/posts\/372\/revisions\/519"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mooneyestudios.com\/news\/wp-json\/wp\/v2\/media\/520"}],"wp:attachment":[{"href":"https:\/\/www.mooneyestudios.com\/news\/wp-json\/wp\/v2\/media?parent=372"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mooneyestudios.com\/news\/wp-json\/wp\/v2\/categories?post=372"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mooneyestudios.com\/news\/wp-json\/wp\/v2\/tags?post=372"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}