интересно дали ще се оправят с пълната задача (това всъщност беше само нещо като юнит тест), а тя е: да се имплементира бъмп на анизотропен материал. ето детайлите: имаме височинна карта h, от която калкулираме два градиента
hx=h(x+1,y)-h(x,y)
hy=h(x+1,y)-h(x,y)
класичсеки бъмп накланя нормалата по следния начин
N(0,0,1) - > N'(-hx,-hy,1) (после се нормализира, ако е енджина иска 1-вектори)
това е чудесно за изотропни материали като хартия, гума, такива неща. но за анизотропни материали (примерно коприна, шлифован метал, велур) трябва да се трансформира не само нормалата, но и локалните посоки на координатната система, тъй като при тях поведението зависи от къде го гледаме и засветяваме. затова трябва да моднем не само посока "горе" но и посока "ляво" и посока "напред"
U(1,0,0) - > U'(?,?,?)
V(0,1,0) - > V'(?,?,?)
N(0,0,1) - > N'(-hx,-hy,1)
задачата е да се калкулират U',V' . грок дори и без тия детайлни обяснения ясно осъзна какво искам , и веднага ми даде наивното решение U'(1,0,hx) V'(0,1,hy) което се въртеше и в моята глава, то обаче изражда базиса, U' и V' не са ортогонални един на друг, а само на N'. това при голям бъмп осира нещата. кода който пуснах е хитряшкото решение, иначе има и идейно просто (но по-дълго като код), ама грокчо и простото не успя да измисли