Unreal EngineФорумПрограммирование

UCanvas::K2_DrawMaterialTriangle или аналоги

#0
10:55, 6 ноя 2023
  // Rectangle
  CanvasUVTris.SetNum(2);
  FCanvasUVTri& CanvasUVTri = CanvasUVTris[0];
  CanvasUVTri.V0_Pos = FVector2D::ZeroVector;
  CanvasUVTri.V0_UV = FVector2D::ZeroVector;
  CanvasUVTri.V0_Color = FLinearColor::White;
  CanvasUVTri.V1_Pos = FVector2D(0.0, 1.0);
  CanvasUVTri.V1_UV = FVector2D(0.0, 1.0);
  CanvasUVTri.V1_Color = FLinearColor::White;
  CanvasUVTri.V2_Pos = FVector2D(1.0, 0.0);
  CanvasUVTri.V2_UV = FVector2D(1.0, 0.0);
  CanvasUVTri.V2_Color = FLinearColor::White;
  FCanvasUVTri& CanvasUVTri1 = CanvasUVTris[1];
  CanvasUVTri1.V0_Pos = FVector2D(1.0, 0.0);
  CanvasUVTri1.V0_UV = FVector2D(1.0, 0.0);
  CanvasUVTri1.V0_Color = FLinearColor::White;
  CanvasUVTri.V1_Pos = FVector2D(0.0, 1.0);
  CanvasUVTri.V1_UV = FVector2D(0.0, 1.0);
  CanvasUVTri.V1_Color = FLinearColor::White;
  CanvasUVTri1.V2_Pos = FVector2D(1.0, 1.0);
  CanvasUVTri1.V2_UV = FVector2D(1.0, 1.0);
  CanvasUVTri1.V2_Color = FLinearColor::White;

  // render
  UCanvas* CanvasHeightMap0 = nullptr;
  FVector2D Size;
  FDrawToRenderTargetContext RenderTargetContextHeightMap0;
  UKismetRenderingLibrary::BeginDrawCanvasToRenderTarget(GetWorld(), RTHeightMap0, CanvasHeightMap0, Size, RenderTargetContextHeightMap0);

  CanvasHeightMap0->UCanvas::K2_DrawMaterialTriangle(MatInstHeightMapBegin, CanvasUVTris);

  UKismetRenderingLibrary::EndDrawCanvasToRenderTarget(this, RenderTargetContextHeightMap0);

Пытаюсь просто отрендерить dynamic material в render target (RTF_RGBA32f) через Canvas, там просто розовый цвет, но на выходе чёрная текстура.
Screenshot 2023-11-06 105154 | UCanvas::K2_DrawMaterialTriangle или аналоги

Возможно треугольники надо от -1 до 1, но тогда бы хотя бы правый нижний угол был бы цветной.

#1
13:35, 6 ноя 2023

позвольте вставить мне свой пятачёк. А где вот в этом
Osiris
> UCanvas* CanvasHeightMap0 = nullptr;
> FVector2D Size;
> FDrawToRenderTargetContext RenderTargetContextHeightMap0;
> UKismetRenderingLibrary::BeginDrawCanvasToRenderTarget(GetWorld(),
> RTHeightMap0, CanvasHeightMap0, Size, RenderTargetContextHeightMap0);
>
> CanvasHeightMap0->UCanvas::K2_DrawMaterialTriangle(MatInstHeightMapBegin,
> CanvasUVTris);
>
> UKismetRenderingLibrary::EndDrawCanvasToRenderTarget(this,
> RenderTargetContextHeightMap0);

вот это FFTButterflyHeightBegin ?

Как передаётся сама розовая текстура то?

ЗЫ Я в рендер таргет рисовал карты теней только ( а не карты высот). И только на    C #   HLSL.  Там я тоже настраивал по шаблону формат цветов (какой дали в примере, такой и настраивал) и там тоже были только оттенки серого.

#2
11:04, 8 ноя 2023

>FFTButterflyHeightBegin
текстура должна передать данные для расчёта, она не розовая, розовый я чисто для тестов цвет материала установил. А результат чёрный, что значит что Draw не выполнен как надо, самое обидное что отладчики вроде PIX на DX12 такую дичь выводят для Unreal (в плане что я сильно отстал по знанию API) что ничерта не понятно куда там что вообще суётся.

#3
12:56, 8 ноя 2023

atomic
> А какая исходная задача?
это FFT без compute shader, потому что на Unreal compute shaders это адова хрень (имхо)

#4
17:54, 8 ноя 2023

Osiris
> потому что на Unreal compute shaders это адова хрень

Я писал шейдеры на HLSL, но в UE чёт думал, что материалы - это и есть шейдеры... Всё что я когда-то лепил ручками в коде, теперь можно квадратиками-нодами в материале наковырять. Как всю сцену в  ренедер-таргет нодами отправить - я сам теряюсь в догатках. Но зачем? ИМХО рендер-таргет нужен только для отрисовки теней (shadow mapping). Зачем туда карту высот совать - я вообще не представляю. Некоторые на шейдерах криптовалюту пилят. Как по мне - так это жутчайшее извращение, как технически, так и морально. Ты же не будешь крипту блупритантами на UE пилить?

#5
10:23, 9 ноя 2023

ivashko
> Как всю сцену в  ренедер-таргет нодами отправить - я сам теряюсь в догатках. Но
> зачем?
Как раз таки нехрен делать, тебе товарищ atomic подсказал. Я же делать расчёт массовый Gerstner Waves методом описанным ещё Тессендорфом для титаника через FFT алгоритм распараллеленым (смотри все примеры от nVidia касающиеся Ocean)

ivashko
> ИМХО рендер-таргет нужен только для отрисовки теней (shadow mapping)
Без обид, но про графику ты знаешь очень мало, весь Differed Render строится на RenderTargets.

#6
12:14, 9 ноя 2023

Osiris
> весь Differed Render строится на RenderTargets.
ну дык это ж оно и есть. Освещение, затенения... Разве не?
В UE это всё из коробки же ж... А так потратишь время на велосипеды, и будешь потом читать гневные отзывы на стиме от конкурентов, которые даже программирования не знают, но тоже что-то на готовых движках выпускают и даже что-то умудряются зарабатывать. Знал бы ты с каким презрением такие к  программистам относятся. Даже ссылки на статьи про "глупых программистов" и "умных" дизайнеров в темы кидают. Вот после таких бесед я и перестал выпускать игры на своём самописном движке и взялся за движок, который мне показался лучшим...

Прошло более 1 года
#7
17:03, 8 ноя 2024

Какой тип брендинга материала ?

Unreal EngineФорумПрограммирование

Тема в архиве.