소프트웨어 렌더링

[섬네일|right|[그래픽 처리 장치|GPU 없이 장치에서 실행되는 소프트웨어 렌더러]]

**소프트웨어 렌더링**(software rendering)은 컴퓨터 소프트웨어를 사용하여 모델에서 이미지를 생성하는 과정이다. 컴퓨터 그래픽스 렌더링의 맥락에서, 소프트웨어 렌더링은 그래픽 카드와 같은 그래픽 하드웨어 ASIC에 의존하지 않는 렌더링 프로세스를 의미한다. 렌더링은 전적으로 CPU에서 일어난다. (범용) CPU로 모든 것을 렌더링하는 것은 그래픽 하드웨어의 (제한된) 기능에 구속되지 않는다는 주요 장점이 있지만, 동일한 속도를 얻으려면 더 많은 트랜지스터가 필요하다는 단점이 있다.

렌더링은 건축, 시뮬레이터, 비디오 게임, 영화 및 텔레비전 시각 효과, 디자인 시각화에 사용된다. 렌더링은 애니메이션 과정의 마지막 단계이며, 음영, 텍스처 매핑, 그림자, 반사 및 모션 블러와 같은 시각 효과로 모델과 애니메이션에 최종적인 모습을 부여한다. 렌더링은 크게 두 가지 범주로 나눌 수 있다: 실시간 렌더링 (온라인 렌더링이라고도 함)과 사전 렌더링 (오프라인 렌더링이라고도 함). 실시간 렌더링은 3D 컴퓨터 게임과 같이 장면을 대화형으로 렌더링하는 데 사용되며, 일반적으로 각 프레임은 몇 밀리초 내에 렌더링되어야 한다. 오프라인 렌더링은 사실적인 이미지와 영화를 만드는 데 사용되며, 각 프레임을 완성하는 데 몇 시간 또는 며칠이 걸릴 수 있거나 프로그래머가 복잡한 그래픽 코드를 디버깅하는 데 사용된다.

## 실시간 소프트웨어 렌더링
실시간 렌더링의 초점은 성능에 있다. PC용 초기 텍스처 매핑 실시간 소프트웨어 렌더러는 3D 기하학의 환상을 만들기 위해 많은 트릭을 사용했다 (진정한 3D는 주로 비행 시뮬레이터에 사용되는 평면 또는 구로 셰이딩된 다각형에 제한되었다.) 예를 들어, 울티마 언더월드는 제한된 형태의 위아래 보기, 경사진 바닥, 방 위의 방을 허용했지만, 모든 상세한 개체에는 스프라이트에 의존했다. 이 게임들에 사용된 기술은 현재 2.5차원으로 분류된다.

완전한 6 자유도를 허용하는 현대 3D 타이틀과 건축적으로 유사한 최초의 게임 중 하나는 디센트였다. 이 게임은 비트맵 텍스처 삼각형 다각형으로 전적으로 만들어진 3D 모델을 특징으로 했다. 복셀 기반 그래픽스도 델타 포스에서와 같이 빠르고 상대적으로 상세한 지형 렌더링으로 인기를 얻었지만, 인기 있는 고정 함수 하드웨어로 인해 결국 그 사용이 불가능해졌다. 퀘이크는 마이클 애브라시와 존 카맥의 효율적인 소프트웨어 렌더러를 특징으로 한다. 그 인기로 인해 퀘이크와 그 당시의 다른 다각형 3D 게임들은 그래픽 카드의 판매를 촉진했고, 더 많은 게임들이 DirectX와 OpenGL과 같은 하드웨어 API를 사용하기 시작했다. 소프트웨어 렌더링은 주요 렌더링 기술에서 벗어났지만, 2000년대까지 많은 게임들은 여전히 소프트웨어 렌더러를 대체 수단으로 가지고 있었다. 예를 들어, 언리얼과 언리얼 토너먼트는 그 시대의 CPU에서 즐길 만한 품질과 성능을 낼 수 있는 소프트웨어 렌더러를 특징으로 한다. 하드웨어 렌더러가 없는 마지막 AAA 게임 중 하나는 아웃캐스트로, 고급 복셀 기술을 특징으로 하지만 그래픽 하드웨어에서 볼 수 있는 텍스처 필터링과 범프 매핑도 특징으로 한다.

비디오 게임 콘솔 및 아케이드 게임 시장에서 3D의 진화는 더 급작스러웠는데, 이는 항상 단일 목적 칩셋에 크게 의존했기 때문이다. 16비트 콘솔은 스타폭스와 버추어 레이싱과 같은 게임에서 맞춤형 명령어 세트를 통해 소프트웨어 렌더링을 구현하는 RISC 가속기 카트리지를 얻었다. 아타리 재규어와 3DO 인터랙티브 멀티플레이어는 3D 하드웨어를 탑재한 최초의 콘솔이었지만, 플레이스테이션이 출시되어서야 그러한 기능이 대부분의 게임에서 사용되기 시작했다.

1990년대 후반부터 2000년대 초반까지 어린이나 캐주얼 게이머 (오래된 시스템이나 주로 사무용 애플리케이션을 위한 시스템을 사용하는 경우)를 위한 게임은 일반적으로 소프트웨어 렌더러를 대체 수단으로 사용했다. 예를 들어, 토이 스토리 2: 버즈 라이트이어 투 더 레스큐는 게임을 시작하기 전에 하드웨어 또는 소프트웨어 렌더링을 선택할 수 있는 옵션이 있으며, 하프라이프와 같은 다른 게임은 소프트웨어 모드를 기본으로 사용하며 옵션 메뉴에서 OpenGL 또는 DirectX를 사용하도록 조정할 수 있다. 일부 3D 모델링 소프트웨어는 시각화를 위한 소프트웨어 렌더러도 특징으로 한다. 그리고 마지막으로 하드웨어의 에뮬레이션과 검증에도 소프트웨어 렌더러가 필요하다. 후자의 예로는 Direct3D 레퍼런스 래스터라이저가 있다.

하지만 하이엔드 그래픽스에서도 소프트웨어 렌더링의 '기술'은 완전히 사라지지 않았다. 초기 그래픽 카드는 소프트웨어 렌더러보다 훨씬 빨랐고 원래 더 나은 품질과 더 많은 기능을 가지고 있었지만, 개발자를 '고정 함수' 픽셀 처리로 제한했다. 게임의 모습 다양화에 대한 필요성이 빠르게 대두되었다. 소프트웨어 렌더링은 임의의 프로그램이 실행되기 때문에 제한이 없다. 그래서 그래픽 카드는 셰이더라고도 알려진 꼭짓점별 및 화소/프래그먼트별로 작은 프로그램을 실행하여 이러한 프로그래밍 가능성을 재도입했다. DirectX용 HLSL 또는 GLSL과 같은 셰이더 언어는 셰이더용 C와 유사한 프로그래밍 언어이며 (임의 함수) 소프트웨어 렌더링과 유사성을 보이기 시작한다.

실시간 렌더링의 주요 수단으로 그래픽 하드웨어의 채택 이후, CPU 성능은 꾸준히 성장해 왔다. 이는 새로운 소프트웨어 렌더링 기술이 등장할 수 있도록 했다. 하드웨어 렌더링의 성능에 크게 가려졌지만, 일부 현대 실시간 소프트웨어 렌더러는 특화된 동적 컴파일 및 SSE와 같은 고급 명령어 세트 확장을 사용하여 광범위한 기능 세트와 합리적인 성능 (소프트웨어 렌더러의 경우)을 결합한다. 오늘날 하드웨어 렌더링의 소프트웨어 렌더링에 대한 지배력은 비할 데 없는 성능, 기능 및 지속적인 혁신으로 인해 논쟁의 여지가 없지만, 일부는 CPU와 GPU가 어떤 식으로든 수렴되어 소프트웨어와 하드웨어 렌더링의 경계가 희미해질 것이라고 믿는다.

### 소프트웨어 폴백
하드웨어 고장, 드라이버 손상, 에뮬레이션, 품질 보증, 소프트웨어 프로그래밍, 하드웨어 설계, 하드웨어 제한과 같은 다양한 이유로 인해 CPU가 그래픽 파이프라인의 일부 또는 모든 기능을 수행하도록 하는 것이 때때로 유용하다.

그 결과, 기존 하드웨어 그래픽 가속기를 대체하거나 보강할 수 있는 여러 범용 소프트웨어 패키지가 있다:
* RAD 게임 툴스의 Pixomatic은 D3D 7–9 클라이언트 소프트웨어 내에서 정적 링크를 위한 미들웨어로 판매된다.
* 스위프트셰이더는 D3D9 및 OpenGL ES 2 클라이언트 소프트웨어와 함께 번들링하기 위한 미들웨어로 판매되는 라이브러리이다.
* 메사 내의 swrast, softpipe, LLVMpipe 렌더러는 시스템 수준에서 OpenGL 1.4–3.2 하드웨어 장치를 에뮬레이션하는 심으로 작동한다. 메사에 포함된 lavapipe 렌더러는 벌컨 API에 대한 소프트웨어 렌더링을 제공한다.
* WARP는 마이크로소프트가 Windows Vista 이후로 제공하며, D3D 9.1 이상의 빠른 에뮬레이션을 제공하기 위해 시스템 수준에서 작동한다. 이는 마이크로소프트가 개발자에게 항상 제공해온 매우 느린 소프트웨어 기반 레퍼런스 래스터라이저와는 별개이다.
* 애플이 Mac OS X에서 제공하는 CGL의 애플 소프트웨어 렌더러는 시스템 수준에서 빠르고 OpenGL 1.1–4.1 에뮬레이션을 제공한다.

## 사전 렌더링
실시간 렌더링과 달리 사전 렌더링에서는 성능이 두 번째 우선순위일 뿐이다. 주로 영화 산업에서 실사와 같은 장면의 고품질 렌더링을 생성하는 데 사용된다. 오늘날 영화의 많은 특수 효과는 컴퓨터 그래픽스 (CGI)로 전체 또는 부분적으로 생성된다. 예를 들어, 피터 잭슨의 반지의 제왕 영화 시리즈의 골룸 캐릭터는 완전히 CGI로 만들어졌다. 또한 애니메이션 영화에서도 CGI가 인기를 얻고 있다. 가장 주목할 만한 것으로 픽사는 토이 스토리 및 니모를 찾아서와 같은 일련의 영화를 제작했으며, 블렌더 재단은 세계 최초의 오픈 무비인 엘리펀츠 드림을 제작했다.

매우 높은 품질과 다양한 효과에 대한 필요성 때문에 오프라인 렌더링은 많은 유연성을 요구한다. 상업용 실시간 그래픽 하드웨어가 매일 더 높은 품질과 더 많은 프로그래밍 가능성을 갖게 되더라도, 대부분의 사진처럼 실감나는 CGI는 여전히 소프트웨어 렌더링을 필요로 한다. 예를 들어, 픽사의 렌더맨은 무제한의 길이와 복잡성을 가진 셰이더를 허용하며, 범용 프로세서를 요구한다. 구형 하드웨어는 광선 추적 및 글로벌 일루미네이션과 같은 높은 사실성을 위한 기술을 수행할 수 없다.

## 렌더링 방법
렌더링은 준비된 장면으로부터 실제 2D 이미지 또는 애니메이션을 생성하는 최종 과정입니다. 이는 실제 생활에서 설정 작업이 완료된 후 장면을 사진 촬영하거나 비디오 촬영하는 것과 비슷합니다. 여러 가지 다양하고 종종 전문화된 렌더링 방법이 개발되었습니다. 이러한 방법들은 완전히 비현실적인 와이어프레임 렌더링부터 폴리곤 기반 렌더링, 그리고 좀 더 발전된 기술인 래스터 스캔 라인 렌더링, 레이 트레이싱(ray tracing), 글로벌 일루미네이션(global illumination)까지 다양하게 나뉩니다. 렌더링은 한 이미지나 프레임당 1초 미만에서 여러 날까지 소요될 수 있습니다. 일반적으로 각기 다른 방법은 사진과 같이 사실적인 렌더링이나 실시간 렌더링 중 어느 한 쪽에 더 적합합니다.

## 렌더 팜
렌더 팜은 컴퓨터 그래픽 이미지(CGI) 및 3D 프레임의 동시 렌더링을 위해 함께 작동하는 고성능 컴퓨터들의 대규모 연결 그룹입니다. 이것들은 쉽고 고품질의 디지털 렌더링을 실현하는 기반이 되었습니다. 렌더 팜은 렌더링 과정을 완벽하게 만듭니다. 본래 시간과 에너지 소비에 따른 렌더링 비용은 설계 과정을 어렵게 할 수 있으나, 렌더 팜은 이러한 문제를 제거합니다.

## 렌더링 엔진
렌더링 엔진은 3D 모델링 소프트웨어에 통합될 수 있지만 별도의 프로그램으로도 존재합니다. 일부 렌더링 엔진은 여러 3D 모델링 프로그램과 호환되는 반면, 일부는 단 하나의 프로그램과만 호환됩니다. 이들은 준비된 3D 장면을 2D 이미지나 애니메이션으로 변환하는 역할을 합니다. 3D 렌더링 엔진은 레이 트레이싱, 래스터라이제이션, 패스 트레이싱 등 다양한 방법을 기반으로 할 수 있습니다. 속도와 기대 결과에 따라 실시간 렌더링과 비실시간 렌더링으로 구분됩니다. 이는 위에서 설명한 바 있습니다.

CAD 라이브러리는 3D 모델, 텍스처, 높이맵, HDRI, 그리고 시각화를 위한 다양한 컴퓨터 그래픽 조명 소스와 같은 자원을 포함할 수 있습니다.

## 같이 보기
* 3차원 컴퓨터 그래픽스
* 헤드리스 소프트웨어
* Z 버퍼링

## 각주

분류:3차원 렌더링