Вобщем хочется что б на одном ландшафте было много разных текстур, и рисовались они хотябы в зависимости от высоты.
Как это можно сделать? На расширениях или щейдером, вобщем ссылки на дельные материалы приветствуются.
Перерыл уже кучу материала, но толком ничего не понял, буду рад любой помощи.
Как сделано у меня. В шейдер передаются 6 текстур, первые 5 - слои RGB формата, шестая текстура RGBA - маска для смешивания, где каждая компонента отвечает за вес слоя в данном пикселе а если сума R+G+B+A меньше 1 то вес пятого слоя считаетя как 1 - сума весов R+G+B+A
uniform sampler2D tex0d, tex1d, tex2d, tex3d, tex4d, texm; varying vec2 Texcoord, GlobalTexcoord; vec4 TexD[5], TexTD, TexM; //........... TexD[0] = texture2D(tex0d, Texcoord ); TexD[1] = texture2D( tex1d, Texcoord ); TexD[2] = texture2D( tex2d, Texcoord ); TexD[3] = texture2D( tex3d, Texcoord ); TexD[4] = texture2D( tex4d, Texcoord ); TexM = texture2D( texm, GlobalTexcoord ); TexTD = TexD[0] * ( 1.0 - ( TexM.x + TexM.y + TexM.z + TexM.w ) ) + TexD[1] * TexM.x + TexD[2] * TexM.y + TexD[3] * TexM.z + TexD[4] * TexM.w;
один сэмплер для 4-х канальной текстуры смешивния, 4 сэмплера для текстур типа песок/камень/трава/грязь.
SunnyDay
+1 сэмплер вес которого = 1.0 - ( r + g + b + a )
А если замутить 3D-текстуру, в которую все текстуры сложены стопкой: №0 := s=0..1, t=0..1, r=0; №1 := s=0..1, t=0..1, r=1/N, №2 := s=0..1, t=0..1, r=2/N, ... №N := s=0..1, t=0..1, r=1, и при рисовании задавать текс. координаты glTexCoord3* (..., ..., height/max_height) ?
Легче всего (и как оказалось НАМНОГО быстрее) заранее вычислить картинку на CPU - получить готовую текстуру для ландшафта, а потом в в шейдере писать
gl_FragColor = texture2D(texture, ...)
Sergio666
Это какого размера должна быть текстура, чтоб все детали остались О_о
У меня 1024x1024. Я предварительно склеиваю 4 (2 на 2) текстуры 512х512 для каждого слоя, а потом склеиваю 5 слоев. И ничего страшного. Намного быстрее и (в моем случае) качественнее! :)
Hedge
Я так понял после этого всего в TexTD глобальная текстура со всеми смешиваниями?
Как вобще текстурировать каждый квадрат ландшафта?
Вот приблизительно такой мне результат нужен как на скриншоте внизу этой статьи http://www.jenkz.org/articles/terraintexture.htm
Sergio666
Быстрее, но качество - дерьмовое получается, и весит много..
Как вобще текстурировать? У меня была идея что есть одна текстура со всеми типами поверхности, а на ландшафте в зависимости от
типа меняем текстурные координаты и какнить границы сглажуем.
А как сделать по умному?
Вот примерчик, может поможет, по-моему очень круто!!!
http://www.dhpoware.com/demos/glslTerrainTexturing.html
Hedge
получается у тебя по одной текстуре разного вида поверхности и много текстур "для смешивания" чтобы покрыть весь ландшавт?
Если я правильно понял, то текстура смешивания та же RGB, тогда в чем выигрыш по сравнению с кучей обычных текстур?... Я тоже сейчас начал внедрять ландшавты в движок и собираю подобного рода информацию... так что узнать про различные подходы к этому делу будет интересно!
SunnyDay
>Sergio666
>Быстрее, но качество - дерьмовое получается, и весит много..
Смотря как делать. Если руки оттуда растут - то хорошее качество :)
А насчет "весит много" - ты прав. Но ничего не поделаешь...
Vel I
Интересная статья, а что тебе мешает сделать так как там описано? вроде как все доходчиво!
Sergio666
Ты используешь "регулярную сетку" для ландшавта?
Тема в архиве.