forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты на Unity (http://forum.boolean.name/forumdisplay.php?f=147)
-   -   Диваны (http://forum.boolean.name/showthread.php?t=13440)

pax 02.10.2010 12:48

Диваны
 
Работаю сейчас над построителем диванов для диванного сайта.
Демка на текущий момент (8Мб+)

Жмите кнопку "создать диван" с указанной формулой, часть модулей дивана еще не переделана, так что лучше построить диван по формуле по умолчанию
Управление:
  1. Левая кнопка мыши - ващение камеры, перемещение текстуры на модели, двойной щелчек - вращение текстуры на 90 градусов
  2. Правая кнопка мыши - масштабирование
  3. Средняя кнопка мыши - перемещение цели камеры (колесико как зум не работает)

Назначение текстур дивану - щелкнуть по кнопке текстуры, щелкнуть по месту на диване для применения.

Изменение конфигурации дивана - изменить формулу (имена модулей показаны ниже текстового поля), нажать "Создать диван" (повторюсь - пока часть модулей не переделана и выглядеть будут плохо :) ) Разделитель в формуле либо пробел либо запятая, все что непонятно интерпретатору будет проигнорировано.

Данил 02.10.2010 15:44

Ответ: Диваны
 
модно :) лучше бы так роботов делать ^_^

HolyDel 02.10.2010 16:07

Ответ: Диваны
 
о, прикольно.
сколько делал?

SBJoker 02.10.2010 16:28

Ответ: Диваны
 
Крутняк вот в этом юнити нет конкурентофф

pax 02.10.2010 16:57

Ответ: Диваны
 
Занимаюсь пока неделю (может полторы), но параллельно еще много чего приходится делать...
Для этого проекта вот шейдеры пришлось писать для интерполяции лайтмэпов (в примере этого не видно). Здесь нет освещения, тока лайтмэпы, а когда диван будет раскладываться - надо будет анимировать лайтмэпы.
Написал пока два шейдера - для PS2.0 и для трехтекстурных видеокарт простыми combine'ами думаю переделать на двухпроходный и двухтекстурный чтобы ему еще блики сделать, а то пока нету.

UPD
Вообще диван этот дали для работы - самый полигональный (в диване по формуле по умолчанию ~300к треугольников). Все модули дивана вместе взятые имеют 680к+ треугольников. Зачем такие диваны отображать на старых видеокартах я не понимаю. Даже если на напишу двухтекстурный вариант - тот же самый GeForce2 MX или GeForce4 MX в двухпроходном шейдере кажется загнуться нафиг... хотя это надо будет проверить :)

Illidan 02.10.2010 18:00

Ответ: Диваны
 
ниче так приятно получается

Taugeshtu 02.10.2010 18:29

Ответ: Диваны
 
Когда перетаскиваешь окошко Divan builder диван тоже крутится.
Формула дивана страшна)

pax 02.10.2010 20:15

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

MadMedic 03.10.2010 05:56

Re: Диваны
 
Мощно! Никогда такого не видел ...

Puf 4 d P PUFIK - недотекстурено
4т - диван раскладывается, а подушки нет ((
А зачем лайтмап и шейдеры?, нельзя простым вертексным освещением обойтись?

pax 03.10.2010 09:08

Ответ: Re: Диваны
 
Цитата:

Сообщение от MadMedic (Сообщение 163735)
Puf 4 d P PUFIK - недотекстурено
4т - диван раскладывается, а подушки нет ((

То что не заменены модели, я написал в первом посте. А по поводу раскладывания - тут должны интерполироваться лайтмэпы для придания в конечном положении нормальной освещенности (а не так как сейчас). Подушки скорее всего так и останутся :)

Цитата:

Сообщение от MadMedic (Сообщение 163735)
А зачем лайтмап и шейдеры?, нельзя простым вертексным освещением обойтись?

К сожалению с простым вертексным освещением и двумя интерполирующимися лайтмэпами + текстура на старых видеокартах можно реализовать нормально в два прохода, а с PS2.0 в один без проблем. С учетом полигонажа дивана (писал выше) - два прохода это х2 треугольников, что не приемлемо, но придется мириться на старых видеокартах с этим.

pax 03.10.2010 12:32

Ответ: Диваны
 
Сегодня прикрутил интерполяцию лайтмэпов.

Создаем диван, жмем сначала Anim1 чтобы разложить диван, потом Anim2 чтобы сложить. Лайтмэп для анимации всего две (начало и конец), но поддерживается любое количество.

jimon 03.10.2010 13:37

Ответ: Диваны
 
имхо чисто строитель диванов на сайте с помощью unity это утопия, ни одна домохозяйка не будет ставить плагин, а сразу перейдет на сайт конкурента, флеш в этом плане лучше, но не намного

а вот как стенд в магазине мебели - самое оно

pax 03.10.2010 15:13

Ответ: Диваны
 
Цитата:

Сообщение от jimon (Сообщение 163748)
имхо чисто строитель диванов на сайте с помощью unity это утопия, ни одна домохозяйка не будет ставить плагин, а сразу перейдет на сайт конкурента, флеш в этом плане лучше, но не намного

а вот как стенд в магазине мебели - самое оно

А это уже не мои проблемы, а заказчика ;)

ARA 03.10.2010 17:21

Ответ: Диваны
 
Цитата:

Сообщение от pax (Сообщение 163753)
А это уже не мои проблемы, а заказчика ;)

А заказчик предупреждён на счёт плеера?)

Конструктор прикольный намечается :)
Интерполяцыя клёво смотрится. Вот только заметил что Beast-овские лайтмапы в режиме эмуляции DX7 не отображаются. А просчитанные в максе отображаются. У тебя какие? А то домохоязьки фпечале будут.

h1dd3n 03.10.2010 18:01

Ответ: Диваны
 
Вложений: 1
Цитата:

Сообщение от ARENSHI (Сообщение 163760)
А заказчик предупреждён на счёт плеера?)

Конструктор прикольный намечается :)
Интерполяцыя клёво смотрится. Вот только заметил что Beast-овские лайтмапы в режиме эмуляции DX7 не отображаются. А просчитанные в максе отображаются. У тебя какие? А то домохоязьки фпечале будут.

Да все вроде работает как надо:
Вложение 11441

pax 03.10.2010 20:08

Ответ: Диваны
 
Цитата:

Сообщение от ARENSHI (Сообщение 163760)
А заказчик предупреждён на счёт плеера?)

Конструктор прикольный намечается :)
Интерполяцыя клёво смотрится. Вот только заметил что Beast-овские лайтмапы в режиме эмуляции DX7 не отображаются. А просчитанные в максе отображаются. У тебя какие? А то домохоязьки фпечале будут.

У заказчика был набросок на Quest3d который работает только в IE. Unity работает на всех распространенных браузерах, а лайтмэпы у меня просчитанные максом (какие дали).

ARA 04.10.2010 04:36

Ответ: Диваны
 
Вложений: 1
Цитата:

Да все вроде работает как надо:
Да не всё):

pax 04.10.2010 18:01

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


Еще в демке теперь таскание текстуры по дивану ориентировано правильно, даже если текстурные координаты повернуты на 90, 180.. и т.д. градусов.

http://shgames.ru/divan/

IGR 05.10.2010 13:18

Ответ: Диваны
 
диван выглядит симпотно !! ;)

pax 06.10.2010 23:19

Ответ: Диваны
 
Исправил шейдер, который цвет засвечивал, теперь все нормально (запутали меня лайтмэпные шейдеры, которе идут в исходниках как extra, своей эмиссией). Сделал загрузку модулей дивана отдельно, теперь плеер весит ~100кб. Загружаются тока запрошенные модули.
Можете теперь откуда-нибудь загружать текстуры и смотреть как получается :)
В формуле по умолчанию (которая текстом прописана) представлены все доступные модули на текущий момент.

pax 07.10.2010 22:06

Ответ: Диваны
 
Сегодня сделал блики для имитации лакированных поверхностей, но получается в местах щелей толи просветы, толи блики так себя ведут...
http://shgames.ru/divan/ бликует материал с цветочками.
Может кто из гуру посоветовать как от этого избавиться?

.Squid 07.10.2010 23:24

Ответ: Диваны
 
Шойдер бы показал. Там не только засветы. Если смотреть строго сверху на засвеченную область подушки, то в блике получается два креста: один белый пересвеченный, второй вокруг него монотонно темный. Что-то с нормалями, может быть...

pax 07.10.2010 23:37

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

Shader "Divan/DiffuseSpecularNew" {
Properties {
    
_Color ("Main Color"Color) = (1,1,1,1)
    
_SpecColor ("Specular Color"Color) = (0.50.50.51)
    
_Shininess ("Shininess"Range (0.011)) = 0.8    
    _MainTex 
("Base (RGB) Gloss (A)"2D) = "white" {}
    
_LightMap ("Lightmap (RGB)"2D) = "white" {}
    
_LightMap2 ("Lightmap2 (RGB)"2D) = "white" {}
    
_LightMapT ("LightmapT"Range (0.01)) = 0.0 
}

SubShader {
    
LOD 200
    Tags 
"RenderType" "Opaque" }
    
Pass{
        
CGPROGRAM
        
#pragma vertex vert
        #pragma fragment frag

        #include "UnityCG.cginc" 

        
sampler2D _MainTex;
        
sampler2D _LightMap;
        
sampler2D _LightMap2;
        
float4 _Color;
        
float4 _SpecColor;
        
float _LightMapT;
        
float _Shininess;
        
float4x4 _MainTexMatrix;

        
struct appdata
        
{
            
float4 vertex   POSITION;
            
float4 texcoord TEXCOORD0;
            
float4 texcoord1TEXCOORD1;
            
float4 normal   NORMAL;
        };

        
struct v2f {
          
float4 pos POSITION;
          
float4 uv  TEXCOORD0;
          
float4 uv2 TEXCOORD1;
          
float4 normal TEXCOORD2;
          
float3 lightDir TEXCOORD3;
          
float3 viewDir  TEXCOORD4;
        };


        
v2f vert (appdata v
        {
            
v2f o;
            
o.pos mulUNITY_MATRIX_MVPv.vertex );
            
o.uv mul(_MainTexMatrixv.texcoord);
            
o.uv2 v.texcoord1;
            
o.normal v.normal;
            
o.lightDir ObjSpaceLightDirv.vertex );
            
o.viewDir ObjSpaceViewDirv.vertex );
            return 
o;
        }

        
half4 fragv2f i ) : COLOR {
            
half4 mainColor tex2D(_MainTexi.uv.xy);
            
half4 c = ((_LightMapT) * tex2D (_LightMapi.uv2.xy) + _LightMapT tex2D (_LightMap2i.uv2.xy) ) * mainColor;
           
            
half3 h normalize (i.lightDir i.viewDir);
            
float nh max (0dot (i.normalh));
            
float spec pow (nhmainColor.48) * _Shininess;
            
            return 
_Color spec _SpecColor;
        }


        
ENDCG
    
}
}

FallBack "Divan/VertexLit"



UPD: такое чувство, что шейдер считает положение камеры и источника в одном месте, и источник точечный... хотя должен быть направленный...

.Squid 08.10.2010 00:11

Ответ: Диваны
 
А нормали нормализованы? Те, что i.normal.
Кстати, а что max быстрее, чем saturate?

pax 08.10.2010 00:18

Ответ: Диваны
 
нормализованы ли нормали не знаю, но скорее всего нормализованы импортером, а max была использована в шейдере, который я взял за пример. Попробую нормализовать нормали и использовать saturate, мне не нужны значения больше 1...

pax 08.10.2010 00:25

Ответ: Диваны
 
Странно, при нормализации нормали в вершинной функции блики вообще пропадают...

pax 08.10.2010 12:04

Ответ: Диваны
 
Решил использовать двухпроходный шейдер для двухтекстурных видеокарт без использования Cg вставок.
Получилось следующее:
PHP код:

Shader "Divan/VertexLit" {
Properties {
    
_Color ("Main Color"Color) = (1,1,1,1)
    
_SpecColor ("Spec Color"Color) = (1,1,1,1)
    
_Shininess ("Shininess"Range (0.011)) = 0.7
    _MainTex 
("Base (RGB)"2D) = "white" {}
    
_LightMap ("Lightmap (RGB)"2D) = "lightmap" LightmapMode }
    
_LightMap2 ("Lightmap2 (RGB)"2D) = "lightmap" LightmapMode }
    
_LightMapT ("LightmapT"Range (0.01)) = 0.0 
}


// ------------------------------------------------------------------
// Two texture cards

SubShader {
    
LOD 100
    Tags 
"RenderType"="Opaque" }

    
Pass {
        
Name "LM"
        
        
BindChannels {
            
Bind "Vertex"vertex
            Bind 
"texcoord1"texcoord0 // lightmap uses 2nd uv
            
Bind "texcoord1"texcoord1 // lightmap2 uses 2nd uv
        
}
        
        
SetTexture [_LightMap] {
            
combine texture
        
}
        
SetTexture [_LightMap2] {
            
constantColor (0.5,0.5,0.5,[_LightMapT])
            
combine texture lerp(constantprevious
        
}
    }
    
    
Pass {
        
Name "COLOR"
        
Tags {"LightMode" "Vertex"}
        
Material {
            
Diffuse [_Color]
            
Shininess [_Shininess]
            
Specular [_SpecColor]
        }

        
Lighting On
        SeparateSpecular On
        ZWrite Off
        Offset 0
, -1
        Blend DstColor Zero
        
        BindChannels 
{
            
Bind "Vertex"vertex
            Bind 
"normal"normal
            Bind 
"texcoord"texcoord0 // main uses 1st uv
        
}
        
        
SetTexture [_MainTex] {
            
ConstantColor [_Color]
            
combine texture Constanttexture
            matrix 
[_MainTexMatrix]
        }
    }
}

Fallback "VertexLit"


Теперь есть поддержка старых видеокарт и блики исправились.

pax 25.11.2010 16:54

Ответ: Диваны
 
Новое демо http://shgames.ru/divan_new/
Для некоторых тканей есть параметр falloff, который придает им более реалистичный вид. Пример:

pepel 26.11.2010 06:24

Ответ: Диваны
 
да смотрится конешь красиво, но когда загружается эта демка, то браузер глючит и стопорит.
в самой проге какието странные тормоза, где-то с периодом 1 секунда появляется некая задержка изображения(скачек) странно както.хз мож модели оптимизировать, но на обычные тормоза не похоже(в первой версии такого не было)
и текстуры достаточно медленно зангружаются ~5сек.
еще интуитивно хочется зум на колесо мышки, т.к. везде так сделано

а вообще круто, почти как рендер, шейдеры прикольные.!

Harter 26.11.2010 12:59

Ответ: Диваны
 
Оно то может и красиво, но зачем Диванам графика Кризиса? У меня, средне статического дивано-жаждателя с потенциальным нетбуком, при построении диванов программа ненадолго зависает, а после, просто работает медленно. Если она всё-таки коммерческая, стоит задуматься об оптимизации. ИМХО.

pax 26.11.2010 16:52

Ответ: Диваны
 
2ALL: заказчик дал для работы самый не оптимизированный диван ;). Диван который на картинке (который по умолчанию) визуализируется с помощью двух точечных источников света и в сумме дает на экран 900к полигонов.

От чего тормоза:
  1. При загрузке дивана юнити отправляет его сетку в физических движок для получения MeshCollider'а. Для такого количества поликов это весомая операция.
  2. Текстуры не подготовленные и есть с размером 1658х1447. По которым еще генерируются карты нормалей при загрузке, что так же дает задержу (до секунды на моей машине), кроме сжатия в DXT после загрузки. Генерацию карт нормалей возможно вынесем в отдельный поток, но не факт.
  3. Часть времени жрут текстуры в GUI. Я еще не успел сделать их уменьшенные версии и на месте кнопок они визуализируются как есть, так что оптимизация кончено будет )

PS: это еще не законченный проект и работы ведутся, жаль медленно из-за нехватки времени.

Taugeshtu 26.11.2010 18:00

Ответ: Диваны
 
Цитата:

При загрузке дивана юнити отправляет его сетку в физических движок для получения MeshCollider'а.
Вопрос: интерфейс позволит виртуально прыгать по дивану? Иначе - нафига?!

pax 26.11.2010 19:30

Ответ: Диваны
 
Цитата:

Сообщение от Taugeshtu (Сообщение 169978)
Вопрос: интерфейс позволит виртуально прыгать по дивану? Иначе - нафига?!

Пробовал таскать текстуру по дивану? ;)

Taugeshtu 26.11.2010 19:59

Ответ: Диваны
 
Цитата:

Пробовал таскать текстуру по дивану?
Пробовал. Не проще ли подругить легковесную модель для коллизий или шейдером читать экран в текстуру с depth-записью, обратно переводить пиксель мышки в world-координаты (кстати в CG есть доступ к worldpos пикселя, можно вытащить оттуда и использовать их для "таскания" текстуры)?

Не, ну то есть да, это нифига не проще, но как вариант... :-D

pax 26.11.2010 20:46

Ответ: Диваны
 
Да еще записать туда ориентацию координат текстуры в точке пика, чтобы определить в какую сторону двигать.


Часовой пояс GMT +4, время: 00:57.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot