{"id":129,"date":"2016-01-19T12:06:42","date_gmt":"2016-01-19T11:06:42","guid":{"rendered":"http:\/\/www.zoltane.com\/pages\/unreal\/tips-tricks\/"},"modified":"2016-02-23T09:57:32","modified_gmt":"2016-02-23T08:57:32","slug":"tips-tricks","status":"publish","type":"page","link":"https:\/\/zoltane.com\/pages\/unreal\/tips-tricks\/","title":{"rendered":"Tips &#038; Tricks"},"content":{"rendered":"<section class=\"wpb-content-wrapper\"><p>[vc_row row_type=\u201drow\u201d use_row_as_full_screen_section=\u201dno\u201d type=\u201dfull_width\u201d oblique_section=\u201dno\u201d text_align=\u201dleft\u201d css_animation=\u201d\u201d box_shadow_on_row=\u201dno\u201d][vc_column width=\u201d1\/2\u2033][vc_row_inner row_type=\u201drow\u201d type=\u201dfull_width\u201d use_row_as_full_screen_section_slide=\u201dno\u201d text_align=\u201dleft\u201d css_animation=\u201d\u201d box_shadow_on_row=\u201dno\u201d el_class=\u201darticle_column\u201d][vc_column_inner][vc_column_text]<\/p>\n<h5 style=\"text-align: center;\">2 channel diffuse textures<\/h5>\n<p>Certain types of diffuse textures have a wide range of lightness and saturation values but they vary little in terms of hue.<\/p>\n<p>We can exploit this property and pack the image into only two texture channel, complemented with a single color constant, allowing us to store arbitrary data in the remaining two channels of the image (normal XY, specular amount and roughness, etc).[\/vc_column_text]<a href=\"http:\/\/www.zoltane.com\/pages\/unreal\/tips-tricks\/2-channel-diffuse-textures\/\" target=\"_self\" class=\"qbutton  big_large_full_width icon_right\" style=\"margin: 12px 0px 0px 0px; \">Read more<\/a>[\/vc_column_inner][\/vc_row_inner][vc_row_inner row_type=\u201drow\u201d type=\u201dfull_width\u201d use_row_as_full_screen_section_slide=\u201dno\u201d text_align=\u201dleft\u201d css_animation=\u201d\u201d box_shadow_on_row=\u201dno\u201d el_class=\u201darticle_column\u201d][vc_column_inner][vc_column_text]<\/p>\n<h5 style=\"text-align: center;\">Normal map sharpening<\/h5>\n<p>I\u2019ve never liked how bilinear filtering makes normal maps resemble molten plastic when the camera gets too close. On certain types of surfaces like rock or rusty metal, this effect can be counteracted for some degree by applying a micro normal map. However when it comes to machine like assets with well defined, geometric features, that method doesn\u2019t help much so I tried a different approach.<\/p>\n<p>[\/vc_column_text]<a href=\"http:\/\/www.zoltane.com\/pages\/unreal\/tips-tricks\/normal-map-sharpening\/\" target=\"_self\" class=\"qbutton  big_large_full_width icon_right\" style=\"margin: 12px 0px 0px 0px; \">Read more<\/a>[\/vc_column_inner][\/vc_row_inner][vc_row_inner row_type=\u201drow\u201d type=\u201dfull_width\u201d use_row_as_full_screen_section_slide=\u201dno\u201d text_align=\u201dleft\u201d css_animation=\u201d\u201d box_shadow_on_row=\u201dno\u201d el_class=\u201darticle_column\u201d][vc_column_inner][vc_column_text]<\/p>\n<h5 style=\"text-align: center;\">Reflections in UDK<\/h5>\n<p>The reason why we see an object is because light is reflected off its surface. In realtime applications this single physical phenomenon must be approximated for performance reasons, so we end up mixing simplified models: the diffuse term simulates evenly scattered light, the specular highlight is a fake reflection of a light source for example. Sometimes we need to create really shiny materials and that\u2019s when texture reflections come in to play.<\/p>\n<p>[\/vc_column_text]<a href=\"http:\/\/www.zoltane.com\/pages\/unreal\/tips-tricks\/reflections-in-udk\/\" target=\"_self\" class=\"qbutton  big_large_full_width icon_right\" style=\"margin: 12px 0px 0px 0px; \">Read more<\/a>[\/vc_column_inner][\/vc_row_inner][\/vc_column][vc_column width=\u201d1\/2\u2033][vc_row_inner row_type=\u201drow\u201d type=\u201dfull_width\u201d use_row_as_full_screen_section_slide=\u201dno\u201d text_align=\u201dleft\u201d css_animation=\u201d\u201d box_shadow_on_row=\u201dno\u201d el_class=\u201darticle_column\u201d][vc_column_inner][vc_column_text]<\/p>\n<h5 style=\"text-align: center;\">Multipurpose fire material<\/h5>\n<p>When I started working on the material I had the following goals in mind:[\/vc_column_text]<\/p>\n<div class=\"ordered\">\n<ol>\n<li>Support for fires of different scales, from a single flame to massive fires. On the long run it\u2019s more efficient to maintain and learn to use one material instead of several single purpose ones.<\/li>\n<li>High texture resolution with smooth animation. My target is usually 720p@60Hz and that ruled out flipbooks which don\u2019t scale up well resolution and framerate wise.<\/li>\n<li>Adjustable complexity, visual quality vs performance tweaking.<\/li>\n<\/ol>\n<p><\/p>\n<\/div>[vc_column_text]Fulfilling these core requirements was simple enough after some experimentation and I ended up spending most of the time on optimizing and making the controlling parameters easy to handle.[\/vc_column_text]<a href=\"http:\/\/www.zoltane.com\/pages\/unreal\/tips-tricks\/fire-material\/\" target=\"_self\" class=\"qbutton  big_large_full_width icon_right\" style=\"margin: 12px 0px 0px 0px; \">Read more<\/a>[\/vc_column_inner][\/vc_row_inner][vc_row_inner row_type=\u201drow\u201d type=\u201dfull_width\u201d use_row_as_full_screen_section_slide=\u201dno\u201d text_align=\u201dleft\u201d css_animation=\u201d\u201d box_shadow_on_row=\u201dno\u201d el_class=\u201darticle_column\u201d][vc_column_inner][vc_column_text]\n<h5 style=\"text-align: center;\">Grayscale image compression<\/h5>\n<p>In realtime graphics grayscale images are often used as masks in shader and particle effects. In many cases (lens flares or vector masks for example) compression artifacts can become a problem.<\/p>\n<p>The following table is a comparison between a few of the compression schemes present in current UDK builds.[\/vc_column_text]<a href=\"http:\/\/www.zoltane.com\/pages\/unreal\/tips-tricks\/grayscale-image-compression\/\" target=\"_self\" class=\"qbutton  big_large_full_width icon_right\" style=\"margin: 12px 0px 0px 0px; \">Read more<\/a>[\/vc_column_inner][\/vc_row_inner][\/vc_column][\/vc_row]<\/p>\n<\/section>","protected":false},"excerpt":{"rendered":"<p>[vc_row row_type=\u201drow\u201d use_row_as_full_screen_section=\u201dno\u201d type=\u201dfull_width\u201d oblique_section=\u201dno\u201d text_align=\u201dleft\u201d css_animation=\u201d\u201d box_shadow_on_row=\u201dno\u201d][vc_column width=\u201d1\/2\u2033][vc_row_inner row_type=\u201drow\u201d type=\u201dfull_width\u201d use_row_as_full_screen_section_slide=\u201dno\u201d text_align=\u201dleft\u201d css_animation=\u201d\u201d box_shadow_on_row=\u201dno\u201d el_class=\u201darticle_column\u201d][vc_column_inner][vc_column_text] 2 channel diffuse textures Certain types of diffuse textures have a wide range of lightness and saturation values but they vary little in terms of hue. We can exploit&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":53,"menu_order":4,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-129","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/zoltane.com\/pages\/wp-json\/wp\/v2\/pages\/129","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zoltane.com\/pages\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/zoltane.com\/pages\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/zoltane.com\/pages\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zoltane.com\/pages\/wp-json\/wp\/v2\/comments?post=129"}],"version-history":[{"count":7,"href":"https:\/\/zoltane.com\/pages\/wp-json\/wp\/v2\/pages\/129\/revisions"}],"predecessor-version":[{"id":304,"href":"https:\/\/zoltane.com\/pages\/wp-json\/wp\/v2\/pages\/129\/revisions\/304"}],"up":[{"embeddable":true,"href":"https:\/\/zoltane.com\/pages\/wp-json\/wp\/v2\/pages\/53"}],"wp:attachment":[{"href":"https:\/\/zoltane.com\/pages\/wp-json\/wp\/v2\/media?parent=129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}