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

SR64 (тестирование) (2 стр)

Страницы: 1 2 3 411 Следующая »
#15
12:18, 8 окт. 2019

Падает при попытке включить SSAA, а так всё работает. Выглядит симпатично.
Скорость с начальной сценой около 130 fps на ноутбуке с i5-4210U, разрешение 1366*768.

Может будет полезно - конкурс софтрендеров:
https://gamedev.ru/projects/forum/?id=215799
(и кстати там сопоставимая скорость на тысяче текстурированных кубов против 128 с освещением)
Ещё в этой ветке обсуждали проблемы софтрендеров:
https://gamedev.ru/code/forum/?id=233033&page=19

#16
(Правка: 13:02) 12:48, 8 окт. 2019

invis
> Падает при попытке включить SSAA
Печалька. Даже не знаю что там может глючить.
У меня все нормально в любом разрешении: от 320×200 до 2560×1600.

Спасибо за тест.

>сопоставимая скорость
Смотрел их софтрендеры. Там по другому сделано — текстура без динамического освещения.
У меня динамическое освещение + шейдерная система почти как в GL + барицентрический треугольник + кулинг + перегрузка сканлиний. В общем все очень сложно и универсально.
CPU от таких расчетов просто «подыхает». С тенями вообще тормоза :)
По условиям их конкурса у меня 120 fps в 1600×900 с динамическим освещением.
С текстурами (без динамики) будет в районе 160 fps.

В стартовой сцене у меня 290 fps при таком (1366*768*32) разрешении.
2560×1600 - 90 fps.
И это на одном ядре.

#17
13:55, 8 окт. 2019

А текстуры у тебя есть? Не вижу где включить. Также Z-сортировка и тени не включаются.

Мне кажется, текстурирование это как минимум не меньшая нагрузка, поскольку считается попиксельно и требует деления, если оно перспективно-корректное. А освещение у тебя повертексное.

#18
(Правка: 14:23) 14:02, 8 окт. 2019

Освещение вертексное, а просчет пиксельный - интерполяция. Деление в каждом пикселе.
Если сделать фрагментный шейдер - ЦПУ «умрет». Очень медленно получается.
CPU пока на такие нагрузки не расчитан.

Z-Сортировка активируется с прозрачностью.

+ Показать

У меня векторный расчет цвета - это тяжелее чем расчет текстурных координат.
Текстуры у меня быстрее работают. Пока не активировал. Позже выложу.

#19
14:39, 8 окт. 2019

Интерполяцию цвета можно делать уже в целых числах, по сути это тот же альфаблендинг в 2D. Никакого деления там точно не нужно. А если уж считать в плавающей точке, то интерполировать нормаль и делать попиксельное освещение по Фонгу. Собственно освещение - это же dot вектора нормали с вектором света, ну ещё умножение на яркость, вроде ничего очень тяжёлого.
А с текстурированием нужно ещё собственно выбирать цвета из текстуры, тоже нагрузка.

Можешь посмотреть пример TexCube отсюда:
https://sourceforge.net/projects/tfastdib/files/Library/FastDIB%2… .zip/download
Там и блендинг, и текстурирование на твоём любимом ассемблере и Дельфи.

#20
(Правка: 15:15) 15:03, 8 окт. 2019

invis
Спорить не буду.

TexCube vs SR64:

+ Показать

Получается не фэст ДИБ, а очень слоу ДИБ :)
189 fps vs 1063 fps в маленьких окошках.
24 fps vs 102 fps на полный экран (2560x1600).

асм есть асм.

#21
15:35, 8 окт. 2019

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

#22
21:26, 8 окт. 2019

Уточню, что я подразумевал заполнение треугольника методом построчного сканирования по рёбрам, а не через барицентрические координаты.
Здесь это называется Scanline fill:
https://www.rose-hulman.edu/class/csse/csse351/m10/triangle_fill.pdf
Здесь Edge Walking:
https://www.digipen.edu/sites/default/files/public/docs/theses/sa… asterizer.pdf

#23
(Правка: 0:07) 0:07, 9 окт. 2019

invis
> Интерполяцию цвета можно делать уже в целых числах
Это давно не актуально. Float уже давно быстрее integer.
Только если через сдвиг. Тогда будет быстрее.

#24
(Правка: 0:14) 0:14, 9 окт. 2019

invis
> ты сравниваешь фактически с заливкой цветом
У меня нет заливки. Каждый пиксел так считается:

+ Показать

Еще и в 64-х битный Z-буфер пишется.
#25
18:14, 9 окт. 2019

Я как раз о том, что можно считать проще, с Edge Walking интерполяция между двумя значениями, а не тремя.
А смысл использования целых в том, что их (16-битных) больше влезает в SIMD-вектор, можно по 2-4 пикселя считать.

#26
21:25, 13 окт. 2019

Видел статью про умножение матриц на Хабре, смотрю, насовали минусов за игнорирование сишных наработок. И справедливо.
В ветке "SIMD оптимизации", на которую я давал ссылку, обсуждали и матрицы. Есть например такой вариант вообще без ассемблера:
https://godbolt.org/z/faAsiz
30 строк против 100 твоих, это avx2 + fma. Но даже если включить -msse2, будет 70 строк, всё равно короче. И кстати, компилятор при этом использует шаффлы, а не инсерты - то есть знает ассемблер лучше тебя.
Если скинешь тестовый пример, я могу собрать сишный код, прицепить его как obj или dll и сравним.

#27
22:29, 13 окт. 2019

invis
> Видел статью про умножение матриц на Хабре
Просто поделился кодом на чистом асме + Delphi.
В других вариантах там только C++ и интерсинки.

>смотрю, насовали минусов за игнорирование сишных наработок. И справедливо.
Это местные тролли. Они невменяемые. Кроме того я не пишу на C++, о чем сказал сразу.
Но навязывание не прекратилось. Поэтому нет - не справедливо. Не нравится - пройди мимо. Не гадь.

>avx2 + fma
Не в каждом процессоре есть данные технологии.

>И кстати, компилятор при этом использует шаффлы, а не инсерты -
>то есть знает ассемблер лучше тебя.
Вы тоже считаете, что транспонировать нужно используя shufps?

#28
1:58, 14 окт. 2019

eDmk
> Кроме того я не пишу на C++, о чем сказал сразу.
Ну я бы например постеснялся так огораживаться - "пишу на Дельфи, больше ничего не знаю и знать не хочу". С точки зрения хабраюзеров это тоже вполне себе троллинг. Особенно если статья про что-то претендующее на высокую производительность, которая сейчас однозначно ассоциируется с Си.
eDmk
> Не в каждом процессоре есть данные технологии.
В вашем есть. В моём ноутбучном haswell тоже есть, а хасвеллу 6 лет уже.
Ну и повторю, что даже с sse2 сишный компилятор даёт более короткий код.
eDmk
> Вы тоже считаете, что транспонировать нужно используя shufps?
Шаффлом можно тасовать элементы из 2-х регистров, наверное при определённой ловкости рук можно и транспонировать. Но нужно ли?
Вон по той ссылке, которую вам давали
https://habr.com/ru/post/359272/
первый этап оптимизации - перестановка местами внутренних циклов. В результате получается что-то такое:

procedure MulMatrixC(Const A, B: TMatrix4; Var C: TMatrix4);
Type
  PArray = ^TArray;
  TArray = array[0..15] of Single;
var
  i, j, k: Integer;
  pa, pb, pc : PArray;
  a1 : Single;
begin
  for i := 0 to 3 do begin
    pa := @A[i]; pc := @C[i];
    for j := 0 to 3 do pc[j] := 0;
    for k := 0 to 3 do begin
      a1 := pa[k]; pb := @B[k];
      pc[0] := pc[0] + a1 * pb[0];
      pc[1] := pc[1] + a1 * pb[1];
      pc[2] := pc[2] + a1 * pb[2];
      pc[3] := pc[3] + a1 * pb[3];
    end;
  end;
end;
На Дельфи этот вариант медленнее, но это от того что компилятор тупит, на Си автор статьи получил ускорение в 8 раз.
А транспонирования как такового там вообще не видно.
Так что оптимизация - это не только/не столько переписывание на ассемблере.
#29
4:11, 14 окт. 2019

invis
> Ну я бы например постеснялся так огораживаться
Бред какой то. Я не программист. Просто любитель. Я должен знать десяток языков?
Смотрел передачу про программистов. Не все любят C++. Многие пишут на других языках.
А на хабре либо тролли, либо хамы. В статье четко указал тэги: ассемблер, Delphi, математика.
Набежали - заминусовали и навязали свой стиль мышления, который мне не нужен.
Видимо у них работа такая - «срать в камментах».

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