Суть проекта: рендерер для Quake II
Платформа: Windows (x86, x86-64 ), процессор с MMX, SSE3
Описание:
Решил улучшить софтварный рендеринг Quake II, доведя его до уровня OpenGL рендеринга, или да софтварного рендерера таких игр как SiN, Unreal, Half-Life.
Пока что нахожусь в процессе разработки, реализовано вроде всё, осталось только увеличить производительность и пофиксить некоторые баги (если они есть).
Фичи:
• 32-битный TrueColor рендеринг (никакой палитры!)
• Цветное освещение мира ( на лайтмапах ), с пересветом
• Динамическое освещение мира ( на динамических лайтмапах )
• Повершинное освещение моделей от динамических источников света
• Фильтрация текстур, Dithering, мипы
• 32-биное небо
• Не нужен видеоускоритель, запускается без всяких вуд, рейджей и рив
• Аппаратная гамма-коррекция
• Экспоненциальный туман
старые cкриншоты (трафик!):
Скриншоты (свежие) :
Скачать текущую версию (09.09.2014): Quake II software renderer by "Panzerschrek"
Установка: просто замените оригинальный файл "ref_soft.dll" ( предварительно сохранив его резервную копию ).
Исходный код: https://github.com/Panzerschrek/Q2PR
убери дизеринг
оставь только для неба и воды
для остального он не нужен
TarasB
> убери дизеринг
Режим текстур меняется через консольную переменную "r_texture_mode". Допустимые значения "texture_linear", "texture_nearest", "texture_fake_filter".
> оставь только для неба и воды
Для неба, как раз, ни dithering, ни интерполяцию текстуры просто так применять нельзя. Иначе появляются артефакты на рёбрах скайбокса.
А вода чем особенна, чтобы на ней оставлять?
Panzerschrek[CN]
> А вода чем особенна, чтобы на ней оставлять?
На природных объектах фильтр смотрится в тему, так как на них типа не бывает резких рисунков.
На техногенных объектах фильтр не нужен, потому что болты и стыки должны быть чёткими.
А квака Эйч-Ди не собираешься делать? Так как например сделали Серьезного Сема - первую часть?
Рафаль
Не собираюсь. Для HD версии нужно делать новые модели, текстуры, перерабатывать уровни. Я же делаю изменения только на уровне кода.
Хотя, кажется такое есть, погугли Quake II xp, Berserker@Quake2 .
Во, круто, наконец-то вменяемый рендер для второй кваки =) напоминает софтовый режим от первого Unreal. Жаль, что пока медленный и глючный, но в 640x480 можно поиграть. Рамка от окна Quake 2 только почему-то остаётся даже на fullscreen (Win 8).
Чо, циклы отрисовки полигонов на асме забодяжил? И как я понимаю, оружие в руке не целиком видно именно из-за отсутствия отсечения треугольников...
Lezing
> Чо, циклы отрисовки полигонов на асме забодяжил?
это бессмысленно
Lezing
> Чо, циклы отрисовки полигонов на асме забодяжил?
Не совсем. Код растеризации на C++. Но в нём применяются некоторые спец-функции на асме для убыстрения некоторой целочисленной арифметики.
MMX пока что применяется только для полноэкранного блендинга и отражения фреймбуффера.
TarasB
> это бессмысленно
Не так уж и бессмысленно. В оригинальном рендеринге asm применялся для оптимизации всех главных ресурсоёмких алгоритмов. А в коде реализации этих алгоритмов на Си оставлены комментарии вроде "это кроссплатформенно но жутко медленно по сравнению с asm".
Panzerschrek[CN]
> Но в нём применяются некоторые спец-функции на асме для убыстрения некоторой
> целочисленной арифметики.
Например?
Ты в курсе, что вещи типа
return (int)( ( ( ( long long)( a))*( ( long long)( b)) ) >> 16)
не надо переписывать на асме, они и так компилируются оптимально?
Panzerschrek[CN]
> В оригинальном рендеринге asm применялся для оптимизации всех главных
> ресурсоёмких алгоритмов.
Во времена оригинала компиляторы были так себе.
А сейчас гццшка тебе такое нахреначит, и ссе-2 применит и ваще.
TarasB
> return (int)(( ((long long)(a))*((long long)(b)) ) >> 16)
GCC возможно и может это в
mov eax, a imul b shrd eax, edx, 16
такое развернуть, но вот студия в жуть страшную это разварачивает. А ещё, она cmov не умеет при максимальной оптимизации.
Panzerschrek[CN]
студия тоже одно умножение делает
и ваще, собирай гэцэцой, какие проблемы?
Сам мутил растеризацию (rotozoom и всё такое а-ля демосцена), ещё под 32 битами, цикл на asm намного быстрее гоняет - через disassembly видно, сколько лишних операций после обычной компиляции выполняется. Переписать то же самое на асме, да ещё и самомодифицирующийся код заюзать и вуаля... =) Сейчас уже не так актуально, можно юзать intrinsics и 64-битные переменные, да и inline assembler студией уже не поддерживается - чистый асм линковать не так весело...
Lezing
сколько процентов на асме выиграл?
чёто даже на дельфячьем компиляторе лишние действия в дизасме нифига не очевидны
в Пещерах Хулиона даже внутренний цикл рендера написан вообще без асма, на Дельфи, ну попробуй асмом выиграть, больше 5% вряд ли получится
самомодификация это вообще хрень с непредсказуемыми последствиями
Народ! А запилите рисовалку как в Кваке2 на плейстейшне! :-) Мне больше нравилось, чем на компе.
Тема в архиве.