목록전체 글 (140)
Graphics Programming
OpenGL 프로젝트에 AMD FSR1을 붙여봤다. 원래는 FSR2를 붙이고 싶었지만 벨로시티 버퍼, TAA 등을 먼저 구현해야 FSR2를 붙일 수 있어서 현 상황에서 바로 붙일 수 있는 FSR1을 작업해봤다. FSR1 홈페이지에 있는 가이드 문서를 보고 그대로 따라하니 금방 끝낼 수 있었다. DX12, DX11, Vulkan를 지원한다고 쓰여있지만 어차피 FSR1 셰이더 자체는 GLSL로도 컴파일 가능하도록 작성되어 있어서 OpenGL에 붙이는데 큰 문제는 없었다. 이미 여러 렌더 패스가 실행되고 있는 엔진에 FSR1을 붙이려니 다음 사항들을 고려해야 했다. 렌더 타겟들을 화면 해상도와 무관한 것(shadowmap), FSR1 이전의 해상도를 가지는 것(gbuffer, sceneColor, sceneD..
쉬어갈 겸 보조 기능으로 스크린샷 찍는 것을 구현해봤다. VRAM에 있는 텍스처를 제대로 읽기만 하면 할 일의 90%는 끝난다. 그런데 검색을 해봐도 GL_HALF_FLOAT, 즉 16비트 정밀도의 rgba16f 텍스처를 어떻게 읽어와야 하는 지에 대해 파편화된 정보들만 있어서 삽질을 조금 했다. 내 렌더링 파이프라인에서는 포스트 프로세싱 패스들을 토글할 수 있기 때문에 마지막으로 실행된 포스트 프로세싱이 무엇인지에 따라 백버퍼로 blit하기 직전 sceneColor 텍스처의 픽셀 포맷이 달라질 수 있다. 그래서 최종 PP 실행 결과를 무조건 rgba16f 포맷의 sceneFinal 텍스처에 복사하고, 스크린샷을 찍어야 하면 sceneFinal을 읽고, sceneFinal을 백버퍼로 blit하도록 절차를..
토이 렌더링 엔진의 머티리얼 시스템을 개편했다. 최근에 리팩토링보다는 렌더링 퀄리티에 집중한다고 결심했지만, 기술 부채가 계속 쌓이면 감당이 안 될 것 같아서 이걸 먼저 처리했다. 기존에는 머티리얼 타입마다 완전한 셰이더 파일(그 자체로 온전히 컴파일 가능한 코드)이 있었고, 그에 상응하는 셰이더 프로그램, 또 그걸 래핑하는 렌더 패스 클래스가 있었다. 예를 들면 albedo, normal, roughness, metallic 등의 PBR 텍스처들을 샘플링하는 머티리얼을 위해 다음 요소들이 필요했다. Vertex shader "deferred_pack_pbr_texture_vs.glsl" Fragment shader "deferred_pack_pbr_texture_fs.glsl" class PBRText..
토이 프로젝트를 DX12/Vulkan으로 갈아타지 않고 OpenGL로 계속 하는 이유는 여러 가지가 있었다. 여러 렌더링 피처를 직접 구현해보는 것이 가장 큰 목적인데 DX12/Vulkan API에 맞춰 렌더링 엔진의 기반을 다시 추상화하려면 오래 걸린다. OpenGL 프로젝트의 코드베이스가 너무 방대해졌다. 렌더링 코드 외에도 여러 시스템이 있는데 모두 포팅하기에는 양이 너무 많다. 그런데 다름 아닌 개발 도구 때문에 그래픽스 API를 갈아타야 하나 고민 중이다. RDNA2 iGPU 달린 노트북에서 OpenGL 프로젝트를 프로파일링해보려고 했는데 AMD용 OpenGL 프로파일러가 없다... 엥? -_-; 기존의 OpenGL 프로파일러들은 전부 개발이 중단되었고 현재의 Radeon RGP는 DX12/Vu..
나도 참 이 사이드 프로젝트를 징글징글하게 오래 붙잡고 있다. 최근에 여유 시간이 많아짐에 따라 미뤄뒀던 개인 프로젝트를 여러 개 나열해놓고 고민하다가, 이 OpenGL 프로젝트 먼저 집중적으로 진행하고 있다. 어느 정도 만족스러운 결과물이 나오면 CUDA, DX12/Vulkan 모던 아키텍처, 기타 렌더링과 무관한 프로젝트들로 옮겨갈 생각이지만, 다시 시간이 모자라게 되면 여가 시간에 내가 과연 이 모든 걸 할 수 있을까 모르겠다. 일루미네이션 리팩토링 이 작업으로 비주얼이 개선된 것은 아니지만, 여러 라이트 소스에 의한 direct lighting + indirect lighting (IBL) 을 모두 셰이더 실행 하나에서 처리하던 것을 개별 패스들로 분리했다. 추후 라이팅 패스를 개선하기 위한 준비..
언젠가 직접 RTX 코딩할 일 있으면 참고할 것들 티스토리 편집기 왜 이렇게 무거워졌지... https://developer.nvidia.com/blog/best-practices-for-using-nvidia-rtx-ray-tracing-updated/ 이 글은 게임에 NVIDIA RTX 레이트레이싱을 활용하며 얻어온 우리의 경험에 근거한 모범 사례들을 수집한 것입니다. 현재 레이트레이싱을 작업하고 있는 개발자들을 위한 실용적인 팁들을 간략하고 바로 실천할 수 있는 형태로 정리했습니다. 이 팁들의 목적은 어떤 솔루션들이 대부분의 경우 좋은 퍼포먼스를 내는 지에 대한 통찰을 주는 것입니다. 특수 사례에 대한 최적 솔루션을 찾는다면 항상 프로파일링하고 실험해보는 것을 권장합니다. 본문에서 흔하게 쓰이는 축..
SIGGRAPH Advances in Real-Time Rendering https://advances.realtimerendering.com/s2022/index.html 8월 8일에 시작한다니 자료들은 한달 뒤에나 올라오겠다. 작년에 유니티에서 컴퓨트 셰이더를 이용한 랜드스케이프 테셀레이션을 발표했는데 올해는 같은 기술로 곡면 테셀레이션을 발표하려는 것 같다. 언리얼 엔진은 두 개를 연이어 발표하는데 작년에 이어 루멘을 한번 더 하고, 다른 하나는 나나이트가 빠지고 하드웨어 레이트레이싱이 들어갔다. 게릴라 게임즈에서는 NUBIS를 개선해서 호라이즌 포비든 웨스트에 써먹은 걸 발표하는데 GDC 2022에서 발표한 것과 내용이 크게 다르지 않을 듯하다. 그 다음은 다시 유니티에서 프로브 기반 라이팅과 헤..
https://codeonwort.tistory.com/367 OpenGL에서 멀티쓰레딩하기 (1/2) 회사 다니면서 내팽겨쳐둔 OpenGL 렌더링 엔진을 다시 꺼내서 손보고 있다. 그래도 엔진 프로그래머랍시고 3년을 굴렀더니 잘못된 게 너무 많이 보여서 아키텍처에 또다시 대규모 공사를 하고 있 codeonwort.tistory.com 멀티쓰레딩 1편.. 이런 글을 쓴 기억도 없었는데 블로그 정리하다 문득 발견했다;; https://codeonwort.tistory.com/381 렌더링 챌린지 일지 1 목적도 없이 토이 프로젝트를 만드니 진도가 잘 안 나가서 세운 계획이 있는데, 바로 인터넷에서 수집한 사진들을 따라 만들어보는 "렌더링 챌린지"다. 몇 가지 기준에 따라 챌린지에 적합한 사 codeonwo..