Renderowanie Reyesa

Rendering Reyesa to architektura oprogramowania komputerowego używana w grafice komputerowej 3D do renderowania fotorealistycznych obrazów. Został opracowany w połowie lat 80. przez Lorena Carpentera i Roberta L. Cooka z Computer Graphics Research Group Lucasfilm , która obecnie nazywa się Pixar . Po raz pierwszy użyto go w 1982 roku do renderowania obrazów efektów Genesis w filmie Star Trek II: Gniew Khana . RenderMan firmy Pixar była jedną implementacją algorytmu Reyesa, aż do jego usunięcia w 2016 roku. Zgodnie z oryginalnym artykułem opisującym algorytm, system renderowania obrazu Reyesa to „Architektura do szybkiego, wysokiej jakości renderowania złożonych obrazów”. Reyes został zaproponowany jako zbiór algorytmów i systemów przetwarzania danych. Jednak terminy „algorytm” i „architektura” zaczęły być używane w tym kontekście jako synonimy i są używane zamiennie w tym artykule. [ potrzebne źródło ]

Nazwa

Reyes to skrót od Renders Everything You Ever Saw (nazwa jest również grą słów Point Reyes w Kalifornii, niedaleko miejsca, w którym znajdował się Lucasfilm) i sugeruje procesy związane z optycznymi systemami obrazowania. Według Roberta L. Cooka , Reyes jest napisany tylko pierwszą literą wielką literą, tak jak w artykule Cook / Carpenter / Catmull SIGGRAPH z 1987 roku.

Architektura

Architektura została zaprojektowana z myślą o kilku celach:

  • Złożoność/różnorodność modelu : aby generować wizualnie złożone i bogate obrazy, użytkownicy systemu renderującego muszą mieć swobodę modelowania dużej liczby (100 000) złożonych struktur geometrycznych, które mogą być generowane przy użyciu modeli proceduralnych, takich jak fraktale i układy cząstek .
  • Złożoność cieniowania : znaczna część wizualnej złożoności sceny jest generowana przez sposób, w jaki promienie światła oddziałują z powierzchniami obiektów stałych. Ogólnie rzecz biorąc, w grafice komputerowej jest to modelowane za pomocą tekstur. Tekstury mogą być kolorowymi tablicami pikseli, opisywać przemieszczenia powierzchni lub przezroczystość lub współczynnik odbicia powierzchni. Reyes umożliwia użytkownikom włączenie shaderów proceduralnych, dzięki którym struktura powierzchni i interakcja optyczna są osiągane za pomocą programów komputerowych implementujących algorytmy proceduralne, a nie proste tabele przeglądowe. Duża część algorytmu ma na celu zminimalizowanie czasu spędzanego przez procesory na pobieraniu tekstur z magazynów danych.
  • Minimalne śledzenie promieni : w czasie, gdy zaproponowano Reyesa, systemy komputerowe miały znacznie mniejsze możliwości pod względem mocy obliczeniowej i pamięci. Oznaczało to, że śledzenie promieni w fotorealistycznej scenie zajęłoby dziesiątki lub setki godzin na klatkę. Algorytmy takie jak Reyes, które generalnie nie wykonywały śledzenia promieni, działają znacznie szybciej i dają niemal fotorealistyczne wyniki.
  • Szybkość : Renderowanie dwugodzinnego filmu z szybkością 24 klatek na sekundę w ciągu jednego roku zapewnia średnio 3 minuty czasu renderowania na klatkę.
  • Jakość obrazu : każdy obraz zawierający niechciane artefakty związane z algorytmem jest uważany za niedopuszczalny.
  • Elastyczność : architektura powinna być wystarczająco elastyczna, aby uwzględniać nowe techniki, gdy staną się one dostępne, bez potrzeby całkowitej ponownej implementacji algorytmu.

Reyes skutecznie osiąga kilka efektów, które uznano za niezbędne do renderowania o jakości filmowej: gładkie, zakrzywione powierzchnie; teksturowanie powierzchni; rozmycie ruchu ; i głębia ostrości .

Reyes renderuje zakrzywione powierzchnie, takie jak te reprezentowane przez parametryczne łaty, dzieląc je na mikropoligony , małe czworokąty, z których każdy ma rozmiar mniejszy niż jeden piksel. Chociaż wiele mikropoligonów jest potrzebnych do dokładnego przybliżenia zakrzywionych powierzchni, można je przetwarzać za pomocą prostych, równoległych operacji. Renderer Reyesa teseluje prymitywy wysokiego poziomu w mikropoligony na żądanie, dzieląc każdy prymityw tylko tak dokładnie, jak to konieczne, aby wyglądał gładko na końcowym obrazie.

Następnie system shaderów przypisuje kolor i krycie do każdego wierzchołka mikropoligonu. Większość rendererów Reyes pozwala użytkownikom dostarczać dowolne funkcje oświetlenia i teksturowania napisane w języku cieniowania . Mikropoligony są przetwarzane w duże siatki, które umożliwiają wektoryzację obliczeń .

Cieniowane mikropoligony są próbkowane w przestrzeni ekranu w celu wytworzenia obrazu wyjściowego. Reyes wykorzystuje innowacyjny algorytm ukrytej powierzchni lub ukrywacz , który wykonuje niezbędne integracje rozmycia ruchu i głębi ostrości bez konieczności stosowania większej liczby próbek geometrii lub cieniowania, niż wymagałoby to renderowania bez rozmycia. Tłumik gromadzi kolory mikropoligonów w każdym pikselu w czasie i pozycji soczewki, używając metody Monte Carlo zwanej próbkowaniem stochastycznym .

Rurociąg

Podstawowy potok Reyes obejmuje następujące kroki:

  1. Zobowiązany. Oblicz objętość ograniczającą każdego prymitywu geometrycznego.
  2. Podział. Podziel duże prymitywy na mniejsze prymitywy, które można pokroić w kostkę.
  3. Kostka do gry. Przekształć prymityw w siatkę mikropoligonów, z których każdy ma mniej więcej rozmiar piksela.
  4. Cień. Oblicz oświetlenie i cieniowanie w każdym wierzchołku siatki mikropoligonu.
  5. Podziel siatkę na pojedyncze mikrowieloboki, z których każdy jest ograniczony i sprawdzony pod kątem widoczności.
  6. Ukrywać. Próbkuj mikropoligony, tworząc ostateczny obraz 2D.

W tym projekcie moduł renderujący musi przechowywać cały bufor ramki w pamięci, ponieważ ostatecznego obrazu nie można wyprowadzić, dopóki wszystkie prymitywy nie zostaną przetworzone. Powszechna optymalizacja pamięci wprowadza krok zwany segmentowaniem przed etapem krojenia w kostkę. Obraz wyjściowy jest podzielony na zgrubną siatkę „wiader”, z których każda ma zwykle rozmiar 16 na 16 pikseli. Obiekty są następnie dzielone z grubsza wzdłuż granic wiader i umieszczane w wiaderkach na podstawie ich lokalizacji. Każdy segment jest dzielony i losowany indywidualnie, a dane z poprzedniego segmentu są odrzucane przed przetworzeniem następnego. W ten sposób w pamięci musi być przechowywany tylko bufor ramki dla bieżącego segmentu i wysokopoziomowe opisy wszystkich prymitywów geometrycznych. W przypadku typowych scen prowadzi to do znacznego zmniejszenia wykorzystania pamięci w porównaniu z niezmodyfikowanym algorytmem Reyesa.

Renderery Reyesa

Następujące renderery wykorzystują algorytm Reyesa w taki czy inny sposób lub przynajmniej pozwalają użytkownikom wybrać go do tworzenia swoich obrazów:

Linki zewnętrzne