타일 렌더링(Tiled rendering)은 광학 공간에 일반적인 그리드 형태로 컴퓨터 그래픽 이미지를 세분화하고 그리드 또는 타일의 각 섹션을 개별적으로 렌더링하는 프로세스이다. 이 설계의 이점은 메모리의 양과 대역폭이 한번에 전체 프레임을 그리는 immediate mode 렌더링 시스템과 비교하여 줄어드는 것이다. 이로 인해 타일 렌더링 시스템이 특히 저전력 handheld device 사용에서 일반적으로 사용되게 되었다. 타일 렌더링은 끝에서가 아니라 그래픽 파이프라인의 중간에서 기하학적 정령을 수행하기 때문에 때때로 "sort middle" 아키텍처로 알려져 있다.[1]

기본 개념편집

Creating a 3D image for display consists of a series of steps. First, the objects to be displayed are loaded into memory from individual models. The system then applies mathematical functions to transform the models into a common coordinate system, the world view. From this world view, a series of polygons (typically triangles) is created that approximates the original models as seen from a particular viewpoint, the camera. Next, a compositing system produces an image by rendering the triangles and applying textures to the outside. Textures are small images that are painted onto the triangles to produce realism. The resulting image is then combined with various special effects, and moved into a frame buffer, which video hardware then scans to produce the displayed image. This basic conceptual layout is known as the display pipeline.

Each of these steps increases the amount of memory needed to hold the resulting image. By the time it reaches the end of the pipeline the images are so large that typical graphics card designs often use specialized high-speed memory and a very fast computer bus to provide the required bandwidth to move the image in and out of the various sub-components of the pipeline. This sort of support is possible on dedicated graphics cards, but as power and size budgets become more limited, providing enough bandwidth becomes expensive in design terms.

Tiled renderers address this concern by breaking down the image into sections known as tiles, and rendering each one separately. This reduces the amount of memory needed during the intermediate steps, and the amount of data being moved about at any given time. To do this, the system sorts the triangles making up the geometry by location, allowing to quickly find which triangles overlap the tile boundaries. It then loads just those triangles into the rendering pipeline, performs the various rendering operations in the GPU, and sends the result to the frame buffer. Very small tiles can be used, 16×16 and 32×32 pixels are popular tile sizes, which makes the amount of memory and bandwidth required in the internal stages small as well. And because each tile is independent, it naturally lends itself to simple parallelization.

In a typical tiled renderer, geometry must first be transformed into screen space and assigned to screen-space tiles. This requires some storage for the lists of geometry for each tile. In early tiled systems, this was performed by the CPU, but all modern hardware contains hardware to accelerate this step. The list of geometry can also be sorted front to back, allowing the GPU to use hidden surface removal to avoid processing pixels that are hidden behind others, saving on memory bandwidth for unnecessary texture lookups.[2]

There are two main disadvantages of the tiled approach. One is that some triangles may be drawn several times if they overlap several tiles. This means the total rendering time would be higher than an immediate-mode rendering system. There are also possible issues when the tiles have to be stitched together to make a complete image, but this problem was solved long ago[출처 필요]. More difficult to solve is that some image techniques are applied to the frame as a whole, and these are difficult to implement in a tiled render where the idea is to not have to work with the entire frame. These tradeoffs are well known, and of minor consequence for systems where the advantages are useful; tiled rendering systems are widely found in handheld computing devices.

Tiled rendering should not be confused with tiled/nonlinear framebuffer addressing schemes, which make adjacent pixels also adjacent in memory.[3] These addressing schemes are used by a wide variety of architectures, not just tiled renderers.

초기 작업편집

타일 렌더링에 대한 초기 작업의 대부분은 Pixel Planes 5 아키텍처의 일부분으로 수행되었다.[4][5]

Pixel Planes 5 프로젝트는 타일 접근 방식을 검증하였고, 현재 타일 렌더링에 대한 표준으로 간주되는 대부분의 기술을 발명하였다. 현장에서 다른 논문에서 가장 널리 인용된 작업이다.

타일 접근은 소프트웨어 렌더링의 역사 초기에 알려졌다. Reyes rendering 의 구현은 종종 "타일 버킷(tile buckets)"으로 이미지를 나눈다.

상업 제품 - 데스크탑과 비디오 콘솔편집

데스크탑 GPU의 개발 초기에, 몇몇 회사는 타일 아키텍처를 개발했다. 시간이 지남에 따라, 이들은 빠른 맞춤형 외장 메모리를 갖춘 직접 모드(immediate-mode) GPU로 대체되었다.

주요 사례:

커다란 온칩 버퍼를 사용하는 타일 기반 아키텍처가 아닌 예제는 다음과 같다:

  • Xbox 360 (2005): the GPU contains an embedded 10 MiB eDRAM; this is not sufficient to hold the raster for an entire 1280×720 image with 4× multisample anti-aliasing, so a tiling solution is superimposed when running in HD resolutions and 4× MSAA is enabled.[9]
  • Xbox One (2013): the GPU contains an embedded 32 MiB eSRAM, which can be used to hold all or part of an image. It is not a tiled architecture, but is flexible enough that software developers can emulate tiled rendering.[10]틀:Failed verification

상업 제품 - 임베디드편집

상대적으로 낮은 외부 메모리 대역폭과 요구된 온칩 메모리의 양으로 인해 타일 렌더링은 임베디드 GPU에서 널리 사용되는 기술이다. 현재 예제는 다음과 같다:

타일 기반 즉시 모드 렌더링(Tile-based immediate mode rendering, TBIM):

  • ARM Mali 시리즈.[11]
  • Qualcomm Adreno (300 시리즈와 최신 시리즈는 FlexRender를 통해 동적으로 즉시(immediate)/직접(direct) 모드를 스위치 할 수 있음).[12][13]

타일 기반 지연 렌더링(Tile-based deferred rendering, TBDR):

Vivante는 밀접하게 연관된 프레임 버퍼 메모리(위에서 설명한 Xbox 360 GPU와 유사)를 탑재한 모바일 GPU를 생산한다. 스크린의 일부를 렌더링 하기위해 사용되더라도 렌더링 된 영역이 커다란 것은 일반적으로 타일 기반 아키텍처를 사용하지 않는다는 것을 의미한다.

같이 보기편집

각주편집

  1. Molnar, Steven (1994년 4월 1일). “A Sorting Classification of Parallel Rendering” (PDF). IEEE. 2014년 9월 12일에 원본 문서 (PDF)에서 보존된 문서. 2012년 8월 24일에 확인함. 
  2. “PowerVR: A Master Class in Graphics Technology and Optimization” (PDF). Imagination Technologies. 2012년 1월 14일. 2013년 10월 3일에 원본 문서 (PDF)에서 보존된 문서. 2014년 1월 11일에 확인함. 
  3. Deucher, Alex (2008년 5월 16일). “How Video Cards Work”. X.Org Foundation. 2010년 5월 21일에 원본 문서에서 보존된 문서. 2010년 5월 27일에 확인함. 
  4. Mahaney, Jim (1998년 6월 22일). “History”. 《Pixel-Planes》. University of North Carolina at Chapel Hill. 2008년 9월 29일에 원본 문서에서 보존된 문서. 2008년 8월 4일에 확인함. 
  5. Fuchs, Henry (1989년 7월 1일). “Pixel-planes 5: a heterogeneous multiprocessor graphics system using processor-enhanced memories”. 《Pixel-Planes》. ACM. 2012년 8월 24일에 확인함. 
  6. Smith, Tony (1999년 10월 6일). “GigaPixel takes on 3dfx, S3, Nvidia with... tiles”. 《Gigapixel》. The Register. 2012년 10월 3일에 원본 문서에서 보존된 문서. 2012년 8월 24일에 확인함. 
  7. mestour, mestour (2011년 7월 21일). “Develop 2011: PS Vita is the most developer friendly hardware Sony has ever made”. 《PS Vita》. 3dsforums. 2011년 7월 21일에 확인함. [깨진 링크]
  8. Kanter, David (August 1, 2016). “Tile-based Rasterization in Nvidia GPUs”. 《Real World Technologies》. 2016년 8월 4일에 원본 문서에서 보존된 문서. April 1, 2016에 확인함. 
  9. LLC), Tara Meyer (Aquent. “XNA Game Studio 4.0 Refresh”. 《msdn.microsoft.com》. 2015년 1월 7일에 원본 문서에서 보존된 문서. 2014년 5월 15일에 확인함. 
  10. “Xbox One developer: upcoming SDK improvements will allow for more 1080p games”. 
  11. “Mali rendering strategy”. ARM. 2016년 3월 4일에 원본 문서에서 보존된 문서. 2018년 10월 27일에 확인함. 
  12. “An update on the freedreno graphics driver”. lwn.net. 2015년 9월 5일에 원본 문서에서 보존된 문서. 2015년 9월 15일에 확인함. 
  13. “The rise of mobile gaming on android” (PDF). Qualcomm. 5쪽. 2014년 11월 9일에 원본 문서 (PDF)에서 보존된 문서. 17 September 2015에 확인함. 
  14. “A look at the PowerVR graphics architecture: Tile-based rendering”. Imagination Technologies. 2015년 4월 5일에 원본 문서에서 보존된 문서. 2015년 9월 15일에 확인함. 
  15. “VideoCoreIV-AG100” (PDF). Broadcom. 2013년 9월 18일. 2015년 3월 1일에 원본 문서 (PDF)에서 보존된 문서. 2015년 1월 10일에 확인함.