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

Общие вопросы о Unity3D

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

Сообщение bwolf88 24 окт 2014, 07:16

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

Заранее спс.
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

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

Сообщение Woolf 24 окт 2014, 07:50

показать нормальную схему текстурирования произвольного треугольника в 3Д пространстве


U V
1) 0;1
2) 1;1
3) 1;0
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

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

Сообщение bwolf88 24 окт 2014, 07:54

Не, такое не подходит :D.
Таким способом текстура будет накладываться разным некрасивым масштабом и рисунком.

нужно текстурирование не куба, а произвольного треугольника внутри куба размерами 1х1х1 (ограничение для простоты).
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

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

Сообщение Woolf 24 окт 2014, 08:58

bwolf88 писал(а):Не, такое не подходит :D.
Таким способом текстура будет накладываться разным некрасивым масштабом и рисунком.

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


Ничего не понимаю, что вы хотите сделать. Вам мировые UV координаты что-ли нужны? Если да - то привязывайтесь к мировым координатам вершин, в чем проблема-то.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

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

Сообщение bwolf88 24 окт 2014, 09:18

Нет, мне нужно правильно затекстурить генерируемый 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;
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

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

Сообщение Woolf 24 окт 2014, 09:27

Ясно. Я вам написал уже

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

Ровнее этого для треугольника - ничего быть не может.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

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

Сообщение waruiyume 24 окт 2014, 12:06

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.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

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

Сообщение Tolking 24 окт 2014, 18:42

images.jpg

.jpg


P.S. Тоже хочу уже больше года.
У вас нет доступа для просмотра вложений в этом сообщении.
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2714
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

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

Сообщение bwolf88 24 окт 2014, 19:12

Так текстуру положить я могу.
Я думаю, как сделать, чтобы не было вот таких уродских переходов.
Изображение

Посмотрите как сделано в учебнике NVidia по ссылке на пару постов выше. Там на кривых плавный переход текстуры и смотрится она как единый материал, а не ковер из кусочков.
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

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

Сообщение bwolf88 24 окт 2014, 19:33

Вот как это выглядит у меня. Текстуры растягиваются и искривляются + есть некрасивые переходы.

Изображение
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

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

Сообщение bwolf88 24 окт 2014, 19:41

На траве вроди неплохо выглядит :D. Waruiyume, собственно это то, что я и делал :), просто думал, может есть варианты с более красивыми переходами.
Хотя вру, тема не закрыта, да я хочу именно как на машинке - сразу не увидел разницы.
Изображение
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

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

Сообщение Glooger 24 окт 2014, 20:26

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: я понимаю примерно как сделать для меша типа "обычный тиррейн с контрольной текстурой слоёв", но как для атласа?
Аватара пользователя
Glooger
UNIт
 
Сообщения: 118
Зарегистрирован: 04 апр 2013, 08:40

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

Сообщение bwolf88 24 окт 2014, 20:36

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

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

Uv не могут больше 1, но это не значит что в пределах одного треугольника нельзя сделать замощение. На счет атласа это пока не важно. Сейчас главное разобраться как сделать ровное наложение текстуры без растягиваний и кривизны.
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

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

Сообщение bwolf88 24 окт 2014, 20:53

Не получилось.
Сейчас буду пробовать взять коэффициент отношения сторон. предполагаемой грани.
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

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

Сообщение Tolking 24 окт 2014, 21:11

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



И сразу видно, что идеала так не найти. Рассчитывая каждый полигон отдельно, мы не имеем информацию о том какие ув в этой точки в соседнем полигоне и налицо свиг сетки... Я думаю в реалтайме этого не победить... Но очень на вас надеюсь! :)
У вас нет доступа для просмотра вложений в этом сообщении.
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2714
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

След.

Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12