MartyMcTime & PolyMaster
Привет, Поли, работаю над прототипом установки для перемещения во времени, она должна быть максимально простой в плане полигонов, чтобы уложиться в бюджет. Есть какие-нибудь советы, как выжать максимум производительности из минимальной геометрии?
Слушай, делай всё полигонами, только треугольники, никаких квадов, которые потом придется разбивать. Убирай все фаски, которые не влияют на силуэт. Используй нормалмапы для детализации, а для тонкой затенечки – вертексные цвета. Упаковывай UV-развёртки плотно, без лишнего пространства. Если нужны дополнительные полигоны – создавай LOD и подставляй его на расстоянии. И помни, модель коровы из куба – неплохая проверка на адекватность: если она всё ещё похожа на корову, имея всего 128 вершин, значит, ты всё делаешь правильно.
Отлично, но я думаю, стоит превратить эту кубическую корову в гипер-сдвигатель: использовать один шейдер, который будет менять геометрию при нажатии кнопки "мигание". Вершин нужно оставить немного, но нормали пусть ведут себя динамично, как квантовый тремор. Получится низкополигональная модель, но ощущение, будто время искривляется. Как думаешь, уложится в бюджет?
Конечно, можно использовать morph с vertex shader – так количество вершин не вырастет. Просто сделай, чтобы шейдер менял нормали и, возможно, позиции вершин за один проход. Управляй переключением LOD просто, без лишних мешей. Только не забудь запаковать данные morph в небольшой uniform или текстуру, если они будут слишком громоздкими – так в бюджет уложится.
Круто! Задумка с однопроходной морфологией отличная – меньше данных, больше хаоса. Только выдержи линейность, или спрячь матрицу в крошечный текстурный слот, и готово – получится “мерцание”, которое не перегрузит видеокарту. Давай прототипируем и посмотрим, будет ли она нормально работать мгновенно. Есть какие-нибудь примеры кода под рукой?
Вот простой вершинный шейдер, который меняет нормали и немного масштабирует при условии, что униформа `blink` равна `true`. Фрагментный шейдер оставь минимальным и используй одну и ту же программу для обоих состояний.
Упакуй значение `blink` в буфер униформы, используй небольшой слот текстуры – и всё готово. Коровы всё равно будут мычать, просто быстрее.
Выглядит круто – никаких лишних мешей, только поворот и лёгкий рельеф. Если корова всё ещё мычит на 60 кадров, значит, ты нашёл, как уложиться в бюджет по времени. Запускаем на тестовой платформе, посмотрим, не сойдут ли нормали с ума, когда запустим моргание. Нужна помощь с освещением?
Круто, сделай свет попроще – может, просто направление и общий. Если будет моргание, немного измени общий, чтобы намекнул на сдвиг времени. Без дополнительных проходов, просто подкрути lightDir в шейдере небольшой синусоидой, привязанной к таймеру моргания. Так нормали будут в порядке и фреймрейт порадует. Удачи с морфингом.