Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[1.18.2] Modify minecraft Fog effect to create a "toxic mist"


Socrate
 Share

Recommended Posts

Posted (edited)

Hi, i'm trying to create a sort of  toxic "mist" in minecraft wich will be cleared by a machine. To create my mist I modified minecraft RenderSystem using the setShaderFogStart and End and setShaderFogColor methods and the EntityViewRenderEvent from forge to update it. The final idea is to make the block create  a protective sphere where there is no toxic mist. What I've done from now is to apply the toxic fog effect to the player when he leaves a sphere i defined (center : 10 100 10 in the World, radius = 10 blocks ). Here is how it looks :

https://imgur.com/WdAhF3D (inside the sphere)

https://imgur.com/PcluWul (outside the sphere)

 

The reason why i'm posting here is because I have a problem that I can't solve : as you can see in the picture 1, when inside the fog clear zone the player can see clearly through the sphere's border wich makes no sens as the outsides of the sphere is supposed to be toxic. What I would like to do is to make the outside of the sphere look the same as when we are outside of it (I hope what I say makes sense, English is not my native language ), how can I achieve that ? Maybe modifing the fog center effect to be centered on the sphere center (10 100 10 ) instead of the player itself ? Is it possible ? Do you think about an another way accomplishing what i descibed ? 


I really hope what I said made sense and that I made a correct description of what i want to accomplish
Have a nice day !

 

 

Edited by Socrate
Link to comment
Share on other sites

  • Socrate changed the title to [1.18.2] Modify minecraft Fog effect to create a "toxic mist"
Posted (edited)

I don't know much about this, but I do know you can't use the fog for this.

The fog is designed to limit the player's view distance, e.g. if they are in lava or water, but mainly so the game doesn't have to draw all the way to "infinity".

This means all the fog rendering code is based on the distance to camera. It's an illusion, it's not based on something physically in the world at some position.

 

Spit balling:

I would guess you want something more like how clouds are drawn? But again these are partially an illusion.

They are procedurally generated rather than being physically in the world, but they are kind of drawn at a location.

You can use forge's RenderLevelLastEvent to draw over the world. Look at LevelRenderer.renderClouds() for how clouds are drawn.

 

Edited by warjort
Link to comment
Share on other sites

I think you need a combination of both. Fog for when the player is inside the mist and a custom rendered "thing" for when they are outside. You can probably use RenderLevelLastEvent for that or a BlockEntityRenderer.

Link to comment
Share on other sites

1 hour ago, diesieben07 said:

I think you need a combination of both. Fog for when the player is inside the mist and a custom rendered "thing" for when they are outside. You can probably use RenderLevelLastEvent for that or a BlockEntityRenderer.

Okay thank you :)  that's what I was thinking too, so I need a way to hide the zone where there is the fog (but not visible cause the player is not inside ) from the player outside of when he's outside of the fog ?
Could you explain a little bit more precisely how to use the RenderLevelLastEvent or the BlockEntityRender ?

Link to comment
Share on other sites

RenderLevelLastEvent is just an event like you used EntityViewRenderEvent.

The event is fired after all the other renderering has been done, use it to draw what you like.

BlockEntityRenderer is used to manually render block entities, like drawing a chest opening and closing. I don't know how it could be used for this?

Link to comment
Share on other sites

Posted (edited)

So if I understood correctly, I should create a new BlockEntity like a Foggy green block and set it on the surface of the sphere using RenderLevelLastEvent or BlockEntityRenderer ( to hide the outside of the protecting sphere ) ? And the green foggy block should be translucid but not transparent and make the player able to go trough it like a phantom block ?

Edited by Socrate
Link to comment
Share on other sites

20 hours ago, Socrate said:

So if I understood correctly, I should create a new BlockEntity like a Foggy green block

this is one option you have

20 hours ago, Socrate said:

and set it on the surface of the sphere using RenderLevelLastEvent or BlockEntityRenderer

no, RenderLevelLastEvent would be one of the other optins you have
inside the BlockEntityRenderer you need to render the stuff (sphere) you want

20 hours ago, Socrate said:

And the green foggy block should be translucid but not transparent and make the player able to go trough it like a phantom block ?

yeah if you want that the player can see the source of the sphere

Link to comment
Share on other sites

29 minutes ago, Luis_ST said:

this is one option you have

no, RenderLevelLastEvent would be one of the other optins you have
inside the BlockEntityRenderer you need to render the stuff (sphere) you want

yeah if you want that the player can see the source of the sphere

Okay thank you a lot for your help ! So either I create a BlockEntity and set it in a sphere shape using the BER or I use the RenderLevelLastEvent to draw something ? I don't really understand how the RenderLevelLastEvent

For you wich option is the best ?

Link to comment
Share on other sites

48 minutes ago, Socrate said:

Okay thank you a lot for your help ! So either I create a BlockEntity and set it in a sphere shape using the BER or I use the RenderLevelLastEvent to draw something ?

yeah

49 minutes ago, Socrate said:

I don't really understand how the RenderLevelLastEvent

not sure whats the question

50 minutes ago, Socrate said:

For you wich option is the best ?

depends on your purpose and which one you prefer

Link to comment
Share on other sites

Quote

I don't really understand how the RenderLevelLastEvent

For you wich option is the best ?

If you don't understand how RenderLevelLastEvent would be used, it probably means its not a good solution for your problem?

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
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.

 Share



×
×
  • Create New...

Important Information

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