Спальный район

Проекты в стадии разработки.

Спальный район

Сообщение Slava 19 июн 2009, 00:02

Вот, решил открыть небольшую темку. Делаю карту, уже приличное время,) но последнее время взялся за нее основательно, как и за юнити. Надеюсь, кто-нибудь прочтет и подскажет по некоторым вопросам.
1.jpg

Вот сценка, 17мб, в принципе, самое начало, сделал почти сразу после импорта в юнити. http://www.zshare.net/download/61224692e3e838fd/
Сейчас расставил заборы, сделал теплосети и небольшую кучу другой мелочевки...
Деревья расставить хочу после того, как разберусь с шейдером для земли. Земля сделана геометрией, и террэйн находится ниже немного. Он нужен для рассадки травы и деревьев. Как сделать, чтобы шейдер "Terrain/Four Layer" с вики юнити использовал 1й uv канал для всех четырех текстур, и 2й канал для маски? Сейчас они все на 1м канале. Вот сам шейдер:

Код: Выделить всё
Shader "Terrain/Four Layer" {

Properties {
    _Color ("Main Color", Color) = (1,1,1,1)
    _MainTex ("Color 1 (RGB)", 2D) = "white" {}
    _MainTex2 ("Color 2 (RGB)", 2D) = "white" {}
    _MainTex3 ("Color 3 (RGB)", 2D) = "white" {}
    _MainTex4 ("Color 4 (RGB)", 2D) = "white" {}
    _Mask ("Mixing Mask (RGBA)", 2D) = "gray" {}
}
SubShader {
    Pass {
        Lighting On
        Material {
            Diffuse [_Color]
            Ambient [_Color]
        }
   
CGPROGRAM
// profiles arbfp1
// fragment frag

sampler2D _MainTex : register(s0);
sampler2D _MainTex2 : register(s1);
sampler2D _MainTex3 : register(s2);
sampler2D _MainTex4 : register(s3);
sampler2D _Mask : register(s4);

struct v2f {
    float4 uv[5] : TEXCOORD0;
    float4 diffuse : COLOR;
};

half4 frag( v2f i ) : COLOR
{
    // get the four layer colors
    half4 color1 = tex2D( _MainTex, i.uv[0].xy );
    half4 color2 = tex2D( _MainTex2, i.uv[1].xy );
    half4 color3 = tex2D( _MainTex3, i.uv[2].xy );
    half4 color4 = tex2D( _MainTex4, i.uv[3].xy );
    // get the mixing mask texture
    half4 mask = tex2D( _Mask, i.uv[4].xy );
    // mix the four layers
    half4 color = color1 * mask.r + color2 * mask.g + color3 * mask.b + color4 * mask.a;
    // multiply and double by the lighting
    return color * i.diffuse * 2.0;
}
ENDCG
        SetTexture[_MainTex] {}
        SetTexture[_MainTex2] {}
        SetTexture[_MainTex3] {}
        SetTexture[_MainTex4] {}
        SetTexture[_Mask] {}
    }
}
FallBack " VertexLit", 1


}

Кроме того, куча вопросов по оптимизации...
У вас нет доступа для просмотра вложений в этом сообщении.
Добавить slava-1234 в Skype
Slava
UNIт
 
Сообщения: 135
Зарегистрирован: 05 апр 2009, 05:14

Re: Спальный район

Сообщение Slava 19 июн 2009, 09:15

На счет оптимизации - скрипт ЛОДа кстати непонятно куда кидать... На офф форуме сказано - на префаб, но скрипт требует меш рендерер, которого на префабе нет, он ниже, точнее их два, на двух модельках... Кидаю туда, отдельно на каждую модельку, вроде как работает, но не правильно. Две модельки для 2х лодов - две разные текстуры. Отображаются они неправильно. Вот картинка
3.jpg

Собственно, вот моделька скамейки с текстурами
skameika.rar

Никто еще не сталкивался?
У вас нет доступа для просмотра вложений в этом сообщении.
Добавить slava-1234 в Skype
Slava
UNIт
 
Сообщения: 135
Зарегистрирован: 05 апр 2009, 05:14

Re: Спальный район

Сообщение fox 19 июн 2009, 11:20

Чтобы было понятней в чем косяк выложи сюда текст скрипта ЛОДа
Добавить foxumkov в Skype
Мои проекты:
Turbodrive
Изображение

Изображение
Аватара пользователя
fox
UNITрон
 
Сообщения: 255
Зарегистрирован: 07 ноя 2008, 13:02
Откуда: Питер
  • ICQ

Re: Спальный район

Сообщение Slava 19 июн 2009, 11:23

Код: Выделить всё
var highLod : Mesh;
var lowLod : Mesh;
var distance = 10.0;

function Update ()
{
    var campos = Camera.main.transform.position;
    var meshFilter : MeshFilter = GetComponent(MeshFilter);
    if( (transform.position - campos).sqrMagnitude <
        distance * distance )
    {
        // use high LOD
        if( meshFilter.sharedMesh != highLod )
            meshFilter.sharedMesh = highLod;
    }
    else
    {
        // use low LOD
        if( meshFilter.sharedMesh != lowLod )
            meshFilter.sharedMesh = lowLod;
    }
}


Вот. Neodrop писал что sharedMesh лучше заменить на Mesh, чтобы скрипт не влиял на инстансы.
Добавить slava-1234 в Skype
Slava
UNIт
 
Сообщения: 135
Зарегистрирован: 05 апр 2009, 05:14

Re: Спальный район

Сообщение Neodrop 19 июн 2009, 11:28

Жутковатый скрипт. Никакой оптимизации. :-?
Если его вешать на множество объектов, потери времени могут стать значительнее выигрыша на полигонах...
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Спальный район

Сообщение Slava 19 июн 2009, 11:43

Может быть... А что делать то. У меня скамеек - 2 у каждого подъезда да еще в парке куча. Если все сделать одним мешем - слишком много полигонов в кадре... Такой другой мелочевки полно - фонари, теплотрасса с опорами, заборы... Если их как-то не скрывать или ЛОДировать - кранты будут...
Добавить slava-1234 в Skype
Slava
UNIт
 
Сообщения: 135
Зарегистрирован: 05 апр 2009, 05:14

Re: Спальный район

Сообщение Neodrop 19 июн 2009, 12:06

Много полигонов ничего не значит, если на всех этих ваших скамейках, слепленных в один объект, будет один материал.
Попробовать слабо? :-? Всего то - слепить меши в Максе и экспортнуть. Гарантирую - вы будете сильно удивлены.
Но не забудьте : Материал один на всех, а не Multi Sub Object
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Спальный район

Сообщение Slava 19 июн 2009, 16:23

Слепить в один объект и экспортнуть придется не один раз - щас делаю детские площадки... Потом еще много чего... Чесно говоря, на моей GF7300 уже сейчас не летает, скажем так... Пока что наверно размножу префаб в юнити + CombineChildren, а там посмотрим...
Скрипт ЛОДа хотел использовать еще для домов - каждый дом имеет в среднем 30 текстур. Если сделать упрощенную модельку для каждого дома и запечь все в одну текстуру - получится конечно размазанное нечто, но для дальних планов сойдет. Drawcalls потому что сейчас в некоторых местах за 1000 переваливают (а вся размноженная уже мелочевка имеет CombineChildren). Незнаю что лучше - объединить все одинаковые дома с одинаковым материалом в одну меш, или первый вариант - ЛОД? С нормальным скриптом ЛОДа мне кажется было бы предпочтительней.

Заборы без CombineChildren и с:
4.jpg


На счет материала земли - вот картинка, что мы имеем, применив шейдер (который выше неск постов) к геометрии земли. 2 канала у геометрии - 1 канал - 2х2метра, 2 канал - планар размером со всю территорию(для маски). В качестве маски - текстура маски от Island Demo. Пока что она юзает тот же канал что и текстуры, что неправильно!
5.jpg


Вот текстурка маски если что
У вас нет доступа для просмотра вложений в этом сообщении.
Добавить slava-1234 в Skype
Slava
UNIт
 
Сообщения: 135
Зарегистрирован: 05 апр 2009, 05:14

Re: Спальный район

Сообщение Neodrop 19 июн 2009, 16:52

Незнаю что лучше - объединить все одинаковые дома с одинаковым материалом в одну меш, или первый вариант - ЛОД?


Мне думается, объединить дома лучше. :-?
И стоит запечь 8 материалов в одну текстуру. Один дом == одна текстура. Так будет куда быстрее и правильнее.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Спальный район

Сообщение Slava 19 июн 2009, 17:05

Да вот только текстур не 8, а по 20 - 40... По 8 склеить - все-равно уже будет duke3D Atomic edition по качеству...)) Только на дальний план такое... Но ведь лодом можно здорово убавить кол-во материалов!? 1000DCalls - много всеже. Если было бы возможно совместить CombineChildren со скриптом лода...
Наверно объединю домишки.
Добавить slava-1234 в Skype
Slava
UNIт
 
Сообщения: 135
Зарегистрирован: 05 апр 2009, 05:14

Re: Спальный район

Сообщение Const_47 19 июн 2009, 18:26

Код: Выделить всё
Shader "Terrain/Four Layer_2UV" {

Properties {
    _Color ("Main Color", Color) = (1,1,1,1)
    _MainTex ("Color 1 (RGB)", 2D) = "white" {}
    _MainTex2 ("Color 2 (RGB)", 2D) = "white" {}
    _MainTex3 ("Color 3 (RGB)", 2D) = "white" {}
    _MainTex4 ("Color 4 (RGB)", 2D) = "white" {}
    _Mask ("Mixing Mask (RGBA)", 2D) = "gray" {}
}
SubShader {
    Pass {
        Lighting On
        Material {
            Diffuse [_Color]
            Ambient [_Color]
        }
   
CGPROGRAM
#pragma fragment frag

sampler2D _MainTex : register(s0);
sampler2D _MainTex2 : register(s1);
sampler2D _MainTex3 : register(s2);
sampler2D _MainTex4 : register(s3);
sampler2D _Mask : register(s4);

struct v2f {
    float4 uv      : TEXCOORD0;
    float4 uv2     : TEXCOORD1;
    float4 diffuse : COLOR;
};

half4 frag( v2f i ) : COLOR
{
    // get the four layer colors
    half4 color1 = tex2D( _MainTex,  i.uv.xy );
    half4 color2 = tex2D( _MainTex2, i.uv.xy );
    half4 color3 = tex2D( _MainTex3, i.uv.xy );
    half4 color4 = tex2D( _MainTex4, i.uv.xy );
    // get the mixing mask texture
    half4 mask = tex2D( _Mask, i.uv2.xy );
    // mix the four layers
    half4 color = color1 * mask.r + color2 * mask.g + color3 * mask.b + color4 * mask.a;
    // multiply and double by the lighting
    return color * i.diffuse * 2.0;
}
ENDCG
        SetTexture[_MainTex] {}
        SetTexture[_MainTex2] {}
        SetTexture[_MainTex3] {}
        SetTexture[_MainTex4] {}
        SetTexture[_Mask] {}
    }
}
FallBack " VertexLit", 1


}


Не наю, не проверял, но в теории должно работать.
Последний раз редактировалось Const_47 19 июн 2009, 19:43, всего редактировалось 1 раз.
Const_47
Герой Форума
 
Сообщения: 271
Зарегистрирован: 23 мар 2009, 19:24
Откуда: Украина. Львов\Новояворовск

Re: Спальный район

Сообщение Slava 19 июн 2009, 18:54

Ошибки выдает.
используйте #pragma target вместо profiles
и #pragma fragment frag вместо fragment frag
Исправил - выдает ошибку в material editor.cs
Черт, это шадер от 1.хх...
http://www.unifycommunity.com/wiki/index.php?title=Shaders#Terrain
Хотя оригинальный нормально работает...
FourLayerDiffuseFast.shader оттуда выглядит очень странно, пересвечен...
FourLayerVertexLit2Pass.shader - выглядит также как наш. юзает цвет вершин как лайтмапу? Вообще-то лайтмапа это хорошо... если текстура...
Добавить slava-1234 в Skype
Slava
UNIт
 
Сообщения: 135
Зарегистрирован: 05 апр 2009, 05:14

Re: Спальный район

Сообщение Const_47 19 июн 2009, 19:44

Исправил код сверху, проверил на plane, работает. Лайтмапу элементарно можно прикрутить к тому шейдеру что уже есть, UV2?, UV3?
Const_47
Герой Форума
 
Сообщения: 271
Зарегистрирован: 23 мар 2009, 19:24
Откуда: Украина. Львов\Новояворовск

Re: Спальный район

Сообщение Slava 19 июн 2009, 20:28

Никак не хочет...
6.jpg

Т.е. работает, но ничем от оригинала не отличается... Маска того-же размера, что и текстуры... Кстати, нет теней на нем.
Вот сляпал щас в максе - плэйн 200х200м, 1 канал маппинга - 2х2м, 2 канал - по размеру плэйна, для маски...

Лайтмапу? Да!!!!!! !!!
Да по идее тот же канал, что и маска... или 3й...
У вас нет доступа для просмотра вложений в этом сообщении.
Добавить slava-1234 в Skype
Slava
UNIт
 
Сообщения: 135
Зарегистрирован: 05 апр 2009, 05:14

Re: Спальный район

Сообщение Neodrop 20 июн 2009, 00:53

Я имел в виду не именно 8 текстур или материалов. Это просто первая попавшаяся цифра. Я имею в виду, что один дом == один материал. Запечь ваши (хоть сто) материалы в одну текстуру - плёвая работа для самого неопытного моделлера, а прирост производительности будет ощутимый.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

След.

Вернуться в Кузня

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

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