Creating a spaceship that can be walked around in

I would like some pointers on getting started on this project. Here is what I am trying to do. I want to create a spaceship that people can walk around in. I have read various posts here, and some ideas on the internet, and here is what I think I should be doing

  1. Make a static mesh of the interior, for now its going to be the default level of 3rd person level with the top enclosed, and I will then cut out some areas of the walls to represent windows/viewport.
  2. The static mesh won’t move
  3. Use a SceneCapture2D

So, to complete this illusion, do I create a sphere around the “ship” as the texture to render to, use a SceneCapture2D to render to this sphere, so no matter what window the players look out of, it should look correct ? If not the sphere idea, do I create a texture capture area for every window on the ship, then create multiple SceneCapture2D with different camera angles to accomplish this ? What is a good approach to implement the SceneCapture2D to give the illusion the ship is moving?

1 Like

@AntiGravity I read the post you left me and it gave me some ideas and thoughts, I also searched youtube and watched some gameplay footagage of angels must fall, with that being said let me give some additional info that may help narrow down the scope of the suggestions I get.

  1. This will be multiplayer
  2. The ships need to be able to be piloted (I noticed the capital ships in angels must fall has this feature)

I was thinking of having a SceneCapture2D camera, that is driven around and controlled by the player to represent the ship, and one of the components would be a collision component around the camera that would represent the ship, so I could then use that collision component to determine if the “ship” gets damaged, and if it runs into anything. Since the camera is moving around, I am also thinking of adding a component that represents the outside of the ship, so onlookers would see a ship flying around in space.

If these are possible and viable, I am going to create a standalone proof of concept project with just a simple ship with a static mesh for the interior, and a SceneCapture2D camera that is moving around by a player controls, then when the player looks out any of the windows on this static mesh it would appear to be moving around.

So, first things first, how would I go about using SceneCapture2D to make it appear the ship is moving? Do I put a texture on every window ? Do I make a big sphere texture around the entire ship that the camera projects onto ? I am going to tackle this one problem at a time, until it is complete.

Piloting and walking around in it can be completely separate and unrelated levels, unless you expect to see combat outside or something the like.

If you are making a better version of elite dangerous because after promising so they never did make ship interiors, maybe lets start with:
“Don’t start from the world’s worse video game ever made”.

Focus on one element at a time.
Make the interior, then craft the exterior to contain the interior you created.

If you go the other way around, you end up with geometry too small for the player to access about 90% of the time.

Also, default 3rd person is the equivalent of 3 fat Americans rolled into one. It cannot even pass inside standard US width doorframes - you may want to consider that when starting. Make stuff larger than the capsule.

Interiors can actually run at 60fps 4k on a 1080 easily with 4k textures on individual objects - BUT - if you plan ahead and stick to a trim sheet set you’ll have much better performance overall (think skyrim style. Look it up, 1 textures covers a whole room set).

In .27 I think simulating physics is mostly broken again.
Might be chaos. Might have been my rig. Might just be the engine incrementally becoming trash.

Either way stay away conceptually from curtains and cloth surfaces so you can actually get to something without cursing every 5m :stuck_out_tongue:

Last thing.
If you want players to see whatever who’s driving is doing from windows, you can probably make real windows and leave it at that.

The game will probably have a 2km radius around each ship where other stuff happens and is visible.

It’s space. It’s very easy to render. It’s the absence of nearly everything about 90% of the time.
It has no fog, no light for the most part.

Even if you do something more complex - like that pice of garbage called elite dangerous but done properly - you can easily render the areas outside the 2km range as a localized cube map taken at runtime once upon entering a system
(Because leaving the light of neighboring star systems on would truly cripple any engine).
But again, let’s not pick the world’s worse source as an example at all :stuck_out_tongue_winking_eye:

Cube map it. At worse.
And make the windows as holes.
Then a bubble around the interior on which the cubemap is rendered as emissive.

It’ll look far more real than spitting textures on windows.

Yes, I was planning on creating the interior of the ship first, then creating the exterior last. I will look into using less textures and doing more with those textures as Skyrim does. I have seen some examples of people doing similar things. I figure once the interior is done, the walking around inside the ship and interacting with other players inside the ship or ship controls is going to be easy, as the interior of the ship isn’t moving.

Correct. That’s the point. Itcan replicate and work just fine while appearing to be navigating as normal just from the cube map movement.

Scene capture2d is a bad choice since the windows and the view inside of the windows change with the position of each player’s head.

Even if you capture it and play it on a panel outside the window it is still not the same as playing the equivalent of a 360 movie captured from all around the “ship”.

Best example you can look at is Hitmans’s initial ICA training facility level from ages ago.
The boat’s surroundings are literally just a texture on a wall (on purpose and by design).
Yet from inside the ship you’d never really be able to tell as much…

You also have to worry about light & shadows from objects outside the ship casting inside the ship (ex. another ship, rocks, debris). If a giant ship blocks the windows from the sun, the sun is still going to cast through because the other ship is not actually there, it’s two images being overlaid.

Come to think of it, you would be rendering much more than you need to because any pixels from the scene capture that are blocked by the interior will go to waste; it’s basically forced overdraw.

Yes and no.
You could tie the rendering directly at when the window is being looked out of, making it much more performance friendly.

Generally speaking in space you won’t have “directional” light or much of anything.
It depends on what the rest of the game is doing - which we don’t really know.

Most star systems are probably going to be just a gigantic point light for the main star, and “dots” for the nearby planets.

Realistically yes, another space ship could cast a shadow onto the interior.
In practice who cares?
In all probability no one would even notice this since the light coming in from the window would be next to nothing compared to the lights of the interior (even more so when using point lights).

Rendering a cubemap is pretty cheap btw. And you can pick and choose the render resolution based on the size of the sphere texture - being its probably mostly stars from a baked background and maybe 1 to 100 moving things you can probably get by with rendering at 1080p for the whole cube map without bring able to tell the difference.

Also, since you know, the old sky atmosphere is essentially already a gigantic sphere with the option of a custom texturing, nothing would keep the “outside” from also being simulated in real time while the ship doesn’t move at all.

Other Ships aren’t rendered in the cube map.
Get rid of the rendering of the cube map, and offset the rest of the stuff in the scene based on the “position” of the ship (transform nodes are cheap being mostly just a multiplication).

This would then be just a regular CPU hit like anything else, since 90% of the outside scene will always be occluded.

The whole entire point is that - much like the planet express space ship travel theory - the universe moves around you, the ship doesn’t move at all.

(So if you don’t render the cubemap, you physically rotate the skysphere to mimic the space ship movements - guess I left that out).