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

Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

Embed Size (px)

Citation preview

Page 1: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

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

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

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

Page 2: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

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

● 64Кб● 4Кб● 1Кб● 256 байт

Page 3: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

64k

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

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

● Паковка: kkrunchy

Page 4: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

64k, графика

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

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

Page 5: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

64k, музыка

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

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

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

Page 6: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

4k

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

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

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

Page 7: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

4k, графика

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

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

Page 8: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

4k, музыка

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

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

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

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

Page 9: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

1k

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

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

Page 10: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

256

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

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

Page 11: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

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

Page 12: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

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

Page 13: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

Как-то так

Шейдер

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

Page 14: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

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

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

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

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

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

Page 15: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

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

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

Page 16: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

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

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

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

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

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

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

Page 17: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

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

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

– D(deform(at))

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

Page 18: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

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

Page 19: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

Фигуры

● Шар: 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 20: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

Освещение

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

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

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

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

Page 21: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

Освещение

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

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

Page 22: Tech Talks @NSU: Демосцена: доклад-шоу про демо и интро в форматах 64kb, 4kb, 1kb, 256 bytes и про технологии их изготовления

Можно

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