2012년 7월 16일 월요일

Native Bezier Curve/surface Rendering

요 며칠 알아본 자료들을 정리합니다.

기본적으로 Shader레벨에서는 현재 시점에서 순수한 Programmable Rasterizer는 없습니다.

Native하게 곡선을 그려내려면 위와 같은 기능이나, 혹은 베지어곡선 내지는 곡면을 그려내는 처리가 필요합니다만. 적어도 현재 나와있는 DX, OpenGL에서는 본질적인 Native Bezier rasterizer/Programmable Rasterizer은 존재하지 않습니다.

하드웨어 가속을 무시한다면 개발도 가능하겠지만. 이 경우 Performance적인 의미로 상당히 문제가 될거라 예상되기때문에 이런 방법은 현실적이지 않겠지요.

현재의 GL개발의 흐름은 Tessellation Shader/ Geometry shader등으로 좀더 세밀한 표현을 하고자 하는 방향으로 그 흐름이 기울어져있는듯 합니다.

기존에 잘 알려진 Bump mapping의 일종인 normal mapping은 fragment shader레벨에서 구현이 가능할것이고. 실제로 굴곡을 만들어내는 displacement mapping은 tessellation shader, geometry shader등을 도입함으로서 구현 가능할것으로 보입니다.

tessellation은 기존의 폴리곤을 좀더 세분하게 분할하는 작업 등을 지칭합니다.
displacement mapping은 잘게 잘라진 폴리곤에 displacement map(bitmap, perhaps grayscale)를 할당해  주어진 화소의 값을 깊이로 이용하여 평면 폴리곤에 굴곡을 만들어내는 표현기법입니다.
zbrush등에서 사용되고 있는 구현방법의 하나라고 할수있겠네요.

geometry shader는 tessellation의 일환으로, 기존의 삼각형을 확장하여 삼각형 이외의 다른 도형을 만들어냅니다. 현재 현실적인 구현 방법으로 베지어곡선을 그려내고자 한다면, geometry shader를 이용하여 의사적으로 구현하는 방법은 있겠네요.

실제로 그 샘플을 연구한 사례도 있는듯 합니다.

http://www.pixelnerve.com/v/2010/05/11/evaluate-a-cubic-bezier-on-gpu/

geometry shader와 tessellation shader는 각각 OpenGL 3.2/DirectX 10과 OpenGL 4.x/DirectX 11에서 지원되고 있습니다.

웹이나 모바일에서 이 두 쉐이더를 이용하기에는 호환성의 문제가 대두될거라 보아지네요.

댓글 없음:

댓글 쓰기