A pretty effective and simple way can be analysing your depth buffer. Using a sobel filter is pretty common for that kind of operation. http://homepages.inf.ed.ac.uk/rbf/HIPR2/sobel.htm
I heard of it. I will try to get hang of the theory explained in your provided link.
That was just the first link I found on google. It's pretty simple in practice: sample your depth buffer for the point your are shading and the surrounding points, compute how much variance there is over the kernel, and this will tell you if you are on/close to an edge or not. You can then shade the point differently based on that. Kernel size will impact how wide your filter is. (though you can control the thickness in other, more performance friendly ways as well of course)