|
|
|
|
|
|
|
|
|
Pixomatic 3은, |
|
간단하게 설치 할 수 있는 DX9 클래스의 소프트웨어 래스터라이저로, 32비트 및 64비트의 양쪽 다 어느 버전에서도, Shader Model 2.0 및 3.0에 있어서의 픽셀 및 정점의 쉐이딩의 전면적인 지원로부터, 이방성 텍스쳐 필터링, 스텐실 버퍼, 픽셀 단위 밉맵까지, 모든 부가적인 기능을 갖추고 있습니다. Pixo 3에의 이식은 간단하고, 일반적으로 LOD를 낮게 해 텍스쳐를 작게 하는 등의 간단한 최적화를 실시해서, 소프트웨어의 렌더링의 퍼포먼스를 높일 뿐입니다. Pixomatic 3의 처리는 Microsoft의 레퍼런스 래스터라이저와 비교해서 수백배의 속도로 실행됩니다. Pixomatic 3이 DX9 클래스의 비디오 카드와 다른 유일한 점은 속도이며, DX9는 완전하게 지원됩니다. |
|
Pixomatic 2는, |
|
기능면에서는 고급 지향의 DX7 클래스의 그래픽 가속기에 필적합니다.
Pixomatic 2를 사용하면, MMX가 지원되고 있는 x86 호환의 Windows 또는 Linux PC상에서, 고품질의 렌더링을 실행할 수 있습니다. 2개의 텍스쳐를 사용할 수 있는 멀티 텍스쳐, 그로, 스펙큘러, 포그, 알파 테스트, 알파블렌딩, 16 및 24비트 z, bi-linear피르타링, 텍스쳐 변형, 투영 텍스쳐등의 처리를 실행할 수 있습니다. 또한, 원시적의 시작/완료 또는 인덱스 스트림, 인덱스가 없는 스트림으로부터 드로잉 된 삼각형 리스트, 삼각형 스트립, 삼각형 팬, 사각형 리스트, 다각형, 포인트 스프라이트, 라인 리스트, 및 라인 스트립의 변환, 클리핑, 및 투영을 실행할 수 있습니다. 게다가 Pixomatic 2에서는, 퍼스펙티브를 교정해 rasterize를 실행할 수 있습니다. 이 때, 삼각형 단위의 MIP Mapping, 서브 픽셀과 서브 텍셀의 정도의 조정, 및 32비트의 색심도의 조정을 동시에 실행할 수 있습니다. 클리어, 필, 복사, 확대, anti-aliasing, 및 디더링도 가능합니다. Pixomatic 2는, 최신의 콘솔이나 3D카드만큼 빠르지는 않습니다만, PIII/733 MHz의 경우는 28 fps, P4/2. 2 GHz의 경우는 67 fps, P4/3. 3 GHz의 경우는 108 fps로 Quake II가 플레이 가능한 충분한 속도를 가지고 있습니다.
Pixomatic 2에서는, 큐브 맵, 프로그램 가능한 픽셀 쉐이더, 픽셀마다의 MIP Mapping, 또는 트라이 리니어의 필터는 지원되고있지 않습니다. 이러한 기능은 효율적으로 소프트웨어에 표현할 수 없기 때문입니다. 또한, Pixomatic에서는, 라이팅 및 프로그램 가능한 vertex 쉐이더를 위한 API도 제공되고 있지 않습니다. 이러한 처리는 Pixomatic보다 게임에서 실시하는 편이 효율적이며, 유연성도 높기 때문입니다. Pixomatic 2에서는 정점 단위의 유저 콜백을 실행할 수 있기 위해, 어느 쪽의 기능도 게임에서 간단하게 표현할 수 있습니다. |
|
3D 하드웨어가 보편하된 현재, Pixomatic은 어떠한 가치를 제공하는 것입니까. Pixomatic은 주로 다음과 같이 두가지 이유로 그 진가를 발휘합니다. 하나는, 3D를 사용할 필요가 있거나, 또는 사용할 가능성이 있는 게임에,신뢰성이 높게 일관성이 있는 기술을 제공한다고 하는 점입니다. 복잡한 픽셀 쉐이더, 대량의 삼각형, 높은 필 레이트가 필요 없습니다. 또한, PC하드웨어에 관한 수고나 비용도 불필요합니다. 큰 이점은 없는 것처럼 보입니다만, 시간과 비용의 절약, 자원의 해방, 및 잠재 시장규모가 증가하는 것에 의한 이점은 충분히 큰 것입니다. 두번째는, 게임을 최고의 품질로 하기 위해서는 하드웨어가 필요한 상황으로, 시장을 펼쳐 기술 지원에 걸리는 비용과 반품을 줄이기 위해서, 하드웨어 가속화에 관계없이, 모든 PC으로 실행하려고 하는 경우에 대체 렌더러로서 기능한다고 하는 점입니다.
다음에, Pixomatic의 작동과 그 설계 내용의 이유에 대해 자세하게 설명합니다.
Pixomatic에서는,게임을 간단하게 기술할 수 있도록 할 필요가 있는 것, 그리고 게임을 간단하게 이식할 수 있도록 할 필요가 있는 것은 처음부터 알고 있었습니다. 이 때문에, Pixomatic의 기능 세트는, 같은 퍼포먼스를 제공하는 하드웨어의 기능 세트에 가까운 것이 되어 있습니다. 효율을 높이기 위해서, Pixomatic에서는 커스텀 API가 사용되고 있습니다. 이 커스텀 API는, 업계표준의 API로부터 간단하게 이식할 수 있도록 설계되고 있습니다. Pixomatic에는, 소프트웨어 래스터라이저로 상정되는 특이성은 없고,게임의 설계시에 특별한 요건도 존재하지 않습니다.
소프트웨어 래스터라이저가 지금까지 이용하고 있던 월드 정보, BSP 트리, 스팬 리스트, 엣지 리스트 등, 수많은 트릭도 없습니다. Pixomatic은 종전의 3D파이프라인의 단순한 표현입니다. 여러 개의 형식의 다각형이 한편으로부터 입력되어 z 및 스텐실 테스트 후에, rasterize 되어 픽셀이 쉐이드 된 결과가 반대편의 구석으로부터 출력되고, frame buffer에 써집니다. 대부분의 경우, 모든 rasterize 기능은 어떠한 조합에서도 작동합니다. 다만, 스텐실 버퍼에 써지는 경우는, frame buffer 또는 z버퍼는 드로잉 되지 않습니다. OpenGL 또는 DX를 잘 아는 유저라면, 곧바로 Pixomatic의 사용법을 습득할 수 있습니다.
우리에게 부과된 2번째의 요구로서 소프트웨어에 의한 rasterize라고 하는 퍼포먼스상의 제한이 있는 가운데, 간단한 조정으로 가능한 한고품질의 결과를 생성할필요가 있었습니다. 그 때문에, 파이프라인을 통하고, 각 색요소에 최소로 8비트의 코어 기능 세트를 표현해, 서브 픽셀의 rasterize와 동종의 클리핑을 실행하고, 퍼스펙티브 교정과 서브 데쿠세루 정도의 텍스쳐 매핑을 실시했습니다. 다음에, 고속으로 실행할 수 있는 모든 렌더링 기능을 추가했습니다. 예를 들어, 같은 색심도와 정도, dot3의 픽셀마다의 라이팅, anti-aliasing, 스텐실 그림자, 24비트의 z (임의), bi-linear필터링, 라이트 맵과 연동하는 고속의 2개의 필터 등입니다.
최종적인 목적은 퍼포먼스를 높이는 것입니다. 고품질의 출력을 생성하는 소프트웨어 래스터라이저를 만드는 것은 그만큼 곤란하지는 않습니다. 가장 곤란한 부분은, 빠른속도의 래스터라이저를 만드는 것입니다. Pixomatic에 대해서는, 퍼포먼스를 높이는 것이 최대의 도전인 것을 처음부터 알고 있었습니다. 이 때문에, 렌더링의 질을 저하시키는 것이 없는 범위에서, 생각할 수 있는 모든 최적화 수법을 사용하고, PIII 클래스 및 P4클래스의 PC으로 최대한의 퍼포먼스를 제공하는 Pixomatic 2를 처음부터 다시 설계했습니다. Pixomatic 3으로 가장 중시된 것은 DX9 호환의 렌더러를 작성하는 것(이었)였지만, 퍼포먼스도 이와 같이 중요했습니다. Pixomatic 3으로 키가 되는 퍼포먼스상의 새로운 요소는, 최대 16개의 코어까지의 concurrent processing를 지원하는 것입니다. |
|
Pixomatic 2의 퍼포먼스와 품질에 대해 가장 중요한 부분은, welder로 불리고 있습니다. 이것은 rasterization 상태가 변경될 때마다 픽셀 파이프라인을 온더 플라이로 컴파일해서, 수동으로 설정된 어셈블리 언어와 동등한 코드를 생성하는 소프트웨어입니다. 컴파일시에는, 수동으로 최적화된 코드 fragment가 적절히 접합, 조정되기 위해, 실질적으로는 수동으로 조정된 어셈블리 코드라고 말할 수 있습니다. 접합된 픽셀 파이프라인에서는, 8개의 MMX 레지스터와 8개의 범용 레지스터가 모두 사용되어 동적인 변수는 거의 항상 레지스터내에 보관 유지됩니다. 그로, 스페큐라 및 양쪽 다 텍스쳐를 bi-linear피르타와 함께 사용하면, save/restore가 발생하는 일이 있습니다. MMX를 잘 사용하면, 텍셀의 룩업처리는 5개의 명령으로 실행할 수 있습니다. z, 스텐실, 및 알파 테스트가 유효한 경우에서도, 거기에는 관계없이, 픽셀 마다 1회의 브랜치(루프의 브랜치) 하지만 실행됩니다 파이프라인은, z 또는 스텐실의 실패가 있으면 조기 완료됩니다.
픽셀 파이프라인을 제어하는 삼각형의 파이프라인의 레벨을 1개상으로 이동하면, 각 삼각형에 드로잉 되는 스팬의 리스트가 생성됩니다. 각 스팬의 길이는 16 픽셀을 넘을 것은 없고, 각 단으로, 부동 소수점으로 퍼스펙티브 교정된 텍스쳐의 계산을 합니다. 픽셀 파이프라인은 차례로 각 스팬을 드로잉 하고, 양단간에 리니어에 보간 해, 각 픽셀에 퍼스펙티브인 분리를 실시했을 때와 같은 결과를 생성합니다. 이렇게 하는 것으로, 퍼포먼스가 향상합니다. 스팬의 생성시에는,SSE 또는 3DNow 하지만 자동적으로 사용됩니다(어느쪽이든가 존재하는 경우). SSE 버전은, 수동으로 조정된 어셈블리 언어로 전체가 기술됩니다. 이 때, 7개의 범용 레지스터, 8개의 MMX 레지스터, 및 6개의 XMM 레지스터가 동시에 사용됩니다. 명령의 예측이 실행 가능한 경우에는, 메모리의 대기 시간을 단축하기 위해서 Z가 먼저 읽힙니다. 즉, rasterization 파이프라인은, MMX 기능, 및 옵션으로 SSE 또는 3DNow를 포함한 X86 프로세서가 사용될 때의 퍼포먼스를 높일 뿐만 아니라, 32비트의 퍼스펙티브 교정된, 서브 픽셀 및 서브텍셀의 렌더링의 질을 높이는 것을 목적으로 해 설계되고 있습니다.
그와 같이 지오메트리파이프라인도 퍼포먼스를 높이기 위해서 구축되고 있습니다. 인터페이스 타입, 원시적의 타입, 및 스트림 구성을 가능한 한 효율적으로 많은 조합으로 처리하기 위해서, C, 수동으로 조정된 어셈블리 코드, 및 온더 플라이로 컴파일 된 코드의 편성이 사용됩니다. 또한, 조정된 코드를 다양한 구성으로 재사용할 수 있도록, 커스텀 프리프로세서를 개발했습니다. 여기서도 가능한 경우, SSE와 3DNow가 사용됩니다. MMX에 최적화된 다양한 클리어와 필이 제공되어 그것과 함께 32비트, 24비트, 16비트를 타겟으로 하는 BLT, 16비트의 경우의 디저링이 준비되어 있습니다. 이것도 다양한 장소에서 사용되는 어셈블리 코드이며, 필요에 따라서 온더 플라이로 컴파일 됩니다. 가능한 경우에는, 클리어, 필, 및 BLT를 고속화하기 위해서 Prefetching이 실행됩니다. 마지막으로, Pixomatic에는, 버퍼 관리와 화면 갱신을 위한 함수가 준비되어 있습니다. 필요에 따라서, 프런트 버퍼를 갱신하기 위한 최고 속도의 방법으로서 GDI BLT와 MMX로 최적화된 독자적인 BLT로부터 자동적으로 선택할 수 있습니다. |
|
Pixomatic 3은, DX9와의 완전한 호환성을 실현하는 것으로, Pixomatic 2와 비교해 처리가 약 4배 늦어집니다. 다만, Pixo 3는 여러 개의 CPU에 대응할 수 있도록 설계되고 있습니다. 멀티 코어 CPU가 탑재된 PC을 최대한으로 활용해서 거의 완벽한 리니어 스케일링이 가능합니다. Pixomatic 3으로 가장 중요한 부분은, Intel에 맞추어 최적화된 SSE 쉐이더 컴파일러입니다. 이것은 일부의 Intel 하드웨어 GPU로 정점 쉐이드를 실행하는 컴파일러와 같습니다. 이 컴파일러가 한층 더 최적화되어 픽셀 섀딩 기능이 추가되고 있습니다. 다소 느려지기는 하지만, DX9 게임을 그대로 실행할 수 있습니다. |
|
결과는 만족스러웠습니다. 범용 3D API를 사용하고, 현재의 x86 CPU에 있어서의 퍼포먼스를 최대한 높일 수 있었습니다. Pixomatic의 퍼포먼스는 Quake를 실행하는데 충분할뿐만 아니라, 최근의 베스트셀러 게임에도 대응할 수 있는 레벨입니다. 즉, Pixomatic에서는, CPU에의 표현에 적절하고 있는 표준의 3D코어 기능이, 간단하게 사용할 수 있는 API와 함께 표현됩니다. 이것으로 렌더링의 질이나 편리한 사용을 희생하는 일 없이, 최고의 퍼포먼스를 얻을 수 있습니다. CPU의 퍼포먼스의 한계를 충분히 고려되어 있어 적절히 실행할 수 없는 기능은 포함되어 있지 않습니다. 그러나 효율성, 정확성 및 신뢰성을 실현하고 있습니다. |
| |
| |
|
|
|
|