How to limit lighting exposure on certain parts/characters?

I have a setup as followed:

The centre table contains two PointLights to achieve this setting:
image

This all works great until a player enters the circle, where they are engulfed by a wave of light:
https://i.gyazo.com/35e3ca52bcebd515a6f0c2eec8180244.mp4

Is there any way to prevent certain parts (in this case the player’s BodyParts) from this exposure?

I’ve tried using SurfaceLights and modifying the ExposureCompensation, however both prove unsuccessful.

Here’s a copy of the place if you would like to play around with it:

LavaLightingTest.rbxl (63.7 KB)

If you’re using Voxel lighting, you can use the property ExposureCompensation and put the value down.

You could use Region3 or part detection to see if the player is in the circle and use TweenService to put down the value.

The essentially disables the PointLight effect, so I unfortunately cannot do this:

Have you tried Bloom?

Setting a Bloom’s Threshold to 0 and reducing the ExposureCompensation slightly reduce this problem, but has little significant enough and also blurs the screen:

I don’t believe there is a way to do this currently (unlike GuiObjects which have their wonderful LightInfluence property). As far as I know, these lighting exposures are done by the Lighting engine and not enough properties or methods are exposed to void this. It’d be quite hard, or potentially impossible without warping the overall appearance of your location.

Don’t quote me on this, because I haven’t really worked much with Lighting recently.

1 Like

Think your best luck is wait for more phases of “Future is Bright” engine to come out and see if you have any luck.
Perhaps ask one of the engineers if they intend to do anything around you want.

1 Like

So I’ve figured a quick work-around to this:
Run through the character’s descendants; if the instance is a shirt, pants, body part, etc, then reduce its Color3 value to give a darker appearance:

for a,b in pairs(clone:GetDescendants()) do
	local prop
	if b:IsA("Shirt") or b:IsA("Pants") or b:IsA("ShirtGraphic") then
		prop = "Color3"
	elseif b:IsA("BasePart") then
		prop = "Color"
	end
	if prop then
		local h,s,v = Color3.toHSV(b[prop])
		b[prop] = Color3.fromHSV(h, s, v*0.5)
	end
end

This works for me as I have static clones within the circle, however if you’re having moving characters then it’s going to be a bit more tricky.

Hopefully a feature for this is introduced in the near future, else I’ll write up a feature quest.

2 Likes