Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Немного софтверного рендеринга (6 стр)

Немного софтверного рендеринга (6 стр)

Поделиться

Страницы: 1 2 3 4 5 6 7 8 Следующая

FordPerfectПостоялецwww25 окт. 201723:02#75
Ламбертовское освещение:
Изображение
eDmkПользовательwww25 окт. 201723:22#76
>Что именно показано на этой картинке?
>По каким формулам оно вычисляется?
Дык формулу я привел в п. 69.
Свет вычисляется по формуле: Формула рассеянного освещения: I = I * K * Cos(Ang)
А на картинке показана интерполяция функций Dot и ArcCos. Вот и все.
ArcCos - это обратная функция Cos. Возвращает угол в радианах. т.е. она обратна Dot.
Затенение чисто по Dot некорректно.
eDmkПользовательwww25 окт. 201723:25#77
FordPerfect
Тут полно всяких моделей освещения:
http://steps3d.narod.ru/tutorials/lighting-tutorial.html
eDmkПользовательwww25 окт. 201723:27#78
>Там почему-то нет ссылки на моё Demo на DX9.
Сочуствую Mikle, и вам и себе. Касперский расправился с вашим файлом. У вас троян.
UDS:DangerousObject.Multi.Generic

Правка: 25 окт. 2017 23:31

eDmkПользовательwww25 окт. 201723:28#79
Ламбертовское освещение
Так у меня так и считается ;) Просто в моей формуле за Ang стоит еще вычисление скалярного произведения.

Правка: 25 окт. 2017 23:29

122Постоялецwww25 окт. 201723:33#80
eDmk
> Ваш тест мистер 122 - 167 fps.
> Все в разрешении 2560x1600.
> На моем пока тухленько :( 8 fps в 2560x1600.
Вот типа того к чему ты можешь стремиться. :)

> А так у вас быстро конечно все, но треугольник не интерполируется.
> Грубо говоря - не правильный математически :)
Это так. И так и надо делать. В отзывах на стиме я получал много негатива в духе "у меня на 4к мониторе не дает 60 фпс", но не помню ни одного отзыва "треугольники неправильные". Так что, у черту правильность.

Mikle
> Там почему-то нет ссылки на моё Demo на DX9.
Возможно я не заметил его когда таблицу делал? На голом дх должно быть еще быстрее.

Правка: 25 окт. 2017 23:35

FordPerfectПостоялецwww25 окт. 201723:34#81
eDmk
>Затенение чисто по Dot некорректно.
Ну что за нафиг.

>формуле за Ang стоит еще вычисление скалярного произведения.
Другими словами cos(arccos(...)). Что можно заменить на выражение внутри скобок .

eDmkПользовательwww25 окт. 201723:48#82
122
>но не помню ни одного отзыва "треугольники неправильные".
У меня это просто больная тема. Я интерполяцию вижу/не вижу сразу.
5 алгоритмов перепробовал. Такой как у вас шустрый у меня есть.
Тоже порядка 140 кадров выдает, но интеполяция по X отсутствует. Только по Y.
Из-за этого кажется, что Y подпрыгивает иногда, хотя в динамике не видно.
Взял алго по барицентрическим координатам. По масимуму его оптимизировал
и остановился на нем. В моем тесте есть hedra_01.obj. На нем все «грехи» треугольника видны.
Особенно если включить прозрачность.
Под 0° (Нормаль треугольника к оси зрения) есть Z-Fighting между полигонами.
Пока так и не смог удалить. Зато рисует на 99.9% как видюхи.

Правка: 25 окт. 2017 23:55

MikleМодераторwww25 окт. 201723:55#83
122
> На голом дх должно быть еще быстрее.
Оно и было быстрее почти вдвое.
eDmk
> Касперский расправился с вашим файлом. У вас троян.
Тот Касперский, что на VirusTotal, не ругается, как другие "гиганты" - и DrWeb, NOD 32. А ругаются всякие Авасты и т. п.
eDmk
> интеполяция по X отсутствует. Только по Y.
Интерполяция чего? Тектсурных координат и света? У меня она есть, и правильная.

Правка: 25 окт. 2017 23:57

eDmkПользовательwww26 окт. 20170:02#84
>Ну что за нафиг.
У меня софтверный движок с треугольниками у которых отрицательная площадь.
Для этого нужна обратная Dot-функция. А то все будет вогнутым. У меня система координат - НОЛЬ слева верху.
В OpenGL система координат НОЛЬ слева снизу и вверх, что позволяет оперировать треугольниками с положительной площадью.
На железке легко сделать снизу вверх, а в софтвере не очень, т.к. SetDIBitsToDevice рисует сверху вниз.
Можно перспективной матрицой перевернуть, но тогда она (MVP) для OpenGL не подходит :) Короче гимор.
FordPerfectПостоялецwww26 окт. 20170:02#85
Ну серьёзно:
> I = I * K * Cos(Ang)
(наверно всё-таки I = I0 * K * Cos(Ang) )
здесь Ang=ArcCos(dot(N,L)/(Length(N)*Length(L))).
Т. е.
I = I0 * K * Cos(ArcCos(dot(N,L)/(Length(N)*Length(L)))) = I0 * K * dot(N,L)/(Length(N)*Length(L)).

И длину можно вычислять без Abs, и за один корень:

function VecCosAngle(A, B: TVertex): Single;
var
  D2: Single;

begin
  D2 := VecScalarMul(A, A) * VecScalarMul(B, B);
  if (D2 > 0.0) then
  begin
    Result := VecScalarMul(A, B) / Sqrt(D2);
  end
  else Result := 0.0;
end;

eDmkПользовательwww26 окт. 20170:04#86
>Тот Касперский, что на VirusTotal
У меня лицензионный Kaspersky Internet Security 2017.
Он все лечит не спрашивая. Архив открываю, а он тут же удаляет.
Причем варианта лечить - нету :(
122Постоялецwww26 окт. 20170:07#87
eDmk
> Такой как у вас шустрый у меня есть.
Есть мнение, что у вас нет такого-же шустрого. Потому что у вас овердро, то есть ближние объекты перерисовывают дальние.
Впрочем, описание сцены есть в той теме фестиваля. Попробуешь сделать похожую сцену?
eDmkПользовательwww26 окт. 20170:26#88
Спасибо! Тоже поделюсь с вами. Оптимизированная Dot и ваша.
+ Показать

Вот только в затенении есть разница. По вашему методу тени жесткие получаются.
Сравните с моей версией. Увидите разницу. Затенение плавнее и мягче.
Зато ваша считает чуть быстрее. На 400 тыс полигонов +1 fps ;) что для софтвера очень важно.

Правка: 26 окт. 2017 0:36

eDmkПользовательwww26 окт. 20170:28#89
>Есть мнение, что у вас нет такого-же шустрого.
Есть почти такой же (процентов 85% по скорости). Почти весь на асме написан.
Я его неплохо знаю. С оптимизацией тоже знаком хорошо. Он рисует быстро, но криво.

>Попробуешь сделать похожую сцену?
Сделал. 8-10 fps на моем движке с правильным треугольником.

Правка: 26 окт. 2017 0:38

Страницы: 1 2 3 4 5 6 7 8 Следующая

/ Форум / Программирование игр / Графика

2001—2017 © GameDev.ru — Разработка игр