I've not blogged in a while but I thought it was a good idea to detail the differences between the various engines on show at GDC right now. I've had a good chunk of experience with all of the above options (I've used Source but not Source 2 ofc.).
Unity can roughly be defined as the amateurs Game Engine, you don't need to know much about programming, there's a lot of GUI tools and the Asset store is packed with tools and art you can buy rather than make, it's ease of use and low cost means there's a huge community and if you've got any questions they've probably already been answered.
Almost every feature in Unity is a little beat up, nothing quite works as well as you'd like and so it means polish is that much harder, a few examples of this is the managed run time and garbage collector introducing the object batching problem, audio, networking, and 2D being recent and clunky additions to the engine. Finally the renderer had been stuck in forward renderer land till this week (unless you had the very expensive pro license) and now having finally been updated to bdrf lighting it's apparent that calling it physically based lighting is a stretch. The roughness term is global to the material and the light probes only seem to give very weak aproximations, nothing like the global reflection found in UE4 and other AAA engines.
Unreal Engine is very slick, like Unity it has excellent tools and an Asset store, the asset store seems to be more sparse than Unity on account of the fact it has less users and it is similarly priced. Programmers can write in C++, meaning it's extremely optimisable and very fast. You also get the entire source code which helps you understand what's going on underneath, something that's quite frustrating with Unity.
The one thing holding it back from mass adoption is the fact that you need to be a programmer to make games with it. I like C# and love C++, i'm not going to pretend otherwise, but similarly i'm not going to pretend C++ is right for non-programmers, you can't really muddle through like you can with C#. The UE solution to this problem - blueprints is a dangerous path to take in my opinion on account of the sheer visual complexity they introduce.
Source is generally the worst of both worlds combined with a complete lack of focus on tools and a very ambiguous licensing agreement. Historically it's only been useful for mods of valve games. It's C++ but you didn't get access to the source, it's tools are awful, no Asset store or anything even remotely similar and the community has all but adandoned it, the forward renderer wasn't exactly flashy when half life 2 came out and it's not changed much, except the Dota version did switch to defferd fresnel lighting in 2012 but true bdrf physically based lighting is still no where to be seen. It's also been difficult to monetise. Source 2 is hopefully a different kettle of fish altogether, I sense Valve are taking it seriously and taking the tools more seriously than they ever have, from the Dota Editor Alpha I'm quite optimistic but there's also a sense of rough edges that I can't quite put my finger on, a feeling that valve still don't fully believe in tools, I don't expect it to reach the polish of the other 2.
Roll your own
You can do anything you like. It's not as difficult as you might think. You can always debug every line and see the root cause in every crash dump. Absolutely free and no risk of losing the ability to put out updates or patches. You can put it on any platform you like.
You will have to write your own tools and you almost certainly wont have time to put the same kind of effort in that dedicated engines do. It's not as difficult as you think but it is more time consuming. It does take more technical knowledge than premade engines.
I hope that's a decent summary of the pros and cons of the various competing engines at GDC this year, it's a little unfair on Source on account of the fact that we know almost nothing about the new version. I may have made some mistakes about the features of the various engines, please feel free to correct me in the comments if you see any errors. I'd say as a rule at this point Programmers should roll their own or use Unreal if they're in a hurry and non programmers should use Unity with Source being a watch this space kinda thing.