컴퓨터공학/Computer Graphics

[Visible Surface Detection] Back-Face Detection

Pyxis 2024. 8. 25. 14:01

[ Visible Surface Detection, Back-Face Detection ]

 

Clipping이후, view volume내에 있는 것들만 남게 되는데, viewing position으로 부터 화면에서 어떤 것들이 보일 수 있는지(visible) 결정하는 과정.

 

다른 말로 hidden-surface elimination, hidden-surface determination이라고도 한다.

 

Visible-Surface Detection Alogrithms들은 2가지 방식으로 나뉜다.

1) Object-space methods

3차원 공간상에서 계산

 

2) Image-space methods

Projection plane상에 있는 각각의 pixel position에서 visibility를 결정.

 

대부분의 알고리즘은 2) image-space methods를 사용한다.

 

[ Back-Face Detection (Back-Face Removal) ]

Back-Face Culling이라고도 한다. Culling은 솎아낸다는 의미.

 

Polyhedrone의 뒷면(Back-Face)를 감지하는 것.

이 방법이 단독으로 쓰일려면 조건이 필요하고 아니라면 다른 visibliity 알고리즘과 혼합해서 사용해야 한다.

3차원 공간에서 수행되는 Object-space method에 속한다.

 

Polygon surface에 대한 normal vector N의 방향과 view point로 부터의 View vector와의 관계를 통해 결정하는 방식이다.

View vector와 normal vector N과의 Dot Product 결과가 0보다 크다면, 같은 방향을 의미하므로 해당 surface는 Back-Face라는 의미가 된다.

 

어떤 polyhedron이 있다고 가정하자. 한 polygon에서 object 내부를 향하는 surface는 절대 보일 수 없으므로 처음부터 define되지 않는다.

object 외부를 향하는 surface의 normal vector N은 View vector와의 dot product 결과가 0보다 크므로 Back-Face에 해당한다.

Visible할 가능성이 있었으나 그릴 필요가 없다는 의미이므로 제거된다. 

 

Normal vector N은 polygon에서 Cross Prodoct를 통해 구할 수 있다.

 

하지만, 굳이 Dot Product를 해야할까 ?

3D Viewing에서 object는 projection coordinate로 옮겨오는데, normal vector N의 Z component만으로도 판별이 가능하다.

 

1) Right-Handed Viewing System

N의 성분을 각각 (A, B, C)라 가성하자.

N의 Z 성분 C가 0보다 작다면, Back-Face에 해당한다.

C가 0이라면, 수직하다는 의미이므로 어느 방향도 볼 수 없다. 

그러므로 Z 성분 C에 대해서 (C <= 0) 이라면 Back-Face라고 분류할 수 있다.

 

2) Left-Handed Viewing System

반대로 z 성분 C에 대해 (C >= 0) 일 경우 Back-Face가 된다.

이 경우, Right-Handed에서Left-Handed로 옮겨간 Normalized Projection 이후라는 의미가 된다.

 

[ 항상 판별 가능할까 ? ]

그런데, Back-Face Dection 방식은 "Single Convex Polyhedron" 이거나, "Non-overlapping Polyhedra"일 때만 완벽하게 작동한다.

Overlapping Polyhedra의 경우, 앞에 있는 polyhedron에 의해 가려짐에도 Back-Face로 분류되지 않을 수 있기 때문이다.

Concave Polyhedron

 

또한, Concave Polyhedron의 경우 Single로 존재해도 스스로에 의해 가려지는 surface가 존재할 수 있게 된다.

이 경우는 추가적인 알고리즘이 필요하다.

 

 

 

 

[ Reference ]

Computer Graphics with OpenGL 4th edition, Hearn, Baker