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

Освещение + Двусторонние полигоны

Страницы: 1 2 Следующая »
#0
13:14, 12 июля 2009

Двусторонние полигоны с задней стороны освещаются также как и с передней, что не есть хорошо. Можно-ли в пиксельном шейдере узнать какую сторону полигона мы рисуем в данный момент? Использую HLSL
зы. мне почему-то кажется, что гдето я видел или слышал, что есть переменная, которая в зависимости от того, задняя или передняя сторона принимает значения 1 или -1.... но может мне это и приснилось, в хелпе не нашел =(((

#1
13:16, 12 июля 2009

Нормали тебе в руки ) на обратной стороне нормали отвернты от камеры

#2
13:25, 12 июля 2009

Death_Dantist
> Нормали тебе в руки ) на обратной стороне нормали отвернты от камеры
ПОЛИНОГ ДВУСТОРОННИЙ!!!! Скажем так - 3 вершины - плоскость. У каждой вершины одна нормаль, и все они направлены вперед. С нормалями то понятно, но в этом случае нужно дублировать данный полигон

#3
13:31, 12 июля 2009

Kloun
vFace
ps30

Face Register
The face register (vFace) is new for this model. This is a floating point scalar register that will eventually contain the primitive area. In ps_3_0, however, only the sign of this register is valid. Hence, if the value is less than zero (the sign bit is set negative) the primitive is the back face (the area is negative, counterclockwise). Therefore, in ps_3_0 it only makes sense to compare this register against 0 (> 0 or < 0). Inside the pixel shader, the application can make a decision as to which lighting technique to use. Two-sided lighting can be achieved this way. This register requires a declaration, so undeclared usage will be flagged as an error. For lines and point primitives, this register is undefined. The face register can only be used as condition with the following instructions: setp_comp - ps, if_comp, or break_comp.

#4
13:34, 12 июля 2009

Я тупо дублирую полигоны и нет никакого геморроя с двухсторонними.

#5
13:35, 12 июля 2009

Kloun
Думаю нужны два прохода: CCW и CW с инвертированием нормалей в шейдере.

#6
13:52, 12 июля 2009

XIRMAC
IronNick
хм... спасибо... жалко конечно, я надеялся, что есть элегантное решение..... мне чет не до дублирования полигонов, а проходы увеличивать накладно - итак 1к дипов уже.... проще моделера заставить сделать без двусторонних =))))

#7
13:59, 12 июля 2009

innuendo
> vFace
> ps30
Спасибо!!!!!!!! Уррряяя!!! то что нужно!!!! Яж говорил видел такю штуку, просто искал в списке функций =(((( благодарю!!!!

#8
14:18, 12 июля 2009

Я не понял - что не так с нормалями? Зачем vFace?
Смотриш тот же полигон с тремя вершинами и его тремя нормалями, как нормали ориентированнъ к камере.
Да, ето накладъвает ограничения на нормали, ибо если они сильно отличаются от нормали к плоскости полигона, могут полезть баги, но там ничего сериозного нет.
Т.е.
  - нормаль всегда должна поворачиватся к свету
  - повернув нормаль к свету, смотрим угол между ней и view и считаем отражение или соответно переломление лайтинга (если ето полупрозранъй материал).

#9
14:27, 12 июля 2009

Z
> как нормали ориентированнъ к камере.
а причем тут камера? нужно допустим просто диффуз рассчитать.... dot(N, lit).... если я "поверну нормаль к свету", то освещение будет не просто некорректным а вообще непонятно каким... либо ты не понял в чем проблема, либо ты какуюто охинею написал...

#10
14:31, 12 июля 2009

Z
> Зачем vFace?
ok. А для чего по-твоему vFace придумали ?

#11
16:22, 12 июля 2009

Kloun
>>dot(N, lit)
Если прозрачнъй материал - важна нормаль к свету, если нет - к камере. Опять непонятно?

innuendo
> ok. А для чего по-твоему vFace придумали
Если сильно low-poly с раскривленнъми нормалями, тогда для two-sided лайтинга именно оно.

#12
16:36, 12 июля 2009

Z
А ты много видел примеров чтобы specular или diffuse считалься для backFace ?

#13
16:38, 12 июля 2009

Z
> Если сильно low-poly
кстати лоуполи =)). да и вообще частоли в играх хай-поли юзают? но нормали не раскривленные - нормальные.

Z
> Если прозрачнъй материал - важна нормаль к свету, если нет - к камере. Опять
> непонятно?
конечно непонятно. нужно рассчитать диффузное освещение (для непрозрачного объекта)! от положения камеры оно не зависит! (спекуляр тож нужен, но ща не о нем речь) . Сам подумай - на столе стоит коробка - одна сторона её освещена из окна - другая соответсвенно темная, третья средней яркости. так вот как ты не крутись вокруг этой коробки, степень ее освещенности менятся не будет!!!! если коробка металлическая, и на ней блики от солнца, то тогда они будут менятся в зависимости от точки обзора....
или диффуз не рассчитывается по формуле dot(Normal, LightDirection) ????
а вот если материал прозрачный - то это ничего не меняет.

и вообще что значит "важна нормаль". она либо нужна либо нет. понятие важна или нет  это из другой оперы. И что значит "нормаль к свету", знаю "нормаль к полигону", "направление на источник света или направление источника света", а вот "нормаль к свету" или "нормаль к камере" вовсе непонятные субстанции

#14
16:43, 12 июля 2009

innuendo
> А ты много видел примеров чтобы specular или diffuse считалься для backFace ?
вот у меня кустики всякие, которые плейнами сделаны ... понимаю, что не true-подход, но до исправления этого момента еще не добрался, нужно чтобы хотябы этот подход работал нормально.

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

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