소프트웨어 렌더링은 어떻게 이루어 집니까?


15

실시간 소프트웨어 기반 래스터 화를 탐색하고 싶습니다. 요즘 모든 것이 GPU를 향하고 있다는 것을 알고 있지만 소프트웨어 렌더러를 사용하는 것이 합리적 인 몇 가지 게임이 있습니다.

예를 들어 : Voxeltron

복사 트론 (Boxatron)은 복셀 (작은 입방체, 종류)로 만들어진 세계에서 일어나는 경기장 슈팅 게임입니다. 게임의 모든 것은 메뉴와 플레이어 인벤토리를 포함하여 가상 128x128x64 복셀 디스플레이에 표시됩니다. 자세히 보면 때때로 지상의 일부 물체에 그림자를 드리 우는 인벤토리 (점수 / 수명 / 탄약)를 볼 수 있습니다.

저는 대규모 탐험 어드벤처 게임을 만들기위한 궁극적 인 목표로 복셀 렌더링 및 모델링 도구를 오랫동안 연구 해 왔습니다. 약 반 년 전에 Conflux의 경기장 슈팅 게임에서 수행 한 작업과 융합되어 결과입니다.

그것은 매우 단순한 게임입니다. 주로 로봇 론은 구피 생물과 함께 3D 파괴 가능한 세계에서 설정됩니다. 나는 파괴의 의미가 게임 플레이에 얼마나 큰 영향을 미칠지 확신하지 못하지만 벽을 날려 버리는 것이 즐겁습니다. 또한 무서운 몬스터로부터 숨기 위해 방벽을 구성하는 데 사용할 수있는 실험적인 벽 건물 픽업을 추가했습니다.

게임은 작은 경기장에서 진행됩니다. 그중 일부는 Knightlore와 Smash TV 사이에 액션 세트가있는 방을 갖추고 있습니다. 이것은 원래의 모험 기반 디자인으로 몰래 돌아와서 테마 환경을 만드는 변명입니다.

풍모:

  • 부드러운 그림자로 사용자 정의 소프트웨어 렌더링.
  • 내장 사운드 및 음악 신시사이저 (트레일러 음악 제작에도 사용)
  • 재생 및 사후 게임 녹화.

1
게임에 깔끔한 링크. GPU에서 부드러운 그림자얻기 위해 소프트웨어 렌더러를 사용할 필요 는 없습니다 . 그는 렌더 루프 측면에서 일부 성능 제한을 겪게되며 사용 가능한 하드웨어를 악용하는 경우 실제로 1.6GHz 랩톱 또는 핸드 헬드 장치와 같은 기본 시스템에서는 실행할 수 없습니다.
bobobobo

답변:


11

3D 프로젝션, 카메라 설정, 버텍스를 월드 포지션으로 변환하는 등의 기본적인 선형 대수학을 이미 알고 있다고 가정합니다. 내가 좋아하는 두 가지가 있습니다.

게임 엔진 아키텍처

  • 기본적인 선형 대수에 대한 간단한 설명이지만 알아야 할 모든 내용을 다룹니다. 이 책은 여러 가지 다른 이유로도 가치가 있습니다.

실시간 렌더링

  • 조금 더 자세한 적용 범위이지만 다시 알아야 할 사항 만 고수합니다. 다시, 나는이 장의 나머지 부분에서 다루는 주제를 위해 이것을 추천합니다.

3D 객체를 표현하고 처리하는 방법을 알고 나면 화면에 객체를 그리는 방법을 살펴볼 수 있습니다. 일반적으로 이것은 스캔 라인 삼각형 래스터 화 기술로 수행됩니다. 실제로는 매우 간단한 개념입니다. 색상과 UV 텍스처 좌표를 보간하면서 한 번에 하나의 삼각형 행을 그립니다. 이 프로세스는 화면의 모든 삼각형에 대해 계속됩니다. 비 순차적 렌더링을 처리하기 위해 깊이 버퍼를 구현할 수도 있습니다.

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

이에 대해서는 다음 기사에서 자세히 설명합니다.

학습서-소프트웨어 기반 렌더링 소개 : 삼각형 래스터 화

소프트웨어 렌더링 스쿨 : 1 부


그리고 재미를 위해 다음 기사를 확인하십시오.

Quake 2 소스 코드 검토 3/4 (소프트웨어 렌더러)


천만에요 :] (여기에서 프로세스에 대한보다 자세한 개요를 보려면 여기를 참조하십시오 : en.wikipedia.org/wiki/Rasterisation )
zfedoran

거기에 좋은 링크!
Jonathan Connell

5

이것은 꽤 광범위한 주제입니다. 그래도 그래픽 변환 및 래스터 화 파이프 라인의 실제 이론과 원하는 화면에서 픽셀을 분사 할 수있는 실제 구현 비트라는 두 가지 기본 부분이 있습니다. 또한 최적화 (특히 후자의 비트)도 있습니다.

첫 번째 부분은 다행스럽게도 현대 하드웨어 및 API에 의해 노출 된 그래픽 파이프 라인에 사용 된 이론과 동일합니다. 이미 알고 있다면 설정이 완료된 것입니다. 당신이하지 않으면, 나는 좋은 책을 추천합니다. 이것은 꽤 좋습니다.

두 번째 부분에는 많은 옵션이 있습니다. OS 및 툴체인 선택에 크게 의존합니다. Windows에서 C 또는 C ++를 사용하는 경우 간단하게 픽셀을 GDI 비트 맵에 직접 플로팅 할 수 있습니다 ( SetPixel단순하지만 고통스럽고 쓸모없는 느림- CreateDIBSection훨씬 빠른 속도로 조작 할 수있는 원시 바이트 덩어리를 제공합니다).

DirectDraw 표면을 가져 와서 쓰거나 Direct3D 또는 OpenGL 텍스처에 쓸 수도 있습니다. 후자의 경우 여전히 하드웨어를 사용하지만 CPU에서 최종 이미지의 모든 구성을 직접 수행하고 하드웨어 API를 사용하여 결과를 화면에 복사하는 한 여전히 계산됩니다. 최신 PC에서는 원시 VRAM 또는 그 밖의 어떤 것에도 직접 액세스 할 수 없습니다.

더 알고 싶다면 더 구체적인 질문을 작성해야합니다. 나 또는 다른 사람들이 기꺼이 대답 할 것입니다.


이 책의 내용 : "꽤 좋은"것이 얼마나 좋은가요? $ 84 상당의 현금 :)
Jonathan Connell

내가 가장 많이 추천하는 것입니다. 가장 저렴한 옵션은 변환 파이프 라인에서 Direct3D 설명서를 참조하십시오. D3D에 국한되지만 95 %는 일반적인 이론에 적용 할 수 있습니다. OpenGL Red Book의 온라인 사본을 확인할 수도 있습니다. 그것들은 구식이지만 이론 (다시)이 여전히 적용됩니다.

0

자, 저는이 기본 질문에서이 질문에 접근 할 것입니다. 그 이외의 것은 단순한 QA를 위해 넓어 질 수있는 방법입니다. 주제에 관한 책을 구입해야합니다.

소프트웨어 렌더링과 GPU 사용의 가장 근본적인 차이점은 픽셀을 플로팅하는 것입니다. 즉, 소프트웨어 렌더링을 수행 할 때 궁극적으로 모든 픽셀을 플로팅해야 할 책임이 있지만 GPU를 사용하면 하드웨어에 의해 픽셀 플로팅이 대부분 자동화되고 셰이더를 사용하여 픽셀 파이프 라인을 "마사지"합니다.

예를 들어, 화면에 3D 삼각형을 표시하기 위해 프로그래머가해야 할 일을 생각해보십시오. GPU를 사용하면 하드웨어에 꼭짓점의 X, Y, Z 좌표가 무엇인지 알려주고 비디오 카드가 삼각형의 이미지를 구성하는 화면의 모든 픽셀을 채 웁니다. 셰이더를 사용하여 GPU에 텍스처 또는 무언가를 기반으로 모든 픽셀의 색상을 변경하도록 지시 할 수 있지만 궁극적으로 여전히 모든 픽셀을 자동으로 채우는 GPU가됩니다.

소프트웨어 렌더링을 수행하려면 화면에서 채울 픽셀을 계산 한 다음 실제로 해당 픽셀을 채우기 위해 블리 팅을 수행해야합니다. 즉, 행렬 수학을 수행하여 3D 장면의 좌표 공간에서 뷰 공간으로 변환 한 다음 뷰 공간에서 화면으로 점을 투영하는 등의 작업을 수행합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.