A quick size query

    Joined
    Jun 24, 2013
    Messages
    21
    Reaction score
    0
    • Legacy Citizen 2
    • Legacy Citizen
    Hi all,

    Just a quick query, and apologies if similar things have been asked before. I was thinking of building a 1:1 scale version of the Death Star (crazy I know and will take months to build), however the Death Star is 120km in diameter. If this was a perfect sphere it would have a surface area of 7,238,229,473,870,880 blocks, so my question is (ignoring the amount of time it would take) is this even possible? Will the game actually be able to handle a ship of this size?
     
    Joined
    Jun 23, 2013
    Messages
    11
    Reaction score
    0
    • Legacy Citizen 2
    • Legacy Citizen
    I\'m wondering that too, let\'s hope you\'ll get your answer soon :).

    I\'m thinking about building something from eve online but It\'s too big, I don\'t know if I should build it 1:1 or cut it in half.
     
    Joined
    Jun 20, 2013
    Messages
    13
    Reaction score
    0
    • Legacy Citizen 2
    • Legacy Citizen
    I think the problem could be that the ship wouldn\'t fit in one sector, I don\'t know what the dimensions of these sectors are though.

    I think the game would crash if a ship spans over multiple sectors at once. This could be wrong though.
     
    Joined
    Jun 24, 2013
    Messages
    21
    Reaction score
    0
    • Legacy Citizen 2
    • Legacy Citizen
    Yes I was thinking that it spanning multiple sectors would cause issues. So far I\'ve only built 2km of the first axis (as I only started it an hour before work this morning). My plan this weekend is to build the 3 axis to their 120km length and see if the game can handle that. I\'ll post my findings :)
     
    Joined
    Jul 1, 2013
    Messages
    35
    Reaction score
    18
    Let me start off by stating this.. I am a computer programmer, and I have done a couple small games but I\'ve never made this style of game before so I\'m not an expert but I\'ll tell you what I\'m thinking.



    IF you could somehow make every block in that ship take only 1 byte of ram it would take...

    7,238,229,473,870,880 bytes / 1,073,741,824 bytes(also known as 1GB) you would end up with

    6,741,126 Gigabytes of ram, which simplified is equal to 6.43 Petabytes of ram.

    Now it is possible to page some of the data not in viewing distance to disk but that means that you would still need about 7 petabytes of HDD space to even save the ship IF every block only took one byte which considering you have to save block type, orientation(for some types), damage, UV texture coordinates, vertex/index buffers etc you couldn\'t fit it in 1 byte of ram. Now you could compress the data, but even compressed it\'d still probably be many many Terabytes of data and it would be extremely slow to open (Think days). Also based on what type of engine I understand powers this, you need substantially more storage than the count of blocks in the ship.

    So ignoring the fact that i doubt you could build a ship bigger than a sector without crashing the game the memory/storage alone is enough to make that nearly impossible. Also the second you attempt to move it, you would probably crash the physics engine. as well as in the game world you\'d have random stations, asteroids, shops, and planets inside of it?
     

    MrFURB

    Madman of the Girders
    Joined
    Jan 31, 2013
    Messages
    1,116
    Reaction score
    413
    The game can handle a ship that is partway in one sector and partway in another, but huge ships tend to eat up ram and mess up the game\'s code after a while.
     
    Joined
    Jun 21, 2013
    Messages
    92
    Reaction score
    0
    • Legacy Citizen 2
    • Legacy Citizen
    a sector is 1000*1000*1000

    ships/station/objects can be larger than a few sectors, it will be laggy when moving you or the ship unless you have more than 4 or so dedicated gigs of ram and of course becuse it is so big will look very slow, not to mention the turn speed and the fact that you need a small fleet to clear any and all block in front of you to keep moving

    yes you could have a block in 1 btye if programed smart, meaning less than 256 symbols for properties of a block

    ETA of code, but not in this order:
    object in question(anyware from 1 - 12 numbers alows for 479001600 dif objects the game has deflaut 2048 sectors)
    X, Y, Z.(relative to object, so it expands as the object does needs at least 57(19 each) total amount of numbers for a 1 to 1 scale)
    the object type(curently max 3 numbers might be more in future)
    orientation(1 number if corner, 2 if a wedge)
    damige value (3 for health, 2 for armour)

    so my count makes it a total of 86-ish symbols this inlcudes spaces for seperation, this is if an other big file is used for calculations regarding shield power and weapons and other abilety\'s such as location and location of weapon fire
    this would take most of the bulk for the size and allow for 3 blocks for each byte, dividing most calculations by 3. still takes alot of space, but makes it more feasible it would still take a few peta-byte, which most poeple simply do not have.

    my best segestion is rather have it 1/10 scale for a max you could run(i have seen ships span 6-8 km) wich brings it to 12km still alot but do-able, but realy you should do it sorta around 1/100 scale (1,2 km) this would be realy the best and still much much bigger than ~98% of ships in the game curently in use...

    for a quick comparison it takes luke(yes from starwars) 4 min to fly along the ridge at 1,050 kph wich translates to 291.6 mps means he traveld at least 70 km of the 503 km total deathstar length. you can only go 13.8 mps which means in the same amount of time you would only go about 3.3 km in distance, meaning this deathstar(if you want to make it fit the curent max speed) is around 23.7 km in length, utamaly concludes to a deathstar with a diameter of 7,5 km
    fun fact:
    the first deathstar was 160 km in diameter, the second was 900 km. the more you know!



    TL:DR,
    dont build a deathstar 1/1 becuse it would murder you computer, instead keeping with the current max speed use 1/0,06 (diameter of 7548 m)
     
    Joined
    Jul 1, 2013
    Messages
    35
    Reaction score
    18
    First part where did \"479001600\" come from?

    There\'s no way you can get one block in less than one byte, total, because you have the multitude of different block types to begin with which from looking at the id page would take up most of if not all or more of one byte, then you still have orientation, and health. You also have the vertex/index buffers generated for each chunk to render the cubes, which including positions, as well as uv coordinates and any other info needed by the rendering pipeline. You also have info stored for blocks that arent\' even there (yes i realize you can stip some of it down) due to the type of engine this is. So in total once you add everything up, you can not get a block in less than one byte.

    One byte or 8 bits is not 256 \"numbers\" as it sounds like you\'re trying to say. it\'s got 256 possible combinations ie 0-255 which considering theres a few hundred total different blocks that takes most of that right there
     
    Joined
    Jul 10, 2013
    Messages
    32
    Reaction score
    0
    • Legacy Citizen 2
    • Legacy Citizen
    Hi Belone,

    As guys already said, you can try to make smaller sized model. ATM Im building Hyperion from Starcraft and the head part is roughly 600x200x100 meters big. That is volume of 12 million blocks. And If that head would be space station, it would be pretty big and badass station.

    Think about building Death Star. Sphere with diameter 500 meters would have volume 65 million blocks. Pretty enough space. Sphere with diameter 1000 meters would have volume 523 million blocks. Thats epic size. I would stick with something between these numbers, probably close to that 1000 blocks.

    PS: Dont forget to use all three symmetry planes, effectively you will need to build only 1/8 of the sphere.
     
    Joined
    Jun 21, 2013
    Messages
    92
    Reaction score
    0
    • Legacy Citizen 2
    • Legacy Citizen
    First part where did \"479001600\" come from?


    thats any and all posible combination of 12 numbers in consecutive order you can check that by going \'12!\' on google, becuse thats a math thing.


    multitude of different block types to begin with which from looking at the id


    they do not expend more than 3 numbers at the moment for the type of block in use, anything else is more of a property alocated to the type, and this will only aplly to selling and bying usaly or what some fucntions do


    , then you still have orientation, and health.


    witch i did add into my estaments, youve must have read over them


    You also have the vertex/index buffers


    from what i understand, despite not being a programmer, is that the vertex/index buffers are used for rendering and to make it more optimised, it is more handeld by other iterations and you vidoe card, and thus if used in a wrapper for a file in use whit the id


    as well as uv coordinates and any other info needed by the rendering pipeline


    witch should be alocated by the block-id and the orentation number relative to its object id.


    You also have info stored for blocks that arent\' even there


    yes i know there can be some special settings involved for say plex-doors, this probely one of the only things i dident take into acount


    One byte or 8 bits is not 256 \"numbers\" as it sounds like you\'re trying to say. it\'s got 256 possible combinations ie 0-255


    i did say symbol\'s, but as i did try to use them in a more eficaint way, here let me explain:
    the curent system works whit xml, there is no problem whit that. but using this \"yes, it is imposible to have 1 byte for 1 block\" but what i instead do for a better system to optimize space and storring(mind you this is not the best way, and is more so a concept than anyhing else). for example i have a core, the code would be something like:
    000001600(this would be the object number in game)
    0000000000000000000(x coerdinate)
    0000000000000000000(y coerdiante)
    0000000000000000000(z coerditate)
    001(the block id)
    00(orentation, this does not apply to this block, but would for say a wedge where 00 is north, and then 12 would be upsidedown north, ect.)
    200(the health value)
    70(armour value, note that both these and health decrese if taking damige)
    0(otional state, for a core block this would be overheating, for plex doors it would be \"NOT_VISBLE\" so it would very much be dependent on block id)

    thes add up to make 88 number and seperators ie total amount of symbols

    so you get:
    000001600 0000000000000000000 0000000000000000000 0000000000000000000 001 00 200 70 0
    for a core block at the center of your ship.
    000001600 0000000000000000000 0000000000000000000 0000000000000000001 002 00 100 00 0
    for a power block on top
    000001600 0000000000000000000 -000000000000000001 0000000000000000000 008 00 100 00 0
    000001600 0000000000000000000 -000000000000000002 0000000000000000000 008 00 100 00 0
    to get 2 thruster blocks stacked behind the core.
    of corse you could leave out many of the zero\'s but thats just a place holder for this example. if you would get rid of the zero\'s you could have an even more eficant way to store it. starts out exstreamly small, and makes small jumps every now and then in size.

    and for storing mutlible block in a folder you could use spaces or / \\ @ or othere symbols as a fucntion or triger for a seporator. i do think that ther is one problem whit this is that there can be clutter as you place and remove blocks every now an then or when builing it

    remember this the best way to use as litle posible space for stroring and reading a absolutly masive object, and obviouly is not a thing right now becue of the engine\'s curent limetation and it would need a aditional translator. and might stress some thing more regardless of how you try, maybe in the future quantum computers can handel this.

    anyway i stll stand wtih my earlyer post for the 7.5 diameter
     
    Joined
    Jul 1, 2013
    Messages
    35
    Reaction score
    18
    I understand math very very well, yes i realize that 12! = 479001600 but that\'s actually irrelevant here.

    A computer works on a base 2 number system represented in 0s and 1s. So for example an 8 bit or 1 byte number representing

    1 would be 00000001

    2 would be 00000010

    3 would be 00000011

    and so on.

    1 byte cannot store 256 \"symbols\", \"numbers\" or any other way you want to say it. it is only capable of representing a number between 0 and 255 if it is unsigned, and -128 to 127 if its signed.

    Heres an explanation of integer data types in a computer https://en.wikipedia.org/wiki/Integer_%28computer_science%29



    1 byte does NOT have 256 digits it has 256 possible combinations of 8 bits, it can only store a maximum of 2 \"symbols\" the way you talk about it because depending on the third place the other two cannot pass 5. To be able to store

    \"000001600 0000000000000000000 0000000000000000000 0000000000000000000 001 00 200 70 0\" in that representation it would take probably 3-4 64 bit integers which would be a total of 24-32 bytes, which btw you can store it in alot less than that,

    So that brings me to the next part



    multitude of different block types to begin with which from looking at the id


    they do not expend more than 3 numbers at the moment for the type of block in use, anything else is more of a property alocated to the type, and this will only aplly to selling and bying usaly or what some fucntions do


    those 3 \"numbers\" you speak of takes up most of if not more than one byte



    , then you still have orientation, and health.


    witch i did add into my estaments, youve must have read over them


    depending on how many orientations you need and how many health points you want you may need more than one byte just to store this



    Ok now to how you can actually store the ranges that you\'re saying

    1. You may or may not need to store the id of each individual block, honestly I wouldn’t, I’d just store the ID of the ship as a whole. If you did want 9 digits it would take 29-30 bits which gives you a maximum count of between 536,870,912 and 1,073,741,824

    2. The coordinates in computer graphics are normally single precision floating point numbers which take up 32 bits each and there is one for X, Y, Z but if this is a voxel engine we can actually infer the location based on the position within a chunk and the position of the ship as a whole and don’t need to store it directly.

    3. If you have no more than let’s say 3-500 different types of objects in the game you can store the id for it in 9 bits which has a range of 0-511

    4. Now the orientation, we don’t need every possible orientation so we\'ll just go with a reasonable number of 8 which would take 3 bits giving us 0-7 as the range of numbers

    5. The health if you want 0-200 range on that it would take 8 bits if your fine with 0-127 then you could do it in 7 bits

    6. Armor if you\'re wanting a maximum of 99 which is almost complete armor then you would need 7 bits again but we can actually infer the amount of armor from the block type so we don’t really need to store this either

    7. For all the optional \"flags\" things like visibility, activated, etc. you could use 1 bit per thing like this 1 bit gives you either 0 or 1 which can be represented as false or true.

    8. All the other properties of a block like, price, weight, power, light, guns and other various things wouldn’t be stored per block. Some of it would be inferred in code or settings, and other would be stored at the global level or ship level not per block.



    Now, if you add all that up you get between

    28 bits if you don’t store the id, or position, using a health range of 0-200 and have a flag for visibility and activated. Now 28 bits = 3.5 Bytes of data which is far less than you storing it the way you where as a long number but is still 3.5 bytes

    On the other hand if you store everything then you would have 155 bits. 155 bits = 19.375 bytes of data, which again is far less than what it would take to store it your way but is far more than 1 byte and still very inefficient.



    Now you can pack all of that down into less than 28 bits by using various things like RLE on each chunk and various other things again I’ve never built an engine like this but I understand the premise of a voxel engine but I do understand quite well how a computer\'s memory works and how numbers are represented.
     
    Joined
    Jul 10, 2013
    Messages
    46
    Reaction score
    0
    • Legacy Citizen 2
    • Legacy Citizen
    I think the general answer is no due to the size of the ship and memory it woul take up on your pc, may have to consider recusing the size... alot...
     
    Joined
    Jul 5, 2013
    Messages
    372
    Reaction score
    0
    The game can handle a ship that is partway in one sector and partway in another, but huge ships tend to eat up ram and mess up the game\'s code after a while.


    No, the game can\'t handle it. If you want to simply shoot a missile from 1 sector to other, it might translate off. Pirates can\'t even aim cross-sector. Navigation computer, or game itself won\'t show things that are over 1 sectors away. So if you\'re flying towards ship that is 5 sectors wide, you\'ll only see if after you come 1 sector length close to its core... and might end up stuck inside it...

    And the size scale is not exactly real-life meters. Since when were planets 200 meters wide (haven\'t looked on real measure, but that\'s roughly the disk size)? Deathstar is not size of a planet, it is size of a moon - more like 100 x 100 x 100 would be closer.