Category Archives: rant

Why I no longer use Google AdSense

When I started this website I signed up for Google AdSense. Chuck a couple of unobtrusive ads on the page. One on the sidebar, one at the footer. Nothing sinister. Might help cover hosting costs, right?

As it turns out though, nobody who visits my website is stupid enough to click on them. My total AdSense “earnings” since January are still less than a dollar. They don’t even pay out until you get $150.

Total AdSense earnings over a 3 month period.
Total AdSense earnings over a 3 month period.

The daily click-through rates reveal why the return is so poor. Problem 1 – not very much traffic. Problem 2 – nobody clicks on ads.

Daily AdSense data.
Daily AdSense data.

Projections are that I will never make $150 from AdSense ads on this website, thus I will make zero dollars from AdSense.

In hindsight this should be no surprise – I’m targeting a highly tech savvy computer scientist audience who has long since become immune to internet advertising, either through the use of ad blocking plugins or sheer indifference. I don’t click on ads, so why would I expect my audience to?

So I might as well not have them. Good riddance if you ask me.

Conclusion

Thinking about putting AdSense ads on your website?

Don’t bother unless you have a way larger readership than I do, or a much more gullible one. Preferably both.

I am now trialling a linkshare affiliation program with Server Mania.

Mecanim is broken and needs to be fixed properly

Generally speaking, Unity has a coherent design philosophy that provides a nice workflow. Essentially you make GameObjects in the Editor, then when you hit play it makes a working copy of the object. Any changes that are made to that object during runtime are not reflected on the original. Your scene is preserved, your prefabs are preserved, yet your game play objective is met.

There are a couple of notable exceptions to this rule that I have encountered.

Navigation meshes. You can only generate these in the editor, and have very limited access to them with scripts. This is a bad design choice, and should be fixed.

However, to work around this I just use the RAIN NavMesh implementation (free on the asset store!), which has been done properly. It provides you with the editor tools to generate NavMeshes in the editor, but it also gives you complete access to the NavMesh library at runtime. It’s also faster. It’s just plain better than the built in Unity NavMesh solution in every way I can think of. Because RAIN exists the Unity NavMesh implementation doesn’t bother me so much… but it’s still wrong.

Bad design.
Bad design.

The other one is the one that really grinds my gears. The Mecanim animator. Their implementation makes no sense. It’s billed as a major feature of Unity’s engine, but it’s underpinned by a simply bad design choice. To make things worse, despite being aware of the issue, the response from Unity has been to patch it with dodgy hacks and work-arounds, rather than solving the actual problem in a way that empowers developers to do their job.

Bad design.
Bad design.

Mecanim Animator

At some point during design someone decided that the Animator component itself would not be cloned off to a working copy like normal Unity GameObjects. Rather, just the animation parameters and the current state of the machine would be individual.

Bad design.
Bad design.

Consequently any changes made to the animator are permanently saved. As such, if someone was to use a script to fiddle with their animation state machine it would have unintended permanent consequences.

To prevent this, virtually none of the animator data structure is exposed to scripts. You cannot access States, Transitions, BlendTrees, Clips… you know, everything useful.

Bad design.
Bad design.

This has serious consequences. Consider the situation where I have several attack animations, but my character has various attack speeds depending on which particular weapon they’re using, such as in Borderlands or Diablo. The attack animations need to be played back with an animation speed such that the animation play length matches the attack speed.

For example, WeaponA has attack speed of 1.5 attacks per second. The attack animation that applies to that weapon has an original length of 3 seconds. To make that 3 second long clip play in 1.5 seconds, I need to make sure that the speed of that clip is set to 3/1.5=2. To do this I need access to both the length of the clip, and the speed parameter of the motion in the attack animation state. Unity currently gives me access to neither.

How should this work? The same way almost everything else in Unity works. The actual animator component that is on a given character should be a working runtime clone of the original, and any changes to it in script should be reflected immediately in game play, but not saved permanently. This way I can change whatever the hell I please in runtime scripts, without any permanent ramifications. They could expose everything.

Unity acknowledge that this problem exists – so in the 5.1 release they have a solution whereby you can drive the speed variable with an animation parameter, just tick a checkbox! Hurrah?

No. This is a hack solution to a problem that shouldn’t exist.

Bad design.
Bad design. On a side note, disastrous public bathrooms are 90% of what you get in a Google image search for “bad design”.

Fix it properly. This solution will only fix a very small subset of the problems that you should be able to solve through manipulation of the animation state machine at runtime. Give us tools that allow us to do whatever we please with our game while it is running.

I appreciate that there can be a certain level of “protect the user from themselves”, and that there are sometimes limitations or efficiencies that we might not fully understand. But in this instance, it really does appear that it’s just a bad design choice that needs to be fixed. Properly. I don’t believe for a second that cloning the animation state machine for each animated character would have disastrous performance implications. Games in other engines have been doing it for years without issue.

What do you think? Do Unity need to address this obvious issue? Am I way off on this one? Is there some missing piece of information I don’t have that would make this all make sense?

Why sitting on your ideas is a good idea

When inspiration strikes us with an “idea”, it’s usually loosely formed. If the idea has legs then we gradually build up more and more detail around this idea, massaging it, moulding it into something gradually more and more real. The idea grows with additional thought, creativity, and energy.

Ahhh the euphoric rush of a percolating new idea that seems to have legs.
Ahhh the euphoric rush of a percolating new idea.

If we’re being sensible, at some point it stops being an idea and starts being a design. We then incrementally refine and build upon the design, making subtle improvements and additions. Eventually it becomes a system. But at this point it’s still an on-paper system, with no substance. You cannot see the system operating in its full glory, you can only imagine its operation in your mind’s eye. Some people are very good at doing this, but still not good enough.

Partly because of this, we often rush to start creating too soon. We jump the gun. We want to see how our ideas work in practice. We want to know what they look like, feel like, play like. We want them to become real. We justify this behaviour with self-talk like “I’m just prototyping”.

But what happens when we pull the trigger too early? When the urge to put finger to keyboard and implement our ideas is too great. We just can’t resist the urge? Maybe we get a good outcome still. Maybe the design ends up happening anyway, and we end up with a system. But maybe not. Maybe we implement systems that are naive and not well thought out. Because we didn’t flesh out the ideas to the full extent we are likely to end up with very limited scope, and code ourselves into a corner. We’ll implement things that make sense within our current, limited, understanding of what the system should look like, without leaving room for the bigger picture things that additional thought and creative energy would have demanded we think about including from the start. This can waste a lot of time and effort, or even worse, kill the idea altogether.

This is my curse, and the curse of others. We think about things for a week. Our brains are fizzing with creative energy and excitement. We’re so motivated. This idea is a sure-fire winner! We just want to start making it NOW! But when we do this we quickly start to see wasted effort, we quickly get dwarfed by repeated failed attempts at making the idea into a reality. Motivation wanes. We solve one problem, but do not immediately have insight into which problem needs to be solved next. Momentum is lost. We end up making half a game, running out of steam, and abandoning the project.

I hear this story time and time again from independent and hobby game developers in particular. Nobody has enough time in the day to “waste” their time thinking, planning, designing… So they skip all that and move straight onto the implementing. The fun stuff. Coding is real. Coding sees instant results. Rapid gratification. Then, when they invariably fail to finish, they move onto the next half-formed idea and do it all again.

Does this really need a caption?
Does this really need a caption?

Avoiding this trap can be quite simple though. All that motivation you had when you first started thinking about the idea. All that creative energy that was fizzing around your brain, coursing through your veins, just begging to come out? Harness it into design. Harness it into planning. Harness it into fleshing out your idea, your game systems, your software design, your marketing plan. And to satisfy that itch to create, to extract that explosion of ideas from your hyperactive brain box and make them real? Write it all down. Use OneNote or Notepad or your diary or your blog or whatever medium you want, but write it all down. Fingers to keyboard, pens to paper, styluses to tablet. And while you’re writing it down, think about it some more. Plan it some more. Formulate ideas into designs into systems into plans. Forbid yourself from writing a single line of code, or drawing a single vertex of art until you’re truly ready. That comes later. When the idea is already a real thing both in your mind and on paper. That’s when you can finally allow yourself to breathe life into it.

And because you’ve spent so much time, so much energy, so much thought, so much creativity formulating this idea into a creature of perfection. You’ve planned, you’ve tinkered, you’ve refined. Because of all this, you will find that you don’t need much breath at all. Your idea will come to life so smoothly, so easily, so gracefully. It will want to exist so bad that you barely need to help it along. The code will flow freely, the art assets will model themselves, even the music will come gushing from the composer like an unstoppable torrent. The floodgates have finally been opened on a dam that has been steadily filling itself for weeks, months or even years. You won’t find yourself struggling to find the momentum to continue, but instead you’ll find yourself struggling to restrain and control it. You will make progress so rapidly and so effortlessly that you won’t want to stop working at the end of the day.

THE CREATIVITY!!!
THE CREATIVITY!!!

That’s the plan at least. See you on the other side.

Economic hurdles for Virtual Reality gaming

I think virtual reality, in particular via the Oculus Rift, is exciting. I think it allows us to experience existing things in a completely new way, and even better, it allows us to experience things that have never before been possible. It’s the market for these new, unique to VR, experiences that I’m really focusing on in this post.

However, we’ve got a problem that needs solving. There’s currently no real way to make any money by independently developing specifically for VR. Sure, you can tack on VR support to your conventional game… but without that mainstream audience, your market is just too small to be viable.

Consequently, most of the development work that is happening specifically for Oculus Rift is being done by small scale independent developers, hobbyists, and enthusiasts. What’s more, because they can’t make any money out of it, they’re doing it in their spare time. This really limits the scope, scale, and quality of offerings.

Don’t get me wrong, there’s a bunch of little guys doing great things and for the right reasons. This is great. Power to the people. Democratize game development. It’s all good.

But if we really want people to make compelling, fully featured, high quality Oculus Rift games, then there needs to be a way to make genuine amounts of money doing it.

Here’s the problem as I see it. We have an existing gaming community that already vastly underestimates how much time/energy/skill/effort/money it takes to create games.

People see games getting made with $30,000 kickstarter targets every day. They wrongly inference that $30,000 is enough money to make a game – when in reality the kickstarter campaign alone cost way more than $30,000 to put together, and doesn’t even start to cover the costs of development. Kickstarter is primarily a marketing and pre-ordering tool, not a funding tool. Even huuuuge kickstarter successes like Star Citizen and Elite: Dangerous only got a small fraction of their total cost of development covered by their kickstarter millions.

People see indy games selling on steam for $2.50. Even major titles routinely drop under $10. They are used to paying these kinds of sums for games. $100 price tags for games are long gone.

The problem with this existing perception of the value of games is that it doesn’t hold true for games that are made for VR. Normal computer games and phone games have a target audience of potentially hundreds of millions. The VR market is a tiny, tiny, tiny fraction of this.

Currently, including DK1 and DK2 there’s somewhere between 100,000 and 200,000 VR units floating around the place. Now, obviously, these are development kits not targeted at a consumer audience, and we can safely assume that once the consumer version hits there will be many times more than that available… but, perhaps not so many as you might think.

The CPU and GPU requirements for the DK2 are, at present, already prohibitive. You need a top end computer to experience anything more than an upset stomach.

The consumer version is expected to be significantly higher resolution, and run at a higher refresh rate. This means that the CPU and GPU requirements will be even higher. If the efficiency of Oculus Rift display drivers doesn’t significantly improve (there is some potential that this might happen, hopefully sooner rather than later), then only a tiny percentage of the overall PC gaming market has a computer that will be able to deliver a good Oculus Rift experience.

When the market is so small you cannot count on shifting a lot of units to make your money. You need to price your product high if you’re going to recover the costs of development. But the community is too used to bargain bin prices. Games are cheaper than coffee now. Does anyone honestly expect people to be paying $100-200 for an Oculus Rift game?

It's a pity.
It’s a pity.

If we assume the answer is no, then we’re left with the status quo. Hobbyists and enthusiasts putting together extremely small and functionally limited demos in their spare time. Personally, I think these experiences are unlikely to be good enough to really drive the revolution we’re hoping for.

Fortunately, there is still plenty of hope for the Oculus Rift. There are plenty of mainstream games that have a sizeable standard monitor audience who can relatively cheaply and easily sneak in Oculus Rift support, for the tiny market that wants it. There’s also a market in video content, simulations, education, etc. These applications will ensure that the Oculus Rift has a healthy market and the opportunity to develop and flourish…  but what I’m really excited about is those experiences that are unique and special to VR. Tailored for it. Refined, polished, immersive, “only for VR” experiences. Perhaps by the time CV2 or CV3 comes out there’ll be enough units on the street to seriously consider making a living by working in that space.

Getting Noticed

There’s so many ways to promote your material these days… but it’s as hard as ever to get noticed. There’s just so much material out there, and it’s hard to make yours stand out.

Recently some dev friends of mine published a phone game on Google Play Store and iOS called Save the Teenies. It’s a cute physics-based puzzle game in the style of Lemmings. It’s as good as any phone puzzle game I’ve played, it’s got a ton of content, it’s high quality. Much better than most of the crap on iTunes and the Play store… and it’s completely free! Just gotta click past a non-descript ad between each level.

Despite the fact they’ve done everything right in terms of the quality of the content/product, they’ve not really been “noticed”. I mean, the game is being played… some ad revenue is being generated… but considering they worked on it quite extensively in their limited spare time for a couple of years it represents basically the worst investment of time imaginable. They would have been orders of magnitude much better off by spending their time begging in the streets, or working in the kitchen at McDonalds.

They promoted their product the same way most independents promote their product these days. Social media largely. They’ve got a website, a YouTube account, Google+, Facebook, a blog. All the usual suspects. They released their product about a month ago, and the promotional material started coming in the couple of months leading up to that. To date the YouTube trailer has 806 views. Google Play reports that the app has 100-500 installs, across both platforms the devs tell me they have somewhere around 500-1000 installs. By contrast, the more successful “front-page” and “Editor’s choice” offerings tend to have over a millon installs. These products are often awful in-game purchase kid-bait xp grinding unplayable shit-fests, based on some vacuous B-lister celebrity that the kids are talking about today… but they’re the ones that get noticed.

The difference seems to be in marketing and marketability. Areas which I know very little about. I can’t tell you how to make a marketable product, nor how to most successfully market a product. I suspect most independent developers can’t tell you this either, and I think this really hurts the independent development movement. It’s really de-motivational to think “I have this cool idea, and I can implement it, but what’s the point? Odds on nobody will ever play it.”

Independents seem to depend on their product having some kind of visceral appeal that causes it to go viral (i.e. Minecraft), or some critical “getting noticed” event, such as a major YouTube celebrity doing a feature video on their product, or attracting a cult-following within an enthusiastic niche genre. It’s difficult to predict if your product will have this kind of response – odds on it won’t – and it’s difficult to make this response occur… unless you happen to know a bunch of people with very large numbers of YouTube subscribers or Twitter followers.

An apparent solution is to grow your own Twitter/YouTube/Facebook/Google+ following. You see people trying to do this every day, by promoting their content in the comments on YouTube, or spamming shares on Facebook. It’s an annoying behaviour, but I fully understand the motivation and need to do it. However, for most people this doesn’t work. Most of the time this is probably because their content isn’t good enough in the first instance, but even when the content IS good enough (as in the Teenies example above), people are so jaded towards this type of spammy social marketing that they are immune to it.

The other way is to pay for advertising – but it’s very hard to do this as an independent – even if you can afford to do it, you’re taking a big risk by investing your own money into a business venture that is very likely to fail. But, if you really believe in your product, and really want to make it work, this is probably a risk worth taking.

So what’s the solution?

I guess the first hurdle still is to make sure you have really good content. There’s no point in promoting a dud product… but this raises another problem. How in the ever-loving fuck do you tell if your product is good or not?

For example, I quite like my 3D Music Visualiser. I think it’s fairly unique, and quite a pleasant little experience. I appreciate that it doesn’t have a whole lot of depth or replayability, I appreciate that it’s not the most seamless experience in the world, and I appreciate that it’s probably not to everybody’s tastes. But it’s free, it’s an interesting experience, and some people have told me they think it’s pretty cool. What I want to know is should I invest my time working on it to make it better? Or is the idea just straight up not good enough. I’ve posted it to a few places and gotten a whole lot of stony silence – very few people are even SEEING the product. So I’m not getting enough feedback to determine if they like it or not… all I know is that people aren’t motivated to click on it. Does that mean I’m just promoting it ineffectually, or does it mean the product is intrinsically not that interesting to people and I should give up on it?

Dunno. That’s an outstanding problem for me. Got any ideas?

If we assume that we do, in fact, have good content. The question becomes how do we promote this content effectively?

I can think of a few things to try, but I’ve yet to make any of them work.

  1. Via your social networks.
  2. Via people with bigger social networks than you, in your target audience.
  3. Via advertising.

The problem with 1 is that your own social networks are too small, and likely contain too few of the people that are interested in your content. They’re your friends and family, not your target consumer. It’s a start, and it’s better than nothing, but it’s unlikely to be a meal-ticket.

The problem with 2 is that these Internet celebrities get a lot of stuff forced down their throat all the time. I actually think it’s probably smarter to target smaller, less well known people, who are sympathetic to efforts to get noticed, have more time to review your content, and are more likely to be receptive. But if they’re smaller, you’re not promoting very widely. It’s a bit of a catch-22.

The problem with 3 is that it costs money, as discussed above.

Another challenge for an independent is that all of these strategies take a lot of time and effort. When you’re an independent you are often doing this work in your spare time already. You are then promoting your product in your spare-spare-time. Which is non-existent… so you need to take time out of developing content to try and promote your content. Meaning you have less content to promote in the first place. You have to make a decision about whether you invest your time in developing a new piece of content (maybe this new piece of content is the one that will capture peoples attention and go viral?) or promoting an existing piece of content (this content has potential, but nobody is noticing it, I have to work harder to get it out there!). As an independent developer your skill-set is in the development, not the marketing, so it’s often easier to just forge ahead making new content, rather than promoting existing content. Makes you wonder how many cool things there are out there just sitting on someone’s hard-drive or stagnating on an unvisited website and going completely unnoticed by the world? It’s a sad thought – but the even sadder thought is the number of cool things that went without ever being created, because the bright mind behind it couldn’t be bothered making it because they didn’t think it’d ever get noticed.

Do you have any bright ideas about how to get your content out there and get it noticed? Leave a comment.

Cute creepy fanary by 0zukachan0 on deviantart.
Cute creepy fanary by 0zukachan0 on deviantart.