흥미로운글 있어 단순번역입니다..
짧은 예고편
기술세부정보 영상
지난 1년동안 여가시간 내내 작업한 프로젝트 결과를 보여줄수 있어 기쁩니다.
이 아이디어는 제가 베릴로그 및 FPGA 설계 배우는데 도움이 되는 프로젝트에 대한 흥미로운 아이디어 생각할 때 시작했으며 , 간단한 RT 구훅한다는 개념이 떠올랐습니다. (부분적으론 스스로 만드는 알파고에게 영감을 얻음) 잠시후 - 때떄로 나를 미워하고 어리석은 일 할생각 하니 기뻐하니 이것은 " SNES로 레이트레이싱 하게 만드는게 흥미롭지 않겠나 ?" 로 바뀌였고, 따라서 SuperRT 칩 아이디어가 탄생했습니다.
시도해보고 싶었던것은 SNES 로 게임을 실행하고 장면을 카트리지 칩에 전달하여 그래픽 생성하는 "스타폭스" 와 같은 타이틀에 사용된 Super FX 칩과 유사합니다. 이를 위해 DE10 보드 또는 기타 외부 처리 리소스에서 사용가능한 ARM 코어 사용 하지 않고 설계를 위해 단일 사용자 지정칩 (FPGA?) 설계에 사용하는걸 제한하려고 노력했습니다.
최종결과는 다음과 같습니다
스크린샷 품질이 좋지 못합니다. 알수없는 이유로 SNES 에서 캡처카드로 캡처하면 끔찍한 결과만 나오기 때문에 할수 없이 "어두운 방에서 화면 사진 찰영" 화면 찍는 방식을 사용해야만 했습니다.
여기 보이는 SNES 에 케이블 직결할 공간을 확보 해야 하기 대문에 겉 케이스를 제거 했습니다만 그외에는 미적 감각을 개선하기 위한 어떠한 노력을 하지 않았습니다... 게임팩 을 제거후 라이져케이블로 교체되었습니다. 그런다음 레벨 시프터 세트 를 통과하여 SNES 의 5V 를 3.3v 로 변환시키고 Cyclone V FPGA가있는 DE10-Nano FPGA 에 연결했습니다 레벨 시프터 보드는 절대로 미적감각은 전혀 없으며 필요한 IC만 실장패치키로만 제공되기 때문에 조립하는건 끔찍했습니다
SuperRT 칩 광선 교차 테스트 수행하기 위해 칩에 있는 3개의 병렬화된 실행장치중 하나 (특수목적 CISC프로세서) 에 의해 실행되는 특수 명렁어 사용하여 화면을 구성합니다. 화면구성 사용하면 구와 평면을 기본 빌딩 블록으로 사용한 다음 원하는 형상을 만들기 위해 OR, AND 및 뺴기 작업을 동원하여 CSG 작업의 하위 오브젝트로 구성가능합니다. AABB도 지원하나 주로 컬링테스트에만 사용됩니다. (정 원하면 렌더링 할수 있으나 다른 동작보다 위치 정확도가 낮아 디버깅 목적 뺴고는 유용하지 않습니다.)
렌더러는 화면 픽셀당 최대 4개의 광선을 투사하여 방향성 광원과 단일 반사 바운스에서 직접 그림자를 계산합니다. 표면은 각각 확산 색상과 반사율 속성을 가지며 CSG 결과 또는 특수 기능을 기반하는 수정자를 적용 가능합니다. 이것은 바닥에 바둑판 배열을 생성하는데도 사용합니다
각 픽셀의 광선 색상은 전체 광선 수명주기를 처리하고 해결하는데 필요한만큼 화면구성하는 명령 프로그램 실항하기 위해 " 실행 엔진" 모듈을 사용하는 "선 엔진" 에 의해 계산됩니다. 명령 프로그램 자체는 SNES에서 업로드 되고 로컬 4K RAM 버퍼에 저장됩니다 애니메이션은 필요에 따라 버퍼에 수정된 명령을 작성하며 수행됩니다. 분해된 명령 버퍼는 다음과 같습니다.
각 실행 엔진은 14사이클 파이프라인에 있는 프로세서 모듈이며 일반적으로 하나의 명령이 사이클 당 폐기 되므로 각 실행 단위는 초당 약 5천만 개의 구 또는 평면 또는 AABB 교차를 계산가능합니다. 이에 대한 예외는 분기 작업이 전체 파이프라인 플레싱 하기 때문에 총 16사이클 안에 오버해드가 있습니다. (파이프라인 플레싱 하는데 14사이클+ 2 오버헤드) 최대한 억제하기 위해 분기 예측 시스템이 사용됩니다. 다행스럽게도 근처 광선의 공간적 일관성은 높은 예측 적중률을 달성가능합니다.
프레임이 렌더링 되면 PPU컨버터 모듈은 디스플레이 출력을 위해 SNES VRAM 에 직접 DMA 가능한 형식으로 프레임 버퍼를 전환하며 256색상으로 줄이고 문자 타일도 비트맵 타입으로 전환합니다. 여기에 화면해상도는 200x160 입니다. 이는 전체 프레임에 대해서 정확히 32000바이트의 이미지 데이터를 생성하며 대여폭 제약으로 인해 연속프레임에 걸처 2개의 16000 바이트 블록으로 VRAM 으로 전송됩니다. 따라서 전체 이미지는 2프레임마다 한번만 새로 고침 가능하기떄문에 30fps 으로 효과적으로 제어가능합니다 그러나 테스트 화면은 20fps에 가깝게 실행됩니다. (SNES 의 병목현상)
이 칩은 여러 다른 기본기능도 구현가능합니다. SNES 카트리지 버스에 대한 인터페이스와 SNES 용 32K 코드 를 보유하는 작은 프로그램이 ROM에 있습니다. (이는 인터페이스 보드가 현재 SNES 주소 버스 A라인만 연결하므로 유효 사용공간은 64k 에 불과하며 이중 32k는 메모리에 매핑된 I/O 레지스터가 SuperRT 와 통신하는데 사용합니다.) 도한 SNES 가 16x16 곱셈 연산을 빠르게 가속해주는 곱셈가속기도 있습니다.
디버깅을 위하며 DE10 보드에 HDMI연결하여 두번쩨 모니터로 데이터를 출력하고 디버그 시스템을 조작하기 위해 GPIO 핀에 연결된 메가드라이브 조이패드 사용했습니다 .리소스 제약은 3개의 레이엔진 코어가 모드 활성화 된 경우 하나가 비활성화 될수 있다는걸 의미합니다.
이것이 시스템에 대한 광범위한 개요 입니다. 가까운 장래에 개별 구성요소가 작동하는 방식에 대한 자세한 내용은 후속기사를 게시 예정입니다.