User Tag List

Показано с 1 по 10 из 110

Тема: Сжатие и упаковка - обсуждение и сравнения

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    13.01.2022
    Адрес
    г. Новосибирск
    Сообщений
    103
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    10 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    очередная совершеннейшая бессмыслица - что значит "работа кода игры в МОМЕНТ vsync"??
    какова длина "момента" вообще? а во все прочие "моменты" чем занят комп?
    пока идёт построчное формирование изображения, то, если вы следите за каждой строкой, вы можете менять содержимое видео памяти только для тех строк, которые еще не нарисованы. Если вы рисуете что-то в памяти, из которой луч ничего не рисует, то на следующем кадре, если вы ту область не обновите, изображение появится.
    если вы не следите за vsync, и рисуете (заполняете vram) по принципу как хочу и когда хочу, то у вас неизбежны проблемы - мерцание объектов, отсутствующие объекты, обрезанные объекты (визуально это выглядит как мерцание например части спрайта).
    Например для Atari есть аппаратное определение столкновений спрайтов - будете делать абы-как, оно не будет работать.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    запустил одну музыку в меню, выключил когда игра начинается
    запустил другую в начале уровня, выключил после окончания уровня
    где проблемы? графику не надо синхронизировать
    это ни о чем не говорит. всё зависит от кода программы, рассинхронизация носит накопительный характер и разницу в 50 мс например на короткой и не тяжёлой программе вы никак не заметите.
    если же вы говорите о музыке на фоне, когда нет нужды стыковать кадры изображения и звука, то действительно нет никакой разницы, даже рассинхрон на 20 секунд никто не заметит, но я-то не об этом.

    выдержка из сети:

    В видеоиграх вертикальные импульсы так же используются для синхронизации. Большинство графических операций на игровых консолях, включая и 16-битную эру, могло быть выполнено только в течение кадрового гасящего импульса (который программисты часто называли VBLANK), требуя от программ выполнять всю обработку графики исключительно за это время.

    так же дополнительная информация есть здесь, в том числе ответ про время возврата луча.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    в zx-графике ВСЁ делается программно
    как правильно заметили - не всё. но в целом я понял в чём причина артефактов.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,986
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    322
    Спасибо Благодарностей получено 
    321
    Поблагодарили
    243 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от BelaLugoci Посмотреть сообщение
    пока идёт построчное формирование изображения, то, если вы следите за каждой строкой, вы можете менять содержимое видео памяти только для тех строк, которые еще не нарисованы. Если вы рисуете что-то в памяти, из которой луч ничего не рисует, то на следующем кадре, если вы ту область не обновите, изображение появится.
    это всё известная азбука но при чём тут "работа кода В МОМЕНТ"? за "момент" выполнится несколько команд только

    Цитата Сообщение от BelaLugoci Посмотреть сообщение
    если вы не следите за vsync, и рисуете (заполняете vram) по принципу как хочу и когда хочу, то у вас неизбежны проблемы - мерцание объектов, отсутствующие объекты, обрезанные объекты (визуально это выглядит как мерцание например части спрайта).
    повторяю, это необязательно - смотреть Exolon и учить матчасть!

    Цитата Сообщение от BelaLugoci Посмотреть сообщение
    Например для Atari есть аппаратное определение столкновений спрайтов - будете делать абы-как, оно не будет работать.
    к спеку отношения не имеет

    Цитата Сообщение от BelaLugoci Посмотреть сообщение
    это ни о чем не говорит. всё зависит от кода программы, рассинхронизация носит накопительный характер и разницу в 50 мс например на короткой и не тяжёлой программе вы никак не заметите.
    если же вы говорите о музыке на фоне, когда нет нужды стыковать кадры изображения и звука, то действительно нет никакой разницы, даже рассинхрон на 20 секунд никто не заметит, но я-то не об этом.

    выдержка из сети:

    В видеоиграх вертикальные импульсы так же используются для синхронизации. Большинство графических операций на игровых консолях, включая и 16-битную эру, могло быть выполнено только в течение кадрового гасящего импульса (который программисты часто называли VBLANK), требуя от программ выполнять всю обработку графики исключительно за это время.
    а при чём тут ЗВУК? полностью "проблема" высосана из пальца
    как сказал, AY музыка и звуковые эффекты отдельный процесс
    для эффекта просто взводится флажок когда нужно

    Цитата Сообщение от BelaLugoci Посмотреть сообщение
    так же дополнительная информация есть здесь, в том числе ответ про время возврата луча.
    к спеку отношения не имеет, у него нет динамических аппаратных спрайтов и видеопамять всегда доступна
    повторю, видеосинхронизация на спеке необязательна и не всегда целесообразна
    Прихожу без разрешения, сею смерть и разрушение...

  4. #3

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,873
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    BelaLugoci, вы ушли немного в другую степь

    Обработка игрового цикла - это одно

    подготовка данных и утилизация ненужных данных происходят на этапе подготовки, в процессе игрового цикла - очень редко.


    [инициация игрового экрана]
    |
    [обработка игровых событий внутри экрана] <-[до завершения]
    |
    [завершение игрового экрана] -> [принятие решения]


    распаковка требуется только в первом блоке
    в процессе игровых событий не требуется распаковка данных.
    С уважением,
    Jerri / Red Triangle.

  5. #4

    Регистрация
    13.01.2022
    Адрес
    г. Новосибирск
    Сообщений
    103
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    10 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    распаковка требуется только в первом блоке
    в процессе игровых событий не требуется распаковка данных.
    [инициация игрового экрана]
    это неизменяемые данные совсем-совсем?

    если данные для текущего уровня не позволяют их держать в готовом распакованном виде?
    условный bitmap будет занимать в ОЗУ столько, сколько он весит и если буфер vram у вас например 8 Кб, и все данные у вас распакованы, то у вас уже 16 Кб занято (утрирую, там может быть как 8+1, 8+8 так и 8+28), то есть на код останется мало (помним про Бейсик, DOS и прочее в ОЗУ).

    я подумал о концепции когда используется какое-то быстрое и простое кодирование, пусть для примера это будет RLE, которое сократит использование памяти например на 20%, а это уже 1-1,5 Кб к примеру.
    Для вывода формируется буфер, например 2х16 байт, куда раскодируются спрайты перед копированием в vram, возможно это можно делать только регистрами, тут уж я не знаю, зависит от способа кодирования и раскодирования.

    просто на современных платформах это в порядке вещей, но никто не спорит что сегодня это ЦПУ на гигагерцы и возможно для 6502/z80 это проблема. Думаю нужно проверять опытным путём. Просто в одной игре это параллакс, несколько слоев и наложений, а в другой всё проще, возможно там и можно пользоваться распаковкой на лету.

  6. #5

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,986
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    322
    Спасибо Благодарностей получено 
    321
    Поблагодарили
    243 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от BelaLugoci Посмотреть сообщение
    [инициация игрового экрана]
    это неизменяемые данные совсем-совсем?
    иногда в игрушках зеркалят все спрайты персонажа при его развороте
    но не припомню сочетания такого с предварительной распаковкой

    Цитата Сообщение от BelaLugoci Посмотреть сообщение
    условный bitmap будет занимать в ОЗУ столько, сколько он весит и если буфер vram у вас например 8 Кб, и все данные у вас распакованы, то у вас уже 16 Кб занято (утрирую, там может быть как 8+1, 8+8 так и 8+28), то есть на код останется мало (помним про Бейсик, DOS и прочее в ОЗУ).
    да достаточно на код остаётся, да еще на теневой экранный буфер и на таблицы
    например, в Nemesis the Warlock для 48k спека спрайты ~20k занимают (и это, вероятно, рекорд)
    но обычно спрайты жрут намного меньше, а фоны набирают из небольшого числа тайлов и декораций

    Цитата Сообщение от BelaLugoci Посмотреть сообщение
    я подумал о концепции когда используется какое-то быстрое и простое кодирование, пусть для примера это будет RLE, которое сократит использование памяти например на 20%,
    это вряд ли, спрайты в играх довольно плотные, байт - узкая полоска из 8 пикселей, очень мало будет пустых подряд, как бы даже не распух размер с RLE
    Прихожу без разрешения, сею смерть и разрушение...

    Этот пользователь поблагодарил Lethargeek за это полезное сообщение:

    Barmaley_m(02.04.2023)

  7. #6

    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    2,082
    Спасибо Благодарностей отдано 
    88
    Спасибо Благодарностей получено 
    480
    Поблагодарили
    145 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    иногда в игрушках зеркалят все спрайты персонажа при его развороте
    но не припомню сочетания такого с предварительной распаковкой
    В Диззи-8 делал распаковку спрайта самого диззика так. В пределке 7-ой части тоже этот метод применил, значительно места появилось.

  8. #7

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,986
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    322
    Спасибо Благодарностей получено 
    321
    Поблагодарили
    243 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от drbars Посмотреть сообщение
    В Диззи-8 делал распаковку спрайта самого диззика так. В пределке 7-ой части тоже этот метод применил, значительно места появилось.
    ты не понял
    у тебя каждый раз зеркалится в буфер нужная фаза
    а я про то, что ВСЕ зеркалятся по месту хранения
    (емнип то ли в paradise так, то ли в action force 2)
    Прихожу без разрешения, сею смерть и разрушение...

  9. #8

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,873
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от BelaLugoci Посмотреть сообщение
    [инициация игрового экрана]
    это неизменяемые данные совсем-совсем?
    Вот именно в этом месте и можно использовать распаковку
    именно так я и делал здесь

    для каждого экрана распаковываются спрайты и обьекты которые тут находятся
    Но там в принципе все пожато шоппц


    если данные для текущего уровня не позволяют их держать в готовом распакованном виде?
    условный bitmap будет занимать в ОЗУ столько, сколько он весит и если буфер vram у вас например 8 Кб, и все данные у вас распакованы, то у вас уже 16 Кб занято (утрирую, там может быть как 8+1, 8+8 так и 8+28), то есть на код останется мало (помним про Бейсик, DOS и прочее в ОЗУ).

    я подумал о концепции когда используется какое-то быстрое и простое кодирование, пусть для примера это будет RLE, которое сократит использование памяти например на 20%, а это уже 1-1,5 Кб к примеру.
    Для вывода формируется буфер, например 2х16 байт, куда раскодируются спрайты перед копированием в vram, возможно это можно делать только регистрами, тут уж я не знаю, зависит от способа кодирования и раскодирования.

    просто на современных платформах это в порядке вещей, но никто не спорит что сегодня это ЦПУ на гигагерцы и возможно для 6502/z80 это проблема. Думаю нужно проверять опытным путём. Просто в одной игре это параллакс, несколько слоев и наложений, а в другой всё проще, возможно там и можно пользоваться распаковкой на лету.
    Я бы не стал называть это распаковкой - она должна быть максимально быстрой
    посмотри Mortal Combat

    там к этому делу подошли основательно.
    С уважением,
    Jerri / Red Triangle.

  10. #9

    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,694
    Спасибо Благодарностей отдано 
    302
    Спасибо Благодарностей получено 
    225
    Поблагодарили
    160 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от BelaLugoci Посмотреть сообщение
    я подумал о концепции когда используется какое-то быстрое и простое кодирование, пусть для примера это будет RLE
    Для эксперимента делал в Heavy on the magick упаковку спрайтов врагов при помощи zx7, и в момент, когда монстр появляется в комнате, происходила распаковка спрайтов + маски в небольшой буфер, откуда дальше идёт отрисовка штатным методом. Небольшая задержка не заметна, - и само количество распаковываемых байт незначительно, и сам геймплей позволяет (например, при переходе между комнатами перерисовка экрана не мгновенная). Решение с буфером потому что движок игры в реальном времени зеркалит спрайт туда-сюда, оживляя монстра, и нет выигрыша держать упакованый оригинал и зеркальную копию.
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

    Эти 2 пользователя(ей) поблагодарили Bedazzle за это полезное сообщение:

    BelaLugoci(10.04.2022), Oleg N. Cher(10.04.2022)

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Сжатие и упаковка. hrum3.5, hrust1, hrust2, laser compact x.x.
    от Hrumer в разделе Программирование
    Ответов: 113
    Последнее: 02.01.2020, 14:52
  2. Архивирование, сжатие, упаковка.
    от GriV в разделе Программирование
    Ответов: 30
    Последнее: 22.07.2019, 17:25
  3. ɹǀɩ ATARI. Упаковка данных
    от breeze в разделе Atari
    Ответов: 4
    Последнее: 16.11.2014, 15:55
  4. Упаковка текстов
    от Shadow Maker в разделе Программирование
    Ответов: 18
    Последнее: 10.10.2008, 21:43
  5. RLE сжатие (покритикуйте)
    от Vladson в разделе Программирование
    Ответов: 12
    Последнее: 16.03.2008, 12:29

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •