Jump to content

[1.7.10] Rendering enormous entities


PrototypeTheta

Recommended Posts

So I'm trying to render a ludicrously big entity. Approximately 350 blocks long.

 

I am pretty much at a loss on how to increase it's render distance high enough for practical use. I've tried setting the tracking range to 400 and I've increased the renderDistanceWeight. It's pretty apparent that I'm running into some other limitation (or I'm missing something very obvious) but I'm rather new to this and I'm clueless as to what it is.

 

 

Now the obvious solution would be to scale down the size of the model. But that's no fun now is it?

Link to comment
Share on other sites

Your entity is larger than the entire volume of world being loaded.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

Sorry, made a mistake, it's 280 blocks, not 350, I'm thinking of the wrong scale. Still completely ridiculous but at least it fits now with some degree (albeit very slight) of reason

 

That's still 17 chunks long.  The loaded size of the world is typically only 15 or so.

Even at the maximum render distance (21 chunks) your entity is still 83% of that full diameter.  There is no way in HELL you are going to make this work.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

You could say that entities are capped by two things:

 

1. If they are loaded to world.

2. If they are being tracked.

 

1st one won't allow you to see entities beyond chunks loaded by server (and sent to client) simply because those chunks and their entities are not there (not loaded).

So yeah - loading is something close to 15 chunks (about 256 blocks I think).

 

2nd is a tracking cap, which is directly related to chunks being loaded - entity tracking is capped at 256 blocks (or something like that).

 

Now, one could ask if it would be possible to beat it?

You could load chunks manually and send them to clients manually. Solving 1st problem probably wouldn't require ASM (I am assuming that since in vanilla itself there is a situation, often when you have lag, when you move you don't load new chunks, but old stay far away - logically you could simply load/send ones far away).

 

The real problem is with 2nd since it is capped internally - you can track it back from EntityTracker#addEntityToTracker to stuff like #setViewDistance and other distance-related stuff which is directly capped by 15. So yeah - it will require ASM to override shit-ton of stuff - almost impossible to do that. :)

1.7.10 is no longer supported by forge, you are on your own.

Link to comment
Share on other sites

Perhaps the best option would be to cut it to half the original size (which was oversized anyway). 175 blocks is still big but we've gotten stuff in this size range to work fine in the past. An extra 50 blocks or so on the render distance (which is apparently 200 right now but I'm not sure I believe that) would make it mostly bearable. It also looks like I'd have to make the texture at half scale anyway, don't fancy using 8k textures.

 

I think for now I'll take the cheap (sensible) option, hopefully it'll still function fine at a reduced size. I can only really handle banging my head against one "impossible" task at a time.

 

Might come back to this problem later though.

Link to comment
Share on other sites

You could split the entity into multiple smaller entities.

 

That sounds like it could work, the model is already structured so it can be easily cut into segments. Might get a bit complicated dealing with the collision but it's certainly possible, just a bit too big of a job to be done now.

 

Cutting it into two, with one entity at either end should do it right?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Update your AMD/ATI drivers - get the drivers from their website - do not update via system  
    • As the title says i keep on crashing on forge 1.20.1 even without any mods downloaded, i have the latest drivers (nvidia) and vanilla minecraft works perfectly fine for me logs: https://pastebin.com/5UR01yG9
    • Hello everyone, I'm making this post to seek help for my modded block, It's a special block called FrozenBlock supposed to take the place of an old block, then after a set amount of ticks, it's supposed to revert its Block State, Entity, data... to the old block like this :  The problem I have is that the system breaks when handling multi blocks (I tried some fix but none of them worked) :  The bug I have identified is that the function "setOldBlockFields" in the item's "setFrozenBlock" function gets called once for the 1st block of multiblock getting frozen (as it should), but gets called a second time BEFORE creating the first FrozenBlock with the data of the 1st block, hence giving the same data to the two FrozenBlock :   Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=head] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@73681674 BlockEntityData : id:"minecraft:bed",x:3,y:-60,z:-6} Old Block Fields set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=3, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} Frozen Block Entity set BlockState : Block{minecraft:black_bed}[facing=east,occupied=false,part=foot] BlockPos{x=2, y=-60, z=-6} BlockEntity : net.minecraft.world.level.block.entity.BedBlockEntity@6d1aa3da BlockEntityData : {id:"minecraft:bed",x:2,y:-60,z:-6} here is the code inside my custom "freeze" item :    @Override     public @NotNull InteractionResult useOn(@NotNull UseOnContext pContext) {         if (!pContext.getLevel().isClientSide() && pContext.getHand() == InteractionHand.MAIN_HAND) {             BlockPos blockPos = pContext.getClickedPos();             BlockPos secondBlockPos = getMultiblockPos(blockPos, pContext.getLevel().getBlockState(blockPos));             if (secondBlockPos != null) {                 createFrozenBlock(pContext, secondBlockPos);             }             createFrozenBlock(pContext, blockPos);             return InteractionResult.SUCCESS;         }         return super.useOn(pContext);     }     public static void createFrozenBlock(UseOnContext pContext, BlockPos blockPos) {         BlockState oldState = pContext.getLevel().getBlockState(blockPos);         BlockEntity oldBlockEntity = oldState.hasBlockEntity() ? pContext.getLevel().getBlockEntity(blockPos) : null;         CompoundTag oldBlockEntityData = oldState.hasBlockEntity() ? oldBlockEntity.serializeNBT() : null;         if (oldBlockEntity != null) {             pContext.getLevel().removeBlockEntity(blockPos);         }         BlockState FrozenBlock = setFrozenBlock(oldState, oldBlockEntity, oldBlockEntityData);         pContext.getLevel().setBlockAndUpdate(blockPos, FrozenBlock);     }     public static BlockState setFrozenBlock(BlockState blockState, @Nullable BlockEntity blockEntity, @Nullable CompoundTag blockEntityData) {         BlockState FrozenBlock = BlockRegister.FROZEN_BLOCK.get().defaultBlockState();         ((FrozenBlock) FrozenBlock.getBlock()).setOldBlockFields(blockState, blockEntity, blockEntityData);         return FrozenBlock;     }  
    • It is an issue with quark - update it to this build: https://www.curseforge.com/minecraft/mc-mods/quark/files/3642325
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.