Our game has a top-down orthographic view. Therefore, the operation of selecting a plot must be visually emphasized to give our players a clear indication.
At first, I tried using an outline approach usually seen on characters. The main idea is to use an additional render pass to expand the object by its normal in vertex shader and turn the culling mode to Cull Front. While this approach would work great on most characters that have a smooth body, it was not working well on most of the buildings in our game since they are quite sharp, especially on the edges. This would cause the outline to break on the edges.
I also tried to write a script to smoothen the normals by averaging the normal vectors of the same vertex (the vertices on sharp edges have several different normal vectors). While the outline was smoother, and there were fewer broken edges, it didn't fix the issue.
After doing some research, I realized that the outline should be based on its' rendered image rather than its' physical object. Using techniques of Image Processing, such as Sobel Filtering, would do the right thing in this case.
First, I capture the object which we want to have an outline and store the picture in a render texture. That could be achieved by using another camera. After that, I wrote a script to extract the outline from the rendered texture. Finally, at the last step, before a frame is rendered to the screen, blend the outline with the current render result. This outline effect is much better than previous ones, and with this outline, the game is much more interactive and intuitive visually.