Free Posterize/Dithering Effect

i honestly kind of forgot and that is an old version. You’ll have to experiment with it yourself unfortunately.

I got some settings you can try (ShadowMap/Future Lighting):
Frame.BackgroundTransparency = 0.01
CCE.Brightness = -0.8
CCE.Contrast = 90

1 Like

PSA for a potential issue while using this shader hack:
(Have not confirmed whether this is specific to my place or a universal issue)

If you have a large transparent object (e.g. a meshpart, beam, trail, particle emitter) and you turn your camera away from the centre of the object while the rest of the object is still visible on your screen, it will fail to render the object’s translucency and become fully opaque/very bright.


2 Likes

I mean, this is effect is hacky and that rendering issue does not seem to be something I can fix. Probably something to do with how roblox renders translucent parts or the colorcorrection.

Yeah it’s the unfortunate reality. I think the only way to make it a little better is to write a custom script that detects when certain transparent parts are off-screen and make them opaque!

reminds me of that one minecraft april fools prank. all this is making me think i should make a cruelty squad like game in roblox

hey wait i’ve actually been looking into Minecraft 3D recently! I almost forgot I made this post and it does in fact seem similar.

Hey man.
I know you’re busy with other projects, but I have something to tell you.

I’ve rewritten the entire code so it looks prettier (and modern) and has some features that you’ve never considered.

local Lighting = game:GetService("Lighting")
local RunService = game:GetService("RunService")

local camera = workspace.CurrentCamera

for _, effect in ipairs(Lighting:GetChildren()) do
	if effect:IsA("ColorCorrectionEffect") then
		effect:Destroy()
	end
end

local colorCorrection = Instance.new("ColorCorrectionEffect")
colorCorrection.Brightness = -1
colorCorrection.Contrast = 100
colorCorrection.Saturation = -0.1
colorCorrection.Parent = Lighting

local part = Instance.new("Part")
part.Name = "ContrastPart"
part.Size = Vector3.new(49.15, 32.2, 0.001)
part.Transparency = 1
part.Anchored = true
part.CanCollide = false
part.CastShadow = false
part.CanQuery = false
part.Parent = camera

local surfaceGui = Instance.new("SurfaceGui")
surfaceGui.Face = Enum.NormalId.Back
surfaceGui.LightInfluence = 0
surfaceGui.Adornee = part
surfaceGui.Parent = part

local frame = Instance.new("Frame")
frame.BackgroundColor3 = Color3.fromRGB(128, 128, 128)
frame.BackgroundTransparency = 0.015
frame.Size = UDim2.fromScale(1, 1)
frame.Parent = surfaceGui

local function updatePartSize()
	local viewportSize = camera.ViewportSize
	local aspectRatio = viewportSize.X / viewportSize.Y
	part.Size = Vector3.new(viewportSize.X / 100, viewportSize.Y / 100, 0.001)
end

RunService.PreRender:Connect(function()
	updatePartSize()
	part.CFrame = camera.CFrame * CFrame.new(0, 0, -0.101)
end)

Hopefully, this should inspire you to continue with the project ;).

2 Likes