Hello there! I hope you are feeling well today. I wanted to say that as a Roblox developer, it is currently too hard to create a custom water block and for sure many of you could agree with me in terms of the following problems:
General Problems:
Water terrain lacks a lot of features like the ability to change the fog color and distance underwater. (At this current moment WaterTransparency is the one affecting it and complicates things)
Water terrain literally is just one and you cannot have multiple bodies of water. This limits things when you need a body of water to have 0 waves and with a different color.
Water terrain when surrounded by other terrain materials looks kinda ugly because of those triangles, wedges, or whatever they are called.
You have to use ReadVoxels to know if a position is inside water and it isn’t so accurate in caves with water.
You cannot even move or resize the water terrain around as you would do with any part.
Terrain occupies a lot of memory.
There is nothing in Roblox that could make a custom water block look just like the water terrain. In other words, your texture will have 0 reflections, no water distortions, and will be totally flat if you don’t use the new bone feature to deform meshes and simulate waves. (Not matter how much optimization you put into making waves with bones, you should not be animating anything with Lua as far as I know, it would be better for the engine to do it instead of Lua wasting time in animating water)
You currently have to literally script the whole swimming system all yourself and use a combination of Constraints, disable certain humanoid states, and change the humanoid’s current state to swimming. You also have to check if the player’s head is already on the water surface, else they could literally swim out of the block. You have to disable the Constraints once they are out of the block and turn back on all the disabled states. (In other words, is just too much work, and I wonder why would every developer have to go through the same exact thing when the engine should literally offer it to us).
Personal Problems:
I managed to make a custom water block, but this one doesn’t look like the best thing ever. How It Looks With Custom Water Block:
The reason why I am using a water block is that I have levers that you can pull to raise the water level and reach the other side, something that you can’t literally do with water terrain without sacrificing performance or making quick water fill with no rising animations.
I have a combination of Water Terrain and my Custom Water Block, the average player won’t care at all about it, but I like having it all matching together and looking good. (Water Terrain was used to make the sea surrounding the land, some lakes, and waterfalls; however, the custom water block is used when I have to raise/lower the water level.)
If I want to add an underwater effect I have to check for water terrain using ReadVoxels to know if their camera is underwater and for the custom water I have to check if the Camera’s position is in the block.
These are some posts that were made a long time ago about adding a water block/material:(They are different however because they literally don’t say half or more of what I have said here)
If Roblox is able to address this issue it will help me a lot because:
It will save a lot of time at the time of designing the look of the water.
There will not be a need of scripting your water system to make your player swim in it.
We could have water physics in a block.
We could have different bodies of water. (For example, one with no waves, another that is light green, and another that you can’t see so much in it)
I could raise/lower water. (Changing its position and size)
I will just quit water terrain as it takes a lot of memory and you can do barely anything with it. It could increase game performance too as I am using blocks and I will be able to disable waves in certain of them.
Proposed Solution:
An Instance of type WaterBlock: (Should be considered a BasePart too)
Properties:
Events: PlayerEntered → Triggers when a player starts swimming in the designated water block. PlayerLeft → Triggers when a player stops swimming in the designated water block. Touched → Triggers like the default Touched event when something touches the block. (Useful for effects)
I really want a water material that I can use on parts in Roblox because terrain is so difficult to work with.
Terrain is also limited to a 4x4x4 stud grid which means you can’t place water inside let’s say… a tiny swimming pool or a bathtub because it will clip through the mesh.
Terrain water is very large and doesn’t fit in small areas.
For games that load maps with water, you need a script that converts invisible parts to terrain water and entering the water also forces your character to enter a swimming state (even if you disable all states it still causes very buggy behavior).
I recently made a swimming pool map that needs to be loaded in when a round of a game starts.
I didn’t want to use terrain water but it’s the only water that looks good.
I didn’t want the player to be able to swim in the water and instead just be able to walk underwater, but terrain water forces swimming state on humanoids.
My work around was writing a script that disables all swimming-related states of player humanoids but this resulted in extremely buggy and glitchy behavior for whenever the player character spawned underwater.
I would greatly appreciate if Roblox added a water material for parts.
And you can’t make big bodies of water using the terrain, The lag is insane. I remember loading a game took about 3 minutes because of the water terrain ocean, without it I loaded in instantly.
I 102% agree with this post as my biggest pain in Roblox is the water terrain.
Water terrain was probably designed with the intention of being terrain: a decoration and nothing else. And by decoration I mean small lakes or pools of water. Say bye bye to your computers performance when you want to make a realistic boating simulator with water terrain because it take up so many resources.
A feature to customize the look of water completely (not just color and transparency) somehow would also be nice. This would move away from that one Roblox style that every game seems to have because we are forced to use the same terrain geometry.
It would be great if Roblox would implement a checkbox, or some form of toggle, for low quality water, and the difference would be something like what is shown in the two pictures. That would help a lot with performance and reduce the required effort for people who actually want it
There should also be an option to adjust the direction waves go. Overall, we need better water, and indeed, water parts. Terrain is just way too laggy and time consuming, but also, it lacks diversity (general terrain tool problem)
We also need to be able to color individual parts of our water bodies, for example:
Sewage Water is green, I want to color it green
Pool Water is light blue and clear, I want to color it accordingly
BUT I CANT!
Why do we not have a terrain coloring tool?
Seriously, why isn’t Thai already implemented?
It’s hard I know, bit they already have Water Terrain, why can’t they give us this, it’s almost a copy-paste
I really would benefit from this. The current water also lacks wave physics meaning that any part on the water would not react to waves and just float there as if wave size was 0. The waves are only a visual effect - for physics calculations they use a square water hitbox. It really starts to suck when wave size is set to max.
I have achieved custom water physics using mesh deformation (link)
But the problem is visuals - it looks really bad compared to the terrain water.
This kinda has me stuck for making ocean games - I could get visuals for sacrificing physics or physics for sacrificing visuals.
It would be awesome if we had this as a material and/or part.
This is still a much needed feature! There’s soo many games that take place on the seas for which the current water is useless even though they rely on water most…
It’s currently impossible to create performant water that extends to the horizon, it takes too many bones / updates and is complicated to code- should be on GPU.
Additional important features:
Water volumes should not have a 2048 max size like parts, so that you can create a near-endless ocean.
Waves should not have height limits. The water volume could have the water centered vertically so you can resize it to fit larger waves (so it’s contained in the object bounds).
Waves should be configurable by regions (volumes) so that you can have areas with larger waves (storms).
Function that returns the water height at a certain point (for custom boat float physics)
Wave layers should be configurable (big waves vs smaller waves on them).