суббота, 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 пока отбалды расставлены в переди еще оптимизация в этом плане ) 



среда, 19 февраля 2014 г.

Татирати та та та ))) я вернулся ! и теперь уже надолго !

да кстати тут была паралельная разработка 2д движка ( которая кстати скоро переедет в эту версию )

блог моего 2д двига - http://immortal-engine.livejournal.com/  ( да он уже не будет обновляться ! вся инфа теперь будет только тут )


что нового ?

эээ наверно много %) начнем с того что я последнее время читал и внимал математику основы С++ ( все таки нужно было заполнить пробелы ) и т/д/ вобщем очень во многом подтянул знания , пересмотрел в итоге многое и сейчас куски которые писались на протяжении всего времени собираются потихоньку в кроссплатферменный движок )


что есть ?

нус начнем

1 код конечно весь на С++
2 есть сборка уже под mac os и так же под iphone/ipad, чуть позже будет под андройд и когда нибудь под Win
3 оптимизации геометрии
- post-tnl ( пока выставлен в 8 - не доходят руки проверить сколько же на самом деле можно закешировать )
4 рендер на основе запросов, в крации
- есть класс который по объектам на сцене собирает листы объектов ( те что могут в камеру отбросить тень, те что в камере и т/д/, вобщем под запрос ) и создает запросы
- в рендере происходит отрисовка этих запросов ( при чем запрос можно отрендерить определенным рендером ( LPP / FR ), все это происходит прозрачно и на деле под нужную архитектуру исполняется только нужный код ( не каких проверок и т/д/, всем рулит система сборки запросов ), в целом уже сейчас можно рендерить объекты разными техниками к примеру есть в рендере такой метод - рендер воды(лист), в этот метод попадает объект если для него установлена техника рендера воды, не много сумбурно поэтому резюмирую - система собирает списки объектов для рендер запросов, в рендере есть цикл который выполняет запросы и получается картинка ), при этом если рендеру нужно будет отрендерить объекты только с текстурой, оверхеда не будет ... в развернутом виде произойдет вызов только нужных для этого методов
5 SSAO для ПС рендера
6 LPP для openGL ES3 или для PC
7 тени
8 попиксельное освещение ( разные типы источника света,  позже опишу подробнее )
9 офкос материалы, разные модели освещения, параметры и т/д/, можно уже сейчас лепить )
10 все это добро доступно благодаря допиленной системе микрошейдеров
что это на практике
к примеру есть такой вот шейдер shader0.xml



что он может ? 
1 есть порядок формирования основного шейдера ( за это отвечает zIndex ) 
2 из шейдера можно запросить нужные данные к примеру нам нужна позиции камеры 
добаляем

вауля у нас внутри шейдера можно юзать позицию камеры, все остально точно так же, все что нужно шейдеру можно задать и использовать ( конечно если система может это дать, для этого есть отдельный список того что может выдать рендер ) 

сам файл шейдера может содержать как вертоксную составляющую так и пиксельную а так же все вместе к примеру 
шейдер 1 shader1.xml


шейдер 2 shader2.xml





из этого система соберет вот это 

 uniform mat3 modelNormalMatrix;
 uniform mat4 perspectiveMatrix;
 uniform mat4 cameraViewMatrix;
 uniform mat4 worldObjectMatrix;
 attribute vec3 a_normal;
 attribute vec3 a_position;
 varying mediump vec3 normal;
 varying mediump vec4 position;
 void main(void)
{
normal=a_normal;
vec4 position = vec4(a_position,1.0);
        normal   =  a_normal*modelNormalMatrix;
        position = vec4(position.x*0.5+0.5,position.y*0.5+0.5,position.z*0.5+0.5,position.w);
    
        position = perspectiveMatrix*cameraViewMatrix*worldObjectMatrix*position;
    
 gl_Position = position;

}

 varying mediump vec3 normal;
 varying mediump vec4 position;
        highp float grid(highp float size){
            // hello
            return 1.0;
        }
    
    
 void main(void)
{
 mediump vec4 color;
        color = vec4(normal.x,normal.y,normal.z,1.0);
    
        color = vec4(color.x*0.5+0.5,color.y*0.5+0.5,color.z*0.5+0.5,1.0);
    
 gl_FragColor = color;

}

понятное дело система собирает финальный шейдер из множества кусочков которые находятся в отдельных файлах ( ну вобщем микрошейдинг все дела ) 

картинка 




















как видно нормали замылены благодаря второму шейдеру

едем далее

все кешируется, шейдеры, меши, и т/д/ в рендере идет выставление униформ и остального только если происходят изменения ( то есть в чистом проходе имеем вызов только glDrawElements )

- в системе сбора запросов оставленно место для алгоритмов отсечения
- лайтмапы + любые другие эффекты легко вставляются в текущую архитектуру

математика для OSX юзается GLKit для остального пока есть собственная реализация, которая постоянно улучшается )

на сегодня все ) по мере продвижения буду добавлять информацию

картинка с ПС ( LPP/SM/SSAO( которое не докручено и не видно тут )/направленный источник света )