Лекция #21. TES4: Oblivion без прикрас. Технологии рендера [Лектор - Zeux] (4 стр)
Автор: Арсений Капулкин
[21:50] <Zeux> значится, волосы
[21:50] <Zeux> шейдер похож на шейдер, рендерящий бахрому ковра
[21:50] <Zeux> только в 1.5 раза длиннее :)
[21:50] <Zeux> если у кого-то есть желание - вперед.
[21:51] <Zeux> скажу лишь, что освещение анизотропное, оно, в отличие от ковра, заметно :)
[21:51] <Zeux> ну и еще пару слов про общий рендеринг
[21:51] <Zeux> да, они упихали все в один шейдер
[21:51] <Zeux> но это им не помешало делать кое-что в несколько проходов :)))
[21:52] <Zeux> во-первых, не в интерфейсе, а в реальном индоре есть доп. проходы на доп. источники света
[21:52] <Zeux> и на диффузный цвет
[21:53] <Zeux> во-вторых, на уши и череп отдельно делается этот хитрый проход с facegen-спецификой
[21:53] <Zeux> (почему не зашито в обычный шейдер - хз)
[21:54] <Zeux> плюс на глаза рендерится env map с белыми пятнышками
[21:54] <Zeux> ну и еще есть fade factor
[21:54] <Zeux> я наконец-то покажу для него вычисления :)
[21:55] <Zeux> alpha = 1 - saturate((fogparam.x - length(r0)) / fogparam.y)
[21:56] <Zeux> fogparam.x, fogparam.y - некие константы, r0 - расстояние до камеры
[21:56] <Zeux> шейдер сейчас покажу
[21:56] <Zeux> http://www.everfall.com/paste/id.php?vhg8le2ouqly
[21:57] <Zeux> расчеты подобного рода часто встречаются, я уже говорил
[21:57] <Zeux> кстати, комментарии все к шейдерам - мои, понятное дело :)
[21:57] <Zeux> вот, очень быстро про GUI
[21:57] <Zeux> и перерыв.
[21:57] <Zeux> никогда
[21:57] <Zeux> повторю
[21:57] <Zeux> НИКОГДА
[21:57] <Zeux> не делайте такое GUI.
[21:57] <Zeux> атласинга нет ни разу
[21:58] <Zeux> каждый маленький элемент управления
[21:58] <Zeux> это отдельная текстура
[21:58] <Zeux> и отдельный DIP
[21:58] <Zeux> даже если их несколько на экране
[21:58] <Zeux> это бы ладно
[21:58] <Zeux> но две надписи
[21:58] <Zeux> одним шрифтом, конечно же
[21:58] <Zeux> рендерятся двумя dip-ами
[21:58] <Zeux> спасибо, что не по dip-у на букву.
[21:59] <Zeux> текстура английского шрифта - 512х512
[21:59] <Zeux> буквы плотно упиханы в левую верхнюю половину.
[21:59] <Zeux> ну и в довершение
[22:00] <Zeux> вопреки всем рекомендациям
[22:00] <Zeux> ГУИ рендерится ffp.
[22:00] <Zeux> правда, в данном случае опять же на скорость это не повлияло бы.
[22:01] <Zeux> перерыв на вопросы.
[22:01] <Anubis_> а как кста обработка (всякая разная) делается для челофф, которые скиняцца на гпу? ну, пуль я так понял, там нет.. но какая-то обработка должна быть...
[22:03] <Zeux> значится, обработки видимо не делается
[22:03] <Zeux> тени там шадоумепы (я еще скажу)
[22:03] <Zeux> попадания, думаю, делаются приблизительно, т.е. просто некоторый примерный примитив руки
[22:03] <Zeux> (капсулу, кубик, хз что)
[22:03] <Zeux> крутим костью
[22:04] <Anubis_> а, ясн.. интересно просто как народ справляецца :) вот хочет кто-нить точного попадания, как в Думе шоб дырки оставались, а скинит на гпу..
[22:05] <Zeux> думаю, что точного попадания никто не хочет
[22:05] <Zeux> а в думе скинят на цпу :)
[22:04] <ShTiRLiC> Zeux, почему самозатенение такое касячное?!
[22:04] <Zeux> самозатенение косячное - ну я не заметил
[22:04] <Zeux> но тени там тупые очень
[22:04] <Zeux> поэтому возможно вполне
[22:06] <ShTiRLiC> Там жуткие самотени. Я их как-то включил, посмотрел пару минут и вырубил.
[22:06] <Zeux> я слышал о багах на некоторых конфигурациях
[22:06] <Zeux> у меня не глючат
[22:06] <ShTiRLiC> У меня тож не глючат, но ступеньки страшные
[22:06] <Zeux> ой, я совсем забыл сказать
[22:06] <Zeux> в самом первом сценарии
[22:06] <Zeux> там где был уголок комнаты
[22:07] <Zeux> там рисовалось 150к три
[22:07] <Zeux> правда, напомню, что там 3-4 проходный рендеринг :)
[22:13] <Zeux> значится, аутдор
[22:13] <Zeux> сеттинг такой: стою на горке средней высоты, вижу какие-то руины + вода + деревья, травка, камни
[22:14] <Zeux> кол-во дипов - 1320.
[22:14] <Zeux> видео-память - 200 метров
[22:14] <Zeux> треугольников в кадре - 1052030
[22:14] <Zeux> (1 мтри)
[22:15] <Zeux> 50-70 мс на кадр
[22:15] <Zeux> все прониклись? :)
[22:15] <Zeux> думаете, потому, что очень много всего в кадре?
[22:15] <Zeux> как бы не так :)
[22:15] <Zeux> значит, рендеринг происходит так:
[22:16] <Zeux> 1. рендерим в текстуру воды (256х256, A8R8G8B8) ландшафт (86 dips)
[22:16] <Zeux> 2. рендерим руины в текстуру воды (153 dips)
[22:16] <Zeux> 3. рендерим ландшафт с туманом (11 dips)
[22:16] <Zeux> 4. рендерим нечто непонятного мне назначения в A32R32B32G32F
[22:16] <Zeux> 5. рендерим normal map воды (1 dip)
[22:16] <Zeux> 6. рендерим еще 2 текстуры (2 dips)
[22:16] <Zeux> 7. рендерим деревья (46 dips)
[22:16] <Zeux> 8. рендерим ландшафт в первый проход (33 dips)
[22:16] <Zeux> 9. рендерим руины, камни (400 dips)
[22:16] <Zeux> 10. рендерим ландшафт в оставшиеся проходы (159 dips)
[22:16] <Zeux> 11. рендерим еще деревья (37 dips)
[22:16] <Zeux> 12. рендерим дальние горы (6 dips)
[22:16] <Zeux> 13. доп. освещение + fade factor на руины и камни (150 dips)
[22:16] <Zeux> 14. рендерим еще деревья (68 dips)
[22:16] <Zeux> 15. рендерим воду (эти части не видны :), 5 dips)
[22:16] <Zeux> 16. рендерим небо (5 dips)
[22:16] <Zeux> 17. рендерим ландшафт в тумане (31 dips)
[22:16] <Zeux> 18. рендерим траву, кусты (23 dips)
[22:16] <Zeux> 19. рендерим воду (видны :), 5 dips)
[22:16] <Zeux> 20. рендерим еще кусты и камни (40 dips)
[22:16] <Zeux> 21. HDR, gui.
[22:17] <Zeux> пункт 1.
[22:17] <Zeux> там рендерится ландшафт с нормал меппингом
[22:17] <Zeux> одна текстура на патч
[22:17] <Zeux> без многопроходности
[22:17] <Zeux> освещение от 1 направленного источника
[22:18] <Zeux> шейдеры, понятное дело, не привожу, было бы что приводить
[22:18] <Zeux> пункт 2. руины в текстуру воды.
[22:18] <Zeux> там то же самое, что и в обычном рендеринге интерьера
[22:18] <Zeux> только без спекуляра
[22:18] <Zeux> вроде как.
[22:18] <Zeux> пункт 3 - это рендеринг ландшафта с fade factor-ом
[22:19] <Zeux> (тоже 1 текстура на патч, 1 источник)
[22:19] <Zeux> пункт 4 - тут рендерится хз что :)
[22:19] <Zeux> пункт 5.
[22:19] <Zeux> normal map воды генерится из fp-текстуры с высотами
[22:19] <Zeux> которую аплоадит приложение, видимо
[22:20] <Zeux> генерится sobel фильтром
[22:20] <Zeux> (кто не знает - простой матричный фильтр (3х3), по матрице на 2 компоненты нормали)
[22:20] <Zeux> в оригинальном фильтре коэффициенты 1 и 2
[22:20] <Zeux> тут - 0.8 и 1.6
[22:20] <Zeux> (на самом деле, в оригинале это контролируется параметром strength, соотв. тут его подтюнили немного)
[22:21] <Zeux> коэффициенты зашиты в шейдер.
[22:21] <Zeux> шейдер вот: http://www.everfall.com/paste/id.php?butfy6wll4qd
[22:21] <Zeux> пункт 6 - опять же, я не знаю, что это
[22:21] <Zeux> тут какие-то текстуры для воды, вроде как
[22:22] <Zeux> но я не смог понять, к чему они
[22:22] <Zeux> пункт 7. деревья.
[22:22] <Zeux> это ближние деревья
[22:22] <Zeux> (200-1600 трианглов)
[22:22] <Zeux> шейдер на 106 инструкций (вершинный)
[22:23] <Zeux> освещение 1 направленным источником
[22:23] <Zeux> плюс ветер
[22:23] <Zeux> ветер - это 4 матрицы
[22:23] <Zeux> (на дерево)
[22:23] <Zeux> для каждой вершины указаны веса
[22:23] <Zeux> в остальном - все как обычно
[22:24] <Zeux> пункт 8.
[22:24] <Zeux> тут рендерятся патчи ландшафта
[22:24] <Zeux> с шадоу мапами
[22:24] <Zeux> освещение от 1 направленного источника, как обычно
[22:24] <Zeux> шадоу мап один
[22:24] <Zeux> одна текстура (про сплаттинг чуть позже)
[22:24] <Zeux> шейдеры сейчас покажу.
[22:25] <Zeux> http://www.everfall.com/paste/id.php?x1e0n4ls9h0l - вершинный
[22:26] <Zeux> http://www.everfall.com/paste/id.php?upi6lazj8tna - пиксельный
[22:26] <Zeux> изысков особых нет.
[22:26] <Zeux> нормаль как обычно expand-ится двумя инструкциями :)
[22:26] <Zeux> пункт 9. Руины, камни.
[22:26] <Zeux> тут - как обычно все, я уже рассказывал.
[22:26] <Zeux> lighting pass, diffuse pass, specular pass
[22:26] <Zeux> fade factor есть.
[22:27] <Zeux> 400 дипов, потому что уроды :)
[22:27] <Zeux> значится, пункт 10
[22:27] <Zeux> тут делается сплаттинг
[22:27] <Zeux> передается маска
[22:27] <Zeux> и рендерится все с маской, запихивая значение из маски в альфа-канал
[22:27] <Zeux> и бленд.
[22:28] <Zeux> по 2 текстуры на патч?
[22:28] <Zeux> будет по 2 прохода на патч!
[22:28] <Zeux> по 100 текстур на патч?
[22:28] <Zeux> никаких проблем!
[22:28] <Zeux> в среднем там 2 текстуры на патч
[22:28] <Zeux> Пункт 11.
[22:29] <Zeux> здесь рендерятся достаточно близкие деревья.
[22:29] <Zeux> билбордами.
[22:29] <Zeux> с нормал-меппингом.
[22:29] <Zeux> по одному кваду за DIP.
[22:29] <Zeux> ну и fade factor есть
[22:29] <Zeux> пункт 12.
[22:29] <Zeux> да, даже очень дальние горы в Обливионе рендерятся геометрией
[22:29] <Zeux> там есть какие-то огрызки от какого-то LOD в шейдерах
[22:30] <Zeux> они не используются вроде как :)
[22:30] <Zeux> в целом - тупой рендеринг с освещением, нормалмапа.
[22:30] <Zeux> пункт 13 - дорендериваем руины и кадры, все как обычно
20 апреля 2006