[Simulation] Hair Simulation을 공부해보자 - 1편. Hair Mesh Drawing
포스트
취소

[Simulation] Hair Simulation을 공부해보자 - 1편. Hair Mesh Drawing

Hair Simulation을 구현해보자


이전부터 OpenGL을 이용하여 Hair Simulation을 구현해보고 싶었다. TressFX를 통해 공부를 해보려했으나 내부가 너무 복잡하게 되어있어 공부하기 힘들었다. 특히 Low-Level쪽이랑 interface쪽이 모두 섞여서 구현이 되어 있어 hair simulation algorithm을 파악하는 것이 매우 힘들었다. 그러던 중 HairGL이라는 Github repository를 발견하게 되었다. HairGL은 굉장히 간단한 구조로 되어있어 공부해보고 싶은 마음을 느끼게 되었고 이 내용을 블로그에 하나씩 기록해보려 한다.

HairGL : https://github.com/PavelRudko/hairgl


Hair Mesh는 어떻게 그려지나요?


HairGL을 분석해보는 것도 좋지만 먼저 Hair가 어떤 식으로 그려지는 지 아는 것이 먼저라고 생각한다. 그렇다면 Hair는 어떻게 그려질까?
이는 HairGL에서 제공하는 Siggraph 2010 : Advanced Techniques in Real-time Hair Rendering and Simulation Paper를 통해 알 수 있다.

위 paper에서는 많은 내용을 담고 있지만 크게 세가지 파트로 나눌 수 있다.

1. Hair Mesh Drawing

2. Hair Mesh Shader

3. Hair Mesh Simulation


나는 1번을 먼저 공부하고 2,3번을 공부할 예정이다.

1번 내용을 요약하면 다음과 같다.

  • 1) Hair Simulation시 머리카락은 Strand, 머리카락 다발은 Hair로 표현한다.
  • 2) Strand Mesh는 line 혹은 Quad mesh로 이루어진 Billboard mesh로 구현한다.
  • 3) Hair data를 효율적으로 활용하기 위해 모든 연산은 GPU에서 이루어지도록 구성하며 모든 Hair를 그리는 것이 아닌 Guide Strand를 기반으로 Tesselation을 적용하고 이를 Multi 혹은 Single-Strand-interpolation을 통해 Hair를 그려낼 수 있도록 한다.


image
[그림1] Strand Mesh and Billboard Mesh


image1 image
[그림2] Single-Strand-Interpolation과 Multi-Strand-Interpolation


위의 아이디어를 가지고 HairGL 코드를 분석해보자.


HairGL의 모듈 구성?


HairGL에서 Hair Mesh가 그려지는 과정을 알기 위해 HairGL의 구조를 간단하게 파악해보자. HairGL은 아래와 같이 크게 3가지 모듈로 구성된다.

image
[그림3] HairGL 모듈 구성

  1. ImGUI : HairGL에서 GUI를 담당한다.
  2. HairSystem : HairGL에서 Hair Mesh Rendering 및 Simulation을 담당한다.
  3. Shader : HairSystem에서 Mesh Rendering과 Simulation을 할 시 해당 Shader들을 사용해 실질적인 연산 및 렌더링을 진행한다.

엄밀히 말하자면 Shader는 HairSystem에 내에서 돌아가는 작은 프로그램이라고 봐야하나 세부적으로 HairGL 내부를 파악하기 위해 구분해두었다.


HairGL의 프레임워크 구성


(작성중..)

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.