Татирати та та та ))) я вернулся ! и теперь уже надолго !
да кстати тут была паралельная разработка 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
как видно нормали замылены благодаря второму шейдеру
едем далее
все кешируется, шейдеры, меши, и т/д/ в рендере идет выставление униформ и остального только если происходят изменения ( то есть в чистом проходе имеем вызов только glDrawElements )
- в системе сбора запросов оставленно место для алгоритмов отсечения
- лайтмапы + любые другие эффекты легко вставляются в текущую архитектуру
математика для OSX юзается GLKit для остального пока есть собственная реализация, которая постоянно улучшается )
на сегодня все ) по мере продвижения буду добавлять информацию
картинка с ПС ( LPP/SM/SSAO( которое не докручено и не видно тут )/направленный источник света )
да кстати тут была паралельная разработка 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 из шейдера можно запросить нужные данные к примеру нам нужна позиции камеры
вауля у нас внутри шейдера можно юзать позицию камеры, все остально точно так же, все что нужно шейдеру можно задать и использовать ( конечно если система может это дать, для этого есть отдельный список того что может выдать рендер )
сам файл шейдера может содержать как вертоксную составляющую так и пиксельную а так же все вместе к примеру
из этого система соберет вот это
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( которое не докручено и не видно тут )/направленный источник света )
Комментариев нет:
Отправить комментарий