I'm trying to implement a silhouette detection algorithm in post-processing. I've come across solutions based on Sobel/Roberts cross/... filters and I was wondering if there are more accurate techniques to perform the task.

With silhouette edge I mean those edges that are at the boundary between a front-facing and a back-facing triangle of a polygonal mesh with respect to the view direction.

One thing that is really important for my application is consistent silhouette thickness (so that I could inflate the output in later passes to reach a target width).

I am assuming a Sobel filter based approach on depth values (or similar) alone is not enough to consistently detect silhouettes (since it detects large enough discontinuities...that are oftentimes coincident with what we consider silhouettes). Is it true or a simple filter tweaked for this purpose could perform just fine?

Is there any other documented post-processing technique for silhouette detection?

I've been experimenting with the following approach: enter image description here

This approach seems to work quite well, however, does it makes any sense to you? Am I re-inventing something that already exists?

  • $\begingroup$ You can find silhouettes by using deferred rendering when storing item numbers as well... Afterwards you can highlight when neighboring pixels have different item values. Additionally you can use max filter in size 'x' to make line width larger $\endgroup$
    – Thomas
    Oct 26, 2022 at 21:29
  • $\begingroup$ Small hint: Storing item numbers can also be used to do color picking to select geometry. This has nothing to do with this question, but could be a reason to use this technique... $\endgroup$
    – Thomas
    Oct 26, 2022 at 21:34


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.