How to do cel shading with atmosphere?

I recently noticed that north hill uses cel shading, but it somehow works with atmosphere, how ?

But yeah, basically how i could make cel shading work with atmosphere?, since it removes the fog values

(Was unsure if to put this on art design support or scripting support, there may be some code behind?)

You can’t.

Roblox doesn’t have it’s own cell shading shader and so you can’t use cell shading with fog.

The game probably uses an inverted sphere mesh with textures. I also played the game myself and there is no cell shading?

1 Like

there is , you can notice it way better in dark spots mostly, i’ll edit this message with some images

I tried again but really I can’t see it. Maybe because I’m on mobile and it only works on pc?

1 Like

I don’t think it is that intense, and maybe it doesn’t work on mobile, but it should look something like this

See that smooth shadow on the head?

and also

At night, it looks like this

I see it now!

In my opinion, it just looks like a well made skybox and a lot of depth of field to give the effect of fog. Maybe try doing that with the addition of trees. Because you can’t have atmosphere density and fog at the same time in Roblox.

1 Like

I’ll try that, but something that concerns me , is that, that only would work at high graphics, while the shading seen on north hills works at all graphics

I was on low graphics and did not notice such shading.

1 Like

i got it working, don’t know, i still have to learn what this does, but i used this script, It may not be 100% accurate, but i got the smooth shadows and similar dithering i wanted :

-- Key details: Reccomended intensity is between 1 and 50. Anything above will result in general grossness
-- Have fun!
task.wait(.1)
local FrustrumDistance = 1
local part = Instance.new("Part")
part.Name = "DITHERING"
part.Parent = workspace.CurrentCamera
part.Anchored = true
part.CanCollide = false
part.CanQuery = false
part.CanTouch = false
part.Transparency = 1
local sgui = script.DitheringGUI
sgui.Parent = part
sgui.Adornee = part
sgui.Face = Enum.NormalId.Back
local cc = script.ColorCorrection
cc.Parent = game.Lighting
game["Run Service"]:BindToRenderStep("Dithering", Enum.RenderPriority.Last.Value, function(dt)
	
	local intensity = math.clamp(script:GetAttribute("Intensity"), 1, 100)
	
	
	local cam = workspace.CurrentCamera
	
	local v2 = cam.ViewportSize.Unit*10
	
	part.Size = Vector3.new(v2.X, v2.Y, 0.005)
	
	part.CFrame = cam.CFrame*CFrame.new(-Vector3.zAxis*FrustrumDistance)
	
	
	
	sgui.ImageLabel.BackgroundTransparency = 1/intensity
	
	cc.Contrast = intensity
	cc.Saturation = -0.001*intensity
	cc.Brightness = -0.01*intensity
	
end)

image

Works with atmosphere and at all graphics (ofcourse high graphics looks even better), Just needs a few tweaks, i’ll leave the solution as open tho, in wait for a better solution, or atleast for a few days

Great job on finding a patch. Although, this still isn’t the effect exactly as it’s just placing an image in front of the camera at all times but still, good job.