Войти
ПроектыФорумОцените

Quake II software renderer by "Panzerschrek" (сборка от 09.09.2014 )

Страницы: 1 2 3 4 Следующая »
#0
17:09, 27 авг. 2014

Суть проекта: рендерер для 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

#1
18:02, 27 авг. 2014

убери дизеринг
оставь только для неба и воды
для остального он не нужен

#2
18:08, 27 авг. 2014

TarasB
> убери дизеринг
Режим текстур меняется через консольную переменную "r_texture_mode". Допустимые значения "texture_linear", "texture_nearest", "texture_fake_filter".
> оставь только для неба и воды
Для неба, как раз, ни dithering, ни интерполяцию текстуры просто так применять нельзя. Иначе появляются артефакты на рёбрах скайбокса.
А вода чем особенна, чтобы на ней оставлять?

#3
18:38, 27 авг. 2014

Panzerschrek[CN]
> А вода чем особенна, чтобы на ней оставлять?
На природных объектах фильтр смотрится в тему, так как на них типа не бывает резких рисунков.
На техногенных объектах фильтр не нужен, потому что болты и стыки должны быть чёткими.

#4
20:50, 27 авг. 2014

А квака Эйч-Ди не собираешься делать? Так как например сделали Серьезного Сема - первую часть?

#5
6:26, 28 авг. 2014

Рафаль
Не собираюсь. Для HD версии нужно делать новые модели, текстуры, перерабатывать уровни. Я же делаю изменения только на уровне кода.
Хотя, кажется такое есть, погугли Quake II xp, Berserker@Quake2 .

#6
12:01, 28 авг. 2014

Во, круто, наконец-то вменяемый рендер для второй кваки =) напоминает софтовый режим от первого Unreal. Жаль, что пока медленный и глючный, но в 640x480 можно поиграть. Рамка от окна Quake 2 только почему-то остаётся даже на fullscreen (Win 8).
Чо, циклы отрисовки полигонов на асме забодяжил? И как я понимаю, оружие в руке не целиком видно именно из-за отсутствия отсечения треугольников...

#7
13:29, 28 авг. 2014

Lezing
> Чо, циклы отрисовки полигонов на асме забодяжил?
это бессмысленно

#8
13:41, 28 авг. 2014

Lezing
> Чо, циклы отрисовки полигонов на асме забодяжил?
Не совсем. Код растеризации на C++. Но в нём применяются некоторые спец-функции на асме для убыстрения некоторой целочисленной арифметики.
MMX пока что применяется только для полноэкранного блендинга и отражения фреймбуффера.

TarasB
> это бессмысленно
Не так уж и бессмысленно. В оригинальном рендеринге asm применялся для оптимизации всех главных ресурсоёмких алгоритмов. А в коде реализации этих алгоритмов на Си оставлены комментарии вроде "это кроссплатформенно но жутко медленно по сравнению с asm".

#9
17:17, 28 авг. 2014

Panzerschrek[CN]
> Но в нём применяются некоторые спец-функции на асме для убыстрения некоторой
> целочисленной арифметики.
Например?
Ты в курсе, что вещи типа

return (int)(( ((long long)(a))*((long long)(b)) ) >> 16)

не надо переписывать на асме, они и так компилируются оптимально?

Panzerschrek[CN]
> В оригинальном рендеринге asm применялся для оптимизации всех главных
> ресурсоёмких алгоритмов.

Во времена оригинала компиляторы были так себе.
А сейчас гццшка тебе такое нахреначит, и ссе-2 применит и ваще.

#10
17:26, 28 авг. 2014

TarasB
> return (int)(( ((long long)(a))*((long long)(b)) ) >> 16)
GCC возможно и может это в

  mov eax, a
  imul b
  shrd eax, edx, 16
такое развернуть, но вот студия в жуть страшную это разварачивает. А ещё, она cmov не умеет при максимальной оптимизации.
#11
17:35, 28 авг. 2014

Panzerschrek[CN]
студия тоже одно умножение делает
и ваще, собирай гэцэцой, какие проблемы?

#12
21:10, 28 авг. 2014

Сам мутил растеризацию (rotozoom и всё такое а-ля демосцена), ещё под 32 битами, цикл на asm намного быстрее гоняет - через disassembly видно, сколько лишних операций после обычной компиляции выполняется. Переписать то же самое на асме, да ещё и самомодифицирующийся код заюзать и вуаля... =) Сейчас уже не так актуально, можно юзать intrinsics и 64-битные переменные, да и inline assembler студией уже не поддерживается - чистый асм линковать не так весело...

#13
21:49, 28 авг. 2014

Lezing
сколько процентов на асме выиграл?
чёто даже на дельфячьем компиляторе лишние действия в дизасме нифига не очевидны
в Пещерах Хулиона даже внутренний цикл рендера написан вообще без асма, на Дельфи, ну попробуй асмом выиграть, больше 5% вряд ли получится
самомодификация это вообще хрень с непредсказуемыми последствиями

#14
23:12, 28 авг. 2014

Народ! А запилите рисовалку как в Кваке2 на плейстейшне! :-) Мне больше нравилось, чем на компе.

Страницы: 1 2 3 4 Следующая »
ПроектыФорумОцените

Тема в архиве.