Underwater Transparency - Change in Visibility Behavior

This is insane !
Now, we can make a custom underwater effect !

Amazing! I already updated the Water transparency for Starlight World 2ā€™s swimming pool!

I like clear swimming water, because itā€™s easy to see swimmers below and very easy to see where you are swimming.

6 Likes

Useful update! But why not separate water transparency from the fog and give fog a customizable starting and ending value?

3 Likes

I applied the suggested transformation to revert to preupdate water transparency, but this caused my surface water to appear nearly completely opaque, where before it had a nice transparency.

It looks like this update only affected underwater fog transparency, and did not affect surface water transparency. Itā€™s not possible to revert to previous visuals because these two values are arbitrarily linked to one property. These really need to be two different values. If there is going to be aesthetic-breaking changes that require updates to fix, which is fine with me, then it would be nice if it was executed thoroughly and separated properly into two properties.

5 Likes

Is water supposed to render like this???
image

1 Like

I didnā€™t think that underwater viewing had any sort of performance implications.

When your camera is underwater and thereā€™s no transparency, are far away objects rendered? Also whatā€™re the sizes of these performance implications?


I believe this is from Robloxā€™s level of detail system with terrain and as of now I donā€™t think thereā€™s a way around it. It just helps with lag to render it with less precision the farther it is from the camera.

I think if youā€™re at graphics 10 it isnā€™t like that.

2 Likes

While the update is nice, itā€™s too bad the default was set to 1 and not 0.1 which is the equivalent of what it used to be. Shutting down servers on weekends is not what we want.

I like the update. The old WaterTransparency didnā€™t even worked for meā€¦


Am I able to make multiple rivers, for example, and set different transparency for the water?

2 Likes

Thank god this is now a feature.

Doesnā€™t seem like it. It affects all water in-game globally.

2 Likes

Pretty sad. They should implement an array property of this and we could like, select water?? Although it may be extremely hard to do this, it would be cool.

1 Like

With the new update, Iā€™ve noticed that water now has a very noticable color gradient from above water at the underwater fog distance. It happens even when no parts are under the water:


Setting WaterReflectance to 0 and WaterTransparency to 1 looks pretty dramatically weird:

Even if the underwater visibility distance has to have a limit for performance reasons, the gradient should be over a longer distance to be less jarring.

I find this issue distracting while playing and Iā€™m sure others do as well. Is there any chance of this getting fixed?

I also agree with @Zuki that itā€™d be better to be able to unpair the water transparency for above and below water. Since the update, I canā€™t make underwater terrain as visible as I want to from above water without cranking down the transparency really low, which makes the water look like air when youā€™re inside of it. I think other peopleā€™s suggestions of having a WaterFogStart and WaterFogEnd distance like the fog for air would help with this as well.

4 Likes

Since last month, Iā€™ve experimented a bit more, and I think another part of part of why the new water looks worse to me is because the waterā€™s transparency is now based on your distance from the surface of the water, rather than the distance to whatever is underneath the water.

This means that objects deeper underwater donā€™t look any foggier than than ones right under the surface:

Compare to before this update:

Iā€™ve also noticed that the horizon is a circular shape underwater, which looks better than the flat line used above water. I think that should be used on the surface as well:

The other consequence of using distance to the surface to determine transparency is that you can actually see through an infinite distance at certain angles, since how deep objects are is unrelated to their fogginess:

I think that most, if not all, of these issues can be improved upon without dramatic changes to the water rendering pipeline or making rendering significantly less performant1. The quality of the water shaders impressed me when they first released a few years ago, and still look pretty sweet today. I think minor tweaks along the lines of ones that I and others have mentioned would be enough to make water look better and feel more consistent.

1If someone understands how these shaders work better than I do, please correct me. XP

I know it probably would be better to write a feature request instead of replying to an older announcement, but I donā€™t have Regular status yet so I decided to continue this thread instead.

9 Likes

Iā€™m digging around trying to figure out how to achieve this effect.

I want water that looks clear from the outside but is cloudier than the default when you are in the water.

I would be nice to have two settings instead of combining them into one. The problem is that Roblox has no idea what scale my game is working at and so canā€™t make a good guess at this. I want to hand-tune it.

8 Likes

I know im a year late to this discussion, but I have added a thing like this to my game. Its done by checking if the players state is swimming and if the current camera is underwater. Yeah currently the underwater height is hard-coded, but that could be swapped out with a simple raycast or something.
Here is the code:

local FogConf = require(script.Parent.FogConfig)
local player = game.Players.LocalPlayer
local Char = player.Character or player.CharacterAdded:Wait()
local Humanoid = Char:WaitForChild('Humanoid')
local camera = workspace.CurrentCamera

local IsInWater = false

Humanoid.StateChanged:Connect(function(old, new)
	IsInWater = false

	if player.Character then
		if new == Enum.HumanoidStateType.Swimming then
			IsInWater = true
		end
	end

end)

while true do

	local playerY = camera.CFrame.Y;
	if IsInWater then
		if playerY < -1 then
			workspace.Terrain.WaterTransparency = FogConf.Underwater_Water.Transparency + (FogConf.Underwater_Water.Decay_Per_380_Studs * (playerY / 380))
		end

	else
		workspace.Terrain.WaterTransparency = FogConf.DefaultWater.Transparency
	end

	wait(0.2)
end
2 Likes