Предыдущая версия справа и слева
Предыдущая версия
Следующая версия
|
Предыдущая версия
|
q3bers:materials [31.08.2009 12:28] GT-Agressor |
q3bers:materials [06.07.2020 03:50] (текущий) |
Правила: | Правила: |
| |
- Научиться визуально на лету определять какой стейдж является освещаемым. Если непонятно, можно посмотреть как выглядит этот материал в Quake 3, и на основании этого сделать вывод. | Научиться визуально на лету определять какой стейдж является освещаемым. Если непонятно, можно посмотреть как выглядит этот материал в Quake 3, и на основании этого сделать вывод. |
| |
- Если первый стейдж не имеет бленда и не $lightmap - то вписываем lightStage. | * Если первый стейдж не имеет бленда и не $lightmap - то вписываем lightStage. |
| * Если первый стейдж блендится, смотрим что за бленд: blendFunc GL_ONE GL_ZERO - нет бленда! - вписываем lightStage. прочие blendFunc - прозрачный стейдж. Не пишем lightStage. |
- Если первый стейдж блендится, смотрим что за бленд: blendFunc GL_ONE GL_ZERO - нет бленда! - вписываем lightStage. прочие blendFunc - прозрачный стейдж. Не пишем lightStage. | * Если alphaFunc GE128 (или другой параметр) - это значит дырявая текстура, скорее всего освещаемая. |
| * Если первый lightStage-стейдж (не обязательно первый, а вообще в шейдере первый lightStage) имеет blendFunc, то бленд не убирать. Но последующие lightStage-стейджи тогда должны избавиться от blendFunc blend или blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA (что идентично) и вписать alphaFunc GE128. |
- Если alphaFunc GE128 (или другой параметр) - это значит дырявая текстура, скорее всего освещаемая. | |
| |
- Если первый lightStage-стейдж (не обязательно первый, а вообще в шейдере первый lightStage) имеет blendFunc, то бленд не убирать. Но последующие lightStage-стейджи тогда должны избавиться от blendFunc blend или blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA (что идентично) и вписать alphaFunc GE128. | |
| |
В шейдерах террайнов в TeamArena есть засада: есть два lightStage в шейдере, но они не дырявые, а логика light pre-pass требует хранения в G-буфере пиксела только одного видимого стейджа. А эти стейджи плавно перетекают один в другой. Но этот вопрос решен : движок их объединяет в один пасс _interpolate, так что не заморачивайтесь. Главное, надо чтобы соблюдалось правило: | В шейдерах террайнов в TeamArena есть засада: есть два lightStage в шейдере, но они не дырявые, а логика light pre-pass требует хранения в G-буфере пиксела только одного видимого стейджа. А эти стейджи плавно перетекают один в другой. Но этот вопрос решен : движок их объединяет в один пасс _interpolate, так что не заморачивайтесь. Главное, надо чтобы соблюдалось правило: |
стейджи 0 и 1 должны: | стейджи 0 и 1 должны: |
| |
- иметь одинаковый rgbGen | * иметь одинаковый rgbGen |
| * оба стейджа должны быть lightStage или не-lightStage |
- оба стейджа должны быть lightStage или не-lightStage | * blendFunc стейджа0 = нет или (GL_ONE GL_ZERO) |
| * blendFunc стейджа1 = blend |
- blendFunc стейджа0 = нет или (GL_ONE GL_ZERO) | |
| |
- blendFunc стейджа1 = blend | |
| |
| |