Войти
ПрограммированиеФорумГрафика

Проблема с освещением

#0
21:48, 7 окт 2018

Возникает данная проблема. С чем это может быть связанно?

+ Показать

Расчитываю освещение в TangetSpace

#1
21:58, 7 окт 2018

с кривым TangetSpace ?

#2
22:04, 7 окт 2018

Misanthrope
Возможно, считал ассимп. Потом я такой хак делаю.

Расчет на CPU. Компоратор переопрделен

auto w = Math::Cross(normal, tangent) == bitangent ? 1.0f : -1.0f;

Расчет на GPU

float3 N = normalize(mul(input.Normal, (float3x3) BufferObject.Normal));
float3 T = normalize(mul(input.Tangent.xyz, (float3x3) BufferObject.Normal));  
float3 B = cross(N, T) * input.Tangent.w;
#3
22:48, 7 окт 2018

IBets
> Math::Cross(normal, tangent) == bitangent
флоаты сравнивать дело ненадёжное, если только у тебя там не что-то типа abs(a-b)<epsilon

#4
22:49, 7 окт 2018

А может связано с кривым рассчетом освещения?

#5
22:50, 7 окт 2018

а вообще имеет смысл вывести отдельно нормали, тангенты, карту нормалей итп и смотреть в чём из них баг.

#6
23:08, 7 окт 2018

Mr F
Да там как ты написал

#7
15:26, 8 окт 2018

если у тебя ассмип то используй это при инициализации
aiProcess_CalcTangentSpace

#8
17:10, 8 окт 2018

Misanthrope
Да заюзано

#9
4:32, 9 окт 2018

Misanthrope
> aiProcess_CalcTangentSpace
В отсутствие текстурных координат АссИмп ругается, что не может вычислить tangent/binormal.

IBets
Проверь как у тебя нормали. Каким-нить из шейдеров, отображающих нормали.

#10
4:36, 9 окт 2018

PA3UJIb
Да оно само собой как-то исправилось. Менял менял код и завелось

#11
4:44, 9 окт 2018

IBets
В программировании работа приложения "само собой" не самый лучший подход, от этого иногда странные и трудноуловимые баги выходят.
Разберись, не ленись, что не так было.

#12
5:34, 9 окт 2018

PA3UJIb
Да знаю сам себя за это ругаю. Ну обычно бывает где-то маленький косяк. Я как-то дебажил код на питоне 3 дня. Надо было вместо None ctypes.c_void_p(0). Удивительно что обнаружил

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

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