GN⁺ 1달전 | parent | ★ favorite | on: CSS로 구현한 3D DOOM 렌더링(nielsleenheer.com)
Hacker News 의견들
  • “이걸 DOOM으로 돌려봤다”류의 사람들은 정부의 우주 추진 시스템 부서에 고용되어야 한다고 생각함
    그들은 손가락만 굴리기엔 너무 이색적인 과제가 필요한 사람들임

    • 하지만 결국 그들이 만드는 추진 시스템조차 DOOM을 돌릴 수 있게 만들 것 같음
  • 이건 “할 수 있으니까 해본다”식의 프로젝트 같음
    CSS가 원래는 선언적 스타일링 언어였는데, 이제는 조건문, 수학 함수, 렌더링 트릭까지 생기면서 점점 프로그래밍 가능한 시스템으로 변하고 있음
    중요한 건 “CSS로 DOOM을 돌릴 수 있나”가 아니라, 원래 그런 용도가 아니었던 레이어에 얼마나 많은 로직을 밀어넣고 있는가

    • 이건 전형적인 추상화 역전(abstraction inversion) 의 사례임
      CSS는 프로그래밍 언어가 되려는 욕망을 숨기고 있지만, 결국 완전히 잘못된 추상화로 변해버렸음
    • 핵심은 표현(CSS)상호작용(JavaScript) 의 경계가 어디까지인가임
      예전엔 드롭다운, 툴팁, 레이아웃을 위해 JS가 필요했지만, 이제는 CSS 속성으로 앵커 위치나 조건(if())까지 지정할 수 있음
      애니메이션, 디테일 토글, 접근성 관련 효과까지 CSS로 처리 가능해짐
  • CSS로 3D 장면을 만드는 건 예전부터 가능했지만, 상호작용엔 JS가 필요했음
    이제는 x86CSS 프로젝트처럼 JS 없이도 CPU를 CSS만으로 에뮬레이션할 수 있음
    그래서 DOOM도 순수 CSS로 실시간 구현이 가능할지 궁금함

    • 하지만 CSS x86 CPU는 너무 느려서 게임 루프를 처리할 수 없다고 함. 결국 JS가 필요함
    • 이런 CSS의 진화는 예견된 결과였고, HTML 진영이 애초에 DSSSL을 채택했어야 했다고 생각함
  • 이 사례는 사람들이 왜 TypeScript 기반 CSS를 원하게 되는지를 잘 보여줌
    Chrome에서만 작동하는 if() 같은 기능 때문에, 개발자들은 이런 꼼수를 씀
    예를 들어, animation-delay@keyframes를 이용해 가시성 토글을 흉내내는 트릭을 쓰는 식임
    CSS if()가 표준화되면 이런 해킹 없이 깔끔하게 조건 처리가 가능해질 것임

  • DOOM 치트 코드인 IDDQDIDKFA는 아쉽게도 작동하지 않았음

  • 예전에 div에 둥근 모서리를 만들려면 GIF 네 장이 필요했던 시절이 떠오름

    • div라니, 그 전엔 전부 table 레이아웃으로 하던 시절도 있었음
  • 정말 인상적임! div 하나만 지워도 벽 통과(wall hack) 가 가능함

    • 더 나아가 .wallopacity: 0.7만 주면, 예전식 투명 벽핵 느낌을 그대로 재현할 수 있음
  • “이걸 어디서 직접 돌려볼 수 있나?” 싶었는데, cssdoom.wtf에서 가능함

    • 휴대폰으로 실행하자마자 기기가 뜨거워짐
    • 모바일에서 DOOM을 이렇게 부드럽게 돌려본 건 처음임
    • Safari에서도 완벽히 작동함 — 이런 일은 거의 없음
    • Firefox에서는 잘 돌아가지만, Alt 키 매핑이 메뉴를 열고 닫아서 불편했음
      Chromium에서는 오히려 더 버벅였고, strafing 키는 찾지 못했음
      그래도 전반적으로 놀라운 구현임
  • CSS는 위원회 설계의 한계를 보여주는 대표적인 명세임
    SVG와 함께 “가장 보기 흉한 스펙” 경쟁을 벌이고 있음

    • 혹시 제목만 보고 댓글 단 거 아니냐는 반응도 있었음
  • 이 멋진 구현에 대해 한 가지 덧붙이자면,
    실제로는 플레이어가 움직이는 게 아니라 세상이 움직이는 것
    카메라는 단지 시야각(frustrum)을 계산하기 위한 개념적 도구일 뿐임