Инструменты пользователя

Инструменты сайта


q3bers:materials

Различия

Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.

Ссылка на это сравнение

q3bers:materials [31.08.2009 12:29]
GT-Agressor
q3bers:materials [06.07.2020 03:50]
Строка 1: Строка 1:
-Оригинальные материалы (.shader) из Quake 3 не совсем подходят для Q3Bers, так как последнему требуется прямо задать какой стейдж (слой) материала должен быть освещаемым.  
- 
-Пример материала:  
- 
-  textures/gothic_block/blocks17g_ow  
-  { 
-   { 
-   map textures/sfx/firegorre.tga 
-   tcmod scroll 0 1 
-   tcMod turb 0 .25 0 5.6 
-   tcmod scale 1.5 1.5 
-   blendFunc GL_ONE GL_ZERO 
-   rgbGen identity 
-   } 
-  { 
-   map textures/gothic_block/blocks17g_ow.tga 
-   blendFunc blend 
-   rgbGen identity 
-  } 
-  { 
-   map $lightmap 
-   blendFunc filter 
-   rgbGen identity 
-  } 
-  } 
- 
-Данный материал состоит из трех стейджей. Оснновная текстура - blocks17g_ow.tga, на неё накладывается эффект такой текстурой firegorre.tga, и ещё есть стейдж map $lightmap, который обозначает наложение лайтмапа.  
- 
-Для того, чтобы Q3Bers понимал, который из этих слоев нужно освещать, нужно в этот стейдж дописать параметр lightStage.  
- 
-Пример:  
- 
-  textures/gothic_block/blocks17g_ow 
-  { 
-   { 
-    map textures/sfx/firegorre.tga 
-    tcmod scroll 0 1 
-    tcMod turb 0 .25 0 5.6 
-    tcmod scale 1.5 1.5 
-    blendFunc GL_ONE GL_ZERO 
-   } 
-   { 
-    map textures/gothic_block/blocks17g_ow.tga 
-    blendFunc blend 
-    lightstage 
-   } 
-   { 
-    map $lightmap 
-    blendFunc filter 
-   } 
-  } 
- 
-Также здесь намеренно убраны строки rgbGen identity, которые не нужны вообще.  
- 
-Правила:  
- 
-  - Научиться визуально на лету определять какой стейдж является освещаемым. Если непонятно, можно посмотреть как выглядит этот материал в Quake 3, и на основании этого сделать вывод.  
- 
-  * Элемент ненумерованного списка 
-  * Если первый стейдж не имеет бленда и не $lightmap - то вписываем 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.  
- 
-В шейдерах террайнов в TeamArena есть засада: есть два lightStage в шейдере, но они не дырявые, а логика light pre-pass требует хранения в G-буфере пиксела только одного видимого стейджа. А эти стейджи плавно перетекают один в другой. Но этот вопрос решен  : движок их объединяет в один пасс _interpolate, так что не заморачивайтесь. Главное, надо чтобы соблюдалось правило:  
- 
-стейджи 0 и 1 должны:  
- 
-  * иметь одинаковый rgbGen  
-  * оба стейджа должны быть lightStage или не-lightStage  
-  * blendFunc стейджа0 = нет или (GL_ONE GL_ZERO)  
-  * blendFunc стейджа1 = blend  
- 
  
q3bers/materials.txt · Последнее изменение: 06.07.2020 03:50 (внешнее изменение)