22
1 Очень быстрое, краткое и поверхностное введение в технологии сайзкодинга Иван Авдеев, http://w23.ru, 2013-07-20 @ UnigineOpenAir

Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

Embed Size (px)

DESCRIPTION

Иван Авдеев, программист, 2ГИС (Новосибирск). Расскажу о демосцене с картинками: - Лайв-экшн на шейдерах - Лекция про демомейкинг-сайзкодинг - Демошоу-плейлист

Citation preview

Page 1: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

1Очень быстрое, краткое и поверхностное

введение в технологии сайзкодинга

Иван Авдеев, http://w23.ru, 2013-07-20 @ UnigineOpenAir

Page 2: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

64k

● C/C++– Не злоупотреблять STL, шаблонами и т.п.

● Графические тулзы (на С/С++)– Плеер + данные– Артисты (не-программисты) могут рисовать– Пример: Werkkzeug

● Паковка: kkrunchy

Page 3: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

64k, графика

● Генераторы геометрии и текстур● Хардкод● Очень простые данные в виде инструкций

(«создай куб здесь; выдави из него такую-то грань; subdivide»)

Page 4: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

64k, музыка

● (раньше) трекерная – простые семплы, лёгкие паттерны

● (ныне) софтсинты– Пример: V2– Простые данные, богатый звук, midi-поток

хорошо жмётся

Page 5: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

4k

● C или ассемблер– Нельзя crt– Статическая память– Гипероптимизм

● Паковка – crinkler– Линкер-паковщик (много знает, много может)– Арифметическое кодирование с контекстным

моделированием– Кастомный PE-заголовок на грани валидности

Page 6: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

4k, графика

● Традиционная геометрия (редко)– «Демка одного эффекта»

● Два треугольника на весь экран + шейдер– Цвет = f(x, y, t)– Простой сетап (500-800 байт)– Шейдер = текст = хорошо жмётся + shaderminifier– Трассировка лучей!

Page 7: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

4k, музыка

● (раньше) midi + gm.dls– Очень лёгкий– MIDI :(

● Софтсинты– Есть готовые: Sonant, 4klang

● Есть даже в виде VST

– Заметный размер – 1..2кб

Page 8: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

1k

● То же самое, что и 4k, но специализированные паковщики

● 200 байт для творчества

Page 9: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

256

● DOS! com! Assembler!● Mode 13h (320x200, 8bit)● Просто пишем в память

– f(x, y, t)– Feedback/клеточные автоматы– Да что угодно!

Page 10: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

2Двух треугольников хватит всем

Page 11: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

Как-то так

Шейдер

Цвет = f(x, y, t)

Page 12: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

Трассировка лучей

● Аналитическая трассировка– vec3 pos = intersect_geometry(ray);

● Аналитическое решение уравнения пересечения линии с фигурой

– Скучно– Мало возможностей– Сложные объекты сложно

● Пересечение с параллелепипедом!

Page 13: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

Функции расстояния

● Функция расстояния: float D(vec3 at) = расстояние до ближайшей геометрии

Page 14: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

Функции расстояния = няк

● Одна функция нормали для всего: normalize(grad(D()))

● Тривиальные операции CSG– Объединение: min(f(), g())

– Пересечение: max(f(), g())

– Вычитание: max(f(), -g())

– Повторение: D(mod(at,rep) - .5*rep)

Page 15: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

Функции расстояния = няк

● Просто делать сложные деформации– D(at)-.001*noise(at)

– D(deform(at))

● (строго говоря это больше не функции расстояния, нужно быть внимательным)

Page 16: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

Сферическая трассировка

Page 17: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

Фигуры

● Шар: length(at)-R● Параллелепипед: length(max(abs(at)-size,0.)) ● Цилиндр: length(at.xz)-R● Тор: length(vec2(length(at.xy)-R, at.z)) — r● «Облака»: fnoise(at)

Page 18: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

Освещение

● Диффузное: color = material.color * diffuse.color * max(0., dot(normal(at), dir_to_light));

● Тени– Честно: пускаем ещё один луч из точки

пересечения в источник света– Быстро (и мягко): замеряем N точек на пути

между точкой пересечения и источником

Page 19: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

Освещение

● Scene space ambient occlusion– Делаем N замеров по нормали, сравниваем

расстояния и определяем затенение– Можно делать local illumination!

Page 20: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

Типичные размеры интр

● 64k● 4k● 1k● 256

Page 21: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

Можно

● GPU всё стерпит– Отражения– Преломления– Path tracing

Page 22: Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Air 2013

У матросов нет вопросов