Akashic Engine에서 3D

Akashic Advent Calendar 2019 18일째 보도입니다.
Akashic Engine은 2D 전용 게임 엔진입니다.콘솔기로 말하자면 슈퍼 홈 컴퓨터와 대형 드라이브의 세대라고 할 수 있으며, 그 시대에도 진정한 3D 게임이 있다.이 글은 소프트웨어 3D 렌더링기amber를 사용하여 Akashic Engine에서 3D 게임을 개발하는 것을 연구할 것이다.

amber


amber는 소프트웨어 3차원 렌더링기입니다.WebGL과 같은 하드웨어 기능이나 API를 사용하지 않습니다.

이미지가 README에서 로드됩니다.
이러한 기능은 다음과 같습니다.
  • 텍스쳐 매핑
  • 평면 착색기
  • 장면도
  • 카린(AABB)
  • OBJ 파일 로드
  • 프로그래밍 가능한 착색기
  • 는 TS/JS로 설명합니다.
  • 반투명 및 애니메이션은 지원되지 않습니다.

    amber 배포


    amber는 publish에서 npmjs로 가지 않았습니다.GitHub에서 설치
    npm install blackspotbear/amber
    

    Akashic Engine 사용


    amber의 예는 Akashic Engine의 내장 예입니다.3D 모델의 그리기 방법에 대한 설명을 샘플에 양보합니다. 여기에는amber의 내장 단계만 표시됩니다.
    amber를 조립할 때,amber와 게임 엔진을 연결하는 두 가지 기능을 실현해야 한다.

    ObjResource


    amber 투시obj 파일는 재료와 무늬 등 관련 파일을 가져오는 기능을 제공합니다.파일을 읽는 방법은 게임 엔진에 따라 다르기 때문에 사용자는 이 인터페이스를 실현할 것이다.
    interface ObjResource {
        getTextureData(name: string): { width: number; height: number; rgba: Uint8ClampedArray};
        getMaterialText(name: string): string;
    }
    
    예시 코드의 main.ts#L31-L47 는 실현 예이다.

    FrameBuffer


    amber는 렌더링 결과를 기록합니다FrameBuffer.FrameBuffer의 내용이 실제로 화면에 표시되는 것은 사용자의 책임이다.
    interface FrameBuffer {
        resolution: {
            width: number;
            height: number;
        };
        colorBuffer: number[];
        zBuffer: number[];
    }
    
    예시 코드의 FrameBuffer.ts#L20-L62 는 실현 예이다.
    이상은amber와 게임 엔진을 결합한 실현이다.

    어떤 게임을 할 수 있을까요?


    amber는 JS 엔진에서 모든 드로잉을 수행합니다.따라서 다각형의 수량이 비교적 많은 모델을 그리는 데는 비교적 긴 시간이 필요하다.증가FrameBuffer도 부하를 증가시킵니다(저해상도 렌더링을 확대해서 보여 줍니다).게임에서의 사용을 고려하여 프레임 속도의 안정에 주의해야 한다.몇 개의 정점을 사용할 수 있는지 확인하십시오 (해상도가 프레젠테이션과 같다고 가정).
    프레젠테이션과 함께 제공된 모델로켓의 정점 수는 646이다.akashic-sandbox 프로필에서 CPU 사용 시간을 확인합니다.이는 필자 MacBook Pro(1.4GHz Intel Core i5)의 결과입니다.

    프레임당 9[ms] 정도 걸립니다.30[FPS]의 게임에서 프레임당 33.3[ms]의 종료 처리가 필요합니다.묘사에 사용할 시간을 15[ms]로 설정하면 646x15/9=1076이면 1000개의 정점이 표준이 됩니다.간단하게 3으로 자르면 333다각형이다.
    슈퍼판 스타크래프트와 메가 드라이브 버전의 가상 경주가 한계입니까?

    마지막


    우리는 소프트웨어 3D 렌더링 머신을 이용하여 Akashic Engine에서 3D 게임을 개발하는 것을 고려한다.나는 상당히 엄격한 제한이 있다는 것을 발견했다.나는 득실과 합리성보다 더 중요한 것이 있는 사람이 인생을 즐기는 적당한 방법이라고 생각한다.

    좋은 웹페이지 즐겨찾기