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:
How It Looks With Water Terrain:
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)
- InvisibleWater Terrain Material - Feature Requests / Engine Features - DevForum | Roblox
- Decouple Water and Terrain - Feature Requests / Engine Features - DevForum | Roblox
- Water Material for BaseParts - Feature Requests / Engine Features - DevForum | Roblox
- We need water as a material for BaseParts - Feature Requests / Engine Features - DevForum | Roblox
- Make Terrain water a placable brick - Feature Requests / Engine Features - DevForum | Roblox
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)
That’s all I had to say, thank you.