내가 60fps Eink 모니터 Modos Flow를 만든 방법
4 hours ago
2
- 13.3인치 Eink 모니터는 300ppi에서 초당 60회 갱신하며, 4년간 자체 컨트롤러·하드웨어·펌웨어를 거쳐 실제 제품 형태가 됨
- 기존 Eink 컨트롤러는 약 100ms 전역 업데이트 대기 때문에 속도와 명암비를 맞바꾸지만, 픽셀별 업데이트 방식은 변경된 픽셀을 즉시 갱신함
- 픽셀별 갱신은 13인치 흑백 표시에서 대역폭 요구량이 20MB/s에서 540MB/s로 늘어나 DDR3와 DisplayPort가 필요해짐
- 회색조는 비점멸 방식이 불가능해 Bayer dithering, blue noise, error diffusion과 하이브리드 표시 모드를 조합함
- 최종 결과물은 터치스크린, 전면 조명, 색상 옵션, 여러 표시 모드, 오픈소스 하드웨어·FPGA 게이트웨어·펌웨어를 갖춘 고주사율 Eink 모니터가 됨
시작점: Eink 노트북에서 자체 컨트롤러로
- 60fps Eink 모니터는 300ppi에서 동작하며, Eink가 속도로 알려진 디스플레이가 아님에도 초당 60회 갱신함
- 개발 출발점은 Eink 노트북이었고, 당시 Eink를 지원하는 SoC는 전자책 리더용으로 설계되어 저전력·느린 프로세서·제한된 인터페이스에 묶여 있었음
- 노트북을 만들기 위해 SoC와 화면을 분리해야 했고, 그 사이에 FPGA 기반 드라이버 칩을 넣어 자체 Eink 컨트롤러를 만드는 구조가 필요했음
- 초기 노트북 설계에는 큰 터치바처럼 동작하는 막대형 LCD가 있었고, 일부 작업에는 빠른 디스플레이가 필요하며 Eink는 느려도 된다는 전제가 있었음
- 60fps는 초기 주목표가 아니었고, 노트북에 충분히 빠른 수준이면 됐으며 60fps가 안 되면 15fps도 괜찮은 목표였음
픽셀 단위 업데이트가 만든 속도와 품질
- 기존 Eink 컨트롤러는 전역 업데이트 타이머를 사용해 화면을 새로 고칠 때 이전 업데이트가 끝날 때까지 기다림
- 기존 업데이트는 약 100ms가 걸려 최악의 경우 새 이미지가 처리되기 전부터 100ms를 기다리게 됨
- 타이머를 더 빠르게 돌리면 프레임률은 올라가지만, Eink 입자가 반응할 시간이 부족해 이미지가 씻겨 나간 것처럼 보임
- 기존 방식은 주사율과 명암비 사이의 절충을 만들며, 일부 컨트롤러는 4~16개 영역을 독립 갱신해 이를 완화함
- 영역 기반 완화 방식은 소프트웨어가 영역을 직접 관리해야 하고, 여전히 한계가 남음
- 픽셀별 업데이트 방식은 모든 픽셀을 독립 업데이트 영역처럼 다루며, 무언가 바뀐 픽셀은 기다리지 않고 즉시 갱신을 시작함
- 이 방식은 높은 프레임률과 높은 명암을 동시에 얻어 기존 속도·품질 절충을 없앰
- 단점은 메모리 대역폭이며, 13인치 패널에서 흑백 이미지를 표시할 때 기존 컨트롤러는 초당 20MB가 필요하지만 이 방식은 초당 540MB가 필요함
- 높은 대역폭 요구 때문에 기본 SDRAM 대신 DDR3가 필요하고, USB 대신 DisplayPort가 필요해 비용이 증가함
- 책 읽기 용도에는 이 구성이 불필요하지만, 모니터 용도에서는 큰 차이를 만듦
표시 품질: 디더링과 하이브리드 회색조
- 프로젝트는 노트북보다 먼저 좋은 모니터를 만드는 방향으로 바뀌었고, 이후 몇 년간 여가 시간에 진행됨
- Eink는 비점멸 방식의 회색조를 구현하지 못해 디더링이 필수였음
- 구현된 디더링 알고리듬은 Bayer dithering, blue noise, error diffusion 세 가지였음
- Bayer dithering은 빠르지만 눈에 띄는 패턴이 생기고, blue noise는 더 나은 외관을 만들며, error diffusion은 가장 좋은 품질을 내지만 고해상도로 확장하기 어려움
- 디더링은 동작하지만 진짜 회색조를 넘어서지 못하며, 예외는 점멸 방식 회색조였음
- 기존 모니터는 느린 점멸 모드를 구현하거나 회색조를 완전히 건너뛰는 방식이었음
- 하이브리드 방식은 이미지가 바뀔 때 빠른 이진 모드로 전환하고, 잠시 안정되면 회색조로 다시 렌더링함
- 이 방식은 읽기에는 잘 맞지만 다른 용도에서는 덜 적합했으며, 자체 컨트롤러 덕분에 사전 설정 모드에 묶이지 않고 사용 사례에 맞게 최적화할 수 있었음
하드웨어 반복과 제품화 과정
- 첫 프로토타입은 풀사이즈 DisplayPort를 사용했고, 이후 DisplayPort를 포함한 USB Type-C로 전환함
- 통합 전원 관리 IC가 단종되면서 개별 DC-DC 컨버터로 바꿔야 했음
- 예기치 않은 latch-up 이벤트로부터 화면을 보호하기 위해 보드에 전체 전압·전류 모니터링을 추가함
- 각 변경은 새 PCB 리비전을 필요로 했고, 각 리비전은 새로운 학습으로 이어졌음
- 외주 업체에서 첫 케이스 설계가 돌아왔을 때, 책상 위 노출 PCB가 아니라 실제 제품처럼 보이기 시작함
- Hackaday Supercon, LatchUp, Supply의 Teardown 행사에서 시연했고, 사람들은 이 제품이 실제로 나오길 원했음
- 기술이 동작하고 수요가 있으며 설계도 있었기 때문에 마지막 추진을 위해 직장을 그만둠
- 계획은 몇 달간 집중해 설계를 다듬고, 제조하고, 출하하는 것이었음
전면 재설계, 공급사 문제, 최종 기능
- 전업으로 전환한 직후 Eink가 더 높은 해상도, 더 나은 사양, 더 낮은 가격의 새 패널을 발표함
- 새 패널은 더 나은 제품으로 이어질 수 있었지만, 더 높은 해상도 때문에 고대역폭 디코더 IC, 고대역폭 DDR 메모리, 새 FPGA, 더 높은 전류의 전원 공급이 필요해짐
- 이 변경은 보드의 거의 전부를 바꾸는 수준이었고, 최소 반년 지연을 만들었음
- 최종 제품에서는 보드를 먼저 설계하고 케이스를 맞추던 방식에서 벗어나, 섀시·정확한 치수·마운팅 포인트 등 폼팩터를 먼저 정하고 보드를 맞추는 방식으로 바뀜
- 새 방식은 전체 설계를 더 최적화되고 일관되게 만들었지만, 또 한 번의 큰 리비전이 필요했음
- 완전 조립 프로토타입은 Design Shenzhen에서 선보였지만, 무작위 글리치, 영상 끊김, 초기화 실패 때문에 출하하기엔 너무 불안정했음
- 비디오 디코더 칩 공급사는 NDA와 서비스 계약이 있었음에도 도움을 거부했고, 처음부터 드라이버 코드를 제공하지 않았음
- 칩을 쓰기 위한 소스코드를 받기 위해 추가 비용을 지불해야 했지만 코드는 동작하지 않았고, 동작하는 코드에는 더 많은 돈을 요구했음
- 이후 다른 공급사로 바꿨고, 새 공급사는 함께 일하기 훨씬 나았지만 프로젝트 시작 시점에는 해당 칩을 구할 수 없었음
- 이후 터치스크린 지원을 추가하면서 새 터치 컨트롤러 통합, 드라이버 작성, 보정 처리가 필요했음
- 깜빡임 없는 전면 조명, 선명도에 유용한 프레임률 제한기, 전원 연결이 없을 때 전력을 아끼는 저전력 모드, 이 기능들을 제어하는 온스크린 디스플레이가 추가됨
- 각 기능은 한 문장으로는 단순해 보이지만 제대로 구현하는 데 몇 주가 걸렸고, 마감선은 계속 이동했음
- 전업 이후에는 직장에 다닐 때보다 더 많은 시간을 일했고, 밤과 주말의 경계가 흐려졌으며, 게임과 자유 시간이 줄어듦
- 직접 결정하면 바로 실행되고, 문제를 해결하면 해결된 상태가 유지되며, 기능을 구현하기 위해 다른 사람을 설득할 필요가 없었음
- 4년 뒤 결과물은 13.3인치, 최대 60fps, 매우 낮은 지연시간, 여러 표시 모드, 터치스크린, 전면 조명, 색상 옵션을 갖춘 모니터가 됨
- 하드웨어 설계, FPGA 게이트웨어, 펌웨어가 모두 오픈소스로 공개되어 직접 만들 수도 있음
-
Homepage
-
Tech blog
- 내가 60fps Eink 모니터 Modos Flow를 만든 방법