Начинающий
- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 180
- Реакции
- 5
Народ, кто сейчас ковыряет VR-проекты типа Pavlov? Столкнулся с тем, что стандартный WorldToScreen в VR-движках ведет себя максимально неадекватно из-за специфики рендеринга двух глаз и смещенной матрицы проекции.
Пытаюсь накидать нормальный ESP через PostRender, но при попытке вывести боксы через K2_Project ловлю лютые просадки и съезжание координат, когда голова персонажа начинает крутиться. Мой текущий кусок кода выглядит вот так:
Проблема в том, что K2_Project считает экранные координаты для 2D-оверлея, а в VR у нас стерео-рендеринг, и этот метод тупо не учитывает трансформацию камеры для каждого глаза. В итоге боксы рисуются либо где-то сбоку, либо вообще статично на экране, игнорируя глубину.
Кто уже возился с этим? Есть идеи, как правильно вытянуть ViewProjectionMatrix из текущего StereoView или через какой хук лучше доставать актуальный матричный сдвиг, чтобы не было этого дрифта при повороте головы?
Делитесь опытом, кто допиливал вывод объектов в шлемах, а то в VR без нормального еспшника сейчас вообще делать нечего.
Пытаюсь накидать нормальный ESP через PostRender, но при попытке вывести боксы через K2_Project ловлю лютые просадки и съезжание координат, когда голова персонажа начинает крутиться. Мой текущий кусок кода выглядит вот так:
Код:
void __stdcall PostRenderHook( UGameViewportClient* GameViewportClient, UCanvas* Canvas ) {
SDK::TArray<SDK::AActor*>& Actors = SDK::UWorld::GetWorld( )->PersistentLevel->Actors;
for ( SDK::AActor* Actor : Actors ) {
if ( !Actor || !Actor->IsA( SDK::APawn::StaticClass( ) ) )
continue;
auto Pawn = ( SDK::APavlovPawn* ) Actor;
SDK::FVector ActorLoc = Pawn->K2_GetActorLocation();
SDK::FVector TempV = Canvas->K2_Project( ActorLoc );
SDK::FVector2D Size( 65.0f, 65.0f );
SDK::FVector2D Pos( TempV.X - Size.X / 2, TempV.Y - Size.Y / 2 );
Canvas->K2_DrawBox( Pos, Size, 2.0f, SDK::FLinearColor( 255.f, 255.f, 255.f, 255.f ) );
}
PostRenderOriginal( GameViewportClient, Canvas );
}
Проблема в том, что K2_Project считает экранные координаты для 2D-оверлея, а в VR у нас стерео-рендеринг, и этот метод тупо не учитывает трансформацию камеры для каждого глаза. В итоге боксы рисуются либо где-то сбоку, либо вообще статично на экране, игнорируя глубину.
Кто уже возился с этим? Есть идеи, как правильно вытянуть ViewProjectionMatrix из текущего StereoView или через какой хук лучше доставать актуальный матричный сдвиг, чтобы не было этого дрифта при повороте головы?
- Вопрос по оптимизации: Стоит ли переходить на прямой расчет через ViewMatrix (выдирая её из GameViewport), или есть более гуманный способ через встроенные функции движка, которые я проглядел?
- Синхронизация: Как боретесь с "раздвоением" боксов? Кто-то советовал хукать конкретно Stereo-рендерер, но это звучит как прямой путь к крашу.
- Техническая часть: Если у кого есть готовые функции для корректного маппинга 3D -> 2D под VR с учетом HMD-offset, кидайте свои правки или куски кода, обсудим.
Делитесь опытом, кто допиливал вывод объектов в шлемах, а то в VR без нормального еспшника сейчас вообще делать нечего.