Привет )
добавил два флага в материал
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 пока отбалды расставлены в переди еще оптимизация в этом плане )
Комментариев нет:
Отправить комментарий