{"id":3714,"date":"2015-09-02T09:47:17","date_gmt":"2015-09-02T08:47:17","guid":{"rendered":"http:\/\/t-machine.org\/?p=3714"},"modified":"2015-09-02T09:51:03","modified_gmt":"2015-09-02T08:51:03","slug":"unity3d-hardware-usage-implications-summer-2015","status":"publish","type":"post","link":"http:\/\/new.t-machine.org\/index.php\/2015\/09\/02\/unity3d-hardware-usage-implications-summer-2015\/","title":{"rendered":"#Unity3d hardware usage + implications &#8211; Summer 2015"},"content":{"rendered":"<p>There&#8217;s tonnes of blogs out there, so I only talk about the bits that other people have missed, or were too polite or inexperienced to cover. Often that means I&#8217;m the one pointing out the flaws (most people don&#8217;t want to write bad things. Screw that; ignoring the bad points does you no favours!).<\/p>\n<p>Sometimes I get to talk about the good bits that &#8211; sadly &#8211; few people have noticed. Here&#8217;s one of those.<br \/>\n<!--more--><\/p>\n<h2>Unity hardware survey<\/h2>\n<p>Every quarter, Unity publishes <a href=\"http:\/\/hwstats.unity3d.com\/mobile\/\">a regular round-up of what hardware people are using to run Unity3D games etc<\/a> (I normally see it via <a href=\"http:\/\/twitter.com\/arasp\">@ArasP<\/a> &#8211; I think he prepares the page each time?). This is hugely important.<\/p>\n<p>There are flaws in Unity that affect us as developers &#8211; both the software (bugs, architectural problems) and the company (tech strategies, documentation ethos). A lot of the time we have to second-guess what has happened (&#8220;why is this bug happening? Can we workaround it?&#8221;) and what will happen (&#8220;how likely is it that Unity will fix it? Will similar bugs happen again in future?&#8221;). We need data to do this extrapolation &#8211; and the hardware survey is a valuable primary source that it&#8217;s worth learning to use.<\/p>\n<p><strong>Thanks, Unity, for publishing this &#8211; don&#8217;t stop! It&#8217;s a great resource for all Unity game developers!<\/strong><\/p>\n<p>For instance &#8230; if you find a major rendering bug on a hardware platform that you suspect is very expensive to fix, and that platform is 0.001% of the userbase &#8212; you&#8217;re better-off working around it with changes to your game-design, than filing a bug report and waiting for Unity to eventually fix it. With the best will in the world, such a small impact \/ high cost task is always going to be low on the todo-list, and lose out to the thousands of high-impact \/ low cost bugfixes they&#8217;re working on instead.<\/p>\n<h2>Mobile: Android is 70% of all gaming phones<\/h2>\n<p>&#8230;and iOS is the remaining 30%.<\/p>\n<h3>Windows Phone?<\/h3>\n<p>What is this &#8220;Windows Phone&#8221; that you speak of?<\/p>\n<p>(building for WP8 on Unity didn&#8217;t work properly last time I tried &#8211; you had to do a bunch of manual fixes to workaround some Microsoft policy on library inclusions. Does anyone care?<\/p>\n<p>It certainly matters &#8211; I refunded someone an asset-store purchase because they were struggling to get WP working, and neither I nor they were 100% if my code was causing the problem &#8211; the WP process was a bit odd. <\/p>\n<p>But does it matter enough? No. I&#8217;d rather do the odd refund \/ freebie for WP builders than have Unity waste time they could be fixing the big bugs)<\/p>\n<h3>If you have an Android bug on more than one phone<\/h3>\n<p>&#8230;I&#8217;m betting it&#8217;ll get fixed quickly. In practice, most Android bugs are one manufacturer (e.g. Samsung, I&#8217;m lookig at you) or one chipset (e.g. Tegra); if you can show it crosses manufacturers or chipsets = win.<\/p>\n<p>Or if you can show it&#8217;s Android OS version-dependent: there is a large block of users for each version, and aside from the x.0 release, they don&#8217;t shrink much.<\/p>\n<h2>Multi-threading<\/h2>\n<p>5 years ago it was embarassing that Unity was still a hardcoded single-threaded game-engine; today I don&#8217;t even have the words.<\/p>\n<p>Look at that graph: <strong>6%<\/strong> of <a href=\"http:\/\/hwstats.unity3d.com\/mobile\/cpu.html\">mobile devices<\/a> and <strong>1%<\/strong> of <a href=\"http:\/\/hwstats.unity3d.com\/pc\/cpu.html\">desktop devices<\/a> are single-threaded. Unity can&#8217;t hold out as single-threaded for much longer, surely?<\/p>\n<p>More importantly &#8211; since they have held out so long &#8211; look at the pace of change. In the last 12 months, both mobile (32% -&gt; 47%) and desktop (40% -&gt; 60%) have greatly increased the percentage of devices that have <em>four or more<\/em> threads.<\/p>\n<p>If the engine didn&#8217;t get a core re-write and become fully threadsafe soon &#8230; it&#8217;d be time to abandon it, I think. I am convinced multi-threading will see big catch-up improvements in Unity in the next 6 months. Unity corp has the courage to roll-out all the non-backwards-compatible changes they do each major release each 12-18 months. I don&#8217;t believe they lack the courage to re-write the core &#8230; e.g. because they&#8217;ve decided it&#8217;s too amazingly expensive.<\/p>\n<p>If they couldn&#8217;t do it, we as game-develoeprs would abandon their engine in favour of a modern one that is not hamstrung.<\/p>\n<h2>Mobile GPUs: a shattered space<\/h2>\n<p>Android fragmentation <em>per se<\/em> is not a problem &#8211; despite the many naive commentators who love to line up and say &#8220;there&#8217;s over 9,000 different hardware devices!&#8221;. 9,000 isn&#8217;t a problem; 9,000 with equal market-share is a problem.<\/p>\n<p>GPU&#8217;s <a href=\"http:\/\/hwstats.unity3d.com\/mobile\/gpu.html\">are looking like a 4-way race of equivalent shares<\/a> &#8211; nightmare for developers. And they overlap in very non-predictable ways &#8211; some of the lowest-end devices have hardware specs of the high-end devices. Previously, the ImgTec share was split into multiple radically different abilities &#8211; but they were monotonically better: each was always considerably better than the previous. With ImgTec declining, deciding what rendering-path to use is even less a &#8220;if \/ then \/ else&#8221; thing, but more a complex balancing-act of heuristics.<\/p>\n<p>At this point, I&#8217;m thankful that Unity takes care of it for me.<\/p>\n<p>To be fair: Unity&#8217;s mobile performance is usually terrible, but I&#8217;m always grateful that it WORKS at all &#8211; i.e. renders what I expected to see! (that&#8217;s a very valuable point to start from when writing your own usable shaders to replace the Unity ones)<\/p>\n<p>&#8230;But <strong>I haven&#8217;t shipped anything to mobile that uses the new rendering pipeline &#8211; GI etc<\/strong>. My suspicion &#8211; given all the above, and the modifications to shader development in Unity 5 &#8211; is that we&#8217;ll see mobile render performance on Unity over the next 12-24 months catching-up to be within 20-30% of what it ought to be, across the board. Or it may be there already (that&#8217;s not what I&#8217;ve heard on the grapevine of people doing high-end mobile games, but rumour is rumour &#8211; if you have any published sources on this, please share!)<\/p>\n<p>i.e. &#8220;more than good enough&#8221; for all except the biggest game projects (all of whom are writing their own shaders, and customizing the render pipeline, anyway &#8211; or certainly should be! If you&#8217;re a big project, you should be pushing the tech envelope, not waiting for a game-engine company to do it for you!)<\/p>\n<h2>Windows, &#8230; and DX10<\/h2>\n<p>Can you ship DX10-only assets yet? 27% of end-users say &#8220;no&#8221;. Games may decide to drop that quarter of their sales, but asset-authors (who often take the easy route) still have to support older generations of DX, or get slammed by unhappy purchasers.<\/p>\n<h3>Apple, what happens when you **** on gamers?<\/h3>\n<p>Answer: &#8220;two thirds of them stop using OS X for games&#8221;, maybe?<\/p>\n<p>I don&#8217;t know what&#8217;s caused that drop &#8211; in my experience, most of Apple&#8217;s actions against computer-owners were 2-4 years ago (deliberately selling GPUs that had already been end-of-lifed by the manufacturer, being very slow to update their graphics drivers, making laptops non-fixable, non-upgradeable, etc).<\/p>\n<p>Anyone else know?<\/p>\n<h3>64bit vs 32bit<\/h3>\n<p>Apple went all-in here a long time ago; Microsoft somehow is still carrying 38% of users on 32bit. That would be all the Windows XP users, then.<\/p>\n<p>Why are they still using XP? Guess: a lot of them can&#8217;t upgrade. Many GPU&#8217;s that run most games fine (on medium or low quality settings, but still look great) didn&#8217;t get updated drivers for Windows7 and Windows8. I&#8217;ve got a gaming PC that still runs XP for exactly this reason &#8211; Windows 8 is installed, but without a graphics driver, it&#8217;s impossible to play any games (thanks, AMD! Althought nVidia seems to be equally as bad).<\/p>\n<p>And if you look at the games industry today, &#8220;sales are based on graphical effects&#8221; is no longer the all-encompassing thing it used to be. Graphics are now good enough that often old hardware is fine &#8211; the game studio can focus spending money on story, artistic styling, gameplay, etc.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>There&#8217;s tonnes of blogs out there, so I only talk about the bits that other people have missed, or were too polite or inexperienced to cover. Often that means I&#8217;m the one pointing out the flaws (most people don&#8217;t want to write bad things. Screw that; ignoring the bad points does you no favours!). Sometimes [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[63,13,9,14,59,51,67],"tags":[],"_links":{"self":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/posts\/3714"}],"collection":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/comments?post=3714"}],"version-history":[{"count":5,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/posts\/3714\/revisions"}],"predecessor-version":[{"id":3719,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/posts\/3714\/revisions\/3719"}],"wp:attachment":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/media?parent=3714"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/categories?post=3714"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/tags?post=3714"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}