#241
06 января 2009 в 15:42
поправочка:<br />Встречаются первые стейджи без бленда и не $lightmap.<br />Обычно это какое-нить пламя вертится и светится; конечно же, такой стейдж НЕ метим lightStage.<br />Вобщем в этом вопросе надо уметь читать шейдер, чтоб понять что он рисует.
#242
06 января 2009 в 16:58
Сделал механизм обработки загружаемых текстур:<br />Add (img0 img1) Складывает две текстуры<br />Sub (img0 img1) Вычитает текстуры<br />Mul (img0 img1) Умножает текстуры<br />AddConst (img R G B A) < RGBA от 0 до 99, float > Прибавляет к текстуре константу<br />SubConst (img R G B A) < RGBA от 0 до 99, float > Вычитает из текстуры константу<br />MulConst (img R G B A) < RGBA от 0 до 99, float > Умножает текстуру на константу<br />InvertRGBA / Invert (img) Инвертирует всю текстуру<br />InvertRGB / InvertColor (img) Инвертирует RGB текстуры<br />InvertAlpha / InvertA (img) Инвертирует Alpha текстуры<br />MakeAlpha / MakeA (img) Складывает RGB и пишет в Alpha<br />Luminance / Mono (img) Делает RGB текстуры монохромной<br />Interpolate / InterpolateRGBA (img0 img1 img2) Интерполирует всю текстуру из img0 в img1, вес берется из Alpha img2.<br />InterpolateColor / InterpolateRGB (img0 img1 img2) Интерполирует RGB текстуры из img0 в img1, вес берется из Alpha img2.<br />InterpolateA / InterpolateAlpha (img0 img1 img2) Интерполирует Alpha текстуры из img0 в img1, вес берется из Alpha img2.<br />Alpha2Normals / A2Normals (img N) Строит в RGB normalMap из Alpha (карта высот)<br />RGB2Normals / Color2Normals (img N) <N от 0 до 128, float> Строит в RGB normalMap из Mono(карта высот в RGB)<br /><br />Через символ "/" обозначены синонимы, для удобства запоминания.<br /><br />Функции могут иметь вложения, их кол-во не ограничено ничем. Например:<br />map add(rgb2normals(mulconst(img0 1 1 0 1) 16) Mono(img1))<br /><br />Если обрабатываемые картинки имеют разный размер, все они подгоняются<br />под размер первой картинки.<br /><br />Если загружаются normalMap, вызываются специальные ветки, поэтому<br />карты нормалей обрабатываются корректно.<br /><br />Высказывайте мнения и пожелания. 8)
#243
06 января 2009 в 18:26
ок, попробую, простой пример:<br />textures/egyptsoc_sfx/lig_032-01b1-2k<br />{<br /> qer_editorimage textures/egyptsoc_sfx/lig_032-01b1.tga<br /> q3map_lightimage textures/egyptsoc_sfx/lig_032-01b.blend.tga<br /> q3map_surfacelight 2000<br /> surfaceparm nomarks<br /> {<br /> map $lightmap<br /> //rgbGen identity - у тебя в шейдерах в этоом месте запись оставалась, но её не надо?<br /> }<br /> {<br /> map textures/egyptsoc_sfx/lig_032-01b1.tga<br /> blendFunc GL_DST_COLOR GL_ZERO<br /> //rgbGen identity<br /> lightStage //здесь освещаемый стейдж, все понятно<br /> }<br /> {<br /> map textures/egyptsoc_sfx/lig_032-01b.blend.tga<br /> blendfunc GL_ONE GL_ONE //прозрачный стейдж?<br /> rgbGen wave sin .3 .1 0 0.5<br /> }<br />}<br /><br /><br />PS в тех материалах, что идут с ку3берс бывает строка light 1, у меня, на дефолтной кваке3 1.32 в шейдерах такого нет, надо её?
#244
06 января 2009 в 18:32
Вай, сразу даже не понятно зачем все это нужно :)<br /><br />Когда подумаешь, вроде понятно становится :)<br /><br />То есть, например, уже не нужны отдельные файлы с картой высок, а можно просто в материале задать, как её получить из исходной екстуры?<br />(я, конечно, понимаю, что в идеале карту высот надо не из текстуры получать, а рисовать отдельно :))
#245
06 января 2009 в 18:36
light 1 - я её не вписывал ))) это из Ку3<br />Это информация для построителя lightmaps что данный сурф излучает свет силой 1.<br /><br />Смотрим шейдер:<br /><br />стейдж 1 - просто лайтмап. Ничего не делаем.<br />rgbGen identity - можно игнорировать.<br /><br />стейдж 2 - правильно что пометил lightStage, это освещаемый материал, блендится с лайтмапом.<br /><br />стейдж 3 - да, прозрачный, он накладывается на предыдущие аддитивным блендом. Это может быть свечение.<br /><br />Зачот! ;)
#246
06 января 2009 в 18:37
GT-Agressor<br />карты высот - это ты про новые функции? :)<br />По карте высот можно на этапе загрузки строить бампмап. Так можно дисковое место на текстурах экономить.
#247
06 января 2009 в 18:45
а вот с террайном, например:<br />textures/rungolem-5-2/terrain_0to1<br />{<br /> surfaceparm nolightmap<br /> q3map_novertexshadows<br /> q3map_forcesunlight<br /> {<br /> map textures/yavin/rockmossy.jpg<br /> rgbGen vertex<br /> alphaGen vertex<br /> tcmod scale 0.25 0.25<br /> lightStage //стейдж 1<br /> }<br /> {<br /> map textures/yavin/jung8.jpg<br /> rgbGen vertex<br /> alphaGen vertex<br /> tcmod scale 0.25 0.25<br /> blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA<br /> lightStage //стейдж 2? а в одном из примеров в ку3берс эта строка только в первом стейдже была :( textures/terrain/mpterra2_0to1, хотя там ещё третий стейдж есть<br /> }<br />}<br /><br />
#248
06 января 2009 в 18:58
Про террайны я писал: это особый случай. Метить оба стейджа.<br />Вот пример из ТимАрена:<br /><br />textures/terrain/mpterra1_1to2<br />{<br /> surfaceparm nolightmap<br /> q3map_novertexshadows<br /> q3map_forcesunlight <br /> {<br /> map textures/stone/pjrock12c.tga<br /> rgbGen vertex<br /> alphaGen vertex<br /> tcmod scale 0.125 0.125 <br /> lightStage<br /> }<br /> {<br /> map textures/stone/pjrock10c.tga<br /> tcmod scale 0.05 0.05 <br /> rgbGen vertex<br /> alphaGen vertex<br /> blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA<br /> lightStage<br /> }<br /> {<br /> map textures/skies2/clouds2.tga<br /> blendfunc filter<br /> tcmod scale 0.01 0.01<br /> tcMod scroll -0.1 0.1<br /> <br /> }<br />}<br />
#249
06 января 2009 в 19:14
ага, ещё, а если так?<br />textures/egyptsoc_sfx/lig_b064-01a<br />{<br /> qer_editorimage textures/egyptsoc_sfx/lig_b064-01a.tga<br /> {<br /> map textures/egyptsoc_sfx/lig_b064-01a.tga<br /> lightStage //только здесь?<br /> }<br /> {<br /> map $lightmap<br /> blendfunc filter //здесь прозрачный стейдж? а зачем он?<br /> }<br /> {<br /> map textures/egyptsoc_sfx/lig_b064-01b.blend.tga<br /> blendfunc add <br /> rgbgen wave sin .5 .3 0 1<br /> }<br />}
#250
06 января 2009 в 19:18
первый стейдж - lightStage, верно<br />второй - $lightmap - она блендится с первым (умножается). Так что оно не прозрачное :)<br />третье - блястит что то<br /><br />верно.