Cell Shaded Clouds. How?

Would anyone happen to know a way to have cell shaded volumetric clouds? Basically trying to use the volumetric cloud setup, and then use post process on the volumetrics to cell shade them.

Normally Cel-Shaders won’t work with Post Process Volumes or with volumetric fog. So you can’t really use volumetric clouds with Cel-Shaders.

BUT you can still make clouds have a volume. I would suggest using this [guide from Ryan Brucks][1] on baking noise (because noise is VERY expensive but textures aren’t) for making noise textures and using tessellation to make smoke clouds from meshes, like in Ryans guide. If you change the color and use a different more cloudy mesh you already have clouds.

For the Cel-Shaders I would suggest using this [guide from PrismaticaDev][2]. He also has an active discord channel, where you could ask if you need help.

I made a quick and dirty example, I bet you could get amazing results if you played a bit more with it:

Hey, Thanks! This works pretty well. Only issue is the cell shader doesn’t seem to work with SkyAtmosphere :confused:

The cel shaders I know work with the diffuse color. Volumetric clouds, sky atmosphere, and the exponential height fog are post-processing effects and do not have diffuse color. So the normal ways to create a cell shadow look don’t really work. But there is probably a way to make it work.

You could also just use a skydome or something similar that works with the cel shader and not bother with the fancy ray marched effects.

I found a way. [YourSandbox made a cel shader that doesn’t use the diffuse color, just ignore the pixelated filter and your cel shader is good to go][1]. It obviously also works on exponential heighfog and the sky atmosphere.

I hope it helps

It works great! Have to do some tweaking but it’s a huge step in the right direction.

Hello, could you talk more about how you achieved the look of the clouds in the image you posted? I’m looking to create something similar- I’m already using a cel-shader based of PrismaticaDev’s work. I’m not able to find the link to Ryan’s guide that you’re referencing. Sorry to dig this back up, but I think you’ve made some very nice looking cel-shaded clouds and I’d like to know how :laughing:

Sure, it has been a while. I think all I did back then was use Cel-Shader from PrismaticaDev , but I changed the scene texture to PostProcessingInput0 since Clouds and Atmosphere are a post-processing effect.

I recreated the effect with this simple material. It probably works differently than how Prismatica does it. I spent very little time on it, so when in doubt, refer to his solution.



The idea is to remove the brightness or ideally shadows from the scene color, give the brightness color bands, and apply the modified brightness back to the scene color, giving it a cell-shaded appearance.

I hope it helps. Be careful, as UE uses bloom, exposure, and other effects to also affect the brightness afterward, so it may be nicer to disable them or dial them down.

Thank you for the reply! Sorry I meant more could you explain this part:

BUT you can still make clouds have a volume. I would suggest using this [guide from Ryan Brucks][1] on baking noise (because noise is VERY expensive but textures aren’t) for making noise textures and using tessellation to make smoke clouds from meshes, like in Ryans guide. If you change the color and use a different more cloudy mesh you already have clouds.

I have the cel-shader working similar to what you posted/what prismatica has. Do you have an example of the making noise textures and using tessellation or a link to the Ryans guide you are referring to? Was that Cloudy mesh part of the guide/using the noise and tessellation?

I believe you’re referring to this article: Getting the Most Out of Noise in UE4 By Ryan Brucks. This article describes how to bake volume textures in Unreal Engine (UE).

The method is quite straightforward. You create a blueprint that includes a Render Target and a Material. On the event Tick, the RenderTarget is cleared and then draws the Render Target from your material. When you place this in a level, it will already start drawing on your Render Target. You then create a static texture from your Render Target and from that a Volume Texture.

The material can be anything you want, but if you’re aiming to create a volume texture, you’ll need to fold your 3D texture using EncodeVolumeCoordinates (UE provides several examples that you can find using the Reference Viewer). For instance, for a 128x128x128 Volume Texture, you set your XY Frames to 16x8 and your Render Target Resolution to 2048x1024. If you want other sizes, they should adhere to the power of 2 rule. You use your EncodeVolumeCoordinates for your noise node of choice, but ensure to enable tiling and have its scale and Repeat Size identical (unless you’re doing unusual stuff with the coordinates). Your material has to be an AlphaComposite if you want to use the Alpha Channel, and your Alpha will get inverted, so you have to invert it back in the material.

For testing, I also recommend temporarily replacing the tiling coordinates with repeating World coordinates, as shown here, so you can see how your material looks and if it repeats properly.

On how to use your 3D noise texture to make cloudy meshes, there’s a bunch of guides out there. Here are some form my bookmarks, but they are old there’s probably better ones by now: Hugo Chenin, Sea of Thieves, Paul Neale.

I hope this helps. It may seem daunting at first, but it’s really not.