Совы не то, чем кажутся

Даешь много треугольников! Чтобы хоть как-то задать и сохранить неровную поверхность виртуального мира. Внимание! Если она ровная, то немного. Сова чаще неровная: у нее перья, крылья, клюв и все это по бокам и в разные стороны. Можно справиться с проблемой, натянув фотографию совы на цилиндр. Правда это еще не глобус, да и не очень сова, хотя уже близко. Этого и добиваемся.

iB09qD1

Но проблема глубже. Нам нужен свет, много света — это подтвердит любой фотограф с зеркалкой за большую сумму денег или астроном с большой апертурой. И когда я говорю «много света», это не про яркость, а про количество лучей света которые мы сможем поймать на экран дисплея. Можно просто направить в экран виртуальную лампу и света будет много, но ровный белый фон также неинтересен, как и плоский черный экран, когда дома выключили электричество. Нужно искать и, желательно, находить всякие там блики, тени, эмбиенты, умбры, пенумбры, подповерхностно рассеивать и делать другие художественные приемы на поверхности треугольников. Поэтому нам нужна поверхность порельефней — именно на нее мы будем в последствии любоваться через дисплей ЭВМ. Поверхность будет как освещена, так и затенена светом: тут вполне уместно вспомнить детскую фантазию про фонарик с черным светом.

lqaVzVY

Можно упростить и сократить количество света, но выиграть с количеством треугольников в сове, а можно и наоборот. Важен баланс, но главная проблема вовсе не в производительности, а...

...а во времени. У нас всего кратких 16 миллисекунд (1000 мсек / 60 кадров) чтобы рассчитать все точки на экране. Где-то в этот краткий промежуток и пытаются нарисовать сову. И так 60 раз в секунду. Правда, если у нас Гудини с Блендером, то проблем нет: можно подождать и 16 часов, и 16 дней — рано или поздно сцена отрендерится. Но в Крузисе с Думом ждать уже проблематично — проще в шахматы по переписке зарубиться.

z6MwpJm

К этому моменту у нас есть черновой список несколько основных штук: процессоры (много процессоров), на которых выполняются шейдеры (программы); треугольники (много треугольников), которыми выложена поверхность виртуального мира; последняя штука — лучи смерти света которые освещают наше тридэ царство, убивая производительность, но делая нам «вау» на экране. Ну так вот, нет никаких лучей. Есть треугольники и шейдеры, а все остальное делает матан.

Хуже то, что и треугольников может не быть: в памяти ГПУ могут лежать какие-то данные, которые можно по разному... которые можно по разному. Расслабимся, в этом году видеокарты все еще умеют работать с треугольниками и плоскими картинками-текстурами, и даже хранить разные полезные цифры, выстроенные стройными рядами в памяти ГПУ умными программистами, но разработчики железа все больше стремятся сделать все настолько универсальным (Vulkan), что непонятно что останется в итоге. Тем не менее, данные по прежнему двигаются по конвейеру ГПУ и много раз преобразуются, прежде чем попасть на экран. Главное, чтобы они попадали в нужные места, нужного цвета и вовремя. За этим следят шейдеры и программисты.

F0F2lI9

Вообще неважно, чем мы «ощупываем» рельеф треугольных поверхностей и вообще есть ли там треугольники. Вместо матана для световых лучей, мы можем «кричать» звуковыми волнами и сделать симулятор летучих мышей или тыкать палочкой, проверяя столкновение с препятствиями, и тогда получим обычный физический движок. Можно еще что-нибудь придумать (OpenCL, CUDA, ...), но пока что вернемся к световым лучам в темном царстве памяти ГПУ. Лучей не существует, поэтому эффект их присутствия имитируется матаном с формулами. Это происходит в шейдерах. Доказательство их работы, и того, что не зря потрачены тысячи за новую видеокарту, выводятся на экран в виде цветных точек. А можно вывести на звуковую карту. Неважно.

0Qqhkhh

Главная мысль — шейдеры универсальны.

Экономят на всем. Сложные рельефы заменяют рисунком-текстурой поверх плоскогорья. Постоянные и неизменные лучи света заменяют яркостью текстуры или автоматически и единственный раз рассчитывают на этапе редактирования уровней — запекают свет. Даже тени и те приходится рисовать. Или приходилось. Все-таки время идет и мощности железа растут. Именно поэтому сейчас Торренс и Кук пришел на смену Гуру Фонгу. Это образно, потому как есть много способов сэкономить или сделать красиво, но не всё и сразу. В совокупности, новые методы назвали физически корректным рендерингом (PBR). На самом же деле они не совсем корректные или совсем не корректные, но очень стараются быть похожими. Главное, чтобы всякие пека художники не лажали. И программисты тоже.

На сцене появляется лоуполи сова. Это объявляется новым направлением в кг (компьютерной графике).

Количество треугольником можно сократить, если пользоваться текстурами, но тогда сова не пушистая, а глянцевая или пикселявая. Можно взять бамп-мапинг и другие нормальные иллюзии глазьев, но тогда тоже не очень, хотя уже и получше. Еще есть тесселяция — это когда треугольников добавляют на стороне видеокарты и получается погладьше или глаже, но не идеально. Приблизьте Фудзияму и вы не увидите камней на склоне, и совы в ветвях. Тогда можно следить за расстоянием до горы и по мере приближения, добавлять деревья, затем сов, затем клюв, когти, тесселировать перья, что бы это не значило... сложно это всё, но в принципе работает. Если художники и кодеры опять не налажают, ведь у видеокарты есть конвейер и он подчинен своду правил, которые нужно чтить и что-то там еще.

Все лгут и компьютерная графика (кг) здесь не исключение.

  • nw2
  • 29 июня 2018, 01:23
  • 0