[WIP] 32X Virtua Fighter in HD 60FPS
SEGA MODEL KING(WangDrum)
0:00 / 0:00
[WIP] 32X Virtua Fighter in HD 60FPS
11 237 просмотров · 2 дн. назад
SEGA MODEL KING(WangDrum)
2,03 тыс. подписчиков
11 237 просмотров · 2 дн. назад
32x용 VF는 현존하는 가장 미니멀한 VF라서 특별한 애정이 있었습니다. 메가드라이브 add on에 카트리지로 동작하는 VF라는 유니크한 면도 참 매력적이었습니다.
그런데 320x224의 매우 열악한 해상도가 늘 아쉬웠었고 hd해상도로 32x VF를 즐기는 걸 상상했었습니다.
이 상상을 실현하기 위해서 업스케일링 랜더링을 구현해보려 했었는데 곧바로 나아갈 수 없는 벽에 막혔습니다. 이유는 32x는 따로 랜더링 전용 커스텀칩이 존재하지 않고 sh2 cpu가 직접 정점을 랜더링 하는데 32x vf코드 구조 자체가 sh2가 랜더링 할 수 있는 정점의 위치를 320x224의 '격자무늬'에 묶어놓은 상태로 최종랜더링을 한다는 점이었습니다. 이런 구조적인 한계때문에 아무리 업스케일링을 해도 결국 정점은 320x224위에서 절대 벗어나지 못하고 정점의 최소 움직임이 격자무늬에 종속되는 형태기때문에 완전한 HD랜더링이 아니게 되버립니다.
이를 해결하기 위해 SH2 인터프리터의 정점/파트 변환 단계에서 카메라 공간 부동소수점 정점·행렬·본·카메라를 전부 가로채서 완전히 재구성한 공간에 새로 작성한 랜더러로 롬에서 추출한 3D지오매트리를 격자무늬에서 벗어나 완전한 부동소수점 공간에 랜더링 하는데 성공했습니다. 지금 보시는 영상이 이 랜더러로 랜더링 한 영상입니다. 2D는 메가드라이브가 그리고 3D는 완전 새로 작성한 랜더러가 그리고 있습니다.
거기에 추가로 30fps로 작동하던 애니매이션을 프레임 보간(Frame Interpolation)코드를 작성해서 60fps로 동작하게 했습니다. 이로써 완전체 32x VF의 감각으로 플레이 할 수 있게 되었습니다.
32x VF를 HD로 선명하게 볼 수 있게 되어서 두드러지게 보이는 32x VF만의 특이한 점이, 두 캐릭터가 랜더링되는 전투장면에서는 로우폴리곤이던 캐릭터가 승리포즈 시 프레임에 한 캐릭터만 랜더링 하는 시점에서 32x의 모든 자원을 한 캐릭터에 쏟을 수 있게 되어서 그나마 좀 더 디테일해진 캐릭터 폴리곤을 볼 수 있습니다. 그 작은 용량의 카트리지에 모든캐릭터의 로우폴리곤 모델 하이폴리곤 모델을 전부 넣은걸 보면 제작진이 조금이나마 나은 폴리곤 모델을 보이려고한 제작진의 노력이 느껴집니다.
여전히 특정 스테이지에서 2d레이어가 3d레이어와 순서가 뒤바뀌는 문제가 있고 게임오버시 폴리곤의색깔이 완전 오염되는 문제등 마이너한 버그가 여전히 많이 있습니다.
I've always had a soft spot for Virtua Fighter on the Sega 32X, as it's the most minimal version of VF ever released. Running VF on a Mega Drive/Genesis add-on via a cartridge gave it a really unique charm. However, the low 320x224 resolution was always disappointing, and I often imagined what it would be like to play 32X VF in HD.
To turn this idea into reality, I tried implementing upscaled rendering, but immediately hit a wall. The 32X lacks a dedicated custom rendering chip, meaning the dual SH-2 CPUs handle vertex rendering directly. On top of that, the 32X VF codebase itself locks vertex positions to a 320x224 pixel grid during final rendering. Because of this structural limitation, simply upscaling the display output meant the vertices remained trapped within that 320x224 grid, restricting their minimum movements and preventing true HD rendering.
To bypass this, I intercepted the camera-space floating-point vertices, matrices, bones, and camera data during the SH-2 interpreter's vertex/part transformation phase. I then reconstructed the coordinate space and re-rendered the 3D geometry extracted from the ROM using a custom-built renderer operating in pure floating-point space, completely free from the pixel grid. The video you're looking at was rendered using this engine—the Mega Drive handles the 2D elements, while the custom renderer handles the 3D.
With 32X Virtua Fighter rendered clearly in HD, a distinct detail becomes remarkably evident: during match sequences where both fighters are rendered, low-polygon models are used. However, during the victory pose—when only a single character remains on screen—the 32X can dedicate all its hardware resources to that sole fighter, revealing a noticeably more detailed, higher-polygon model. Considering the tight storage constraints of the cartridge format, packing both low-poly and high-poly models for the entire roster highlights the extraordinary effort the developers made to deliver the absolute best visual fidelity possible.
On top of that, I wrote frame interpolation code to boost the original 30fps animation to 60fps, giving it the feel of a definitive 32X VF release.
There are still several minor bugs to iron out—such as 2D and 3D layer priority swapping on certain stages and severe polygon color corruption on the Game Over screen—but progress is coming along nicely.