fixed4 color : COLOR;

Шейдеры и все-все-все.

fixed4 color : COLOR;

Сообщение WhiteDevil 16 ноя 2012, 15:02

Приветы :)

Делаю 2Д проект с применением батчинга большого количества прозрачных объектов для iOS платформы.
Апликейшн давал красивый стабильный 30 фпс, при этом мой шейдер использовал профайл входных данных appdata_full (и насколько я понимаю, это значит в вершинный шейдер приходят все возможные данные). Но использовал я лишь 2 из них: position и texcoord.
Потом я задействовал кастомный профайл из перечисленных двух и добавил еще "fixed4 color : COLOR". И так вышло, что фпс резко упало непристойно низко. При том, что я этот колор лишь передаю из вершинного в пиксельный, где умножаю на генерируемый пиксель (не изменяя его по пути).
И я.... я.... я не понимаю почему :( Я всегда считал, что использовать вертексный колор намного "нативнее" и быстрее, чем материальный колор.
Аватара пользователя
WhiteDevil
UNIверсал
 
Сообщения: 455
Зарегистрирован: 19 дек 2010, 15:55

Re: fixed4 color : COLOR;

Сообщение Battle Angel Alita 16 ноя 2012, 15:55

код в тред
Мозг рака
Изображение
Аватара пользователя
Battle Angel Alita
UNIверсал
 
Сообщения: 476
Зарегистрирован: 25 ноя 2009, 14:52

Re: fixed4 color : COLOR;

Сообщение WhiteDevil 16 ноя 2012, 17:10

Вот.. :)

Синтаксис:
Используется csharp
Shader "Environment" {
        Properties {
                _MainTex ("Base", 2D) = "white" {}
        }

CGINCLUDE

#include "UnityCG.cginc"

sampler2D _MainTex;

struct appdata_t {
        float4 vertex : SV_POSITION;
        float2 texcoord : TEXCOORD0;
        fixed4 color : COLOR;
};

struct v2f {
        half4 pos : SV_POSITION;
        half2 uv : TEXCOORD0;
        half4 col : COLOR0;
};

v2f vert(appdata_t v) {
        v2f o;
        o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
        o.uv.xy = v.texcoord;  
        o.col = v.color;
       
        return o;
}

fixed4 frag( v2f i ) : COLOR {
        return tex2D (_MainTex, i.uv.xy) * i.col;
}

ENDCG

SubShader {
Tags { "RenderType" = "Transparent" "Queue" = "Transparent"}
Cull Back
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha

Pass {

CGPROGRAM

#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest

ENDCG

}

}
FallBack Off
}
Аватара пользователя
WhiteDevil
UNIверсал
 
Сообщения: 455
Зарегистрирован: 19 дек 2010, 15:55

Re: fixed4 color : COLOR;

Сообщение Battle Angel Alita 16 ноя 2012, 18:21

конвертация half -> fixed
надо писать так
Синтаксис:
Используется glsl
struct v2f {
        half4 pos : SV_POSITION;
        half2 uv : TEXCOORD0;
        <span style="font-weight: bold">fixed4 col : COLOR0;</span>
};

Алсо, использование вертекс-колора увеличивает "вес" вертекса. То, что ты раньше писал appdata_full не имеет значения т.к. юнька выкидывает неиспользуемые компоненты.
Мозг рака
Изображение
Аватара пользователя
Battle Angel Alita
UNIверсал
 
Сообщения: 476
Зарегистрирован: 25 ноя 2009, 14:52

Re: fixed4 color : COLOR;

Сообщение WhiteDevil 16 ноя 2012, 19:44

Чорт, а я думал мой вопрос заслужит хоть какого-то уважения.. Как же все просто оказалось..
Подогнал все под один тип данных, порезал где-то c float до half, с half до fixed, и да, получил свои 30 кадров назад.
Пасиб :)
Аватара пользователя
WhiteDevil
UNIверсал
 
Сообщения: 455
Зарегистрирован: 19 дек 2010, 15:55


Вернуться в Shader Lab

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

Сейчас этот форум просматривают: Google [Bot] и гости: 6