Пишу сразу, я старался этого избежать как мог, но тут будут присутствовать профессиональные(или не очень) термины
Не знаю что меня подвигло опять что-то публиковать на пикабу…
Может быть какое то желание о чем то рассказывать, может быть моя неугомонная натура, а может быть и старый друг, который немного застрял в начале IT карьеры (Friz я в тебя верю), а теперь хочет большего, и те 0.5 капитана, которые мы приговорили, решили за меня: есть же готовый материал, сча всю воду выльем, нарисуем пару мемасиков и вот оно: пикабу пост.
Итак: Machine learning vs GameDev
А хотелось бы сегодня поговорить о банальном и насущном, о ФПС, и о больном AMD vs Nvidia.
Для тех кому читать лениво, ответ прост: если домашний комп, то пофиг, если нет, то только Nvidia, ибо NVLink.
Ну а кому не в лом читать - давайте подумаем, как же у нас завязаны ML и гэймдизайн.
На мой взгляд, ответ очевиден – динамическое построение треугольников(мешей) и их текстурирование.
У нас есть динамический объект типа листвы, мы конечно можем нарисовать что бы листочег болтался туда сюда, но это не красиво и, что самое главное(для разработчиков) не интересно. Нам интересно что бы наш фигов листочек болтался на ветру и блин красиво болтался. Что для этого можно сделать? Ну можно нагрузить движок физики и заставить его отрисовывать плэйн с рядом модфикаторов волна, гравитация, направленный поток (сила приложения, изгибы и прочее), но оно нам не надо и так уже целый уровень рисуем (сверху камень кстати летит), да еще и ряд бампов накладываем... да нафиг не вперлось, хватит наигрались в 3D моделирование c вашими Engine.
Выход простой, перестроить плэйн в числовой ряд (матрицу) и замутить над ней ряд алгоритмов, которые будут просчитывать положение точек а не бесконечно перестраивать треугольники, параллельно натягивая на них текстуры (кстати по секрету, свет кладется не динамически на текстуру, а мы берем ряд битмапок (они заранее срендерены разработчиком и заботливо лежат в папочке текстур) предрасчитываем как она(текстура) должна выглядеть в следующем кадре, выбираем парочку тех что подходят, мержим и только потом выдаем на экран, та же самая фигня с тенями – ваша любимая настройка в игре «динамические тени» – сплошной предрасчет, если вам включить реально динамическую тень, на HD мониторе(1920) шаг просчета будет пикселей 15, визуально миллиметр-полтора, короче майнкрафт).
Там очень длинное отступление в скобках получилось, но надеюсь Вы не потеряли суть, соря мне было очень лениво переписывать статью полностью.
И да, возможно вы угадали, именно этими вычислениями занимаются посредством CUDA. А теперь Америка: CUDA это не процессоры, это фрэймфорк. Физически с внедрением восьмого поколения граф процессоров мало что поменялось.
Это не мега быстрые и не мега умные процессоры, это просто интерпретатор, который позволяет запускать в параллель овердохрена вычислений. Далеко не топовая видяшечка 1060 в исполнении говнопроизводителя Palit может держать 1152 параллельных ниток вычислений. Для сравнения, у TITAN их 2688.
Вот тут там самая ситуация когда ATI конкретно потерялся, NVIDIA уже давала свой SDK CUDA, уже предлагала свой NVLINK вместо PCIe а AMD все еще думал.
Энтузиасты ковыряли CUDA помногу проводили реверс-инжиниринг, рожали свой OpenCL.
Ну а за все эти годы мы получили от AMD только «частичную обратную совместимость CUDA» то есть выдали не свой SDK а совместимость чипа, на уровнях m_30, sm_32, sm_35, sm_50, sm_52, sm_53. Ну а если совсем честно то пришаманили на отдельное ядро виртуалку с обработчиком, что совсем не прибавляет скорости.
И при этом новая видия со своими 20+ чипами заявляет поддержку raytrace на лету, при этом оставляя возможно вызова этой бибилиотеки из SDK. Чито я могу сказать, есть у меня коллега (чистый математик) которая параллельно с основной работой, считает какие то дикие траектории для одного НИИ, когда я притащил ей немного инфы и буклетик с презентации Nvidia TITAN, сначла не поверила а потом подорвалась писать кучу служебок на закубку парочки нод на базе TITAN.
Охх опять я в дебри влез, а ведь обещал «о банальном и насущном, о ФПС»
Ситуация на GameDev рынке сейчас складывается крайне двоякая, чему способствуют обе стороны. Если ATI продолжает лидировать в своей упертости «считать треугольники и натягивать текстуры»(и это крайне способствуют долгострои и индюшки), то разрабы, которые хоть и заняты в основных, проектах, но имеют время на внепроектную деятельность «меленькими шажками», но начинают двигать в сторону математики.
Предложить пока что особо нечего, да мы до сих пор играем больше с дискретизацией и сглаживанием, но проекты основанные полностью на партах уже понемногу крутятся на DEV стэндах, и, скажу я Вам, это круто.
Представьте, в один прекрасный момент решить что мы можем делать быстрее чем набивший оскомину PCIe, наваять свою шину, подсадить на это две трети дата саенса (то что нынче принято называть BIG DATA) а потом развернуться и сказать «а ведь и в играх быстрее будет», ИМХО это круто.