Анальник-наносек, вот скажи мне, я хочу сделать игру как Portal 2. Мне для этого надо нанять анальника-сеньора, чтобы он мне сделал математику / архитектуру порталов на выбранном движке? Предположим UE, в меньшей степени склоняюсь к Юнити. Или справится и мидл с таким хардкором? Или нужна целая команда анальников?
Потому что чатжопа и близко не может реализовать такое. А всё, что я в интернете видел платное или бесплатное — хуита отдаленно напоминающая механику порталов. Там либо криво телепортация работает, либо проецируется криво текстура, либо в пизду идет оптимизация.
Тз грубо говоря: масштабируемый проект на анриле с работающими порталами. Всю остальную лабуду с кнопками и постами я и сам смогу на блюпринтах. Сколько такое стоит под ключ?
>>334358344 (OP) Тебе человек 20 минимум надо для нормальной 3д игры даже на готовом халявном движке. Я лет 10 газад рпг сделал изометрическую в соло (с готовой графикой), заебался просто вкрай, несколько лет пахоты.
>>334358432 >Ты просто не умеешь пользоваться нейронкой Ну может сеньору помидору она и сможет выдать необходимое. Но так синьор и сам такое знает и понимает. А мне она хуйню выдаёт
>>334358344 (OP) В роблоксе есть клон портала блядь, идеально работающий. TUNELLER. В роблоксе блядь опять же. Может ты ебнутый фанат габена который просто любые порталы не от валв говном поливать будет?
>>334358344 (OP) Дай нейроке сначала задание создать простой неэвклидовый движок с поддержкой порталов. Потом допиливай. Сходу тебе готовое не одна нейронка не сделает
А зачем тебе? Как ты без навыков программирования собрался делать фулл игру? Даже если чел был бы, то по итогу сделал игру он, а не ты. Он близким человеком быть должен.
А про механику порталов это вообще пиздец. Это тяжело было программировать и работает оно на костылях.
>>334359191 Попросил сделать поэтапный план и выполнить первый этап. На нем уже фейл. Он даже не смог через с++ рендер текстуру на шейп «портала» натянуть правильно (по этому простому пункту есть туторы на ютуба даже как раз под задачу портала)
>>334359357 >Как ты без навыков программирования собрался делать фулл игру? У меня есть навыки. Экспедицию 33 видел? Сделана на блюпринтах (нодовый кодерский редактор в анриле)
>>334358344 (OP) Для портал нахуй не нужен спец движок брать универсальный, все что в игре сложного будет писать - все равно писать самому, так что проще библиотек нужных взять и слепить самому все
>>334360115 >Для портал нахуй не нужен спец движок брать универсальный Мне надо уе потому что дальше я сам смогу в нем хуевертить. Только кор-механику надо реализовать
class UStaticMeshComponent; class UBoxComponent; class USceneComponent; class USceneCaptureComponent2D; class UTextureRenderTarget2D; class UMaterialInterface; class UMaterialInstanceDynamic;
/ 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()
/ 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);
/ 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;
/ True if the segment Start->End passed through the front face of the portal plane. */ bool CrossedPlane(const FVector& Start, const FVector& End) const;
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;
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); }
// --------------------------------------------------------------------------------------- // Rendering the view through the portal // ---------------------------------------------------------------------------------------
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);
// 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); }
// 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());
/ 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;
/ 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);
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;
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; } }
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();
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()
// Let the controller drive look; the body yaw follows movement input. bUseControllerRotationPitch = false; bUseControllerRotationYaw = true; bUseControllerRotationRoll = false; }
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;
# 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` каждый кадр — самый дорогой кусок. На каждый видимый портал — отдельный проход рендера. Прячь капчур, когда портал не в кадре, при оптимизации.
// 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; }
Готово. Собрал самодостаточный модуль 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 в разделе «расширить».
>>334360724 Просто он делит картинку на квадратики и воспринимает каждый как 1 токен. Чем больше квадратиков тем лучше результат распознавания изображения. Гоям разрешают делать условные 8х8 тогда как корпорации могут делать хоть 1000х1000 по своей еврейской подписке. Соответственно одна и та же модель в руках гоев и в руках корпораций выдает абсолютно разный результат.
>>334360825 >как корпорации могут делать хоть 1000х1000 по своей еврейской подписке У тебя инторнет скоро по подписке в 60$ за Гб, а ты тут про пиксели затираешь. Или ты с Ихгаиля? Тогда, ладн, чо
>>334358344 (OP) Когда-то я думал, что не могу сбацать игру мечты только из-за бедности и невозможности нанять команду прогеров. Теперь за месяц навайбкодил прототип, и мне открылась страшная правда - между разрозненными светлыми идеями и полноценным диздоком ебучая пропасть. Выкинул на свалку 10 итераций прокачки, три разновидности гибели и пять концептов глобальных спеллов, до сих пор трясусь от гексагональной сетки и чрезмерной свободы, выдаваемой игроку.
>>334358344 (OP) В чем смысл если такая игра уже есть и 99% работы сделано за тебя? Делай глобальный мод на портал, многие разрабы как раз с модов и начинают.
>>334360383 > Мне надо уе потому что дальше я сам смогу в нем хуевертить. Только кор-механику надо реализовать чел что-то я тебе нихуя не верю, если бы ты реально мог в этой сфере, то у тебя бы и вопросов не было и получал бы ты столько, что ты без проблем нанял бы уже людей из нашей сферы за часть своей зп
>>334358344 (OP) >Анальник-наносек, вот скажи мне >Мне для этого надо нанять анальника-сеньора В среднем понадобится дохуя средних сеньоров, штук 10.
Но таких кадров, как в Valve, которые сделали это - почти нет. Ты можешь расчитывать на забагованную копию оригинала. И зависит от уровня и производительности твоих тимлидов
>Предположим UE Выбор, лучше многих >В меньшей степени склоняюсь к Юнити. Физика говно там и получится говно у тебя. Под капотом потешные шарпы наркоманские
Source хорош именно физикой, тем что там Portal играется хорошо, смекаешь? Игра на физику, физический движок
>Всю остальную лабуду с кнопками и постами я и сам смогу на блюпринтах. Ну тут ты разбежался, реально, у твоих 10 сеньоров это может занять лет 20. А может и год. Никто не знает, кого наймёшь
Забыл, до пизды. Просто дохера. Нереально много. И нужны штучные спецы. Расчехляй десятки миллионов долларов минимум, львиная доля которых уйдёт на поиск спецов.
Просто до пизды сколько это стоить будет, бро, очень дохуя. Я надеюсь ты не наркоман и осознаёшь это
И да, в твоей стране может таких спецов и не быть, не важно, сколько ты всрёшь на их поиск. Цена разработки в зависимости от локации может меняться нна порядки
>>334361854 >В среднем понадобится дохуя средних сеньоров, штук 10. В валв один человек это спроектировал всё и даже рассказал как потом на стримах
Прям 10 человек надо? А что там параллелить?
>>334361854 >Source хорош именно физикой, тем что там Portal играется хорошо, смекаешь? Игра на физику, физический движок в Портал и даже во втором не юзается физика почти. В хл2 примеров интереснее больше с ней
>>334362052 >Вы все постоянно забываете главное, вероятность создать такое случайно - меньше вероятности попасть в авиакатастрофу. Я о том, что кто-то делает игры, пока другие мечтают
Поэтому я поставил вопрос ребром. Чатгпт сказал, что хватит одного помидора и 5-15к баксов ему
>>334362477 >В валв один человек это спроектировал всё и даже рассказал как потом на стримах. Читай внимательно состав команды в 50 человек в титрах, а не высказывание воннаби-тимлид макаки, которую вот-вот уволят. Нет там главного разраба, а одарённому, если он есть, уж точно нет никакого резона искать хайпа и пиариться. Все знают - кто он, и так.
>Прям 10 человек надо? А что там параллелить? И не абы каких, а лучших. Если хочешь такой же популярный продукт сделать. Это самый-самый минимум.
>в Портал и даже во втором не юзается физика почти. В хл2 примеров интереснее больше с ней Она беспрецендентно идеальна, особенно для своего времени, потому и не ощущается. Физически точна и филигранна. Люди замечают только несовершенство в играх, это сами разрабы валв так говорят. Людям просто приятно прыгать в порталы, когда их интуитивное понимание прыжка сходится с реальным видом. И даже 100 раз прыгнуть - всё равно приятно. Просто в движке нет недочётов, багов.
>>334362643 >Поэтому я поставил вопрос ребром. Ну вот тебе и ответ, накопи кучу лямов. Это гораздо проще, чем сделать очередного "Чёрного лебедя". Вещи просто стреляют, если на маркетинг потрачен миллион долларов.
>>334363563 Ну хуле, будет механика говна +/- Тогда опытного тимлида хватит, только портал это не одна механика, а ещё целая куча других моментов, сделанная на высшем уровне для своего времени
>>334361656 >Вопрос в амбициях. Минималистичная тактика на мобилки. Даже такой простой жанр ПИЗДЕЦ как сложно делать.
А вообще, советую подождать годик-другой, может, ИИ тебе и заменит сеньоров-помидоров. Напомню, пару лет назад инструменты вроде opencode были научной фантастикой.
>>334358344 (OP) Нужен широмыслящий математик, который знает анрил, чтобы как портал. Габеновские порталы такие охуенные потому что габен прекрасно знает своё двигло, втч его недостатки, может его модифицировать и правильно подбирать костыли. Там сама технология порталов это один гигантский костыль. Я бы сказал даже коляска. С другой стороны их методы вполне выглядят универсальными для других движков. Погугли как делали портал или разбор багов или что-то в таком духе и +- приблизительно поймёшь что и как. Настоящие порталы ни одного двигло не потянет.
>>334364904 С другой стороны, я думаю, половина треда (или даже весь тред) не видели современных Русских фрилансеров, работающих за 10 к. И что они могут сделать за 50
>>334366047 Да можешь хоть код выше по треду взять и прикрутить, если выйдет, будет у тебя забагованная механика говна с кучей косяков. И не очень популярное поделие
>>334358344 (OP) Мне кажется, самое сложное в порталах - это чтобы отображалось корректно, что внутри портала. А если для начала просто сделать оранжевый и синий овалы и соотвесттвенно реализовать телепорт при входе в один, то задача сильно легче. Потом уже разбираться, как сделать корректное отображение. Разве нет?
>>334358344 (OP) тупые вопросы какие-то. Ну да тебе нужен математик какой-нибудь неплохой и достаточно одного кодера уровня синьор на анриле. Если речь про эту одну механику.
Если тебе полноценную игру делать, то нужно человек 10 будет и год работы.
>>334369394 Нет, не будет, там делать нехуй, если есть много времени. В игре 1 уникальная механика, все остальное в сток ue-бане имеется или докручивается с минимум усилий. Ассет лист тоже не слишком объемный: лаборатория и белые вибраторы с лазерами, иногда лужи - все.