Страница 1 из 3

Подскажите адекватную схему UV развертки треугольника в 3D

СообщениеДобавлено: 24 окт 2014, 07:16
bwolf88
Привет всем.
Кто может подсказать или показать нормальную схему текстурирования произвольного треугольника в 3Д пространстве (куб размером 1х1х1) если известно положение вершин. Нужен только способ правильной UV развертки на основе трех координат, без нормализаций.

Заранее спс.

Re: Подскажите адекватную схему UV развертки треугольника в 3D

СообщениеДобавлено: 24 окт 2014, 07:50
Woolf
показать нормальную схему текстурирования произвольного треугольника в 3Д пространстве


U V
1) 0;1
2) 1;1
3) 1;0

Re: Подскажите адекватную схему UV развертки треугольника в 3D

СообщениеДобавлено: 24 окт 2014, 07:54
bwolf88
Не, такое не подходит :D.
Таким способом текстура будет накладываться разным некрасивым масштабом и рисунком.

нужно текстурирование не куба, а произвольного треугольника внутри куба размерами 1х1х1 (ограничение для простоты).

Re: Подскажите адекватную схему UV развертки треугольника в 3D

СообщениеДобавлено: 24 окт 2014, 08:58
Woolf
bwolf88 писал(а):Не, такое не подходит :D.
Таким способом текстура будет накладываться разным некрасивым масштабом и рисунком.

нужно текстурирование не куба, а произвольного треугольника внутри куба размерами 1х1х1 (ограничение для простоты).


Ничего не понимаю, что вы хотите сделать. Вам мировые UV координаты что-ли нужны? Если да - то привязывайтесь к мировым координатам вершин, в чем проблема-то.

Re: Подскажите адекватную схему UV развертки треугольника в 3D

СообщениеДобавлено: 24 окт 2014, 09:18
bwolf88
Нет, мне нужно правильно затекстурить генерируемый MarchinCube. Расположение треугольников в ячейке произвольное по форме и повороту относительно координатных осей, нужно правильно наложить текстуру чтобы не растягивалась и не искривлялась и не была перевернутая. Определить нормаль я умею, а вот правильного алгоритма текстуринга такого треугольника в пространстве не получается найти. Смотрел готовые воксельные реализации под Юньку - там либо кривой/растянутый текстуринг, либо как то через шейдеры запилено(в которых я пока ничего не понимаю).

По идее нужно определить какой кусок текстуры взять для треугольника. Читал http://http.developer.nvidia.com/GPUGems3/gpugems3_ch01.html, но все равно нифига не понял. Допустим от каких координат берут этот .YZ, .ZX, .XY и что это - сумма, произведение или какое то другое выражение.

float2 coord1 = v2f.wsCoord.yz * tex_scale;
float2 coord2 = v2f.wsCoord.zx * tex_scale;
float2 coord3 = v2f.wsCoord.xy * tex_scale;

Re: Подскажите адекватную схему UV развертки треугольника в 3D

СообщениеДобавлено: 24 окт 2014, 09:27
Woolf
Ясно. Я вам написал уже

U V
1) 0;1
2) 1;1
3) 1;0

Ровнее этого для треугольника - ничего быть не может.

Re: Подскажите адекватную схему UV развертки треугольника в 3D

СообщениеДобавлено: 24 окт 2014, 12:06
waruiyume
http://http.developer.nvidia.com/GPUGems3/gpugems3_ch01.html писал(а):A simple way to resolve this is to use triplanar texturing, or three different planar projections, one along each of the three primary axes (x, y, and z)

Берёте нормаль треугольника и сравниваете её с (1, 0, 0), (0, 1, 0) и (0, 0, 1) используя Dot(abs(a, b)).
Используете мировые координаты, беря проекцию победившего направления, для всех 3 вершин.
Получится, почти, то же, что в (max_sm) с модифером UVWmap и типом box.

Re: Подскажите адекватную схему UV развертки треугольника в 3D

СообщениеДобавлено: 24 окт 2014, 18:42
Tolking
images.jpg

.jpg


P.S. Тоже хочу уже больше года.

Re: Подскажите адекватную схему UV развертки треугольника в 3D

СообщениеДобавлено: 24 окт 2014, 19:12
bwolf88
Так текстуру положить я могу.
Я думаю, как сделать, чтобы не было вот таких уродских переходов.
Изображение

Посмотрите как сделано в учебнике NVidia по ссылке на пару постов выше. Там на кривых плавный переход текстуры и смотрится она как единый материал, а не ковер из кусочков.

Re: Подскажите адекватную схему UV развертки треугольника в 3D

СообщениеДобавлено: 24 окт 2014, 19:33
bwolf88
Вот как это выглядит у меня. Текстуры растягиваются и искривляются + есть некрасивые переходы.

Изображение

Re: Подскажите адекватную схему UV развертки треугольника в 3D

СообщениеДобавлено: 24 окт 2014, 19:41
bwolf88
На траве вроди неплохо выглядит :D. Waruiyume, собственно это то, что я и делал :), просто думал, может есть варианты с более красивыми переходами.
Хотя вру, тема не закрыта, да я хочу именно как на машинке - сразу не увидел разницы.
Изображение

Re: Подскажите адекватную схему UV развертки треугольника в 3D

СообщениеДобавлено: 24 окт 2014, 20:26
Glooger
bwolf88 писал(а):Хотя вру, тема не закрыта, да я хочу именно как на машинке - сразу не увидел разницы.

Только хотел написать, что, например, с текстурой камня будет выглядеть не так "неплохо".
У меня такой же вопрос. Мой террейн, как и у Tolking'a. Руки не доходили подправить, но раз уж тут такая тема нарисовалась, хорошо бы всем вместе разобраться :)
uv ведь не могут быть больше 1.0?
bwolf88, ты, я так понял, для меша используешь атлас? Это получается нужно рассчитывать так, чтобы наибольшая сторона любого треугольника не превышала "размера" текстуры в масштабе переноса её на мешь что ли (чтоб не растягивать)...
Тогда я вот не понимаю, если мешь в разрезе выглядит так (цыфры это точки сторон разных треугольников, которые выстроены в линию):
Синтаксис:
Используется csharp
                 3----------4---
                /
               /
  1-----------2

то uv для стороны 1-2 будет, например,(0;0)-(0;1),
тогда 2-3 будет примерно (0;0)-(0;0.5),
а сторона 3-4 какая будет? (0;0.5)-(0;.../*если 1, то растянет текстуру)*/).

ps: может кто не поймет то, что я написал... пишу как понимаю эти uv (а точнее не понимаю) [curved_hands]
pps: я понимаю примерно как сделать для меша типа "обычный тиррейн с контрольной текстурой слоёв", но как для атласа?

Re: Подскажите адекватную схему UV развертки треугольника в 3D

СообщениеДобавлено: 24 окт 2014, 20:36
bwolf88
Смотри. Я прикидываю пока так:
Если у нас задействованы три нормали - то максимальное ребро будет равно 2.
Если задействованы 2 нормали - то 1.414.
Если одна нормаль, то 1.

Сейчас пробую сделать развертку домножая на эти коэффициенты, хотя мне кажется не прокатит, потому что скорей всего нужно будет делать еще и адекватный разворот треугольника на текстуре для выбора нужного куска.

Uv не могут больше 1, но это не значит что в пределах одного треугольника нельзя сделать замощение. На счет атласа это пока не важно. Сейчас главное разобраться как сделать ровное наложение текстуры без растягиваний и кривизны.

Re: Подскажите адекватную схему UV развертки треугольника в 3D

СообщениеДобавлено: 24 окт 2014, 20:53
bwolf88
Не получилось.
Сейчас буду пробовать взять коэффициент отношения сторон. предполагаемой грани.

Re: Подскажите адекватную схему UV развертки треугольника в 3D

СообщениеДобавлено: 24 окт 2014, 21:11
Tolking
UV могут быть больше 1 технически. Можете тупо присвоить УВ координаты вертекса и будет все работать. Что там в видюхе происходит нас не колышит...

Ровное наложение без растягиваний сделать можно и не сложно. Нужно пересчитать координаты из "системы координат полигона" в глобальную.

Синтаксис:
Используется csharp
         
Vector2 CalculateCoordinates(Vector3 v, Vector3 n,float scaleCoeff)  {
               
        Vector3 scale = new Vector3(scaleCoeff,scaleCoeff,scaleCoeff);
 
        Quaternion q=Quaternion.AngleAxis(1,n);

            Matrix4x4 rotate = Matrix4x4.TRS(Vector3.zero,q,scale);
               
            Vector3 t= rotate.MultiplyPoint3x4(v);
               
                return new Vector2(t.x,t.z);
        }
 


Передаете вертекс, нормаль, возвращает ув...

.jpg



И сразу видно, что идеала так не найти. Рассчитывая каждый полигон отдельно, мы не имеем информацию о том какие ув в этой точки в соседнем полигоне и налицо свиг сетки... Я думаю в реалтайме этого не победить... Но очень на вас надеюсь! :)