{"id":120056,"date":"2020-10-27T13:12:00","date_gmt":"2020-10-27T13:12:00","guid":{"rendered":"http:\/\/www.gamasutra.com\/view\/news\/372556"},"modified":"2020-10-27T13:12:00","modified_gmt":"2020-10-27T13:12:00","slug":"bending-the-world-of-blightbound-to-lower-the-horizon","status":"publish","type":"post","link":"https:\/\/sickgaming.net\/blog\/2020\/10\/27\/bending-the-world-of-blightbound-to-lower-the-horizon\/","title":{"rendered":"Bending the world of Blightbound to lower the horizon"},"content":{"rendered":"<p> <!-- Google Tag Manager --> <!-- End Google Tag Manager --> &lt;!&#8211;  &#8211;&gt;  <title>Gamasutra: Joost van Dongen&#8217;s Blog &#8211; Bending Blightbound&#8217;s world to lower the horizon<\/title>   <!--[if lt IE 9]&gt; <a href=\"http:\/\/html5shim.googlecode.com\/svn\/trunk\/html5.js\">http:\/\/html5shim.googlecode.com\/svn\/trunk\/html5.js<\/a> &lt;![endif]--> <!-- CSS -->                    <!-- link href=\"https:\/\/twimgs.com\/gamasutra\/css\/minified.css\" rel=\"stylesheet\" type=\"text\/css\" \/ -->    <!-- Mobile Specific Metas -->  <!-- Start Visual Website Optimizer Asynchronous Code --> <!-- End Visual Website Optimizer Asynchronous Code --> <!-- Start HeatMap.me Code --> <!-- End HeatMap.me Code --> <!-- Start: GPT Sync --> <!-- End: GPT -->    <!-- Eloqua tracking code --> <!-- End Eloqua tracking code -->  <!-- Google Tag Manager (noscript) -->  <!-- End Google Tag Manager (noscript) --> <!--Cookie banner code starts here --> <!--Cookie banner code ends here --> <!-- Informa Branding code goes here--> <\/p>\n<div id=\"iribbon-container\" class=\"content-body-wrapper\"> <button id=\"iribbon-title\" title=\"show\/hide\" class=\"inactive\">Informa<\/button> <\/p>\n<div id=\"iribbon-detail\" class=\"ribbon-hide\">\n<div id=\"iribbon-left\">\n<p>Gamasutra is part of the Informa Tech Division of Informa PLC<\/p>\n<\/p><\/div>\n<div id=\"iribbon-right\">\n<p>This site is operated by a business or businesses owned by Informa PLC and all copyright resides with them. Informa PLC&#8217;s registered office is 5 Howick Place, London SW1P 1WG. Registered in England and Wales. Number 8860726.<\/p>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p> <!-- Informa Branding code goes here--> <!-- Beginning Sync AdSlot 19 for Ad unit Gamasutra\/ ### size: [[2,2]] --> <!-- End AdSlot 19 --> <!-- Beginning Sync AdSlot 20 for Ad unit Gamasutra\/ ### size: [[7,7]] --> <!-- End AdSlot 20 --> <\/p>\n<div class=\"container\">\n<div id=\"container-main\" class=\"content-body-wrapper\"> <!-- Google Prestitial Ads start here--> <!-- Google Prestitial Ads end here--> <\/p>\n<div class=\"container bottom3\">\n<div class=\"span-7\"> <a href=\"https:\/\/www.gamasutra.com\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2020\/10\/bending-the-world-of-blightbound-to-lower-the-horizon.png\" alt=\"Gamasutra: The Art &amp; Business of Making Games\" width=\"243\" height=\"77\" border=\"0\"><\/a><img decoding=\"async\" alt=\"spacer\" src=\"https:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2020\/10\/bending-the-world-of-blightbound-to-lower-the-horizon.gif\" width=\"27\"> <\/div>\n<\/p><\/div>\n<div class=\"span-20\"> <!--end show phone--> <!--end showphone--> <!--end nav--> <\/p>\n<div class=\"span-20 last content_bg\">\n<div class=\"hide-phone\">\n<div class=\"span-4\">\n<div class=\"content_box_left\">\n<div class=\"leftcol\"> <!--member login--> <!--end memberlogin--> <!--begin social icons--> <!--begin social icons--> <!--end social icons--> <!--end social icons--> <!--begin page numbers--> <!--end page numbers--> <!--begin leftnav--> <!--end leftnav--> <!-- Beginning Sync AdSlot 3 for Ad unit Gamasutra\/ ### size: [[164,59]] --> <!-- End AdSlot 3 --> <!-- Beginning Sync AdSlot 4 for Ad unit Gamasutra\/ ### size: [[164,59]] --> <!-- End AdSlot 4 --> <!-- Beginning Sync AdSlot 5 for Ad unit Gamasutra\/ ### size: [[164,409]] --> <!-- End AdSlot 5 --> <!-- Beginning Sync AdSlot 9 for Ad unit Gamasutra\/ ### size: [[164,177]] --> <!-- End AdSlot 9 --> <!-- Beginning Sync AdSlot 11 for Ad unit Gamasutra\/ ### size: [[164,177]] --> <!-- End AdSlot 11 --> <!-- begin event tickers --> <!-- end event tickers --> <!--begin jobs--> <!--end jobs--> <!--begin blogs--> <!--end blogs--> <!--begin press releases--> <!--end press releases--> <!--begin calendar--> &lt;!&#8211; <\/p>\n<div class=\"header\"><img decoding=\"async\" alt=\"arrow\" src=\"https:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2020\/10\/bending-the-world-of-blightbound-to-lower-the-horizon-1.png\" width=\"22px\" height=\"20px\" \/><a href=\"http:\/\/www.gamasutra.com\/calendar\/calendar.php\">Calendar<\/a><\/div>\n<div class=\"leftnav bottom2\"> <a href=\"http:\/\/www.gamasutra.com\/calendar\/calendar.php\"><strong>View All<\/strong><\/a> &nbsp;&nbsp;&nbsp; <a href=\"http:\/\/www.gamasutra.com\/calendar\/calendar_submit.php\"><strong>Submit Event<\/strong><\/a> <\/p>\n<hr>\n<ul> <\/ul>\n<\/div>\n<p> &#8211;&gt; <!--end calendar--> <!--begin about--> <\/p>\n<div class=\"bottom2\"> <a href=\"https:\/\/www.gamasutra.com\/advertise\"> <img decoding=\"async\" src=\"https:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2020\/10\/bending-the-world-of-blightbound-to-lower-the-horizon.jpg\" alt=\"Sponsor\" border=\"0\" class=\"whiteTop\" width=\"177px\" height=\"60px\"> <\/a>\n<\/div>\n<p> <!--end about--> <!--begin network--> <\/p>\n<div class=\"leftnav_network bottom2\"> If you enjoy reading this site, you might also want to check out these UBM Tech sites: <\/p>\n<hr>\n<hr>\n<p> <br class=\"clear\">\n<\/div>\n<p> <!--end network--> <!--begin store--> <!--end store--> <\/div>\n<p><!--end leftcol--> <\/div>\n<\/div><\/div>\n<div class=\"span-16 last\">\n<div class=\"content_box_middle\"> <!-- InstanceBeginEditable name=\"BodyContent\" --> <\/p>\n<div class=\"page_item\">\n<div><a name=\"twitter_share\" href=\"http:\/\/twitter.com?status=RT @gamasutra: Bending Blightbound's world to lower the horizon http:\/\/www.gamasutra.com\/blogs\/JoostVanDongen\/20201026\/372506\/\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2020\/10\/bending-the-world-of-blightbound-to-lower-the-horizon-1.gif\" alt=\"Share on Twitter\" border=\"0\" height=\"20\"><\/a>  <span id=\"edit_post_link\"><\/span>&nbsp;&nbsp; <a href=\"https:\/\/www.gamasutra.com\/blogs\/rss\/\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2020\/10\/bending-the-world-of-blightbound-to-lower-the-horizon-2.gif\" width=\"15\" height=\"15\" border=\"0\" alt=\"RSS\"><\/a> <\/div>\n<hr>\n<div class=\"item_body mobile_image_transform\"> <strong><i><small> The following blog post, unless otherwise noted, was written by a member of Gamasutra\u0092s community.<br \/>The thoughts and opinions expressed are those of the writer and not Gamasutra or its parent company. <\/small><\/i><\/strong> <\/p>\n<hr>\n<p>In 3D games perspective is often treated as a given; a law of nature. But it doesn\u2019t have to be that way: with some shader trickery or clever modelling, perspective can be manipulated to achieve certain compositions that may not be realistic, but look more interesting and are still convincing to the player. One such example is how we kept the horizon on screen in our new game&nbsp;<a href=\"https:\/\/www.blightbound.com\/\" target=\"_top\" rel=\"noopener noreferrer\">Blightbound<\/a>&nbsp;by subtly bending the world.<\/p>\n<p><img decoding=\"async\" alt border=\"0\" data-original-height=\"383\" data-original-width=\"500\" src=\"https:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2020\/10\/bending-the-world-of-blightbound-to-lower-the-horizon-1.jpg\"><\/p>\n<p>At&nbsp;<a href=\"https:\/\/www.ronimo-games.com\/\" target=\"_top\" rel=\"noopener noreferrer\">Ronimo<\/a>&nbsp;we come from a world of 2D games. In 2D, composition can be whatever you like. That\u2019s why our art director Gijs Hermans may sometimes want to ignore standard perspective rules and instead looks at what he wants to achieve visually. Thus early in development Gijs came to me and said he wanted the camera to look down quite a bit, but still have the horizon in view. In fact, he wanted the horizon to be quite a bit below the top of the screen. His reasoning was that visuals look much better when you don\u2019t see just the floor most of the time. Het position of the horizon is an important tool for shaping a composition.<\/p>\n<p>The origin of this request is a clash that often happens in game development: pretty visuals versus gameplay clarity. Our artists spend a lot of time on achieving both goals simultaneously. A very successful example of this is the way gameplay objects and backgrounds are drawn in a different style in our previous game&nbsp;<a href=\"https:\/\/store.steampowered.com\/app\/703880\/Swords_and_Soldiers_2_Shawarmageddon\/\" target=\"_top\" rel=\"noopener noreferrer\">Swords &amp; Soldiers 2<\/a>, as I described in&nbsp;<a href=\"http:\/\/joostdevblog.blogspot.com\/2015\/05\/making-gameplay-stand-out-against-rich.html\" target=\"_top\" rel=\"noopener noreferrer\">this blogpost<\/a>.<\/p>\n<p>In a game where depth matters, like Blightbound, a low camera is problematic because it makes it difficult to see whether you are standing in front of an enemy or behind them. A high camera solves this, but a high camera removes the horizon from view, making the image a lot more boring.<\/p>\n<p><img decoding=\"async\" alt border=\"0\" data-original-height=\"680\" data-original-width=\"500\" src=\"https:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2020\/10\/bending-the-world-of-blightbound-to-lower-the-horizon-2.jpg\"><\/p>\n<p>When Gijs came to me with this request, I thought of two possible solutions: either give the camera a wider field-of-view, or bend the world to move the horizon down. We tried the easiest solution first: wide field-of-view. However, it turned out this needed to be set so wide that the entire perspective looked skewed. Extreme field-of-view often isn\u2019t very pretty and it definitely wasn&#8217;t in Blightbound.<\/p>\n<p><img decoding=\"async\" alt border=\"0\" data-original-height=\"670\" data-original-width=\"500\" src=\"https:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2020\/10\/bending-the-world-of-blightbound-to-lower-the-horizon-3.jpg\"><\/p>\n<p>The alternative I came up with is bending the world down the further it is from the camera. This is an effect that\u2019s used in a bunch of games to create a sense that the world is very small, making the world feel cutesy and funny. However, Blightbound is intended to be a dark fantasy game, definitely not something cute and funny, so we didn\u2019t want anything that extreme. I figured that with some tweaking it might be possible to achieve a more subtle version of this that still keeps the horizon in view but doesn\u2019t have the funny vibe.<\/p>\n<p><img decoding=\"async\" alt border=\"0\" data-original-height=\"234\" data-original-width=\"500\" src=\"https:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2020\/10\/bending-the-world-of-blightbound-to-lower-the-horizon-4.jpg\"><\/p>\n<p>My implementation of this effect is quite simple. In the vertex shader I bend down the world depending on the Z-position of the vertex in the world. The nice thing of implementing it this way is that our gameplay code and level design tools can assume a flat world, making them a lot simpler. The bending only exists during rendering, so gameplay logic doesn&#8217;t need to take it into account.<\/p>\n<p>A minor challenge in implementing this bend is how to handle lighting and shadows. When the camera moves forward and the world bends, we don\u2019t want the lighting on objects to change, since that would make the bending very obvious and would make the player focus on the backgrounds instead of on the gameplay. Also, objects in the background shouldn&#8217;t be more bright because they are rotated towards the light by the bend. My solution was to calculate all lighting, shadows and fog as if there is no world bend.<\/p>\n<p>Also, a little technical note: since the bend happens on the vertices, objects need to have enough vertices. A big square plane for the ground with no vertices in between can\u2019t be bent. Occasionally this caused bugs where a small object would float above a big object because the big object didn\u2019t have enough vertices to be bent correctly.<\/p>\n<p>The bend effect is quite fun to see in action when set to an extreme value. However, any kind of geometric deformation is quite noticeable when the camera moves, so we chose to fix the bend in the world instead of letting it move with the camera.<\/p>\n<p>[embedded content]<br \/><em>A few different settings for the bend, including the final one used in Blightbound.<\/em><\/p>\n<p>As you can see in the video, the bend effect is kept quite subtle in Blightbound. We didn\u2019t want that cutesy\/funny effect at all, since this is intended to be a dark fantasy game. Our level artist Ralph Rademakers tweaked the effect and the camera a lot until he got it to a point where it felt like there was no bend at all, just a natural camera. However, if you compare with and without bend, you can see that the bend makes a huge difference in what you actually see. And that\u2019s exactly how it was intended: achieve the desired composition but don\u2019t make it look like anything weird is going on.<\/p>\n<p><img decoding=\"async\" alt border=\"0\" data-original-height=\"320\" data-original-width=\"500\" src=\"https:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2020\/10\/bending-the-world-of-blightbound-to-lower-the-horizon-5.jpg\"><\/p>\n<p>And then came the fog! The bend effect was implemented when we hadn\u2019t figured out the lore of the world yet. We didn\u2019t know then that we would want to have so much fog. In fact, the working title of the game used to be AwesomeKnights instead of Blightbound! Once we finally decided on the lore we knew that the world of Blightbound is covered in \u201cblight\u201d, a corrupting fog. To match that, Ralph added a lot of fog to all the levels. This creates a great atmosphere, but\u2026 hides the horizon!<\/p>\n<p>Does that make the world bend useless? No, definitely not. It&#8217;s still used in quite a few levels to change the perspective and have a more horizontal view on the background, even if we can\u2019t see as far as before. It\u2019s a more subtle tool than originally intended, but still a very useful tool.<\/p>\n<p>I think the bend effect we used here is a wonderful example of the kind of graphics programming I enjoy most: looking at what\u2019s needed from an artistic standpoint, and then making tech that achieves that. I\u2019m personally not very interested in realistic rendering: 3D is just a tool to make cool art, whatever the shape or type. The bend technique used here makes no sense whatsoever from a physical standpoint, but it adds to making Blightbound a prettier, more compelling game.<\/p>\n<p><em>For more blogposts on development of Blightbound, Awesomenauts, Swords &amp; Soldiers, Cello Fortress, Proun, procedural music, my cello album and any of the other stuff I work on, check my dev blog at&nbsp;<a href=\"http:\/\/www.joostvandongen.com\/\">www.joostvandongen.com<\/a>.<\/em><\/p>\n<\/p><\/div>\n<hr>\n<div class=\"hide-phone\">\n<h3>Related Jobs<\/h3>\n<div class=\"stories_item\">\n<div class=\"thumb\"><a href=\"https:\/\/jobs.gamasutra.com\/job\/junior-gameplay-programmer-champaign-illinois-34589\"><img decoding=\"async\" src=\"https:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2020\/10\/bending-the-world-of-blightbound-to-lower-the-horizon-6.jpg\" alt=\"Deep Silver Volition\" width=\"120\"><\/a><\/div>\n<\/p><\/div>\n<div class=\"stories_item\">\n<div class=\"thumb\"><a href=\"https:\/\/jobs.gamasutra.com\/job\/ux-designer-espoo-34624\"><img decoding=\"async\" src=\"https:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2020\/10\/bending-the-world-of-blightbound-to-lower-the-horizon-3.gif\" alt=\"Remedy Entertainment\" width=\"120\"><\/a><\/div>\n<div class=\"title\"> <strong> Remedy Entertainment \u2014 Espoo, Finland <br \/>[10.30.20] <\/strong> <br \/><a href=\"https:\/\/jobs.gamasutra.com\/job\/ux-designer-espoo-34624\">UX Designer<\/a> <\/div>\n<\/p><\/div>\n<div class=\"stories_item\">\n<div class=\"thumb\"><a href=\"https:\/\/jobs.gamasutra.com\/job\/enemy-designer-frisco-texas-34641\"><img decoding=\"async\" src=\"https:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2020\/10\/bending-the-world-of-blightbound-to-lower-the-horizon-2.png\" alt=\"The Gearbox Entertainment Co.\" width=\"120\"><\/a><\/div>\n<div class=\"title\"> <strong> The Gearbox Entertainment Co. \u2014 Frisco, Texas, United States <br \/>[10.29.20] <\/strong> <br \/><a href=\"https:\/\/jobs.gamasutra.com\/job\/enemy-designer-frisco-texas-34641\">Enemy Designer<\/a> <\/div>\n<\/p><\/div>\n<div class=\"stories_item\">\n<div class=\"thumb\"><a href=\"https:\/\/jobs.gamasutra.com\/job\/senior-visual-effects-artist-frisco-texas-34640\"><img decoding=\"async\" src=\"https:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2020\/10\/bending-the-world-of-blightbound-to-lower-the-horizon-2.png\" alt=\"The Gearbox Entertainment Co.\" width=\"120\"><\/a><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<hr><\/div>\n<p> <!-- InstanceEndEditable --> <\/div>\n<p><!--end contentbox-->\n<\/div>\n<p><!--end span-16--> <\/div>\n<p> <br class=\"clear\"> <\/div>\n<p><!--end span-21--> <!--begin right sidebar--> <!--end right sidebar--> &lt;!&#8211; <\/div>\n<p> Extra Div &#8211;&gt; <!-- Beginning Sync AdSlot 21 for Ad unit Gamasutra\/ ### size: [[8,2]] --> <!-- End AdSlot 21 --> <!-- Beginning Sync AdSlot 22 for Ad unit Gamasutra\/ ### size: [[8,4]] --> <!-- End AdSlot 22 --> <!-- Beginning Sync AdSlot 23 for Ad unit Gamasutra\/ ### size: [[4,4]] --> <!-- End AdSlot 23 --> <br class=\"clear\"><\/p><\/div>\n<p><!--end content-body-wrapper--> <\/div>\n<p><!--end container--><br \/>\n<!--begin footer--> <!--end footer--> <!-- SiteCatalyst code version: H.21.\nCopyright 1996-2010 Adobe, Inc. All Rights Reserved\nMore info available at http:\/\/www.omniture.com --> <a href=\"http:\/\/www.omniture.com\" title=\"Web Analytics\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2020\/10\/bending-the-world-of-blightbound-to-lower-the-horizon-4.gif\" height=\"1\" width=\"1\" border=\"0\" alt><\/a><!--\/DO NOT REMOVE\/--><br \/>\n<!-- End SiteCatalyst code version: H.21. --> <!-- Begin ADSNATIVE Code --> <!-- End ADSNATIVE Code --> <!--Begin Ad script for pixel --> <!--END Ad script for pixel -->  <\/p>\n","protected":false},"excerpt":{"rendered":"<p>&lt;!&#8211; &#8211;&gt; Gamasutra: Joost van Dongen&#8217;s Blog &#8211; Bending Blightbound&#8217;s world to lower the horizon Informa Gamasutra is part of the Informa Tech Division of Informa PLC This site is operated by a business or businesses owned by Informa PLC and all copyright resides with them. Informa PLC&#8217;s registered office is 5 Howick Place, London [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":120057,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[],"class_list":["post-120056","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"_links":{"self":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts\/120056","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/comments?post=120056"}],"version-history":[{"count":0,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts\/120056\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/media\/120057"}],"wp:attachment":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/media?parent=120056"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/categories?post=120056"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/tags?post=120056"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}