суббота, 22 февраля 2014 г.


Привет )
добавил два флага в материал
base->flags|=DYNAMIC_PER_PIXEL_BASE_LIGHT;
base->flags|=RESAVE_SHADOW_SM;

+ включил тени на ios, текстурка на примере 1024х1024 и думаю оверхедовый размер ( но это все настраиваемо так что проблем поменять нет )

оптимизировал не много расчеты лайтинга и теней

шейдер света
шейдер тени 




все таки решил онли свою математику юзать ) ( нашел оптимизации для NEON и потихоньку пишу свою матлибу ( свет уже на ней работает ) 

что вошло в оптимизации 
свет
- свет без затуханий и т/д/ это самый банальный дот вектора светильника и нормали ) не чего лишнего 
- перенес нормализацию в вертексный буфер 
тени 
- убрал скейл и транслейт из пиксельного шейдера в матрицу рассчитываемую на CPU при изменении позиции светильника 
- не большая оптимизация по инструкциям 
было 
            vec3 smcoord = lpos.xyz / lpos.w;
            float shadow = float(texture2D(shadowMaps, smcoord.xy).x<=smcoord.z);
            float fSurfaceShadow = 0.25 * shadow + 0.75;
           color = color*fSurfaceShadow;
стало 
            highp vec3  smcoord = lpos_v.xyz / lpos_v.w;
            highp float d = texture2D(depthTexture, smcoord.xy).x;
            color = color;
            
            if (smcoord.z >= d) {
                highp float fSurfaceShadow = 0.75;
                color = color*0.75;
            }
вместо на каждый пиксель
- проверка 
- каст к флоату 
- умножение 
- сложение 
- умножение 
стало только для затеных пикселей 
- проверка 
- если да то одно умножение 


пока вроде все ) 

ЗЫ highp пока отбалды расставлены в переди еще оптимизация в этом плане ) 



Комментариев нет:

Отправить комментарий