Войти
ПроектыФорумКонкурсы

Конкурс: Дрифт (начался, до 9 мая, предварительные релизы до 26 апреля). Приз : 2000р (7 стр)

Advanced: Тема повышенной сложности или важная.

Страницы: 13 4 5 6 7 8 Следующая »
#90
20:06, 17 мар. 2020

Распиши.

И да, это ведь все динамическое? Не запечено в ландшафт?


#91
21:09, 17 мар. 2020

romanshuvalov
да, динамическое.
Сегодня - завтра отпишу.

#92
22:35, 18 мар. 2020

romanshuvalov, я тут подумал как тебе ответ дать, но там выходит на целую статью. Я попробую коротко.
Вдоль сплайна делается выборка квадов. Квады перпендикулярны к спайну (как их ориентировать это отдельная задача, но легкая), известны их базисы (x,y, z локальные оси и центр), и соответствующие ему uv координаты.
Два соседних квада задают сегмент (у двух квадов в сегменте оси z (она же нормаль) направлены друг против друга). Далее в шейдере получаем из буфера глубины мировую позицию. Проецируем ее на нормали квадов:

  vec3 localPostionA = worldPosition - orig1.xyz;
  vec3 localPostionB = worldPosition - orig2.xyz;

  float h1 = dot(normal1.xyz, localPostionA);
  float h2 = dot(normal2.xyz, localPostionB) ;

Если одна из проекций меньше нуля, то discard.

Коэффициент интерполяции квадов k, он же U (локальная) текстурная координата получается так:

float k = h1 / (h1 + h2);

Зная его получаешь локальный квад, его базис и проецируешь мировую позицию в этот базис.
Далее отсекаешь эту точку по двумерному кваду. Если она попала в квад, то x это V координата умноженная на ширину квада.
Получаешь из этого UV.

Далее переходишь от UV сегмента к UV сплайна.

Профит.

Если хочешь шейдер могу в лс кинуть.

#93
5:09, 19 мар. 2020

Ага, вроде ясно. В обычной ситуации, когда рендерим квадратную декаль, мы ищем UV по проекции верхней грани на ландшафт. А ты таким образом ищешь не сразу UV, а коэффициент интерполяции, а уже по нему интеполируешь UV соседних опорных точек.

Отрисовка по одному сегменту? Или всё одним махом, а ближайшие опорные точки ищутся в шейдере?

#94
14:26, 19 мар. 2020

romanshuvalov
> а ближайшие опорные точки ищутся в шейдере?
Все данные для квадов заливаются каждый кадр в ssbo. Сама отрисовка инстанситса. Собственно инстанс и есть id в ssbo.

#95
(Правка: 14:30) 14:30, 19 мар. 2020

Пока не доделано, я так и не смог решить (адекватно) проблему со смешиванием декалей с данными gBuffer. Есть вариант юзать imageLoad / imageStore. Но разница в производительности почти в 4 раза.

void render(
    GBuffer& gBuffer, 
    glm::vec2 inverseResolution,
    glm::mat4 VP)
  {
    _state.viewport.width  = gBuffer._decal_albedoRGB_roughness_A.getWidth();
    _state.viewport.heigth = gBuffer._decal_albedoRGB_roughness_A.getHeight();

    _state.mColorRenderTarget[0].texture = &gBuffer._decal_albedoRGB_roughness_A;
    _state.mColorRenderTarget[1].texture = &gBuffer._decal_normalRGB_metallic_A;
    _state.mColorRenderTarget[2].texture = &gBuffer._decal_alpha_R;
    _state.depthRenderTarget.texture     = &gBuffer._decal_depthMap;
     
    RenderStateControler::setState(_state);

    static auto road_material = MaterialDB::getInstance().getMaterial("road_1");

    _splineDecalShader.use();
    _splineDecalShader.bind(uVP, VP);
    _splineDecalShader.bind(_mSplineDecalDataSSBOHandle, _mSplineDecalDataSSBO);
    
    _splineDecalShader.bind(_uDepthMapHandle, gBuffer._depthMap);
    _splineDecalShader.bind(_uInverseRes, inverseResolution);

    _splineDecalShader.bind(_road_m1, *road_material()->_mTexture[0]());
    _splineDecalShader.bind(_road_m2, *road_material()->_mTexture[1]());
      
    _mSplineDecalDataSSBO.update(&decal.mTrapeze[0], sizeof(SplineDecalSegment) * decal.mTrapeze.size());
    VAOControl::bind(_trapeze);
    _trapeze.draw(decal.mTrapeze.size());
  } 
Может кто что думает по поводу ?
#96
18:15, 21 мар. 2020

romanshuvalov
Давай уже заявку, не стесняйся.

Чем сейчас заняты? Я вот пилю редактор для декалей, собственно сами декали и оптимизирую их рендер.

Скоро будут первые скрины (к концу недели).

#97
19:34, 21 мар. 2020

vindast
> Давай уже заявку, не стесняйся.
Я еще ничего с тех пор так и не сделал. Сегодня попробую что-нибудь поделать.

#98
23:12, 21 мар. 2020

Много возни. Моё участие всё еще под вопросом.

#99
13:30, 24 мар. 2020

Интересненько!

#100
1:22, 25 мар. 2020

fox_2404
А у тебя там свой движок ?

#101
11:06, 25 мар. 2020

vindast
У нас свой да, CarX.

#102
20:50, 25 мар. 2020

fox_2404
> CarX
выглядит симпотично

#103
4:00, 27 мар. 2020

Не по теме, но развею тоску, пилю редактор нодов.
Изображение

#104
9:15, 27 мар. 2020

vindast
> Не по теме
Почему не по теме? Это не для этой игры?
Впереди незапланированная неделя выходных, думаю, скоро будет, что показать, тем более, что, в отличие от обычных праздничных выходных, у меня не будет работы.

Страницы: 13 4 5 6 7 8 Следующая »
ПроектыФорумКонкурсы