Совет, как справиться с аддитивным филлрейтом яблофону.

Программирование для iPhone & Android

Совет, как справиться с аддитивным филлрейтом яблофону.

Сообщение Paul Siberdt 25 янв 2010, 21:16

Собственно, столкнулся с тормозами на 2G таче. Приложение во фруструме держит около 2.4К треугольников, текстур жрет порядка 400 килограммов, но очень агрессивно пользуется аддитивный полноэкранный многослойный блендинг на основе встроенного в Юню шейдера Particle/Additive
Этот аддитивный шейдер мне изначально не понравился из-за отсутствия куллинга, но я не видел проблем, пока не поменял 3G на 2G тач ( Процессор iPhone 3G, к слову, еще слабее, чем у 2G Touch )

Посему, поискал решение, причем, необходим был аддитив с дополнительным Tint цветом и учетом повертексного освещения меша (как у стандартного Particle/Additive) но с кулингом обратной грани, как минимум.
Результат:

Код: Выделить всё
Shader "iPhone/Additive(One Texture)" {
   Properties {
     _TintColor ("Tint Color", Color) = (0.5,0.5,0.5,0.5)
     _MainTex ("Texture to blend", 2D) = "black" {}
   }

Category {
   Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
   Blend SrcAlpha One ColorMask RGB Cull Back Lighting Off ZWrite Off Fog { Color (0,0,0,0) }
   BindChannels {  Bind "Color", color  Bind "Vertex", vertex  Bind "TexCoord", texcoord   }
      SubShader {
   
         Pass {
            SetTexture [_MainTex] {
               constantColor [_TintColor]
               combine constant * primary
            }
            SetTexture [_MainTex] {
               combine texture * previous DOUBLE
            }
         }
      }
   }
}

Фпс вернулися на положеную им полочку.
Если же повертексный свет не нужен (странно, конечно, ведь аддитив и повертексная альфа - пара покрепче Джейка с Нейтири), можно еще больше упростить жизнь яблофону, сократив операции в проходе:

Код: Выделить всё
      SubShader {
         Pass {
            SetTexture [_MainTex] {
               constantColor [_TintColor]
               combine texture * constant
            }
         }
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Совет, как справиться с аддитивным филлрейтом яблофону.

Сообщение Neodrop 25 янв 2010, 21:42

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

Re: Совет, как справиться с аддитивным филлрейтом яблофону.

Сообщение Paul Siberdt 25 янв 2010, 22:41

Эээ... ну, результат у шейдера тот же, что и у Particles/Additive, разве что текстура рисуется лишь с одной стороны, что, обычно нам и нужно для аддитивных объектов.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Совет, как справиться с аддитивным филлрейтом яблофону.

Сообщение d3gator 08 мар 2010, 21:22

а как у стандартного Particles/Alpha Blended с производительностью в iphone? Насколько он оптимален?

Используем для всего проекта только один этот шейдер.
Может быть можно его както упростить тоже?
Нужен максимум Tint цвет и БЕЗ учета повертексного освещения меша. У нас как бы 2д игра где нужен только цвет текстуры и альфа.

спасибо,
skype : oleg_fomenko
d3gator
UNIт
 
Сообщения: 119
Зарегистрирован: 20 май 2009, 21:19

Re: Совет, как справиться с аддитивным филлрейтом яблофону.

Сообщение Paul Siberdt 08 мар 2010, 21:44

Аддитивный шейдер из пака Юни двусторонний... вроде в сцене у меня задниц не было видно, но включив куллинг, я поднял существенно фпс ( в моей сцене вся геометрия аддитивная )

Сейчас пользую два вида шейдеров ( с сортировкой и без ), насколько лучше пользовать один с сортировкой - не определил :

Код: Выделить всё
Shader "iPhone/Additive(One Texture)" {
   
Properties {
   _TintColor ("Tint Color", Color) = (0.5,0.5,0.5,0.5)
   _MainTex ("Texture to blend", 2D) = "black" {}
   }

   Category {
//      Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
      Blend SrcAlpha One
//      AlphaTest Greater .01
//      ColorMask RGB
      Cull Back Lighting Off ZWrite Off Fog { Color (0,0,0,0) }
      BindChannels {
         Bind "Color", color
         Bind "Vertex", vertex
         Bind "TexCoord", texcoord
      }

      SubShader {
         Pass {
            SetTexture [_MainTex] {
               constantColor [_TintColor]
               combine constant * primary
            }
            SetTexture [_MainTex] {
               combine texture * previous DOUBLE
            }

         }
      }
   }
}


Код: Выделить всё
Shader "iPhone/AdditiveSorted(One Texture)" {
   
Properties {
   _TintColor ("Tint Color", Color) = (0.5,0.5,0.5,0.5)
   _MainTex ("Texture to blend", 2D) = "black" {}
   }

   Category {
//      Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
      Tags { "Queue"="Transparent" }
      Blend SrcAlpha One
//      AlphaTest Greater .01
//      ColorMask RGB
      Cull Back Lighting Off ZWrite Off Fog { Color (0,0,0,0) }
      BindChannels {
         Bind "Color", color
         Bind "Vertex", vertex
         Bind "TexCoord", texcoord
      }

      SubShader {
         Pass {
            SetTexture [_MainTex] {
               constantColor [_TintColor]
               combine constant * primary
            }
            SetTexture [_MainTex] {
               combine texture * previous DOUBLE
            }

         }
      }
   }
}
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Совет, как справиться с аддитивным филлрейтом яблофону.

Сообщение Paul Siberdt 08 мар 2010, 21:49

И погодите хоронить вертексный цвет. ;) Создав прозрачную вертексную кайму у псевдо-спрайтов, вы сможете скроллить и масштабировать тайлящуюся текстуру, чем добавите динамики эффектам.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Совет, как справиться с аддитивным филлрейтом яблофону.

Сообщение gnoblin 08 мар 2010, 23:12

Paul, я не понял последнюю мысль про вертексный цвет - можно чуть подробнее?
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Совет, как справиться с аддитивным филлрейтом яблофону.

Сообщение Paul Siberdt 08 мар 2010, 23:33

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

Потому, задав вертексно прозрачные области меша, мы получаем альфаканал, который не зависит от манипуляций с текстурами. Да, альфаканал грубый и прямо пропорционален числу вертексов, но часто достаточно создать дополнительный бордюр вертексов вокруг границ и окрасить саму границу нулевой альфой.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Совет, как справиться с аддитивным филлрейтом яблофону.

Сообщение gnoblin 09 мар 2010, 01:18

Можно пояснительную картинку ? :D
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Совет, как справиться с аддитивным филлрейтом яблофону.

Сообщение Paul Siberdt 09 мар 2010, 10:46

Ну, вот... на картинке - моделька и прозрачной вертексной границей.
Далее - вешаем таялящуюся текстуру и вне зависимости от мэппинга всегда имеем прозрачную границу объекта.

Изображение
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт


Вернуться в iPhone & Android

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

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