WebGL 공부 시작

나는 그래픽스 관련해서는 모든 것을 야매로 배웠었기 때문에, 전반적으로 기초가 없다. 이게 나름대로 꽤 스트레스였다. 하지만 천성적으로 게을러서, 계속 언젠가는 제대로 공부해야 한다고 생각만 하고 미루기만 했다. 그러다가 문득 이렇게 미루기만 하면 언젠가 후회할 날이 올 것 같아서 바로 공부를 시작하기로 했다.

우선 공부할 그래픽스 라이브러리는 OpenGL로 정했다. 모바일 시장이 있어도 역시 많이 쓰이는 것은 Direct3D고, 게다가 apple에서는 metal이라는 새로운 그래픽스 라이브러리를 발표해서 OpenGL의 입지가 더 줄어들 것이라고 한다. 하지만 나는 이번 목표가 당장 어딘가에 써먹기 위한 것을 배우기 위한 것이 아니라 기본적인 것을 배우기 위한 거라서 뭘 하더라도 상관없었다.

사실 지금 내 윈도우 pc는 망가지고, iMac은 이제 개발용으로 쓰기에는 성능이 너무 나빠서 별 다른 선택의 여지가 없었다.

OpenGL API 구현체도 platform 별로 여러 가지 구현체가 있다. 나는 그중에서 WebGL을 공부하기로 했다. 특별히 web platform에서 작업할 일이 있었던 것은 아니지만, 리눅스 환경에서 OpenGL로 코딩하려면 리눅스 드라이버를 수동으로 재 설치해야 하는 경우가 많아서 브라우저만 있으면 바로 작업 가능하다는 특징은 WebGL의 큰 장점이라고 생각한다.

그리고 무엇보다도 WebGL Inspector라는 좋은 디버깅 툴이 있다는 것은 WebGL의 가장 큰 장점이라고 생각한다. 리눅스에서 OpenGL 개발 환경을 구성할때는 개발 환경 자체를 준비하는 것도 귀찮지만, 디버깅 환경을 구성하는 것이 진짜 귀찮다. 그래픽 드라이버 버전에 따라서는 아예 디버깅할 수 없어서 무조건 실행시켜보는 수밖에 없는 경우도 있다.

하지만 브라우저의 플러그인 형식으로 설치 가능한 WebGL Inspector를 사용하면, 프레임을 멈추거나 속도를 조정할 수도 있고, 어떤 콜이 불렸는지, array buffer나 element array buffer에 어떤 값이 들어있는지, 어떤 프로그램을 사용했고, 현재 state가 어떤지, texture의 값은 어떤지까지 알 수 있어 다른 환경보다 상대적으로 쉽게 디버깅할 수 있다.

물론 WebGL이 무조건 좋은 것은 아니다. 기본적으로 OpenGL API에서는 멀티 스레딩을 위한 lock이나 동기화 방식을 제공하지 않는다. 그래서 고급 테크닉들을 보면 대부분 어떻게 멀티 스레딩 환경에서 효율적으로 작업을 나누어 그림을 그리는가가 대부분이다. 하지만 WebGL은 main thread에서밖에 호출할 수 없어서 이런 테크닉을 쓸 수 없다.

하지만 이는 어디까지나 고급 테크닉들이고 기초와는 상관없기 때문에 WebGL로 시작하는 게 딱히 문제 될 것 같지는 않았다.

댓글

이 블로그의 인기 게시물

USB 2.0 케이블의 내부 구조

[C++] enum class - 안전하고 쓰기 쉬운 enum

Log Aggregator 비교 - Scribe, Flume, Fluentd, logstash

[Web] SpeechSynthesis - TTS API

[Python] cache 데코레이터로 최적화하기