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

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

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

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

У тебя все равно растянутые текстуры получаются.
Посмотри на полигоны с двумя нормалями, снизу вверх размеры больше, чем слева направо в одном варианте и наоборот в другом

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

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

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

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

http://unity3d.ru/distribution/viewtopic.php?f=105&t=22728&view=unread#unread

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, то растянет текстуру)*/).

3-4 должна быть (0.5,1.5)
Последний раз редактировалось Tolking 24 окт 2014, 21:45, всего редактировалось 1 раз.
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

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

Сообщение bwolf88 24 окт 2014, 21:45

Изображение

С двумя нормалями кажись решил.

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

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

Сообщение Woolf 24 окт 2014, 21:49

Можете тупо присвоить УВ координаты вертекса и будет все работать

Проблема же с Z координатой. У UV две координаты, а просто так отбрасывать Z тоже нельзя. Но вы правы, надо плясать от координат вертекса, только надо как-то пересчитать их в планарные координаты. С налета чегой-то не выходит.

Вот что накопал, курите ))
https://ru.wikipedia.org/wiki/UV-%D0%BF ... 0%B8%D0%B5

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

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

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

9492d2d7d734.png


Я думаю на машинке в рамках конкретной единой сетки нет сдвига текстурных координат. Иначе сложно было-бы текстуру на нее рисовать...
У вас нет доступа для просмотра вложений в этом сообщении.
Последний раз редактировалось Tolking 24 окт 2014, 22:00, всего редактировалось 1 раз.
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

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

Сообщение bwolf88 24 окт 2014, 21:58

Так на машинке сдвиги тоже есть. Хотя вру, слвиги на других деталях есть, переход на кузове плавный.

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

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

Сообщение Tolking 24 окт 2014, 22:05

Хвались чего ты там насчитал. :)
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

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

Сообщение bwolf88 24 окт 2014, 22:10

А вообще я смотрю на машинку - ведь там текстура рисуется одной развертной.
Модельки же режут по швам и потом разворачивают и разрисовывают материал.

Понять бы алгоритм такого рисования... Сейчас закончу с третьей нормалью и буду пробовать :D.

Для двух нормалей получается вот такая штука (пока громоздкая)

normalP - это нормаль
coord1, coord2, coord3 - координаты вертекса треугольника.

Синтаксис:
Используется csharp

else if ((normalP.z == 0 && normalP.x != 0 && normalP.y != 0)
|| (normalP.y == 0 && normalP.x != 0 && normalP.z != 0)
||(normalP.x == 0 && normalP.z != 0 && normalP.y != 0)){
if( Mathf.Abs(normalP.x) >= Mathf.Abs(normalP.y) && Mathf.Abs(normalP.x) >= Mathf.Abs(normalP.z) && normalP.z == 0 ){ //для normal.z == 0
    UVs.Add (new Vector2 (coord1.y*1.41f, coord1.z));
    UVs.Add (new Vector2 (coord2.y*1.41f, coord2.z));
    UVs.Add (new Vector2 (coord3.y*1.41f, coord3.z));
}
else if( Mathf.Abs(normalP.y) >= Mathf.Abs(normalP.x) && Mathf.Abs(normalP.y) >= Mathf.Abs(normalP.z) ) { // для normal.x == 0
    UVs.Add (new Vector2 (coord1.x, coord1.z*1.41f));
    UVs.Add (new Vector2 (coord2.x, coord2.z*1.41f));
    UVs.Add (new Vector2 (coord3.x, coord3.z*1.41f));
}else {
    UVs.Add (new Vector2 (coord1.x*1.41f, coord1.y)); //для normal.y == 0
    UVs.Add (new Vector2 (coord2.x*1.41f, coord2.y));
    UVs.Add (new Vector2 (coord3.x*1.41f, coord3.y));
}
}

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

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

Сообщение bwolf88 24 окт 2014, 23:06

Не пойму как правильно развернуть текстуру, чтобы не было искривлений. Все размеры при 3 нормалях умножаем на 1.41f, тогда не будет общего увеличения маштаба текстуры, но все еще остается растяжение из-за искривления.

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

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

Сообщение waruiyume 24 окт 2014, 23:07

ИМХО: не развернёте Вы идеально, никак- всегда, будут либо искажения либо швы (посмотрите на персонажей из игр, зря у них, что-ли, уши оторваны?)
Поищите трипланар шейдеры- вам понравится.
Синтаксис:
Используется glsl
Shader "Custom/TriplanarSimple" {
        Properties {
                _MainTex ("Base (RGB)", 2D) = "white" {}
        }
        SubShader {
                Tags { "RenderType"="Opaque" }
                LOD 200
               
                CGPROGRAM
                #pragma surface surf Lambert

                sampler2D _MainTex;

                struct Input {
                        float2 uv_MainTex;
                        float3 worldNormal;
                        float3 worldPos;
                };

                void surf (Input IN, inout SurfaceOutput o) {
                        half4 up = tex2D (_MainTex, IN.worldPos.xz/7);
                        half4 right = tex2D (_MainTex, IN.worldPos.yz/7);
                        half4 frnt = tex2D (_MainTex, IN.worldPos.yx/7);
                       
                        IN.worldNormal = normalize(IN.worldNormal);
                        IN.worldNormal = abs(IN.worldNormal);
                        IN.worldNormal = saturate(pow(IN.worldNormal*1.3, 5));
                       
                        //half4 result = up * IN.worldNormal.y;
                        half4 result = up;
                        result = lerp(right, result, 1-IN.worldNormal.x);
                        result =  lerp(frnt, result, 1-IN.worldNormal.z);
                        result =  lerp(up, result, 1-IN.worldNormal.y);
                       
                        o.Albedo = result.rgb;
                        o.Alpha = 1;
                }
                ENDCG
        }
        FallBack "Diffuse"
}

 
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

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

Сообщение bwolf88 24 окт 2014, 23:13

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

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

Сообщение waruiyume 24 окт 2014, 23:25

Это называется "свизл"(чёт, я Поттера вспомнил :p )
Если у вас есть вектор с 3-мя компонентами, и вы Вы обращаетесь(читаете) к двум из них, то на выходе получается вектор с 2-мя, теми самыми компонентами.
Что-то в духе: vector3.xy=>vector2; vector2.x == vector3.x, vector2.y == vector3.y
Рекомендую viewtopic.php?f=96&t=1642&p=184309#p85110
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

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

Сообщение bwolf88 24 окт 2014, 23:32

За ссылку благодарю, сейчас буду знакомиться. Н все же пока не понятно еще кое что. Вся вот эта конструкция используется для одного вертекса или для полного треугольника ? И если для одного вертекса, то как получить значение развертки для треугольника :-\.

half4 up = tex2D (_MainTex, IN.worldPos.xz/7);
half4 right = tex2D (_MainTex, IN.worldPos.yz/7);
half4 frnt = tex2D (_MainTex, IN.worldPos.yx/7);

Пойду почитаю, чего ж такое шейдеры.

И еще один вопрос немного не по теме (я не очень разбираюсь в архитектуре).
Получается что шейдеры обрабатываются напрямую на GPU, тем самым разгружая CPU ? То есть сейчас у меня идет обработка развертки в общем вычислительном потоке, будет ли разгрузка Main потока если все это перенести в шейдеры.

Помню в середине 200-х выпускали миниигрушки с вычислениями на чистом GPU по каким то алгоритмам (kkreger или как то так назывались). Весила такая игрушка или ролик 50-60 кб.

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

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

Сообщение Tolking 24 окт 2014, 23:35

.jpg

Синтаксис:
Используется csharp
        Vector2 CalcUV (Vector3 v, Vector3 n)
        {
                Vector2 uv = new Vector2 (v.x, v.z);
               
                if (Mathf.Abs(n.y) == 0.0f) {
                        uv= new Vector2 (v.y, v.z);
                        if (Mathf.Abs(n.x)== 0.0f)
                                uv= new Vector2 (v.x, v.y);
                }
               
               
                if (Mathf.Abs(n.x+n.y+n.z)==1) return uv;
               
                if (n.x*n.y*n.z!=0.0f) {uv.x*=1.41f;uv.y*=1.41f;}else
                {
                if (Mathf.Abs(Mathf.Abs(n.x)-Mathf.Abs(n.y))<=0.1f) uv.x*=1.41f;
                if (Mathf.Abs(Mathf.Abs(n.x)-Mathf.Abs(n.z))<=0.1f) uv.y*=1.41f;
                if (Mathf.Abs(Mathf.Abs(n.y)-Mathf.Abs(n.z))<=0.1f) uv.y*=1.41f;
                }
               
                return uv;
        }
 


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

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

Сообщение bwolf88 24 окт 2014, 23:45

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

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

Пред.След.

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

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

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