Сохранен 108
https://2ch.su/b/res/334358344.html
К сожалению, значительная часть сохранённых до 2024 г. изображений и видео была потеряна (подробности случившегося). Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Анальник-наносек, вот скажи мне, я хочу сделать игру как Portal 2. Мне для этого надо нанять анальни

 Аноним 26/06/26 Птн 17:54:04 #1 №334358344 
image.png
Анальник-наносек, вот скажи мне, я хочу сделать игру как Portal 2. Мне для этого надо нанять анальника-сеньора, чтобы он мне сделал математику / архитектуру порталов на выбранном движке? Предположим UE, в меньшей степени склоняюсь к Юнити. Или справится и мидл с таким хардкором? Или нужна целая команда анальников?

Потому что чатжопа и близко не может реализовать такое. А всё, что я в интернете видел платное или бесплатное — хуита отдаленно напоминающая механику порталов. Там либо криво телепортация работает, либо проецируется криво текстура, либо в пизду идет оптимизация.

Тз грубо говоря: масштабируемый проект на анриле с работающими порталами.
Всю остальную лабуду с кнопками и постами я и сам смогу на блюпринтах. Сколько такое стоит под ключ?
Аноним 26/06/26 Птн 17:55:45 #2 №334358382 
Бамп
Аноним 26/06/26 Птн 17:57:04 #3 №334358410 
>>334358344 (OP)
Скиньте нейровебмку где избы на курьих ножках и эльфы грабять корованы.
Аноним 26/06/26 Птн 17:58:00 #4 №334358432 
75F636E867C8830860793523EED313BE.png
>>334358344 (OP)
Ты просто не умеешь пользоваться нейронкой, а так они уже ааа-игры делоют
Аноним 26/06/26 Птн 17:58:46 #5 №334358452 
>>334358344 (OP)
Тебе человек 20 минимум надо для нормальной 3д игры даже на готовом халявном движке.
Я лет 10 газад рпг сделал изометрическую в соло (с готовой графикой), заебался просто вкрай, несколько лет пахоты.
Аноним 26/06/26 Птн 17:58:56 #6 №334358457 
Бамп
Аноним 26/06/26 Птн 17:59:52 #7 №334358484 
>>334358432
>Ты просто не умеешь пользоваться нейронкой
Ну может сеньору помидору она и сможет выдать необходимое. Но так синьор и сам такое знает и понимает. А мне она хуйню выдаёт
Аноним 26/06/26 Птн 18:01:20 #8 №334358523 
>>334358452
>Тебе человек 20 минимум надо для нормальной 3д игры даже на готовом халявном движке.
Так я про кор-механику спросил
Аноним 26/06/26 Птн 18:02:52 #9 №334358572 
>>334358344 (OP)
Сделай мод для портала.
Аноним 26/06/26 Птн 18:02:57 #10 №334358574 
>>334358344 (OP)
бери джуна с российскиэой нейросеткой, не прогадаешь но обосрешься
Аноним 26/06/26 Птн 18:03:03 #11 №334358577 
>>334358484
сам помидором становись, вкатывайся
Аноним 26/06/26 Птн 18:05:42 #12 №334358644 
>>334358577
Я в другой области помидорю
Аноним 26/06/26 Птн 18:06:40 #13 №334358667 
>>334358572
>Сделай мод для портала.
Это плохая идея. Получится мод для портала
Сорс закрыт тем более
Аноним 26/06/26 Птн 18:06:51 #14 №334358672 
Tag: The Power of Paint - прототип второго портала написали несколько студентов в свободное время на своем движке и без нейронок.
Аноним 26/06/26 Птн 18:07:56 #15 №334358699 
>>334358644
>помидорю
Php? Лялех?
Аноним 26/06/26 Птн 18:08:24 #16 №334358715 
>>334358672
>Tag: The Power of Paint - прототип второго портала
Там был прототип первого портала и их сразу взяли в валв. Это не тривиальная задача
Аноним 26/06/26 Птн 18:20:21 #17 №334359012 
>>334358667
Эта как раз хорошая идея.
Аноним 26/06/26 Птн 18:21:12 #18 №334359038 
>>334358344 (OP)
Купи Клод за 20 баксов и он легко это реализует.effort только ставь максимальный
sage[mailto:sage] Аноним 26/06/26 Птн 18:22:25 #19 №334359069 
>>334358344 (OP)
В роблоксе есть клон портала блядь, идеально работающий. TUNELLER. В роблоксе блядь опять же. Может ты ебнутый фанат габена который просто любые порталы не от валв говном поливать будет?
Аноним 26/06/26 Птн 18:23:16 #20 №334359090 
>>334358344 (OP)
Дай нейроке сначала задание создать простой неэвклидовый движок с поддержкой порталов. Потом допиливай. Сходу тебе готовое не одна нейронка не сделает
Аноним OP 26/06/26 Птн 18:24:26 #21 №334359127 
>>334359038
Я вроде ясно написал, что не могут они
Аноним 26/06/26 Птн 18:27:04 #22 №334359191 
>>334359127
Покажи что получилось
Аноним 26/06/26 Птн 18:33:08 #23 №334359357 
А зачем тебе? Как ты без навыков программирования собрался делать фулл игру? Даже если чел был бы, то по итогу сделал игру он, а не ты. Он близким человеком быть должен.

А про механику порталов это вообще пиздец. Это тяжело было программировать и работает оно на костылях.
Аноним OP 26/06/26 Птн 18:51:34 #24 №334359851 
>>334359191
Попросил сделать поэтапный план и выполнить первый этап. На нем уже фейл. Он даже не смог через с++ рендер текстуру на шейп «портала» натянуть правильно (по этому простому пункту есть туторы на ютуба даже как раз под задачу портала)
Аноним OP 26/06/26 Птн 18:53:03 #25 №334359887 
>>334359357
>Как ты без навыков программирования собрался делать фулл игру?
У меня есть навыки. Экспедицию 33 видел? Сделана на блюпринтах (нодовый кодерский редактор в анриле)
Аноним 26/06/26 Птн 19:00:52 #26 №334360115 
>>334358344 (OP)
Для портал нахуй не нужен спец движок брать универсальный, все что в игре сложного будет писать - все равно писать самому, так что проще библиотек нужных взять и слепить самому все
Аноним 26/06/26 Птн 19:04:14 #27 №334360221 
>>334358344 (OP)
АНОНЧИК СКАЖИ ВОТ Я НИЧЕГО НЕ УМЕЮ НО ХОЧУ ЧТОБЫ ЕТА МИЛЛИОН РУБЛЕЙ В МЕСЯЦ СКАЖИ ЧЕ ДЕЛАТЬ НАДО ТО
Аноним 26/06/26 Птн 19:06:30 #28 №334360281 
>>334358452
А сколько тебе лет? Завидую что ты смог. Как это получилось???
Аноним OP 26/06/26 Птн 19:10:35 #29 №334360383 
>>334360221
Не понял тебя. Спросил про цену

>>334360115
>Для портал нахуй не нужен спец движок брать универсальный
Мне надо уе потому что дальше я сам смогу в нем хуевертить. Только кор-механику надо реализовать
Аноним OP 26/06/26 Птн 19:13:04 #30 №334360441 
Бросилось в глаза: все предлагают нейронки, но никто не предлагает свои услуги вооружившись нейронками. То есть даже они понимают, что ИИ не тащит тут
Аноним 26/06/26 Птн 19:15:59 #31 №334360525 
>>334360383
держи ебень

Portal.h

// Copyright. Portal core mechanic for UE5.
#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Portal.generated.h"

class UStaticMeshComponent;
class UBoxComponent;
class USceneComponent;
class USceneCaptureComponent2D;
class UTextureRenderTarget2D;
class UMaterialInterface;
class UMaterialInstanceDynamic;

DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnPortalTeleport, AActor, TeleportedActor);

/
A single portal surface. Two portals are linked together via LinkTo().

Responsibilities:
- Render what is visible "through" the portal using a SceneCapture2D + render target.
- Detect when an actor crosses the portal plane and teleport it to the linked portal,
preserving relative position, orientation and velocity (momentum).

Convention: the portal's local +X (actor forward) is the surface normal, pointing OUT
of the wall toward the player. The teleport math is a 180 deg rotation about the portal's
up axis, which is the standard Portal-style mapping.
/
UCLASS()
class PORTALCORE_API APortal : public AActor
{
GENERATED_BODY()

public:
APortal();

virtual void BeginPlay() override;
virtual void Tick(float DeltaSeconds) override;

/
Link this portal and Other together (both directions). /
UFUNCTION(BlueprintCallable, Category = "Portal")
void LinkTo(APortal
Other);

/ Reposition the portal onto a surface (used by the portal gun). /
UFUNCTION(BlueprintCallable, Category = "Portal")
void PlaceAt(const FVector& Location, const FRotator& Rotation);

/
The other end of this portal pair. /
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Portal")
TObjectPtr<APortal> LinkedPortal;

/ Material that samples a render-target parameter named "PortalTexture" with screen UVs. /
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Portal")
TObjectPtr<UMaterialInterface> PortalMaterial;

/
Fired after any actor is teleported by this portal (hook for VFX / SFX). /
UPROPERTY(BlueprintAssignable, Category = "Portal")
FOnPortalTeleport OnTeleported;

// --- Teleport math (also reused to place the scene-capture camera) -------------------

/ Map a transform from Source portal frame into Target portal frame. /
static FTransform ConvertTransform(const APortal
Source, const APortal Target, const FTransform& In);
/
Map a rotation from Source portal frame into Target portal frame. /
static FQuat ConvertQuat(const APortal Source, const APortal Target, const FQuat& In);
/ Map a direction/velocity from Source portal frame into Target portal frame. /
static FVector ConvertVector(const APortal
Source, const APortal* Target, const FVector& In);

protected:
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Portal")
TObjectPtr<USceneComponent> PortalRoot;

/
Flat quad the player sees; orient its visible face along actor +X. */
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Portal")
TObjectPtr<UStaticMeshComponent> PortalMesh;

/ Overlap volume straddling the portal plane; gates which actors we test for crossing. */
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Portal")
TObjectPtr<UBoxComponent> TeleportTrigger;

/
Renders the linked portal's view into RenderTarget. */
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Portal")
TObjectPtr<USceneCaptureComponent2D> SceneCapture;

private:
void UpdateRenderTarget();
void UpdateSceneCapture();
void HandleTeleports();
void TeleportActor(AActor* Actor);

/ True if the segment Start->End passed through the front face of the portal plane. */
bool CrossedPlane(const FVector& Start, const FVector& End) const;

UFUNCTION()
void OnTriggerBeginOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor,
UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& Sweep);
UFUNCTION()
void OnTriggerEndOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor,
UPrimitiveComponent* OtherComp, int32 OtherBodyIndex);

UPROPERTY(Transient)
TObjectPtr<UTextureRenderTarget2D> RenderTarget;

UPROPERTY(Transient)
TObjectPtr<UMaterialInstanceDynamic> PortalMID;

/
Actors currently inside the trigger; tested for plane crossing each frame. */
UPROPERTY(Transient)
TSet<TObjectPtr<AActor>> TrackedActors;

/** Last-frame location per tracked actor, for crossing detection. */
TMap<TWeakObjectPtr<AActor>, FVector> LastLocations;

FIntPoint LastViewportSize = FIntPoint::ZeroValue;
};
Аноним 26/06/26 Птн 19:16:19 #32 №334360535 
>>334360525

Portal.cpp

// Copyright. Portal core mechanic for UE5.
#include "Portal.h"

#include "Components/StaticMeshComponent.h"
#include "Components/BoxComponent.h"
#include "Components/SceneCaptureComponent2D.h"
#include "Engine/TextureRenderTarget2D.h"
#include "Engine/GameViewportClient.h"
#include "Engine/Engine.h"
#include "Kismet/KismetRenderingLibrary.h"
#include "Kismet/GameplayStatics.h"
#include "Materials/MaterialInstanceDynamic.h"
#include "GameFramework/Pawn.h"
#include "GameFramework/Controller.h"
#include "GameFramework/Character.h"
#include "GameFramework/CharacterMovementComponent.h"
#include "GameFramework/PlayerController.h"
#include "Camera/PlayerCameraManager.h"

namespace
{
// 180 degree rotation about the portal up axis: the heart of the Portal mapping.
// A point/velocity that goes INTO one portal comes OUT of the other, mirrored.
static const FQuat PortalFlip = FQuat(FVector::UpVector, PI);
}

APortal::APortal()
{
PrimaryActorTick.bCanEverTick = true;
// Tick late so the player's camera for this frame is already up to date before we
// position the scene-capture relative to it.
PrimaryActorTick.TickGroup = TG_PostUpdateWork;

PortalRoot = CreateDefaultSubobject<USceneComponent>(TEXT("PortalRoot"));
SetRootComponent(PortalRoot);

PortalMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("PortalMesh"));
PortalMesh->SetupAttachment(PortalRoot);
// The player must be able to walk straight through the surface.
PortalMesh->SetCollisionEnabled(ECollisionEnabled::NoCollision);
PortalMesh->SetCastShadow(false);

TeleportTrigger = CreateDefaultSubobject<UBoxComponent>(TEXT("TeleportTrigger"));
TeleportTrigger->SetupAttachment(PortalRoot);
// Thin along the normal (X), spanning the opening in Y/Z. Tune to your portal size.
TeleportTrigger->SetBoxExtent(FVector(40.f, 55.f, 95.f));
TeleportTrigger->SetCollisionProfileName(TEXT("OverlapAllDynamic"));
TeleportTrigger->SetGenerateOverlapEvents(true);

SceneCapture = CreateDefaultSubobject<USceneCaptureComponent2D>(TEXT("SceneCapture"));
SceneCapture->SetupAttachment(PortalRoot);
// We drive the capture manually each frame after positioning it, so don't auto-capture.
SceneCapture->bCaptureEveryFrame = false;
SceneCapture->bCaptureOnMovement = false;
// Final post-processed color so the through-portal view matches the player's view.
SceneCapture->CaptureSource = ESceneCaptureSource::SCS_FinalColorLDR;
SceneCapture->bEnableClipPlane = true;
SceneCapture->bAlwaysPersistRenderingState = true;
}

void APortal::BeginPlay()
{
Super::BeginPlay();

if (PortalMaterial)
{
PortalMID = UMaterialInstanceDynamic::Create(PortalMaterial, this);
PortalMesh->SetMaterial(0, PortalMID);
}

TeleportTrigger->OnComponentBeginOverlap.AddDynamic(this, &APortal::OnTriggerBeginOverlap);
TeleportTrigger->OnComponentEndOverlap.AddDynamic(this, &APortal::OnTriggerEndOverlap);
}

void APortal::Tick(float DeltaSeconds)
{
Super::Tick(DeltaSeconds);

if (!LinkedPortal)
{
return; // Nothing to render or teleport into until paired.
}

UpdateRenderTarget();
UpdateSceneCapture();
SceneCapture->CaptureScene();

HandleTeleports();
}

// ---------------------------------------------------------------------------------------
// Linking & placement
// ---------------------------------------------------------------------------------------

void APortal::LinkTo(APortal Other)
{
LinkedPortal = Other;
if (Other)
{
Other->LinkedPortal = this;
}
}

void APortal::PlaceAt(const FVector& Location, const FRotator& Rotation)
{
SetActorLocationAndRotation(Location, Rotation);
SetActorHiddenInGame(false);
SetActorEnableCollision(true);
}

// ---------------------------------------------------------------------------------------
// Rendering the view through the portal
// ---------------------------------------------------------------------------------------

void APortal::UpdateRenderTarget()
{
FVector2D ViewportSize = FVector2D::ZeroVector;
if (GEngine && GEngine->GameViewport)
{
GEngine->GameViewport->GetViewportSize(ViewportSize);
}

const FIntPoint Size(FMath::Max(1, (int32)ViewportSize.X), FMath::Max(1, (int32)ViewportSize.Y));
if (Size == FIntPoint(1, 1))
{
return; // Viewport not ready yet.
}

if (!RenderTarget)
{
RenderTarget = UKismetRenderingLibrary::CreateRenderTarget2D(this, Size.X, Size.Y, RTF_RGBA16f);
SceneCapture->TextureTarget = RenderTarget;
if (PortalMID)
{
PortalMID->SetTextureParameterValue(TEXT("PortalTexture"), RenderTarget);
}
LastViewportSize = Size;
}
else if (Size != LastViewportSize)
{
// Keep the render target matched to the screen so the screen-UV sampling stays 1:1.
RenderTarget->ResizeTarget(Size.X, Size.Y);
LastViewportSize = Size;
}
}

void APortal::UpdateSceneCapture()
{
const APlayerController
PC = UGameplayStatics::GetPlayerController(this, 0);
if (!PC || !PC->PlayerCameraManager)
{
return;
}

// Place the capture where the player's eye maps to on the LINKED portal. Looking at THIS
// portal then shows the world as seen "out of" the linked portal.
const FTransform CameraXf(PC->PlayerCameraManager->GetCameraRotation(),
PC->PlayerCameraManager->GetCameraLocation());
const FTransform CaptureXf = ConvertTransform(this, LinkedPortal, CameraXf);

SceneCapture->SetWorldLocationAndRotation(CaptureXf.GetLocation(), CaptureXf.GetRotation());
SceneCapture->FOVAngle = PC->PlayerCameraManager->GetFOVAngle();

// Clip everything behind the linked portal so the wall it is mounted on never occludes
// the view (the capture sits behind that surface looking out through the opening).
SceneCapture->ClipPlaneBase = LinkedPortal->GetActorLocation();
SceneCapture->ClipPlaneNormal = LinkedPortal->GetActorForwardVector();

// Single-bounce: never let a capture see the portal surfaces themselves (avoids feedback).
SceneCapture->HiddenActors.Reset();
SceneCapture->HiddenActors.Add(const_cast<APortal>(this));
SceneCapture->HiddenActors.Add(LinkedPortal);
}

// ---------------------------------------------------------------------------------------
// Teleportation
// ---------------------------------------------------------------------------------------

void APortal::HandleTeleports()
{
for (auto It = TrackedActors.CreateIterator(); It; ++It)
{
AActor
Actor = It;
if (!IsValid(Actor))
{
It.RemoveCurrent();
continue;
}

const FVector Curr = Actor->GetActorLocation();
if (const FVector
Prev = LastLocations.Find(Actor))
{
if (CrossedPlane(Prev, Curr))
{
TeleportActor(Actor);
continue; // TeleportActor refreshes bookkeeping.
}
}
LastLocations.Add(Actor, Curr);
}
}

bool APortal::CrossedPlane(const FVector& Start, const FVector& End) const
{
const FVector Fwd = GetActorForwardVector();
const FVector Loc = GetActorLocation();
const float DistStart = FVector::DotProduct(Start - Loc, Fwd);
const float DistEnd = FVector::DotProduct(End - Loc, Fwd);
// Front (positive) to back (non-positive) means the actor entered the portal this frame.
return DistStart > 0.f && DistEnd <= 0.f;
}

void APortal::TeleportActor(AActor
Actor)
{
if (!LinkedPortal || !IsValid(Actor))
{
return;
}

const FTransform NewXf = ConvertTransform(this, LinkedPortal, Actor->GetActorTransform());
Actor->SetActorLocationAndRotation(NewXf.GetLocation(), NewXf.GetRotation(),
/bSweep/ false, nullptr, ETeleportType::TeleportPhysics);

// Rotate the player's view so the camera comes out facing the right way.
if (APawn Pawn = Cast<APawn>(Actor))
{
if (AController
Ctrl = Pawn->GetController())
{
const FQuat NewControl = ConvertQuat(this, LinkedPortal, FQuat(Ctrl->GetControlRotation()));
Ctrl->SetControlRotation(NewControl.Rotator());
}
}

// Preserve momentum: "speedy thing goes in, speedy thing comes out."
const FVector NewVel = ConvertVector(this, LinkedPortal, Actor->GetVelocity());
if (ACharacter Char = Cast<ACharacter>(Actor))
{
Char->GetCharacterMovement()->Velocity = NewVel;
}
else if (UPrimitiveComponent
Prim = Cast<UPrimitiveComponent>(Actor->GetRootComponent()))
{
if (Prim->IsSimulatingPhysics())
{
Prim->SetPhysicsLinearVelocity(NewVel);
}
}

// Stop THIS portal from re-processing the actor, and prime the linked portal so it
// doesn't immediately teleport the actor straight back.
LastLocations.Remove(Actor);
TrackedActors.Remove(Actor);
LinkedPortal->TrackedActors.Add(Actor);
LinkedPortal->LastLocations.Add(Actor, Actor->GetActorLocation());

OnTeleported.Broadcast(Actor);
}

// ---------------------------------------------------------------------------------------
// Overlap tracking
// ---------------------------------------------------------------------------------------

void APortal::OnTriggerBeginOverlap(UPrimitiveComponent, AActor OtherActor,
UPrimitiveComponent, int32, bool, const FHitResult&)
{
if (OtherActor && OtherActor != this && OtherActor != LinkedPortal)
{
TrackedActors.Add(OtherActor);
LastLocations.Add(OtherActor, OtherActor->GetActorLocation());
}
}

void APortal::OnTriggerEndOverlap(UPrimitiveComponent
, AActor OtherActor,
UPrimitiveComponent
, int32)
{
if (OtherActor)
{
TrackedActors.Remove(OtherActor);
LastLocations.Remove(OtherActor);
}
}

// ---------------------------------------------------------------------------------------
// Static mapping helpers (this portal frame -> linked portal frame, with 180 deg flip)
// ---------------------------------------------------------------------------------------

FTransform APortal::ConvertTransform(const APortal Source, const APortal Target, const FTransform& In)
{
const FVector SLoc = Source->GetActorLocation();
const FQuat SRot = Source->GetActorQuat();
const FVector TLoc = Target->GetActorLocation();
const FQuat TRot = Target->GetActorQuat();

// Position: express In relative to Source, flip 180 about up, re-express relative to Target.
FVector Local = SRot.UnrotateVector(In.GetLocation() - SLoc);
Local = PortalFlip.RotateVector(Local);
const FVector NewLoc = TLoc + TRot.RotateVector(Local);

// Rotation: same idea in quaternion form.
FQuat LocalRot = SRot.Inverse() In.GetRotation();
LocalRot = PortalFlip
LocalRot;
const FQuat NewRot = TRot LocalRot;

return FTransform(NewRot, NewLoc, In.GetScale3D());
}

FQuat APortal::ConvertQuat(const APortal
Source, const APortal Target, const FQuat& In)
{
FQuat Local = Source->GetActorQuat().Inverse()
In;
Local = PortalFlip Local;
return Target->GetActorQuat()
Local;
}

FVector APortal::ConvertVector(const APortal Source, const APortal Target, const FVector& In)
{
FVector Local = Source->GetActorQuat().UnrotateVector(In);
Local = PortalFlip.RotateVector(Local);
return Target->GetActorQuat().RotateVector(Local);
}
Аноним 26/06/26 Птн 19:16:44 #33 №334360551 
>>334360535

PortalGunComponent.h

// Copyright. Portal core mechanic for UE5.
#pragma once

#include "CoreMinimal.h"
#include "Components/ActorComponent.h"
#include "PortalGunComponent.generated.h"

class APortal;

/
Drop this onto any Pawn/Character. FirePortal traces from the view point and places the
blue (primary) or orange (secondary) portal on whatever surface it hits, then links the
pair once both exist.
/
UCLASS(ClassGroup = (Portal), meta = (BlueprintSpawnableComponent))
class PORTALCORE_API UPortalGunComponent : public UActorComponent
{
GENERATED_BODY()

public:
UPortalGunComponent();

/
Portal actor class to spawn. Assign a Blueprint child of APortal (mesh + material set). /
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Portal Gun")
TSubclassOf<APortal> PortalClass;

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Portal Gun")
float TraceDistance = 10000.f;

/ Trace channel used to find portalable surfaces.
/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Portal Gun")
TEnumAsByte<ECollisionChannel> TraceChannel = ECC_Visibility;

/
Fire a portal. bPrimary == true spawns/moves the blue portal, false the orange one. /
UFUNCTION(BlueprintCallable, Category = "Portal Gun")
void FirePortal(bool bPrimary);

protected:
UPROPERTY(Transient, BlueprintReadOnly, Category = "Portal Gun")
TObjectPtr<APortal> PrimaryPortal;

UPROPERTY(Transient, BlueprintReadOnly, Category = "Portal Gun")
TObjectPtr<APortal> SecondaryPortal;

private:
bool GetViewPoint(FVector& OutLocation, FRotator& OutRotation) const;

/
Build a portal rotation whose forward (+X) is the surface normal. /
static FRotator MakePortalRotation(const FVector& SurfaceNormal);
};
Аноним 26/06/26 Птн 19:17:09 #34 №334360565 
>>334360551
PortalGunComponent.cpp

// Copyright. Portal core mechanic for UE5.
#include "PortalGunComponent.h"

#include "Portal.h"
#include "GameFramework/Pawn.h"
#include "GameFramework/Controller.h"
#include "Engine/World.h"
#include "CollisionQueryParams.h"

UPortalGunComponent::UPortalGunComponent()
{
PrimaryComponentTick.bCanEverTick = false;
}

void UPortalGunComponent::FirePortal(bool bPrimary)
{
if (!PortalClass)
{
return;
}

FVector ViewLoc;
FRotator ViewRot;
if (!GetViewPoint(ViewLoc, ViewRot))
{
return;
}

const FVector Start = ViewLoc;
const FVector End = Start + ViewRot.Vector()
TraceDistance;

FCollisionQueryParams Params(SCENE_QUERY_STAT(FirePortal), /bTraceComplex/ true);
Params.AddIgnoredActor(GetOwner());
if (PrimaryPortal) { Params.AddIgnoredActor(PrimaryPortal); }
if (SecondaryPortal) { Params.AddIgnoredActor(SecondaryPortal); }

FHitResult Hit;
if (!GetWorld()->LineTraceSingleByChannel(Hit, Start, End, TraceChannel, Params))
{
return; // Missed every surface.
}

const FRotator PortalRot = MakePortalRotation(Hit.ImpactNormal);
// Nudge off the wall so the surface does not z-fight or clip the portal plane.
const FVector PortalLoc = Hit.ImpactPoint + Hit.ImpactNormal 1.0f;

TObjectPtr<APortal>& Slot = bPrimary ? PrimaryPortal : SecondaryPortal;
if (!Slot)
{
FActorSpawnParameters SpawnParams;
SpawnParams.Owner = GetOwner();
SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
Slot = GetWorld()->SpawnActor<APortal>(PortalClass, PortalLoc, PortalRot, SpawnParams);
}
else
{
Slot->PlaceAt(PortalLoc, PortalRot);
}

if (PrimaryPortal && SecondaryPortal)
{
PrimaryPortal->LinkTo(SecondaryPortal);
}
}

bool UPortalGunComponent::GetViewPoint(FVector& OutLocation, FRotator& OutRotation) const
{
if (const APawn
Pawn = Cast<APawn>(GetOwner()))
{
if (AController Controller = Pawn->GetController())
{
// Uses the active camera view point (eyes), not the pawn pivot.
Controller->GetPlayerViewPoint(OutLocation, OutRotation);
return true;
}
}

if (const AActor
Owner = GetOwner())
{
OutLocation = Owner->GetActorLocation();
OutRotation = Owner->GetActorRotation();
return true;
}
return false;
}

FRotator UPortalGunComponent::MakePortalRotation(const FVector& SurfaceNormal)
{
// Choose an up reference that is not parallel to the normal (handles floor/ceiling).
const FVector Up = FMath::Abs(FVector::DotProduct(SurfaceNormal, FVector::UpVector)) > 0.95f
? FVector::ForwardVector
: FVector::UpVector;
const FVector Right = FVector::CrossProduct(Up, SurfaceNormal).GetSafeNormal();
const FVector OrthoUp = FVector::CrossProduct(SurfaceNormal, Right).GetSafeNormal();

// Portal forward (+X) = surface normal, +Z = OrthoUp.
return FRotationMatrix::MakeFromXZ(SurfaceNormal, OrthoUp).Rotator();
}
Аноним 26/06/26 Птн 19:18:02 #35 №334360580 
>>334358344 (OP)
Да, нужна команда анальников и бюджет 1 миллион рублей в месяц.
2 кодерка по 200к, и 3-4 художника по 100к.
Аноним 26/06/26 Птн 19:19:12 #36 №334360606 
>>334360565

PortalCharacter.h

// Copyright. Portal core mechanic for UE5.
#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "PortalCharacter.generated.h"

class UCameraComponent;
class UPortalGunComponent;

/
Minimal first-person character wired up with a portal gun. Use this directly, or just copy
the UPortalGunComponent onto your own character. Input is bound with the legacy input system
so it works without extra assets; swap to Enhanced Input if you prefer (see README).
/
UCLASS()
class PORTALCORE_API APortalCharacter : public ACharacter
{
GENERATED_BODY()

public:
APortalCharacter();

protected:
virtual void SetupPlayerInputComponent(UInputComponent PlayerInputComponent) override;

UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Portal")
TObjectPtr<UCameraComponent> Camera;

UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Portal")
TObjectPtr<UPortalGunComponent> PortalGun;

private:
void MoveForward(float Value);
void MoveRight(float Value);
void FirePrimary();
void FireSecondary();
};


---

PortalCharacter.cpp

// Copyright. Portal core mechanic for UE5.
#include "PortalCharacter.h"

#include "PortalGunComponent.h"
#include "Camera/CameraComponent.h"
#include "Components/CapsuleComponent.h"
#include "GameFramework/CharacterMovementComponent.h"

APortalCharacter::APortalCharacter()
{
PrimaryActorTick.bCanEverTick = false;

Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
Camera->SetupAttachment(GetCapsuleComponent());
Camera->SetRelativeLocation(FVector(0.f, 0.f, 64.f)); // eye height
Camera->bUsePawnControlRotation = true;

PortalGun = CreateDefaultSubobject<UPortalGunComponent>(TEXT("PortalGun"));

// Let the controller drive look; the body yaw follows movement input.
bUseControllerRotationPitch = false;
bUseControllerRotationYaw = true;
bUseControllerRotationRoll = false;
}

void APortalCharacter::SetupPlayerInputComponent(UInputComponent
PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);

// Legacy bindings — add matching Axis/Action mappings in Project Settings > Input,
// or rebind these to Enhanced Input actions.
PlayerInputComponent->BindAxis("MoveForward", this, &APortalCharacter::MoveForward);
PlayerInputComponent->BindAxis("MoveRight", this, &APortalCharacter::MoveRight);
PlayerInputComponent->BindAxis("Turn", this, &APortalCharacter::AddControllerYawInput);
PlayerInputComponent->BindAxis("LookUp", this, &APortalCharacter::AddControllerPitchInput);

PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);
PlayerInputComponent->BindAction("Jump", IE_Released, this, &ACharacter::StopJumping);
PlayerInputComponent->BindAction("FirePortalA", IE_Pressed, this, &APortalCharacter::FirePrimary);
PlayerInputComponent->BindAction("FirePortalB", IE_Pressed, this, &APortalCharacter::FireSecondary);
}

void APortalCharacter::MoveForward(float Value)
{
if (Value != 0.f)
{
AddMovementInput(GetActorForwardVector(), Value);
}
}

void APortalCharacter::MoveRight(float Value)
{
if (Value != 0.f)
{
AddMovementInput(GetActorRightVector(), Value);
}
}

void APortalCharacter::FirePrimary()
{
if (PortalGun)
{
PortalGun->FirePortal(/bPrimary/ true);
}
}

void APortalCharacter::FireSecondary()
{
if (PortalGun)
{
PortalGun->FirePortal(/bPrimary/ false);
}
}


----

PortalCore.Build.cs

// Copyright. Portal core mechanic for UE5.
using UnrealBuildTool;

public class PortalCore : ModuleRules
{
public PortalCore(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

PublicDependencyModuleNames.AddRange(new string[]
{
"Core",
"CoreUObject",
"Engine",
"InputCore",
});

// If you migrate the character to Enhanced Input, also add:
// PrivateDependencyModuleNames.AddRange(new string[] { "EnhancedInput" });
}
}


------

PortalCore.h

// Copyright. Portal core mechanic for UE5.
#pragma once

#include "CoreMinimal.h"
#include "Modules/ModuleManager.h"


----

PortalCore.cpp

// Copyright. Portal core mechanic for UE5.
#include "PortalCore.h"

IMPLEMENT_MODULE(FDefaultGameModuleImpl, PortalCore);


-----

Readme.md

# PortalCore — Portal-style core mechanic for UE5 (C++)

Ядро как в Portal: портальная пушка, размещение порталов на поверхностях,
бесшовная телепортация с сохранением импульса и рендер вида «сквозь» портал
через `SceneCapture2D`.

Проверялось на логике UE 5.3–5.5. API порталов от версии движка не зависит.

## Что внутри

| Файл | Роль |
|------|------|
| `Portal.h/.cpp` | Один портал: рендер вида сквозь себя + телепортация пересёкших плоскость акторов. Статические хелперы `ConvertTransform/Quat/Vector` — вся матимея отображения «портал A → портал B» (поворот на 180° вокруг оси Up). |
| `PortalGunComponent.h/.cpp` | Компонент-пушка. `FirePortal(true/false)` трейсит из точки взгляда и ставит синий/оранжевый портал, линкует пару. |
| `PortalCharacter.h/.cpp` | Минимальный FPS-персонаж с камерой и пушкой (опционально — можно вешать компонент на свой `Character`). |

## Установка

### Вариант A — отдельный модуль
1. Скопируй папку `Source/PortalCore` в `Source/` своего проекта.
2. В `<Project>.uproject` добавь модуль в массив `Modules`:
```json
{ "Name": "PortalCore", "Type": "Runtime", "LoadingPhase": "Default" }
```
3. В `Source/<Project>Editor.Target.cs` и `<Project>.Target.cs` добавь `"PortalCore"` в `ExtraModuleNames`.
4. Regenerate project files → Build.

### Вариант B — без нового модуля (проще)
Просто положи `Portal.*`, `PortalGunComponent.*`, `PortalCharacter.*` в `Source/<ТвойМодуль>/`,
замени макрос `PORTALCORE_API` на `<ТВОЙМОДУЛЬ>_API`, и добавь в свой `*.Build.cs`
зависимости: `Core, CoreUObject, Engine, InputCore`. Файлы `PortalCore.Build.cs`,
`PortalCore.h/.cpp` тогда не нужны.

## Обязательный шаг: материал портала

Рендер сквозь портал работает так: `SceneCapture` пишет вид в render target, а материал
на меше портала
сэмплит этот таргет по экранным UV — получается «окно».

Создай Material `M_Portal`:
-
Blend Mode: Opaque, Shading Model: Unlit, Two Sided:
- Нода `ScreenPosition` → её UV-выход → в `UV` ноды `TextureSampleParameter2D`
- Параметр текстуры назови ровно
`PortalTexture` (код пишет в этот параметр)
- Выход текстуры →
Emissive Color

Материал назначь в свойстве `PortalMaterial` у портала (или в его Blueprint-наследнике).

## Сборка сцены

1. Сделай Blueprint-наследника `APortal` (`BP_Portal`):
- назначь плоский меш (плоскость/quad) так, чтобы
видимая грань смотрела вдоль +X актора
(у стандартного `Plane` нормаль вдоль +Z — поверни меш на Pitch +90°);
- отмасштабируй под проём (примерно 90×180 см) и подгони `TeleportTrigger` (`BoxExtent`);
- выстави `PortalMaterial = M_Portal`.
2. Персонаж:
- либо используй `APortalCharacter` как Default Pawn,
- либо добавь `UPortalGunComponent` на свой Character и задай у него `PortalClass = BP_Portal`.
3. Input (Project Settings → Input), для `APortalCharacter`:
- Axis: `MoveForward`, `MoveRight`, `Turn`, `LookUp`
- Action: `Jump`, `FirePortalA` (ЛКМ), `FirePortalB` (ПКМ)
- На Enhanced Input — просто вызывай `PortalGun->FirePortal(true/false)` из своих
`InputAction`-хендлеров.

Готово: стреляй двумя порталами по стенам/полу/потолку и проходи сквозь них.
Импульс сохраняется — можно делишь «fling» с высоты.

## Как работает матмодель (коротко)

Отображение из системы координат портала-источника в систему портала-приёмника — это
поворот на
180° вокруг оси Up портала. Одна и та же формула (`ConvertTransform`):
- для
игрока в момент пересечения плоскости даёт корректный выход из второго портала;
- для
камеры захвата ставит её «за» вторым порталом — ровно туда, откуда надо снимать
вид, видимый сквозь первый. `ClipPlane` на приёмнике убирает стену за ним из кадра.

Телепорт срабатывает по
пересечению плоскости (а не на overlap): каждый кадр для
акторов в триггере проверяется смена знака `dot(actor - portal, forward)` с «+» на «−».
Скорость поворачивается тем же отображением → «speedy thing goes in, speedy thing comes out».

## Сознательные упрощения (можно расширить)

-
Один «отскок» рендера. Порталы, смотрящие друг в друга, не дают бесконечный
туннель — для этого нужен рекурсивный рендер в несколько проходов.
-
Нет клона-двойника на стыке: в момент перехода тело не торчит из второго портала
половиной модели. Лечится дублирующим мешем + clip plane на персонаже.
-
Поворот вида** берёт yaw/pitch из контрол-ротатора; для порталов на полу/потолке всё
работает, но «заваливание» горизонта при нестандартных осях не докручено.
- `SceneCapture` с `FinalColorLDR` каждый кадр — самый дорогой кусок. На каждый видимый
портал — отдельный проход рендера. Прячь капчур, когда портал не в кадре, при оптимизации.
Аноним 26/06/26 Птн 19:20:20 #37 №334360636 
image
>>334358432
Аноним 26/06/26 Птн 19:20:44 #38 №334360650 
>>334360606
фикс

// Snapshot first: TeleportActor mutates TrackedActors/LastLocations as it hands the actor
// over to the linked portal, so we must not iterate the live set.
TArray<TObjectPtr<AActor>> Snapshot = TrackedActors.Array();
for (AActor Actor : Snapshot)
{
if (!IsValid(Actor))
{
TrackedActors.Remove(Actor);
LastLocations.Remove(Actor);
continue;
}

const FVector Curr = Actor->GetActorLocation();
if (const FVector
Prev = LastLocations.Find(Actor))
{
if (CrossedPlane(Prev, Curr))
{
TeleportActor(Actor);
continue; // TeleportActor refreshes bookkeeping.
}
}
LastLocations.Add(Actor, Curr);
}
>>334360606

Готово. Собрал самодостаточный модуль PortalCore — ядро порталов как в Portal.

Что реализовано
Портальная пушка — PortalGunComponent.cpp: трейс из точки взгляда, постановка синего/оранжевого портала на стену/пол/потолок по нормали поверхности, авто-линковка пары.
Бесшовная телепортация — Portal.cpp: срабатывает по пересечению плоскости портала (а не на overlap), переносит игрока и физические объекты, поворачивает вид и сохраняет импульс («speedy thing goes in, speedy thing comes out»).
Рендер сквозь портал — SceneCapture2D → render target по размеру экрана, материал сэмплит по экранным UV → эффект «окна». Есть ClipPlane, чтобы стена за приёмником не лезла в кадр.
FPS-персонаж — PortalCharacter.cpp с камерой и пушкой (или просто вешаешь компонент на свой Character).
Ядро матмодели
Вся «магия» в трёх статиках Convert
в Portal.h — отображение «портал A → портал B» это поворот на 180° вокруг оси Up. Одна формула обслуживает и телепорт игрока, и позиционирование камеры захвата (ставит её за вторым порталом — ровно откуда снимать вид).

Один обязательный шаг руками
Код не отрендерит портал без материала. В редакторе сделай M_Portal (Unlit, Two-Sided): нода ScreenPosition → в UV у TextureSampleParameter2D с параметром PortalTexture → в Emissive. Назначь его в PortalMaterial. Полная пошаговая настройка (модуль, BP_Portal, input) — в README.md.

Сознательные упрощения
Один «отскок» рендера (нет бесконечного туннеля при порталах друг напротив друга), нет клона-двойника на стыке перехода, поворот вида берёт yaw/pitch. Всё помечено в README в разделе «расширить».
Аноним 26/06/26 Птн 19:21:46 #39 №334360676 
>>334360441
с тебя 200к рублей, хуесос.
Аноним 26/06/26 Птн 19:23:15 #40 №334360724 
>>334360636
Нейрокал - эти нейрокал, даже оп не может игру сделоть, а нейронка нос от хера отличает только с пятого захода. Пффф
Аноним 26/06/26 Птн 19:26:20 #41 №334360825 
>>334360724
Просто он делит картинку на квадратики и воспринимает каждый как 1 токен. Чем больше квадратиков тем лучше результат распознавания изображения. Гоям разрешают делать условные 8х8 тогда как корпорации могут делать хоть 1000х1000 по своей еврейской подписке.
Соответственно одна и та же модель в руках гоев и в руках корпораций выдает абсолютно разный результат.
Аноним 26/06/26 Птн 19:30:27 #42 №334360914 
>>334360825
>как корпорации могут делать хоть 1000х1000 по своей еврейской подписке
У тебя инторнет скоро по подписке в 60$ за Гб, а ты тут про пиксели затираешь. Или ты с Ихгаиля? Тогда, ладн, чо
Аноним 26/06/26 Птн 19:31:05 #43 №334360930 
>>334360825
Тогда закономерный вопрос, как стать не гоем?
Аноним 26/06/26 Птн 19:33:51 #44 №334360993 
>>334360930
Основать корпорацию.
Собрать капитал.
Обучать модели уровня гпт 5.5 и зарабатывать предоставляя к ним доступ.
Аноним 26/06/26 Птн 19:35:02 #45 №334361023 
>>334360993
Что-то на анальничьем...
Аноним 26/06/26 Птн 19:42:06 #46 №334361172 
>>334358344 (OP)
Когда-то я думал, что не могу сбацать игру мечты только из-за бедности и невозможности нанять команду прогеров. Теперь за месяц навайбкодил прототип, и мне открылась страшная правда - между разрозненными светлыми идеями и полноценным диздоком ебучая пропасть. Выкинул на свалку 10 итераций прокачки, три разновидности гибели и пять концептов глобальных спеллов, до сих пор трясусь от гексагональной сетки и чрезмерной свободы, выдаваемой игроку.
Аноним 26/06/26 Птн 19:44:20 #47 №334361237 
>>334358344 (OP)
В чем смысл если такая игра уже есть и 99% работы сделано за тебя? Делай глобальный мод на портал, многие разрабы как раз с модов и начинают.
Аноним 26/06/26 Птн 19:46:08 #48 №334361288 
>>334360383
> Мне надо уе потому что дальше я сам смогу в нем хуевертить. Только кор-механику надо реализовать
чел что-то я тебе нихуя не верю, если бы ты реально мог в этой сфере, то у тебя бы и вопросов не было и получал бы ты столько, что ты без проблем нанял бы уже людей из нашей сферы за часть своей зп
Аноним OP 26/06/26 Птн 19:56:55 #49 №334361576 
>>334360525
>>334360535
>>334360606
Ты смешон

>>334360580
> и 3-4 художника по 100к.
Зачем художник для архитектуры? Бред
Аноним OP 26/06/26 Птн 19:59:41 #50 №334361656 
>>334361172
Вопрос в амбициях. Кто-то рубит бабки на симуляторе кокоса

>>334361237
В чем смысл делать соника, есть есть марио
Аноним 26/06/26 Птн 20:07:48 #51 №334361854 
>>334358344 (OP)
>Анальник-наносек, вот скажи мне
>Мне для этого надо нанять анальника-сеньора
В среднем понадобится дохуя средних сеньоров, штук 10.

Но таких кадров, как в Valve, которые сделали это - почти нет. Ты можешь расчитывать на забагованную копию оригинала. И зависит от уровня и производительности твоих тимлидов

>Предположим UE
Выбор, лучше многих
>В меньшей степени склоняюсь к Юнити.
Физика говно там и получится говно у тебя. Под капотом потешные шарпы наркоманские

Source хорош именно физикой, тем что там Portal играется хорошо, смекаешь? Игра на физику, физический движок

>Всю остальную лабуду с кнопками и постами я и сам смогу на блюпринтах.
Ну тут ты разбежался, реально, у твоих 10 сеньоров это может занять лет 20. А может и год. Никто не знает, кого наймёшь
Аноним 26/06/26 Птн 20:10:33 #52 №334361911 
>>334361854
>Сколько такое стоит под ключ?

Забыл, до пизды. Просто дохера. Нереально много. И нужны штучные спецы. Расчехляй десятки миллионов долларов минимум, львиная доля которых уйдёт на поиск спецов.

Просто до пизды сколько это стоить будет, бро, очень дохуя. Я надеюсь ты не наркоман и осознаёшь это

И да, в твоей стране может таких спецов и не быть, не важно, сколько ты всрёшь на их поиск. Цена разработки в зависимости от локации может меняться нна порядки
Аноним 26/06/26 Птн 20:11:33 #53 №334361934 
>>334360636
>Зачем ты вырезал мне мочевой пузырь? Тебе надо было удалить гланды!1111
>@
>Вы правы - нет, это не нос. Я ошибся.
Аноним 26/06/26 Птн 20:15:56 #54 №334362052 
>>334361656
>Кто-то рубит бабки на симуляторе кокоса

Вы все постоянно забываете главное, вероятность создать такое случайно - меньше вероятности попасть в авиакатастрофу.

Скажи мне, ты дохуя часто попадаешь в авикатастрофу? Наберётся у тебя хотя бы десяток пережитых авиакатастроф? Ответ нет, забудь этот концепт вообще
Аноним 26/06/26 Птн 20:17:50 #55 №334362098 
>>334362052
Оп, не пытаюсь тебя демотивиррыать, не подумай. Рациональнее тебе бабок подкопить, потом создать

Людей с десятками лямов долларов несоизмеримо больше людей, создающих симулятор кокоса
Аноним OP 26/06/26 Птн 20:34:04 #56 №334362477 
>>334361854
>В среднем понадобится дохуя средних сеньоров, штук 10.
В валв один человек это спроектировал всё и даже рассказал как потом на стримах

Прям 10 человек надо? А что там параллелить?

>>334361854
>Source хорош именно физикой, тем что там Portal играется хорошо, смекаешь? Игра на физику, физический движок
в Портал и даже во втором не юзается физика почти. В хл2 примеров интереснее больше с ней
Аноним OP 26/06/26 Птн 20:40:22 #57 №334362643 
>>334362052
>Вы все постоянно забываете главное, вероятность создать такое случайно - меньше вероятности попасть в авиакатастрофу.
Я о том, что кто-то делает игры, пока другие мечтают

Поэтому я поставил вопрос ребром. Чатгпт сказал, что хватит одного помидора и 5-15к баксов ему
Аноним 26/06/26 Птн 21:07:04 #58 №334363309 
>>334362477
>В валв один человек это спроектировал всё и даже рассказал как потом на стримах.
Читай внимательно состав команды в 50 человек в титрах, а не высказывание воннаби-тимлид макаки, которую вот-вот уволят. Нет там главного разраба, а одарённому, если он есть, уж точно нет никакого резона искать хайпа и пиариться. Все знают - кто он, и так.

>Прям 10 человек надо? А что там параллелить?
И не абы каких, а лучших. Если хочешь такой же популярный продукт сделать. Это самый-самый минимум.

>в Портал и даже во втором не юзается физика почти. В хл2 примеров интереснее больше с ней
Она беспрецендентно идеальна, особенно для своего времени, потому и не ощущается. Физически точна и филигранна. Люди замечают только несовершенство в играх, это сами разрабы валв так говорят. Людям просто приятно прыгать в порталы, когда их интуитивное понимание прыжка сходится с реальным видом. И даже 100 раз прыгнуть - всё равно приятно. Просто в движке нет недочётов, багов.

>>334362643
>Поэтому я поставил вопрос ребром.
Ну вот тебе и ответ, накопи кучу лямов. Это гораздо проще, чем сделать очередного "Чёрного лебедя". Вещи просто стреляют, если на маркетинг потрачен миллион долларов.
Аноним 26/06/26 Птн 21:09:31 #59 №334363361 
>>334362477
>А что там параллелить?
Рутину заёбную. Дизайн, моделлинг, геймпей, скрипты, шейдеры, физика, левел дизайн.

Всё это в одиночку займёт лет 100 времени
Аноним OP 26/06/26 Птн 21:17:47 #60 №334363563 
>>334363309
>50 человек в титрах
Так мне не игра под ключ нужна, а одна механика
Аноним 26/06/26 Птн 21:22:24 #61 №334363685 
>>334363563
Ну хуле, будет механика говна +/-
Тогда опытного тимлида хватит, только портал это не одна механика, а ещё целая куча других моментов, сделанная на высшем уровне для своего времени
Аноним OP 26/06/26 Птн 21:32:16 #62 №334363942 
>>334363685
>а ещё целая куча других моментов
Например?
Аноним 26/06/26 Птн 21:38:04 #63 №334364099 
>>334361656
>Вопрос в амбициях.
Минималистичная тактика на мобилки. Даже такой простой жанр ПИЗДЕЦ как сложно делать.

А вообще, советую подождать годик-другой, может, ИИ тебе и заменит сеньоров-помидоров. Напомню, пару лет назад инструменты вроде opencode были научной фантастикой.
Аноним 26/06/26 Птн 21:47:04 #64 №334364345 
>>334364099
>Минималистичная тактика на мобилки
хоррор бродилку сделай, а то что ты описываешь запара
Аноним 26/06/26 Птн 21:47:44 #65 №334364362 
>>334358344 (OP)
Нужен широмыслящий математик, который знает анрил, чтобы как портал.
Габеновские порталы такие охуенные потому что габен прекрасно знает своё двигло, втч его недостатки, может его модифицировать и правильно подбирать костыли.
Там сама технология порталов это один гигантский костыль. Я бы сказал даже коляска. С другой стороны их методы вполне выглядят универсальными для других движков. Погугли как делали портал или разбор багов или что-то в таком духе и +- приблизительно поймёшь что и как.
Настоящие порталы ни одного двигло не потянет.
Аноним 26/06/26 Птн 22:07:29 #66 №334364904 
>>334363942
>Например?
Графон, геймплей, сюжет, звуковое сопровождение
Модели, дизайн

Всё сделано очень талантливыми людьми, который крайне сложно найти. Ты может и не увидишь никогда таких людей
Аноним 26/06/26 Птн 22:16:55 #67 №334365151 
>>334364904
С другой стороны, я думаю, половина треда (или даже весь тред) не видели современных Русских фрилансеров, работающих за 10 к. И что они могут сделать за 50
Аноним 26/06/26 Птн 22:36:09 #68 №334365628 
>>334365151
А ты их видел где-то кроме своих влажных фантазий маньки?
Аноним 26/06/26 Птн 22:51:19 #69 №334366047 
>>334364904
>Графон, геймплей, сюжет, звуковое сопровождение
>Модели, дизайн
Так мне не игра под ключ нужна, а одна механика
Аноним 27/06/26 Суб 00:58:25 #70 №334369039 
>>334366047
Да можешь хоть код выше по треду взять и прикрутить, если выйдет, будет у тебя забагованная механика говна с кучей косяков. И не очень популярное поделие
Аноним 27/06/26 Суб 01:06:02 #71 №334369196 
>>334358344 (OP)
Легче сделать мод на сам Portal, освоить хаммер для создания карт и как худ менять тебе нейронка без проблем подскажет.
Аноним 27/06/26 Суб 01:10:49 #72 №334369295 
>>334358344 (OP)
Мне кажется, самое сложное в порталах - это чтобы отображалось корректно, что внутри портала. А если для начала просто сделать оранжевый и синий овалы и соотвесттвенно реализовать телепорт при входе в один, то задача сильно легче. Потом уже разбираться, как сделать корректное отображение. Разве нет?
Аноним 27/06/26 Суб 01:13:50 #73 №334369363 
>>334358344 (OP)
тупые вопросы какие-то. Ну да тебе нужен математик какой-нибудь неплохой и достаточно одного кодера уровня синьор на анриле. Если речь про эту одну механику.

Если тебе полноценную игру делать, то нужно человек 10 будет и год работы.
Аноним 27/06/26 Суб 01:14:23 #74 №334369373 
Оп просто спросил, сколько будет стоить, а отвечают ему про графен, популярность, какие-то автокатастрофы даже. Классика.
Аноним 27/06/26 Суб 01:15:27 #75 №334369394 
>>334369373
Разработка игры уровня портал будет стоит 5-10 лямов баксов.
Аноним 27/06/26 Суб 01:17:49 #76 №334369442 
>>334369394
Нет, не будет, там делать нехуй, если есть много времени. В игре 1 уникальная механика, все остальное в сток ue-бане имеется или докручивается с минимум усилий. Ассет лист тоже не слишком объемный: лаборатория и белые вибраторы с лазерами, иногда лужи - все.
Аноним 27/06/26 Суб 01:19:17 #77 №334369468 
>>334369442
Говнодел, спок
Аноним 27/06/26 Суб 02:09:11 #78 №334370317 
dev2.mp4
>>334358344 (OP)
>Сколько такое стоит под ключ?
Недорого. Тысяч пять-шесть рублей. Я вебмрил делал в свободное время для фана. Но окружение должно быть малополигонально, так как порталы и зеркала жрут кратно ресурсы.
Аноним 27/06/26 Суб 02:14:19 #79 №334370386 
>>334364362
>сама технология порталов это один гигантский костыль
Двачую. Но обычно так бывает, что всё охуенное и прорывное - костыли из говна и палок. А корпоративный выверенный и продуманный чистокод - говно из жопы.
Аноним 27/06/26 Суб 02:35:46 #80 №334370624 
photo2026-06-2618-19-31.jpg
>>334358344 (OP)
ыыыы я хачу сделат игруу ыыыы чат джепете не делает ты долбоеб бля иди нахуй отсюда
Аноним 27/06/26 Суб 03:47:46 #81 №334371325 
Я анальник программист на анриле, специалиизруюсь на игровой логике и физике, стоит начать с того что на сурсе был очень хороший физический движок, многие не знают, но там просто модифицированный/адаптированный havok, вальвосы сами очень мало что сделали, но хавок был нереально хорош даже сейчас, в анриле сейчас используется Chaos Physics, это не говно, это отлично подходящее решение большинству типичных проектов, но это не уровень хавока даже не близко, физический движок тебе писать никто не будет, удачи в принципе найти таких спецов не то что в россии, в мире, условно я, могу конечно, но у меня нет энтузиазма делать что то задаром, а у тебя нет таких денег, тем более что никто в соло это не напишет, нужна специализированная команда человека 3-4 и пару лет разработки только физики, значит самое разумное взять анриловский хаос, дальше механика порталов, в своей основе супер простая штука, переместить объект из точки а в точку б, сохранив импульс тела, самое там сложное это сделать так чтобы это выглядело нормально, кучу разборов в интернете есть как это и какие костыли, механика в основе простая и её многие реализуют даже на гейм джемах, сама сложность в дублировании объектов, рендере и собственно производительности от такого местами тройного рендера, можешь глянуть deadlock от вальвов новый, у персонажа лакей они НЕ ОСИЛИЛИ нормальный рендер порталов, представь себе, низкое разрешение, кривое перемещение, отсутствие дублирования объектов, marvel rivals - НЕ ОСИЛИЛИ, с физикой получше но фпс садит тоже, в портале что 1 что 2 не было источников динамического света к слову, весь свет запечен, потому что свет через портал передать нормально нереально, а например какую нибудь тень пускать вообще забей, если конечно не рей трейсингом но та же проблема производительности

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

короче сделать очередную поделку на анриле я тебе сам забабахаю за месяц за 100к, и ассеты с тебя, запилить что то реально годное - года 2-3, и миллионов 10 только на прогеров если не боишься брать дешевых и начинающих, 20-30 если кого поопытнее, хотя лично знаю проекты с бюджетом около ляма в год, но там люди вообще не держатся за места, и проекты к слову всё еще не закончены спустя 6-10 лет
Аноним 27/06/26 Суб 03:51:05 #82 №334371346 
>>334358344 (OP)
> склоняюсь к Юнити

Школьник с умным видом рассуждает об где-то услышанных терминах.
Аноним 27/06/26 Суб 04:45:01 #83 №334371764 
>>334371325
Ебать ты этому долбоебу расписал.
Аноним 27/06/26 Суб 09:20:46 #84 №334374479 
>>334361172
Охты анон завидую тебе. Какую нейронку использовал? Откуда брал спрайты персонажей, фон и т.д.?
Аноним 27/06/26 Суб 09:36:19 #85 №334374703 
>>334374479
Opencode, комбинирую все нейронки из подписки. До спрайтов (к счастью, графики планируется относительно немного) дойдет ой как нескоро - сеттинг будет натянут на геймплей.
Аноним 27/06/26 Суб 09:41:10 #86 №334374775 
>>334358344 (OP)
Да справится-то и мидл, которому твоя идея в душу запала. Просто это вопрос времени. Сядь лампово с пацанами и обнадёжь их, что ты с ними до конца и готов понимать-принимать. Мемами там попререкидывайтесь, посидите в дисике за пивом. Будет тебе ламповый инди-проект.
мимоведущийпрогер
Аноним 27/06/26 Суб 09:47:28 #87 №334374852 
16511822999240.png
>>334358344 (OP)
Что ты высрал, дебилоид поехавший? Вся механика порталов уже тысячу раз обоссывалась, есть тысячи гайдов по любому виду порталов.

Твоё рождение сопровождалось выкидышем на кафельный пол или что?

Если ты такой даун-аутист, который неспособен загуглить что-либо, то тебе не стоит вообще что-то пытаться быть кем-то кроме грузчика.
Аноним 27/06/26 Суб 09:49:50 #88 №334374887 
>>334365151
>современных Русских фрилансеров, работающих за 10 к
ты из 2006 там капчуешь?
Аноним 27/06/26 Суб 10:05:11 #89 №334375123 
Видел мод для гта са. С портальной пушкой, прикольно
Аноним 27/06/26 Суб 10:09:56 #90 №334375197 
>>334374887
Из 2026
Недавно заказ создавал
Аноним 27/06/26 Суб 11:13:02 #91 №334376258 
Ну что же вы, Бэтмены? Такой тред годный утопили. Давайте-ка быстро общаться
Аноним 27/06/26 Суб 11:45:27 #92 №334377010 
>>334376258
Где ты тут годноту увидел? Очередное больное на голову шизло что-то высрало на тему игрокала. Это тупорылое говно даже не понимает зачем людям игры нужны, но уже маняфантазирует про создание клона портала.
Аноним 27/06/26 Суб 12:39:53 #93 №334378301 
@monkey бугурт
ТЫ РЕШАЕШЬ СДЕЛАТЬ ИГРУ КАК ПОРТАЛ 2
@
НАНИМАЕШЬ СЕНЬОРА ЗА БОЛЬШИЕ БАБКИ
@
ОН ГОВОРИТ ЧТО МАТЕМАТИКА СЛОЖНАЯ
@
ПОРТАЛЫ РАБОТАЮТ КРИВО
@
ПРОБУЕШЬ С МИДЛОМ ЧТОБЫ СЭКОНОМИТЬ
@
ТЕКСТУРЫ ПРОВАЛИВАЮТСЯ В ПУСТОТУ
@
СОБИРАЕШЬ ЦЕЛУЮ КОМАНДУ
@
ОПТИМИЗАЦИЯ УХОДИТ В ПИЗДЕЦ
@
ПРОЕКТ РАЗДУВАЕТСЯ ДО МИЛЛИОНОВ
@
В КОНЦЕ У ТЕБЯ ТОЛЬКО ПУСТАЯ ПАПКА И ДОЛГИ
Аноним 27/06/26 Суб 12:43:29 #94 №334378414 
@monkey сколько же ОП потратит на игровую механику порталов и кого ему стоит нанять?
OP'у для нормальной реализации порталов в UE лучше нанимать сеньора с опытом в кастомном рендере и физике, мидл потянет только если уже делал что-то похожее, иначе будут косяки с оптимизацией и проекцией. Целая команда не нужна на старте, если остальное на блюпринтах. Под ключ такая механика обойдется в 400-800 тысяч рублей в зависимости от исполнителя и правок.
Аноним 27/06/26 Суб 12:46:23 #95 №334378505 
@monkey а если прикупить годных ИИ-агентов (и каких?), то получится сэкономить наняв джуна без опыта за пожрат?
нет, не сэкономишь. порталы требуют глубокого понимания движка, математики и оптимизации под капотом, а ии-агенты пока на уровне "нарисуй пример", а не "сделай стабильную систему без просадок". джуну без опыта с ними придётся постоянно фиксить баги, и в итоге выйдет дороже, чем сразу взять нормального мидла.
Аноним 27/06/26 Суб 13:04:54 #96 №334378964 
>>334378414
> в 400-800 тысяч рублей в зависимости от исполнителя и правок.
Это за месяц столько будет стоить, минимум, если удастся найти кого-то.

Офк все кто может такое делать уже имеют работу и свои проекты, меньше чем за 3-5кк не согласятся жопу отрывать и что-то там делать.
Аноним 27/06/26 Суб 13:10:04 #97 №334379121 
я вам ебалнам выше всю архитектуру на плюсах в виде кода порталов отправил, вы тут продолжаете пиздеть
Аноним 27/06/26 Суб 13:16:03 #98 №334379285 
>>334379121
Кому нужен этот код? Лучше бы готовую репу скинул с готовым примером.
Аноним 27/06/26 Суб 13:18:48 #99 №334379356 
>>334358344 (OP)
Для современных видеоигр самое главное это художники и дизайнеры. Программная часть, если у тебя не какие-то особые высоконагруженные вычисления (в портале их нет), сравнительно элементарная и сегодня наверно может быть сделана даже Ии
Аноним 27/06/26 Суб 13:19:48 #100 №334379379 
>>334379121
Какая нахуй архитектура, дебилоид? Проблема порталов в шейдерах, рендере и каким образом их совмещать бесшовно в движок, чтобы всё работало.

>>334379285
7кк и скину готовый код для UE 5. У меня в папочке есть рабочая заготовочка с двойным рендером и готовой физикой.
Аноним 27/06/26 Суб 13:34:20 #101 №334379741 
>>334379379
>7кк
>зоготов-очка

Заготовил тебе, проверяй.
Аноним 27/06/26 Суб 14:31:35 #102 №334381269 
>>334379741
Представь только, у меня есть кусок этого сладкого кода который работает на древнем железе и максимально оптимизирован. Иногда я открываю его, запускаю геймпелей, проверяю механнику скольжения по поверхностям, механику паркура, работу порталов и оружия, работу сетевого кода, искусно тереблю физические константы и закрываю проект. Гемплей радует каждым кадром.

Ты же так и будешь ебаться с ИИ ничего не создав, потому что ты не можешь в банальное сложение векторов.
Аноним 27/06/26 Суб 14:57:47 #103 №334381993 
IMG20260627185218.jpg
>>334381269
А вот если бы у меня был готовый проект, то я бы поделился с анонами.

>не можешь в банальное сложение векторов
Чел, я в своё время (когда в вузике учился) на Delphi воксельный движок самописный собирал и много ещё чего. И портал бы собрать смог (тем более с ИИ-шками), но чисто влом.
Аноним 27/06/26 Суб 16:22:53 #104 №334384316 
>>334381993
> А вот если бы у меня был готовый проект, то я бы поделился с анонами.
Смысл? Ты слишком нищий чтобы закончить этот проект. Как и я. Когда наработают 1-5кк баксов закончу сам, въебав мултиплатформенную фритуплей игорь. Впринципе немного осталось.

> Чел, я в своё время (когда в вузике учился) на Delphi воксельный движок самописный собирал и много ещё чего.
Это всё чушь. Сейчас ты даже вменямый UI для игры не сделаешь, если нет опыта системной архитектуры
Аноним 27/06/26 Суб 17:05:00 #105 №334385629 
>>334384316
>системная архитектура
>шаблоны проектирования
>процесс разработки
>варианты использования
Аноним 27/06/26 Суб 17:10:28 #106 №334385787 
>>334358344 (OP)
>Тз грубо говоря: масштабируемый проект на анриле с работающими порталами.
Ты ёбнутый поридж-долбоеб, сука. Даже в UT3 2007-го года (на Unreal Engine 3) были работающие порталы. Пиздец, поридж блять, мог бы спросить у своей говносетки где еще есть механики порталов как пример
Аноним 27/06/26 Суб 17:13:32 #107 №334385886 
>>334360535
>#include "Kismet/KismetRenderingLibrary.h"
>#include "Kismet/GameplayStatics.h"
Боже мой, это же буквально библы из UDK (или Unreal Engine 3.5, публичная порезанная версия UE3 для быдла), пиздец. Еще на беседку гонят с их моровиндским движком в фолаче
Аноним 27/06/26 Суб 17:43:15 #108 №334386745 
>>334385629
Это всё хуёня для дилетантов. Каждая игра в конечном итоге оптимизируется под логику, чтобы оно работало на устройствах пользователя. Переход от говна на движке к конечному проекту невозможен без человека который выкидывает 80% говнокода.
Правда, это всё для фритуплей параш у которых уровень кода сравним с ядром линукса.
comments powered by Disqus