QoL, MipMaps, and Implemenation Features for PBR Materials

Currently, resources for creating lively objects in games in Roblox are limited compared to other platforms. Substances like water, portals, spell shields, toxic waste or animated paint substances are some of the most lively things in a level, empowering the situation. But currently this is hard or not realistically achievable for many prime use cases.

As a developer, I want a system that allows me to provide different images per Mip level on PBR Materials, as well as the ability to use basic modifiers or passes on material textures through the material service pipeline to produce novel, native, realtime results.
Disclaimer: material service and PBR materials do not exist yet per say, but Roblox is investigating them and I wish this feature (set) to be considered while they’re working on it.

This would improve the developer situation as the next step to the universalization of what a part can become, in the nature of Avatar Evolution and the Future is Bright releases. Ultimately, this is the philosophy of “giving power to the developer”, which is one to keep Roblox competitive and allow for more lively and significant objects than ever before.

For the leading use case, a gameplay-altering body of water. That is, one that honours equality of gameplay at all quality levels. This is not conventionally achievable with terrain water, where as mentioned[1] cross-platform limitations prevent the underwater shaders.

The baseline being:

combining two scrolling mipmap textures and passing that to an alpha test

Quite clearly, and immediately, this opens up entirely new doors to what developers could do. But as I explored the forum I realized this was even more a topic standin for a variety of requests concerning the convergent matter of material service.

Although Avatar Evolution has allowed us creators to go from right-triangle vertex calculations to fully dynamic smooth procedurals concerning UGC water in mere months, with stunning examples like tyridge77’s Water Implementation and Quasiduck’s Water Implementation, even featuring seaspray, there is still quite a lot power to give forth to developers for creating dynamic materials like this.

Sidenote!: Material Service appears to be the internal term for this series feature, as defined on the forum by @convexrumbler it encapsulates the intending full-featured PBR upgrade partially alluded to and or implemented in the Avatar Evolution, Dynamic Reflection Probes, SurfaceAppearance, and FIB3 releases. To this I am wholey regarding. (Please correct me if I am wrong)

Across the section there have been repeated requests for consideration concerning Material Service in some form or another.

To err on the side of caution it must be made clear: news of material service is generally secondarily sourced, with mention of aspects and scope release-centric: the overarching narrative goes quite unmentioned, though for reasons that become clear.

Context: The Post-Processing Barrier:
For post-processing shaders a clear technical explanation of the situation was provided [2].
This explanation as to why PostEffects is as far as we can go (no custom shaders) is still relevant today apparently (Oct '20), not only is support for post-processing not to be counted on (Nov '18), but it undesirable. From over a dozen recent posts (2018-2020) the jist is that this limitation still stands; UGC post-processing cross platform is still not possible. PostEffects are exclusive.
Contrarily, PBR specular, a main challenge (Aug '18), seems to have made progress to the point of release at least in the form of SurfaceAppearance Instance support. There were also two developer posts that I read stated Graph-Based Shaders are not completely out of consideration just yet.

Though PBR Materials are clearly in ongoing experimentation (Hackweek 2020: layered procedural texturing, Tileable Material Library, Real-Time Texture Synthesizer, Hackweek 2019: “Studio Distance Function”, Hackweek 2018: “Shading”), suggesting potentiality to many feature requests I have observed, there is no mention of material service as a unified body developers could inform reception or concerns with beyond the SurfaceAppearance Q1 implementation on the roadmap, with the most recent post (3/22/21) only assuring of a request like Custom Surface Materials in the continuation of the roughness, normal maps, and metalness components in the limited application of non-repeating meshpart texturing through SurfaceAppearance Instances.

As aforementioned on the forums there has been numerous requests for both Quality of LIfe features and implementation features in recent years surrounding material service, here a best-comprehensive collation:

Color3 Property See: Color3 Adjust
Transparency Property (for each SurfaceAppearance component) See: Component Intensity
StudsPerTile and OffsetStuds Properties See: SurfaceAppearance Tiling request
Static and Live Texture Manipulation See: SurfaceProjection, See: Texture Blending Request
Graph Based and Computational Materials See: Custom Surface Material Shaders

Topic usecase:

The ability to devise and apply seafoam textures over the baseline water surface via Layering/Manipulation, as with white caps and breakups near the shoreline, and then have vertex paint hue underwater surfaces via a depth input through some means of a Computational Material filter (on the physical geometry once) would make for arguably the best cross-platform aquatic situation known to man. And it would be marvelously extensible.

Take two copies of a noise texture someone could make in paint.net and feed that into a compositor, using texture offsets to have them scroll to create a Moire pattern and then apply an alpha test, and you have yourself that shrinkwrap-shine water! Have varying levels of contrast in the texture to get a distance effect filling in the various MipMap slots and it creates the illusion of sunshine at an incident 20 degree angle. It all comes together.

Old technical-visual tricks go a long way and are the perfect approach for mobile:
(and always strike a balance between resource and savviness!)

This kind of approach is a job perfectly suited for developers, who are then free to displace buoys, have it crash up on shores, or rise and lower with the tides as they see fit. Enhanced considerations for material service could really span the seas.

diversified use cases:

Color3 support alone would enable unprecedented improvement in delivery time, experimentation and data resourcing. Transparency brings a similar technical light, but expands it into multiple visual dimensions.
StudsPerTile and OffsetStuds make texture scrolling realistic and alleviate woodgrain confoundances.
Texture Manipulation, Including Layering and Decaling (by conventional definitions, not the Roblox Instances!) makes racecar decal jobs seamless, customizable, make froth or even vertex painting for undersea surfaces (a technical, mobile friendly trick) a breeze. Transitions between cubemaps for skyboxes.
Graph Based materials would satisfy a single popular use case, NoShade, as well as so many more, serving to establish in some form or another node based material production, which the platform is uniquely deprived of.

(Please keep in mind this is just a collation of interests. I was working on limited information on the status of material service itself. The frequency of repeats, unique technical conventions, the difficulty of finding the full variety of requests and duplicate-checking would-be personal suggestions were all motivating concerns before creating this list. I intend to keep the post updated and comprehensive.)

This ice would be possible with any configuration permissible of a NoShade like substance or a system featuring a single onetime alpha test!:
The best we could currently feature would be a ridiculously high polygon neon meshpart with a grey tint.

Video equivalent of intended procedural result example (onsite blog site uses OpenGL 2, which is not device agnostic):

And just a technical plug for the implementation:

In closing:
Providing developers the ability to have different textures per Mip level for custom PBR Materials, and a means of compositing and filtering in realtime would drastically enhance virtual-world possibilities. If Roblox were able to incorporate any of this into consideration, it would improve my development experience because it would enable me to take advantage of a highly performant, quality means of live texturing. Cross-platform gameplay permissive of aesthetic rendering features, clear and tropic!

And though these PBR materials do not exist yet, and material service is only making quiet, partial entries, this is all up for consideration, and I hope I have shown a comprehensive developer perspective on what might be asked of or aspired by for future technical resources.

Indexed Links:

[1]: Post-processing effects - #33 by zeuxcg

[2]: Post-processing effects - #33 by zeuxcg

(to be appended or altered as necessary)
Last updated 3/23/21.


This is one of the most comprehensive and well thought out feature requests regarding materials, shaders and PBR that I’ve seen.

I’d love to hear what any rendering engineers have to say, if any are lurking around :slightly_smiling_face:

(personally, I’d love to see more tools for stylising made available, such as nearest neighbour filtering, flat/toon lighting and unlit materials, as well as more tools for tweaking lighting in general such as tonemapper configuration, the ability to prevent lights from casting specular highlights (for imitating bounce lighting from surfaces), orthographic light sources and skybox materials (for imitating the sky and sunlight).