소울워커 여러분 안녕

밤은 깊어지고 잠도 안오고 그래서 요즘 핫한 렌더링에 대해서 쫌 써볼까함

게임만들기 참 어렵다 특히 소울워커는 지원이 끊긴 엔진을 써서 어려움이 오죽할까 싶음

그치들도 유니티/언리얼로 바꾸고야 싶겠지 근데 누가 총대맬껀데? 안될게 확실하고 잘해야 본전일 뿐인 일이다 이거지.

뭐 나도 배우고 있는 입장이고 모르는 게 더 많지만 최선을 다해서 풀어 볼테니까

소울워커 개발자들의 어려움을 조금이나마 공감하는 시간을 갖길 바람

그림을 보면서 알아보자

32비트 기준이긴 하지만 64비트도 크게 다르진 않으니까 볼만할꺼임

렌더링 하는데 가장 골치아픈 부분은 리소스-버퍼와 이미지로 나뉨-를 다루는데 있음 다들 ssd에서 sys램(cpu 옆에 꽂혀있는거 말함) 으로 로딩하는것까지는 아는것 같은데 그걸 그리는데 쓰려면 비램에 올릴 필요가 있다는 것은 간과하는것 같애.

드로우 하는데 필요한건 전부 비램으로 올려야 함 상황을 복잡하게 만드는건 비램도 용량의 한계가 엄연히 존재하고 높은 프레임을 유지하는데 고용량 리소스 업로드를 할 시간이 많지 않다는데 있지.-60프레임을 유지하려면 한 프레임당 1/60초 밖에 시간여유가 없음-위 그림을 보면 리소스가 비램에 업로드 되는데 거쳐야할 관문이 많아 이게 다 지연되는 시간(랙)을 이룬다는 것을 의미하고.

이 지연을 조금이나마 줄이고 싶어한 개발자들의 요구가 새로운 하드웨어 디자인에 영향을 끼치게 되고-gdc같은 컨퍼런스를 하는 이유가 그것임-그 hw를 활용하기 위한 api의 발전 흐름으로 생각해 보길바래

dx9은 과거 하드웨어를 다루던 api이기 때문에 현재 하드웨어를 다루는데 적합하지 않음. 과거 hw에서는 필요한 작업들 이 지금은 개선되서 더이상 신경 안써도 되는게 많거든. 아마 옛날 프로그래머들은 그시절 depth버퍼도 바로 읽을 수 없어서 rawZ니 intZ 하던거 기억할꺼임 그렇다고 모던 api가 능사는 아닌게 사용하기 쉽지 않음. vk,dx12 같은 모던한 api 는 현재 hw를 더 세밀하게 다룰 수 있다는 장점이 있다고 하지만 이말은 좀 어폐가 있는게 세밀하게 다룰 수 있다기 보다는 하는게 없다는게 더 적절하다고 봄 즉, 프로그래머들이 다 떠먹여 줘야 한다는 것임... 어떻게 작동하는지 비밀인 하드웨어를 다루기는 쉽지 않겠지? 지금 프로그래머 들이 하는 삽질은 일단 gpu한테 떠먹여 보고 얘가 어떻게 반응하는지 프로파일링 해서 조정하는 일을 하고 있음 게임만 돌리는것도 아니고 크롬틀고 뭐 이것저것 틀면 os에서 gpu를 나눠쓰게 스케줄링 하기 때문에 프로파일링 할때 결과랑 다를 수 있다는것도 감안해야함-이건 콘솔이 유리한부분임 게임전용이니까 pc는 범용이라고..

vk, dx12 api에서는 커맨드를 멀티쓰레딩으로 만들 수 있게 바뀌었지만 멀티쓰레딩도 하기도 쉽지 않은게 드로우커맨드-파이프라인오브젝트(쉐이더와필요한리소스묶음이라고 생각하면편함)-를 집어넣을 hw큐는 딱 한개 밖에 없음 뭔짓을 해도 어쨌든 gpu로 집어넣는 구멍은 한개임... 

나는 렌더링 얘기만 할거지만 렌더링이 전부도 아니고 게임 루프에 네트워크 업데이트도 적절하게 해줘야 한다는 것도 알아야지 화면에 표시되는데 인풋랙 전부 랙 랙 랙임 게다가 엔진마저 블랙박스야 지금 눈 감고 게임만들고 있다는거임 

뭐 쓸건 많은데 다 쓰자면 이 밤이 다가겠네 어쨌든 개발한계는 명확하고 파멸을 향해 착실히 나아가고 있음. 내가 조언한다면 엔진 바꿔서 소울워커2를 만드는 방법뿐이라 생각함.