__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Q. как хейтмэпа привязывается к тестуре? это как то в редакторе карт нужно привязывать шойдер к поверхности, или для каждого террайна свою текстуру создавать, которая шойдер использует?
thambs писал: как хейтмэпа привязывается к тестуре?
Точно так же, как и в Quake3, с поправкой на ксашевскую специфику:
1. выбираем любую текстуру, которую нам не жалко.
2. красим ею весь ландшафт. Способы наложения и выравнивания значения не имеют, разве что на разрешение лайтмапы и кол-во полигонов.
3. создаём шейдер такого вот вида:
C++ Source Code:
1
"-0OUT_GRND3"
2
{
3
// tessSize 64
4
q3map_terrain materials/terrain/heightmap.bmp 3
5
}
Ключевое слово q3map_ я оставил нарочно, чтобы народ мог таскать шойдеры из кутри без переделок. Ну или с минимальными переделками.
Вот у нас путь к хейтмапе, затем - кол-во слоёв. Их не может быть менее одного и более 256.
Далее создаём шейдеры для каждого слоя раздельно. И для каждого перехода между слоями - тоже:
C++ Source Code:
1
"-0OUT_GRND3_0"
2
{
3
q3map_tcGen ivector ( 384 0 0 ) ( 0 384 0 )
4
{
5
map materials/terrain/rock_1.tga
6
}
7
{
8
map $lightmap
9
blendFunc GL_DST_COLOR GL_ZERO
10
tcGen lightmap
11
}
12
}
13
14
"-0OUT_GRND3_1"
15
{
16
q3map_tcGen ivector ( 384 0 0 ) ( 0 384 0 )
17
{
18
map materials/terrain/sand_1.tga
19
}
20
{
21
map $lightmap
22
blendFunc GL_DST_COLOR GL_ZERO
23
tcGen lightmap
24
}
25
}
26
27
"-0OUT_GRND3_2"
28
{
29
q3map_tcGen ivector ( 384 0 0 ) ( 0 384 0 )
30
{
31
map materials/terrain/stones_1.tga
32
}
33
{
34
map $lightmap
35
blendFunc GL_DST_COLOR GL_ZERO
36
tcGen lightmap
37
}
38
}
39
40
"-0OUT_GRND3_0to1"
41
{
42
q3map_tcGen ivector ( 384 0 0 ) ( 0 384 0 )
43
44
{
45
map materials/terrain/rock_1.tga
46
}
47
{
48
map materials/terrain/sand_1.tga
49
alphaGen vertex
50
blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
51
}
52
{
53
map $lightmap
54
blendFunc GL_DST_COLOR GL_ZERO
55
tcGen lightmap
56
}
57
}
58
59
"-0OUT_GRND3_0to2"
60
{
61
q3map_tcGen ivector ( 384 0 0 ) ( 0 384 0 )
62
63
{
64
map materials/terrain/rock_1.tga
65
}
66
{
67
map materials/terrain/stones_1.tga
68
alphaGen vertex
69
blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
70
}
71
{
72
map $lightmap
73
blendFunc GL_DST_COLOR GL_ZERO
74
tcGen lightmap
75
}
76
}
77
78
"-0OUT_GRND3_1to2"
79
{
80
q3map_tcGen ivector ( 384 0 0 ) ( 0 384 0 )
81
82
{
83
map materials/terrain/sand_1.tga
84
}
85
{
86
map materials/terrain/stones_1.tga
87
alphaGen vertex
88
blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
89
}
90
{
91
map $lightmap
92
blendFunc GL_DST_COLOR GL_ZERO
93
tcGen lightmap
94
}
95
}
Т.е. легко увидеть, что к основному имени шейдера делается приписка _1, _2, _3 - для основного слоя и _1to2, _2to3 - для перехода между слоями.
AlphaGen vertex как раз и отвечает за генерацию плавных переходов, по альфе, записанной в вертекс. Разумеется, вовсе необязательно в этих шейдерах использовать текстуры террайна, наверное можно запилить плавный переход зеркала в монитор, если начнётся очередное обострение.
областью, закрашенной одной текстурой. Так же важно, чтобы эта область принадлежала одной модели или всему миру.
Область будет аппроксимирована до квадрата или прямоугольника в любом случае - хейтмапа-то не может быть круглой.
ну размер текстуры и размер хейтмапы соотносятся как 1:1 или как? ну, т.е. если, например, нужно замостить поле 16384x16384, то как, его надо разбивать на какие то участки и делать отдельные хейтмэпы, или растягивать текстуру на всю площадку?
Если надо замостить поле 16384x16384, надо просто покрыть его произвольной текстурой с любым именем. А потом связать с этим именем родительский шейдер террайна, в котором указан путь к хейтмапе.
Хейтмапа определит сама коэффициент масштабирования. Чем выше разрещение у хейтмапы - тем более точным будет рисунок на реальном мире. Чем ниже разрешение хейтмапы - тем более размытым он будет.
Ещё раз повторюсь, что в редакторе вы покрываете нужные вам браши ЛЮБОЙ текстурой, и её выравнивание тоже не имеет никакого смысла, текстурирование будет производится по формулам из шейдеров.
Единственное на что она будет влиять - на кол-во полигонов и на разрешение лайтмапы. Ну собственно, как и любая другая текстура.