코딩의 추억..
소스코드 정리를 하다가 재밌는 추억이 떠올랐습니다.
위 소스코드 399줄에 보면 나름 긴 함수가 있습니다. ShapeTube::Process(...)
터치나 스마트펜 클릭-드래그시 각 지점의 압력정보를 이용하여 일련의 위치정보값을
두께가 있는 그래픽스정보(튜브형태)로 계산해주는 함수입니다.
당시 벡터그래픽스를 하나도 몰랐는데요. 일자무식.
2주동안 수학지식을 습득하여 짰습니다. 쉐이프 그림을 아주 많이 그려보면서.
조사해보니 당시의 벡터그래픽스 업계는 OpenVG로 대통합되어 있었습니다.
그런데 대부분의 SW들이 랜더링 속도문제가 심각했습니다.
쉐이프가 5천개~1만개가량 되니까 1초에 겨우 한장.
OpenVG의 인터페이스와 소스코드를 조사하다가 그 원인을 알게 되었습니다.
랜더링과정을 총괄하는 파이프라인이 하나인 것입니다.
llvm/gcc등의 컴파일러가 프론트/미들/백엔드로 파이프라인이 분리되면서
얼마나 많은 효율성과 가능성이 올라갔는지를 다들 아실 겁니다.
OpenVG에는 그런 핵심코어의 분리가 없었던 거죠.
한장의 벡터그래픽스가 완성되려면 위치정보값이라는 원시데이터에서
그래픽스정보로 변환후 출력하는데. 이게 하나의 공정이고 무조건이라서
예를 들어 마우스로 화면을 줌인/줌아웃/스크롤하는 스르륵 지나가는
모든 화면에서 중간과정인 그래픽스정보를 재활용하지 못하고
매 프레임 똑같은 계산을 한다는 것.
그래서 OpenCV역할을 처음부터 다시 짰습니다.
물론 압력정보와 불투명도라는 추가기능과 중심영역과 주변영역에 걸쳐서
베지어단계가 자동조절되어 우리가 잘 봐야 할 부분은 정교하게 삼각형화되고
잘 안보거나 화면밖으로 나간 부분은 듬성듬성한 삼각형화.
화면이동시는 그래픽스정보를 재활용. 마우스를 떼면 리셋하고 최적화 프로세싱.
그랬더니 진짜 몇백배 빨라졌습니다. 같은 데이터가 2000ms에서 17ms로.
그리고 의문이 들었습니다. 외국에 나보다 훨씬 똑똑한 분들이
왜 이걸 못할까? 속도는 중요하지 않다고 느껴서?
OpenCV가 탄생할 초반에는 마우스조작의 니즈가 없었고
나중에는 OpenCV가 모두가 지켜야 할 표준화 약속이 되어버려서
그것을 함부로 깰 수가 없었던 겁니다.
그런데 개발자로 살아오면서 머 눈에는 머만 보인다고? ㅎ
그런 것들이 엄청나게 많더군요. 표준화되어서 아무도 건드리지 않는 기술.
아니 이 세상의 모든 SW기술이 그런 것 같았습니다.
SW기술의 생명주기는 꾸준한 진화가 아니라 난데없는 교체라는.
하나의 기술이 성장해가는 과정동안 수많은 인터페이스들이 만들어지고
유저니즈와 제품환경의 수준과 트렌드가 바뀌면서 앞서 배포한
과거의 인터페이스가 결국 조금씩 발목을 잡게 되면서 더 이상 성장하지 못하다가
어느날 혜성같이 등장한 전혀 새로운 방식의 접근법에 모두가 열광하면서
기술은 교체되는 것이죠. 웹기술들이 대표적으로 그런 사례인 것 같네요.
죽을 때까지 공부만 하는 인생.
IT세상이 그렇게 돌아가는 데에는 이유가 다 있었던 거죠..