Live data from Hacker News

Why I left Unity

richg42.blogspot.com

11–20 of 27 posts

Re: Why I left Unity

#12

I am confused how some can proclaim to love Seattle so much but only visit it three times in six years. The rest of the article is even more confusing. There is not much substance.

He says that he loves Seattle NOW that he LIVES in it.

When he had to live elsewhere in Washington due to work, he only had few chances to visit it (those "3 times in 6 years"), so he didn't get the chance to appreciate it back then.

What's confusing about it?

(Besides the fact that even if somebody already loved some place very much, there's nothing contradictory about them still only managing to visit it only a few times over 6 years, or even not once -- if they had too much other stuff to do. There are people who haven't took a holiday in 10 years, much less 6 -- and even when they did, they might go somewhere else, e.g. to somewhere they have family, or to some beach ladden place).

Re: Why I left Unity

#13

I've never thought of Bellevue as a barren wasteland, wonder why he has that characterization.

Well, he says compared to Seattle, not Sao Paolo, and he probably means culturally, shopping, things to do wise, etc...

Re: Why I left Unity

#14
post #5
post #2

"Imagine the kinds of amazing new software that could be created in alternative cultural environments."

Game development - looking across the aisle from the Linux world - is such an insanely backwards place. Everyone reinvents everything, most developer shops refuse to even use the standard library implementation of whatever compiler they are using, and the entire process is a grindhouse for millions of lines of code, thousands of 3D models, textures, shaders, music, and dialog and all of it often never even sees the l…

[deleted]

Re: Why I left Unity

#17
post #5
post #2

"Imagine the kinds of amazing new software that could be created in alternative cultural environments."

Game development - looking across the aisle from the Linux world - is such an insanely backwards place. Everyone reinvents everything, most developer shops refuse to even use the standard library implementation of whatever compiler they are using, and the entire process is a grindhouse for millions of lines of code, thousands of 3D models, textures, shaders, music, and dialog and all of it often never even sees the l…

I've worked in game development in various capacities since the 80s. While I agree with your sentiment, a lot of your points are incorrect and I feel deserve a response. Sorry about the length.

Firstly, the reason why people didn't/don't use the STL is for a long time it was garbage for games. The data structures and allocators were huge offenders. If you've done any real game development, especially in the more resource constrained days, used std::vector was terribly inefficient and made no sense. This is why studios all wrote a lot of the same lower-level code. As to why they didn't share this code, it's just the nature of the business, however a lot of the performance of certain libraries over the years was highly tuned to the individual game.

Generally, games don't generate much reusability. Formats for assets change over the years, compression improves, resolution goes up, music chips improved, and so on. Even today things might have slowed-down, but programs used to produce assets make the level of effort of rehashing old assets not so worthwhile. Game studios that have tried to reuse things were often criticized for recycling when detected. The irony here is that this is actually justification for what you are saying - the assets aren't worth much long-term, so you might as well give them away along with the editors and level construction.

An important thing you're forgetting though is a lot of editors and tools used in game development are very one-off and shoddy. As a studio, you simply don't have time to sit there and write a perfect UI or even unity-like UI for your tools. Sure, it happens sometimes, especially when a tool is upgraded game-by-game, but generally tools are fire and forget and often given to the lower-skilled team members. I've rarely worked with game dev tools that were not full of bugs and woefully incomplete, but this is just the nature of the beast when you have limited time and budget - you don't spend it all on making perfect tools. This alone I suspect prevents many studios from releasing things to the public because the tools are very fragile, buggy, imperfect, incomplete, and so-on that it's almost embarrassing for some to see the light of day and too much maintenance for the benefit for others.

Regarding engines, I'm not sure what the gaming public's obsession with engines is. For well-tooled and documented engines, you have various degrees of offerings these days ranging from Unreal to CryEngine to Unity to other smaller, but still good engines. Those games with "custom" engines are probably no where near as useful. Sure, releasing the source would allow customizing and modding an individual game further, but again there's a lot of factors that go into this ranging from incomplete/broken pieces to game-specific hacks to lack of testing and so on. Unless a studio is in the business of releasing game engines and tools, it's hard to justify the risks. Often the copyrights and other things are not even owned anyway by the people who want to release them, so there's nothing you can do for example when your parent company or publisher views each and every line of code as some secret intellectual property.

What really bugs me though is why people think that game engines are some magical thing. What is a game engine even? In my experience, in many game codebases it is hard to draw a line between "engine" and "game." Sure you can set out to do this from the start in your architecture, but most of the time it won't happen that way when you are under the gun. The best you can do maybe is circle back and architect/extract things better post-release, which no one generally gets paid to do (unless selling the engine). Even then, the engine is not some magical thing that makes the entire game work. An engine can be anything from a way of handling assets + some graphics libraries and input handling to only graphics libraries to a stack of glued together middleware and other libraries. You don't just plug-in assets, components, and a few lines of logic and hit "run." Although I've worked on things that resemble this and those tend to be the better designed systems, the truth is in especially older games, that doesn't happen. Even when using things like Unreal, a studio may plug-in their own pieces where possible and the line between what is and is not the engine gets blurred. You can definitely release a lot of it as a package that will work for the intended purposes of things like edit levels and characters, but often there's so much cruft and code-stink, it isn't easy.

In general, some of the most elegant and some of the worst code I've ever seen is in games. The goal of most game studios is to release a fun game for profit, not to produce beautiful code and mod tools for the community. For whatever reason with games, fans forget how programs work and the fact there are real people trying to make a living behind all of these. Sure, many game programmers would love to see their work used even for free and would even donate their time to help out the community, but it's more of a fantasy than a reality. I'd work on 1000 things if I didn't have to worry about putting food on the table and I wager most other developers would. At the end of the day, even though it is games, it's still a job and people and companies have only so much time, money, and legal options.

Re: Why I left Unity

#18
post #12

I am confused how some can proclaim to love Seattle so much but only visit it three times in six years. The rest of the article is even more confusing. There is not much substance.

He says that he loves Seattle NOW that he LIVES in it. When he had to live elsewhere in Washington due to work, he only had few chances to visit it (those "3 times in 6 years"), so he didn't get the chance to appreciate it back then. What's confusing about it? (Besides the fact that even if somebody already loved some place very much, there's nothing contradictory about them still only managing to visit it only a few…

The implication for me was that it was odd since he worked in Bellevue at Unity's offices. If it's true that he worked in their Bellevue offices, Seattle is literally a 10-minute drive away.

Your points are definitely fair considerations, but even when I was working long hours at Microsoft's Redmond campus, I was very aware of what Seattle had to offer that I was missing out on.

It seems quite a shame that it took 6 years to discover the place next door. I'm glad he's discovered it now, though.

Re: Why I left Unity

#19
post #5
post #2

"Imagine the kinds of amazing new software that could be created in alternative cultural environments."

Game development - looking across the aisle from the Linux world - is such an insanely backwards place. Everyone reinvents everything, most developer shops refuse to even use the standard library implementation of whatever compiler they are using, and the entire process is a grindhouse for millions of lines of code, thousands of 3D models, textures, shaders, music, and dialog and all of it often never even sees the l…

Reinvention is vital for evolution, right?

Is the "success" of id Software an obvious result of open-source acculteration or is it an anomaly? I'd say the latter...

Re: Why I left Unity

#20
post #6
post #5

Earlier quoted context omitted.

Game development - looking across the aisle from the Linux world - is such an insanely backwards place. Everyone reinvents everything, most developer shops refuse to even use the standard library implementation of whatever compiler they are using, and the entire process is a grindhouse for millions of lines of code, thousands of 3D models, textures, shaders, music, and dialog and all of it often never even sees the l…

Those were my impressions moving from the open source / web world into games too. It surprises me still how little is shared in terms of reusable libraries, and often how little attention is given to reusability beyond a single project's scope. Automated testing too. Those habits feel like a super power now, because at this point I naturally think in those terms and build accordingly. We have quite a decent toolkit f…

Often libraries are far too specialized to share or as you point out, have dependencies/licensing that prevent open-sourcing/sharing.

For example I've written various entity/component allocators, pools, and free-list implementations that run ultra-fast and are reusable across almost any game that needs an entity system, but almost each one is optimized for the performance characteristics of the target game. When it comes to game dev, you generally can get much better performance by writing things for the purpose. Usually reusability and performance are at odds in these cases. That might sound counter-intuitive to some in the web world, but it's a fact.

Even in website, you are better off doing things for example like pooling in garbage collected languages, avoiding extra allocations, and using more primitive data structures. This of course makes the code harder to read, test, maintain, etc. so developers in these cases tend not to do it or even be ignorant of these techniques. In games, you do things all the time for your specific use-cases and this really impacts testing and reusability.

It sounds counter-intuitive, but over the years I've learned in most cases reusing things in games is a fantasy only inexperienced developers get hung-up on. That doesn't mean nothing gets reused, rather what tends to happen is you learn from your mistakes/drawbacks of previous code and rewrite it better. In effect, you are reusing the code but it's not a literal drag and drop/cut and paste into a new project. Over time, if something is really solid and doesn't have too many performance/usability drawbacks, it may finally make its way into some sort of cross-project more drop-in library. An example I've directly used EA STL. Even when you reuse something though, people tend to do the equivalent of fork it per project, again limiting reusability.

I suppose in the age of better hardware with tons more ram, some of these concerns may be going away if your target platform is PC, but with mobile, more resource starved vs pc (ex: Nintendo 3ds) and embedded-like platforms gaining popularity, inevitably things circle back to the direction of optimizing per game and per hardware which hurts reusability. Is it really that valuable for example to dig up some library you used one 1 game in the lifecycle of the ps3 when you've already moved to the ps4 for example? Probably not for most developers unless you have a large window between your game start time and the platform lifecycle. Even on PC this is a problem as everything from graphics APIs to average hardware can obsolete a lot of what you've done or make it relatively inefficient/primitive in a new project.

Post reply on HN