Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Введение в демосцену (Иван Авдеев)

Введение в демосцену (Иван Авдеев)

Иван Авдеев (2ГИС) рассказывает о технологиях создания интро и демо в форматах 64kb, 4kb, 1kb и 256 bytes.

http://techtalks.nsu.ru

Tech Talks @NSU

October 07, 2013
Tweet

More Decks by Tech Talks @NSU

Other Decks in Education

Transcript

  1. 1 Очень быстрое, краткое и поверхностное введение в технологии сайзкодинга

    Иван Авдеев, http://w23.ru, 2013-10-07 @ TechTalksNSU Иван Авдеев, http://w23.ru, 2013-07-20 @ UnigineOpenAir
  2. 64k • C/C++ – Не злоупотреблять STL, шаблонами и т.п.

    • Графические тулзы (на С/С++) – Плеер + данные – Артисты (не-программисты) могут рисовать – Пример: Werkkzeug • Паковка: kkrunchy
  3. 64k, графика • Генераторы геометрии и текстур • Хардкод •

    Очень простые данные в виде инструкций («создай куб здесь; выдави из него такую-то грань; subdivide»)
  4. 64k, музыка • (раньше) трекерная – простые семплы, лёгкие паттерны

    • (ныне) софтсинты – Пример: V2 – Простые данные, богатый звук, midi-поток хорошо жмётся
  5. 4k • C или ассемблер – Нельзя crt – Статическая

    память – Гипероптимизм • Паковка – crinkler – Линкер-паковщик (много знает, много может) – Арифметическое кодирование с контекстным моделированием – Кастомный PE-заголовок на грани валидности
  6. 4k, графика • Традиционная геометрия (редко) – «Демка одного эффекта»

    • Два треугольника на весь экран + шейдер – Цвет = f(x, y, t) – Простой сетап (500-800 байт) – Шейдер = текст = хорошо жмётся + shaderminifier – Трассировка лучей!
  7. 4k, музыка • (раньше) midi + gm.dls – Очень лёгкий

    – MIDI :( • Софтсинты – Есть готовые: Sonant, 4klang • Есть даже в виде VST – Заметный размер – 1..2кб
  8. 1k • То же самое, что и 4k, но специализированные

    паковщики • 200 байт для творчества
  9. 256 • DOS! com! Assembler! • Mode 13h (320x200, 8bit)

    • Просто пишем в память – f(x, y, t) – Feedback/клеточные автоматы – Да что угодно!
  10. Трассировка лучей • Аналитическая трассировка – vec3 pos = intersect_geometry(ray);

    • Аналитическое решение уравнения пересечения линии с фигурой – Скучно – Мало возможностей – Сложные объекты сложно • Пересечение с параллелепипедом!
  11. Функции расстояния = няк • Одна функция нормали для всего:

    normalize(grad(D())) • Тривиальные операции CSG – Объединение: min(f(), g()) – Пересечение: max(f(), g()) – Вычитание: max(f(), -g()) – Повторение: D(mod(at,rep) - .5*rep)
  12. Функции расстояния = няк • Просто делать сложные деформации –

    D(at)-.001*noise(at) – D(deform(at)) • (строго говоря это больше не функции расстояния, нужно быть внимательным)
  13. Освещение • Диффузное: color = material.color * diffuse.color * max(0.,

    dot(normal(at), dir_to_light)); • Тени – Честно: пускаем ещё один луч из точки пересечения в источник света – Быстро (и мягко): замеряем N точек на пути между точкой пересечения и источником
  14. Освещение • Scene space ambient occlusion – Делаем N замеров

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