Hacker News 의견
  • Raylib의 저자가 외부 의존성 없이 오직 win32 앱만으로 전체 raylib 프로그램을 컴파일할 수 있다고 아주 기쁘게 발표한 소식임 링크
    • 정말 흥미로운 이야기임, 임베디드 프로세서로 재미삼아 사용하려고 LED 스크린에서 뭔가를 렌더링할 수 있는 것을 찾고 있었음, 지금까지 찾은 것들은 다 만족스럽지 않았음, 만약 제대로 이해했다면, 이걸 컴파일해서 소프트웨어 렌더링을 할 수 있을 것 같음, 내 192x128 픽셀 정도 사이즈에선 어떤 시스템에서도 충분히 빠를 것 같으니 이제 재미있는 애니메이션을 만들어볼 시간임
    • Win32에는 이미 꽤 괜찮은 opengl 1.2 소프트웨어 렌더러가 있음
    • 왜 굳이 이렇게 해야 하는지 궁금함
  • 이런 소식에 대해 Tsoding의 의견이 궁금함
    • 아마도 이제는 메인스트림이 되어 HN까지 올라왔으니 Tsoding은 흥미를 잃을 것 같음
  • 컴퓨터가 워낙 빨라서 이러한 소프트웨어 렌더링 OpenGL 1.1 라이브러리만으로도 꽤 괜찮은 2D 게임을 만들 수 있다는 점이 멋짐
    • 해상도를 낮게 유지하고, 씬 복잡성을 신경써서 관리하며 아트 스타일에 대해 결단을 내린다면, 20년 전 하드웨어에서도 돌아가는 합리적인 3D 게임을 만들 수 있었음, 실제로 직접 실험 삼아 게임을 만들었으며1 2, 이제 이게 된다는 걸 알게 되어 더 "진지하고" 완성도 높은 두 번째 게임을 만들 계획임, 컴퓨터 성능이 많이 향상된 점을 느낌, Raylib 소식도 정말 멋진 소식이라 실제로 도입을 고민 중임
    • 수정: 이게 소프트웨어 렌더링이라는 점을 몰랐었음, 그래도 CPU에서 최적의 스프라이트 깊이 정렬 알고리즘만 이용하면 내 게임도 렌더링 가능할 것 같음(롤러코스터 타이쿤처럼 이소메트릭 픽셀 아트 방식임), 90년대 메트로폴리스 1998 프로젝트에선 고대 OpenGL fixed function 파이프라인을 사용해야 했음(다행히 gl.h 파일에서 확장 함수로 추가 필드를 GPU로 전달할 수 있다는 걸 발견했음), SFML을 그래픽 프레임워크로 사용중이며 아마도 OpenGL 1.x 기반임, 최신 사례로는 Metropolis 1998 게임이 이러한 접근 방식이 어떤 걸 할 수 있는지 보여줌
    • 소프트웨어 렌더링이 결국 미래라고 생각함, 단 조건이 있다면 바로 GPGPU처럼 하드웨어 가속을 적극적으로 활용할 수 있어야 한다는 점임
    • 수십 년 전에 이미 소프트웨어로 렌더링한 풀 3D 언리얼 토너먼트가 있었음, 2023년에도 잘 동작함 링크
  • Fabrice Bellard가 OpenGL 관련 TinyGL도 작성했었음 링크
    • 놀라운 점은 (2022년 3월 5일) TinyGL 0.4.1이 나왔고 (2002년 3월 17일) TinyGL 0.4가 처음 출시되었다는 것임, "우리의 개발 계획은 수세기에 걸쳐 진행됨"
    • 저 사람은 거의 모든 걸 다 해내는 정말 대단한 롤모델임
    • 90년대에 이런 류의 소프트웨어 렌더러를 많이 봤는데, 솔직히 그때는 느리고 무겁거나 아티팩트가 많이 생겨서 별로였음, 퍼포먼스를 위해서는 게임과 렌더러의 긴밀한 통합이 필요했었음, 역사의 아이러니를 느낌
    • 참고로 C-Chads가 포크해서 만든 tinygl도 있음, 원본보다 훨씬 최근까지 관리되었고 멀티스레딩 등 다양한 기능이 추가됨, 다만 2023년 말에 아카이브되었음
  • pikuma.com 덕분에 소프트웨어 렌더러의 아름다움을 알게 되었고 대부분의 코드를 이해할 수 있었다는 점에 매우 뿌듯함
  • "OpenGL 1.1-style implementation on software"라는 설명을 보고 OpenGL 2.0(Non ES 버전)까지 구현하려면 몇 줄이 필요한지 궁금증이 듦
    • 최소 수십 배는 많아짐, 사용자 프로그래머블 셰이더(ARB 어셈블리/GLSL) 구현이 가장 어렵고, GLSL 파서와 셰이더 인터프리터 구현도 필요함, 멀티텍스처링과 다양한 텍스처 콤바이너 등도 추가해야 함, 전체적으로 아주 낮게 잡아도 4만 줄은 필요하다고 생각함, 물론 스펙을 다 구현하지 않고 최소만 하면 그보다 줄일 수도 있음
    • 예전에 실제로 fixed function 하드웨어용 OpenGL API 구현했던 적이 있는데 1.5 버전까지 구현하고 프레임버퍼 오브젝트 같은 익스텐션 일부 적용함, 1.x대는 쓸데없는 부분이 많지만 구현은 쉬움, 2.x대(셰이더 도입)는 소프트웨어로 구현하기 무척 힘듦
    • 정확한 줄 수는 모르겠지만 PortableGL이라는 3.x 소프트웨어 렌더러도 있음, 굉장히 멋지고 만져보기에도 재미있는 프로젝트임
  • OpenGL-style이라는 말에 대해서
    • 헤더만 보고 이야기하는 거면 축하함, 꽤 괜찮은 OpenGL 1.1 소프트웨어 구현임, 물론 전체 스펙을 다 맞추진 못하지만 예전 MiniGL 드라이버처럼 게임이 돌아갈 만큼만 필요한 부분만 구현한 형태임, 이 프로젝트도 비슷하게 Raylib의 OpenGL 백엔드가 돌아갈 정도만 구현함, 외부 그래픽스 의존성 없이 쓸 수 있도록 하려는 목적임
  • 혹시 CUDA 지원하는지 궁금함
    • 아니고, 오로지 CPU 렌더링임, SIMD조차 사용하지 않고 직접적인 정수/실수 기반 코드만 사용함
  • 이거 Nintendo 3DS에 완벽하게 어울릴 것 같음
    • 그럼 NES, SNES, Genesis 같은 콘솔 게임 제작에도 활용할 수 있을지 궁금함