{"id":835,"date":"2015-01-23T18:56:05","date_gmt":"2015-01-24T00:56:05","guid":{"rendered":"http:\/\/elysianshadows.com\/updates\/?p=835"},"modified":"2015-02-02T16:06:51","modified_gmt":"2015-02-02T22:06:51","slug":"estk-devlog-001","status":"publish","type":"post","link":"http:\/\/elysianshadows.com\/updates\/estk-devlog-001\/","title":{"rendered":"ESTk DevLog 001: Entities, Shaders, and Bumpmaps"},"content":{"rendered":"<p><strong>In an attempt to continually keep our backers updated, our team members educated, and my own narcissism satiated, I am hereby starting a blog series for all of my low-level endeavors developing the Elysian Shadows engine and toolkit<\/strong>. This will also serve as a changelog for our beta backers, once we start handing out test builds.<\/p>\n<p>ESTk &#8220;Sex and Candy&#8221; release is our first attempt at combining our engine and toolkit into a single piece of software, allowing us to create our worlds as we play through them, all completely in-game. The biggest challenge we&#8217;ve faced during our development is the lack of tools for the kind of 2D\/3D dynamic perspective and dynamic lighting engine we&#8217;ve created to power Elysian Shadows. We&#8217;ve opted to roll our own with the focus of offering artists and level designers a set of tools allowing them to easily take full advantage of our powerful engine and hide its internal complexities (Tyler and I can deal with that shit).<\/p>\n<p><!--more--><\/p>\n<p>I&#8217;m working full-time as an art and level-design slave right now, shitting out new builds basically every day as new bugs are found and new features are requested. It&#8217;s paramount that ESTk becomes streamlined for our workflow, as this could save us potentially hundreds of man-hours in the long run. The scope of ES is too large and our lofty goals are too grand for mediocrity.<\/p>\n<p>The best engine in the world is essentially worthless if it takes a low-level computer engineer to create anything worthwhile with it. It&#8217;s the level designers, artists, musicians, and content creators who are realizing your creative vision. These are the guys who are truly validating the beauty and elegance of your engine.<\/p>\n<p>Anyway, enough game engine philosophy. Here&#8217;s the bugs fixed with the latest build:<\/p>\n<ul>\n<li>Entity transform properties are correctly represented within Selection View<\/li>\n<li>Normal-map offset for tiles on the FRONT_PLANE has been fixed.<\/li>\n<li>Tile decorations have been drastically unfucked.<\/li>\n<li>Collider offset when selecting elevated entities has been fixed.<\/li>\n<li>Toolkit doesn&#8217;t allow you to attempt to open two simultaneous projects.<\/li>\n<li>Entities can be selected in-scene without ESTk being in a running state.<\/li>\n<li>Sheet View tile decoration font color matches Map View decoration font.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<div class=\"post-image\"><img decoding=\"async\" src=\"http:\/\/elysianshadows.com\/updates\/wp-content\/uploads\/2015\/01\/Screen-Shot-2015-01-23-at-12.43.04-PM.png\" alt=\"projectError\" \/><\/div>\n<div class=\"post-caption\">The new tile decorations respect the tiles&#8217; 3D orientation&#8230; Oh, and trying to open a project while one is already open greets you with a friendly message!<\/div>\n<div class=\"post-image\"><img decoding=\"async\" src=\"http:\/\/elysianshadows.com\/updates\/wp-content\/uploads\/2015\/01\/PatrickBug.jpg\" alt=\"patrickBug\" \/><\/div>\n<div class=\"post-caption\">Patrick found a particularly elusive bug causing orthogonal normal maps to not quite meet correctly on orthogonal planes. After several hours of debugging, I had just forgotten to normalize a single vector before shader submission. Fuck.<\/div>\n<div class=\"post-image\"><img decoding=\"async\" src=\"http:\/\/elysianshadows.com\/updates\/wp-content\/uploads\/2015\/01\/Screen-Shot-2015-01-23-at-6.18.19-PM.png\" alt=\"normalMapBugFix\" \/><\/div>\n<div class=\"post-caption\">Now it&#8217;s beautiful. Notice the smooth lighting transition between tiles.<\/div>\n<p>I also implemented what I think are some particularly\u00a0useful and bitchin&#8217; features. Most of them are to make our artist&#8217;s life easier&#8230; Even though he insists on making mine harder&#8230;<\/p>\n<ul>\n<li>Hidden Entity toggle and dropdown (settings saved)<\/li>\n<li>Remap main texture unit to visualize normal and specular maps<\/li>\n<li>Toggle on and off texture mapping (texture, normal, specular)<\/li>\n<li>Dynamically reload shaders<\/li>\n<\/ul>\n<div class=\"post-image\"><img decoding=\"async\" src=\"http:\/\/elysianshadows.com\/updates\/wp-content\/uploads\/2015\/01\/Screen-Shot-2015-01-23-at-6.27.37-PM.png\" alt=\"normalMapVisual\" \/><\/div>\n<div class=\"post-caption\">Using the normal map&#8217;s texture unit rather than the main texture&#8217;s when rendering the map. Very useful for visually debugging hand-drawn normal maps by moving lights around in the scene.<\/div>\n<p>&nbsp;<\/p>\n<div class=\"post-image\"><img decoding=\"async\" src=\"http:\/\/elysianshadows.com\/updates\/wp-content\/uploads\/2015\/01\/Screen-Shot-2015-01-23-at-6.29.19-PM.png\" alt=\"hiddenEntities\" \/><\/div>\n<div class=\"post-caption\">We are now able to flag any entity managed internally with an underscore to make it a &#8220;hidden&#8221; entity and prevent users from fucking with it. There&#8217;s a dropdown option to list these as well, if you wish to debug.<\/div>\n<p>&nbsp;<\/p>\n<div class=\"post-image\"><img decoding=\"async\" src=\"http:\/\/elysianshadows.com\/updates\/wp-content\/uploads\/2015\/01\/Screen-Shot-2015-01-23-at-6.23.59-PM.png\" alt=\"reloadShaders\" \/><\/div>\n<div class=\"post-caption\">Dynamically reload shaders and restore GPU-state at run-time. This is extremely useful when debugging GPU code. You can see the engine reloading in the log. Ignore the error, that uniform doesn&#8217;t exist.<\/div>\n<p>Anyway&#8230; It&#8217;s Friday night&#8230; I&#8217;m sitting here writing a blog update on engine development&#8230; I regret nothing.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In an attempt to continually keep our backers updated, our team members educated, and my own narcissism satiated, I am hereby starting a blog series for all of my low-level endeavors developing the Elysian Shadows engine and toolkit. This will also serve as a changelog for our beta backers, once we start handing out test [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[97,1],"tags":[29,106,20,22,15,107],"class_list":["post-835","post","type-post","status-publish","format-standard","hentry","category-development-blog","category-uncategorized","tag-dreamcast","tag-engine-development","tag-level-editor","tag-opengl","tag-qt","tag-shaders"],"_links":{"self":[{"href":"http:\/\/elysianshadows.com\/updates\/wp-json\/wp\/v2\/posts\/835","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/elysianshadows.com\/updates\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/elysianshadows.com\/updates\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/elysianshadows.com\/updates\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/elysianshadows.com\/updates\/wp-json\/wp\/v2\/comments?post=835"}],"version-history":[{"count":6,"href":"http:\/\/elysianshadows.com\/updates\/wp-json\/wp\/v2\/posts\/835\/revisions"}],"predecessor-version":[{"id":888,"href":"http:\/\/elysianshadows.com\/updates\/wp-json\/wp\/v2\/posts\/835\/revisions\/888"}],"wp:attachment":[{"href":"http:\/\/elysianshadows.com\/updates\/wp-json\/wp\/v2\/media?parent=835"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/elysianshadows.com\/updates\/wp-json\/wp\/v2\/categories?post=835"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/elysianshadows.com\/updates\/wp-json\/wp\/v2\/tags?post=835"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}