ALTIMA OFFICIAL DOCUMENTATION
SHADER — SETUP & USAGE GUIDE

ARLitToon is a lightweight, full-featured anime / toon-style custom shader for VRChat avatars and particle effects. Optimized for illustration-like and cel-shaded expression, it is a general-purpose toon shader specialized for character avatars, avatar accessories, and effect creation.

BOOTH -ALTIMA- https://altima.booth.pm/

PARTICLE COLORDISSOLVESOFT PARTICLESHDR EMISSIONRIM LIGHTAUDIOLINKGLITTER / SPARKLEOUTLINE / SWEEPMATCAP ×3TOON SHADOWFAKE SHADOWRIM SHADEBACK LIGHTDISTANCE DARKENDITHER FADERECEIVE SHADOWTEXTURE LAYERLIGHT LIMITSPECULAR REFLECTIONDISTANCE FADE
SCROLL
TOON SHADER FOR VRCHAT FX

This is the English edition of README.md, generated at release time by translating the Japanese README.md (the canonical source) as of version v48_GUIr0. The Japanese README remains the authoritative document. For the License (Terms of Use) section in particular, the original Japanese text is provided alongside the English translation and prevails in case of any discrepancy in interpretation.

SEC. 01 — SETUP

Getting Started

// overview, file structure, requirements, import

Overview

Rather than physically-based realism, ARLitToon is optimized for illustration-like and cel-shaded expression. Particle color integration, dissolve, soft particles, HDR emission, and rim light are all built in as standard.

Version (Changelog)

Versions are written as integers without decimal points, as v{shader version}_GUIr{GUI revision}. The shader version (the number after v) is based on _ShaderVersion in the shader itself ARLitToon.shader, and the GUIr number is the revision of the GUI (ARLitToonGUI.cs). You can check the current version in the material Inspector header (✦ ARLit Toon ✦ v48_GUIr0). This history lists only the changes of each version. For how to use each feature and its setting values, see the sections above.

v48_GUIr0 Added a 3rd Matcap and a mask for the rim light.• Added a 3rd Matcap.• Added a mask to the rim light.• Added Rim Shade (darkens the edges).• ⚠️ Changed the default of Fake Shadow Texture's "Auto Fallback" to OFF (always show the drawn shadow).• ⚠️ In the Fake Shadow bake tool, the default of "Turn casters' Fake Shadow Mesh off after baking" is now ON.• Made the Fake Shadow bake tool easier to use.• Glitter's mask can now use the alpha of the Emission Map.• Added "Mask with Emission Map alpha" to Emission and AudioLink.• Fake Shadow Mesh's "Cast Distance" now accepts negative values (-2 to 0).• The "Animatable properties" list at the bottom of the Inspector is now a box you open and close by clicking its title.• Added a "Web" button to the right of the help toggle tab at the top of the Inspector.• Added warnings that prevent Shared Mask mix-ups.• ⚠️ Revised the Terms of Use (2nd Edition, applies from this version).

v47_GUIr0 Shadows can now be stacked in multiple tiers, and you can choose how the shadow direction is decided.• Shadows are now "pseudo shadows" (Pseudo Light, default 0.5).• Shadows now also apply to ambient light (always on; there is no setting).• ⚠️ Changed the default of Receive Shadow (receive cast shadows) to OFF.• Added the 2nd and 3rd shadow.• You can now tint the shadow boundary (Shadow Border Color / Range).• The shadow color now carries the base color.• Help (descriptions) can now be hidden all at once.• The help (description) text is now the same size as the property names.• ⚠️ Fixed a bug where emission was twice as bright.• ⚠️ Matcap and Rim Light's Multiply now work in Unlit mode.• The Back Light items are now also hidden in Unlit mode.• Reorganized the Inspector.• You can now choose how much the normal map's bumps are reflected in the shadow (Shadow Normal Strength).• Added a flat shadow (Shadow Flat Mode).

v46_GUIr1 Changed the order of items in the Inspector.• The order below Matcap has been arranged as a flow of "light expression → cast shadows → outlines → emission → special effects".

v46_GUIr0 Greatly enhanced everything around Fake Shadow.• Added a Fake Shadow bake tool.• Baking is used as "insurance for worlds where Fake Shadow Mesh cannot be shown".• The mask image can be TGA or PNG (default TGA).• Added two settings to Fake Shadow Mesh that soften the shadow edge.• Changed the default of Fake Shadow Mesh's Shadow Overlap to "Flat".• Changed the default of Fake Shadow Mesh's "Direction when the light is weak" to (0, 0.7, 0.7).• Tidied up the Inspector.

Open past changelog (click to expand)
  • v45_GUIr2 Every PBR property is now hidden while Unlit Mode is on.
  • v45_GUIr1 Added a warning for when environment reflection under PBR (Toon Specular) is left enabled during particle use (Vertex Color Blend Mode = Multiply).
  • v45_GUIr0 Lighting is now PBR (physically based). Physically based light reflection (PBR BRDF) is now the standard lighting: Metallic expresses whether a surface is metal or non-metal, and Smoothness expresses its surface roughness. Toon shading (shadow color, border and blur) can still be combined as before, so the cel-shaded look is preserved. ⚠️ Existing materials may look different from this version onward (see below for details).
  • v44_GUIr2 Moved Soft Particles from Transparency / Rendering to Particle Color (integration with particles) (GUI only). Because Soft Particles is a feature for particles, it is now grouped below Vertex Color Blend Mode, another particle-related setting. The feature, its properties, saved values and look are exactly the same as before (see the Particle Color section).
  • v44_GUIr1 Added "- shown in Preview" to the "Layers (stacked top to bottom)" heading of Bake to Base (GUI only). It is a wording change that makes explicit that the order and adjustments in this list are reflected as-is in the preview; the feature, saved values and look are exactly the same as before.
  • v44_GUIr0 Added Fake Shadow Mesh (a shadow cast from the mesh). It pushes the shape of a mesh such as front hair along the light direction and drops it onto the face as a shadow. Whereas the existing Fake Shadow Texture (the drawn shadow) was a still image drawn in UV space, this one follows the movement of the head and the direction of the light. Because the depth the shadow reaches is limited, the background and other avatars never darken. In worlds with no light, it falls back to casting toward the direction you specify (slightly above and in front by default), switching over smoothly according to brightness. To use it, set the Render Queue of the casting material (the front hair, etc.) to a larger value than the receiver's (the face, etc.) (no shadow appears without it). Default OFF; existing materials look exactly the same as before (see the Fake Shadow Mesh section).
  • v43_GUIr0 Added Fake Shadow (a stylized cast shadow). It shows a shadow drawn by the author — like the shadow of front hair — on the face or body always at the same position and the same density, regardless of the world's light sources. The existing Receive Shadow only produces a shadow in worlds that have an actual light source and shadow settings, whereas Fake Shadow Texture keeps the shading you intended even in worlds with no lighting or in dark worlds (they are separate features and can be used together). The shape of the shadow is read from a specified channel of the new shared mask (RGBA packed). Tiling / Offset adjust its position and repetition, so the shadow position can be fine-tuned with sliders without redrawing the texture. The color and density are adjustable as well, and the shadow appears the same way in Unlit Mode. Because it is a still image drawn in UV space, it does not follow the head or the direction of the light. Default OFF; existing materials look exactly the same as before (see the Fake Shadow Texture section).
  • v42_GUIr0 Added Environment Adapt and Environment Tint to Back Light as well. Back Light used to decide its brightness only from "is the light behind the character" and "is it blocked by a shadow", so weakening the light did not change how bright the backlight was, and in dark worlds the backlight alone stayed strong and looked out of place. Raising Environment Adapt makes the backlight fade automatically to match the surrounding brightness (ambient light + the main light). The look in bright places does not change (it only takes effect on the darker side). Raising Environment Tint blends the hue of the surrounding light into the backlight color (brightness is left as it is). The mechanism and the feel of the controls are exactly the same as the identically named items in Rim Light, so the same tuning sense applies when you use both. If it fades too much in dark worlds, raise Dark Floor (see the Back Light section for details).
  • v41_GUIr0 Added Environment Adapt to Rim Light. Until now the rim glow stayed at a constant brightness regardless of the surrounding brightness, so in dark worlds the rim alone could look strongly out of place. Raising Environment Adapt makes the rim dim automatically to match the surrounding brightness, so it blends into the scenery even in dark places. The look in bright places does not change (it is a one-way adjustment that only takes effect on the darker side, so nothing that looked a certain way before becomes brighter). Raising Dark Floor keeps a faint edge visible even in pitch-dark places. In addition, raising Environment Tint makes the hue of the surrounding light blend into the rim color (bluish in cool-lit places, warmer in warm-lit places). Because it shifts only the hue and leaves brightness alone, combining it with Environment Adapt will not darken things twice. Both work the same way with Blend Mode Add / Multiply and with Unlit. Environment Adapt is ON by default (= 1), but the look in bright places is unchanged from before (because it only takes effect on the darker side). If you want a rim with constant brightness as before, set Environment Adapt to 0 (see the Rim Light section for details).
  • v40_GUIr2 Added Bake to Base (texture baking). This is a Unity editor tool that bakes several layer images (decals, logos, patterns, makeup and so on) and color adjustments (Hue / Saturation / Brightness) into the base texture, combining them into a single image. At runtime only one texture layer can be stacked, but with baking there is no limit on the number of images, and since the result is still a single texture, neither runtime cost nor texture memory increases. You operate it from Bake to Base, added below Texture Layer in the material Inspector. You can bake the image you set in the Texture Layer above exactly as it is, so by repeating "decide the position and blend mode in Texture Layer → bake → put the next decal in the freed slot" you can stack as many as you like (after baking, Texture Layer is turned OFF automatically so the same artwork is not applied twice, and the baked settings are taken into the recipe, so what you baked before is never lost). Color adjustments can be baked repeatedly in the same way. There is a preview that shows the baked result on the actual model before you bake, and moving any setting during preview updates the model in real time. The preview and the final output are produced by the same processing, so they look the same. The baked result is saved as a new PNG and the original texture is left untouched. The settings (recipe) are saved, so you can re-bake at any time with one click. The shader itself is unchanged, so the appearance and runtime cost of existing materials are exactly as before (see the Bake to Base section for details).
  • v40_GUIr1 Added a display to Receive Shadow in Lighting & Shadow that shows on the spot that it has no effect with translucent presets (GUI only). When Blend Preset is Transparent / Fade / Additive and the checkbox is ON, "(no effect in the current Preset)" is shown to the right of the checkbox, and the description below switches to a warning that explains the cause and the workaround (the Cutout preset + Dither Fade). Translucent materials cannot receive cast shadows because of how Unity works, so this display prevents the misunderstanding of "the box is checked but no shadow appears". This is a display-only change; functionality, saved values, and appearance are exactly the same as before (the checkbox still works as it did, and switching back to Opaque / Cutout makes the setting take effect again).
  • v40_GUIr0 Added Glitter / Sparkle (procedural glitter/sparkle). This is a decorative emission layer that generates fine sparkling grains without using any texture. The grains sparkle as you move your view (a metallic glitter/flake-like look). Choose from four shapes: Point (round dot) / Star (sharp-tipped cross) / Diamond / Fine Dust (very fine glitter), and switch the grain coordinate space between UV / Object (uniform on all faces via triplanar projection). The grain outlines stay sharp at any size, and they light up correctly even on the back faces of double-sided meshes. It supports scrolling (flowing grains), HDR emission (works with Bloom), and AudioLink (flickering in sync with sound). Because it's an additive layer independent of the regular Emission, it emits light on its own even with Emission turned OFF. The emission follows transparency. Default is OFF, so the appearance of existing materials is completely unchanged (see the Glitter / Sparkle section for details).
  • v39_GUIr3 Changed Receive Shadow in Lighting & Shadow to the same "bold sub-heading + checkbox below it" display used by Light Limit, and increased the space above it (GUI only). A display tweak to improve visibility within the section; functionality, saved values, and appearance (when it takes effect) are exactly the same as before.
  • v39_GUIr2 Moved the Dither Fade (dithered pseudo-transparency) setting from Transparency / Rendering to Texture Layer (below the alpha mask) (GUI only). Grouped it next to the alpha mask since both are "cut out by alpha" style features. Only the display location changed — the display condition (hidden with semi-transparent presets), functionality, saved values, and appearance are exactly the same as before.
  • v39_GUIr1 Cleaned up and shortened the help-box text for each GUI item (GUI only). Trimmed redundant explanations down to the essentials, and moved the "see the README for details" note to appear only once at the end of each help box. Text-only change — functionality, saved values, and appearance are exactly the same as before.
  • v39_GUIr0 Added Back Light. This lights up a broad area along the silhouette in an illustration-style backlight look, but only when the main Directional Light is behind the character. Unlike Rim Light (which always glows at the edges regardless of viewing angle), Back Light glows only when the light is behind the character, and areas where the light is blocked by shadows (such as the inside of a jacket) do not glow. A smaller Width broadens the lit area; a higher Directivity restricts the glow to when the light is almost directly behind. The glow follows transparency and can be disabled on backfaces. Default OFF — the appearance of existing materials is exactly the same as before (see the Back Light section).
  • v38_GUIr0 Added Distance Darken (darken by camera distance). Blends the base color toward a darken color (default black) as the camera gets closer. Because it changes color rather than alpha, it also works on Opaque materials. Useful for effects like "gets darker as you approach" or "darken your hands during petting." Independent from the existing Distance Fade (alpha fade) and can be combined with it. Darkening is strongest at Darken Near and returns to the original color at Darken Far (setting Near > Far reverses it to "farther = darker"). Emission is not darkened. Default OFF — existing materials look exactly the same as before (see the Transparency / Rendering section).
  • v37_GUIr4 Added ambient light shaping (always on, no settings needed). In worlds dominated by ambient light (light probes) or in backlit scenes, this automatically reconstructs a lit/shadow side from the directional information carried in the ambient light, reducing the flat, uniformly-lit look the body can otherwise get (see the Lighting & Shadow section; the change is subtle in worlds with a strong directional light). ⚠️ Since this is an always-on improvement, the appearance of existing materials can change in ambient-dominated or backlit worlds. Also added section setting copy/paste to the GUI: right-click a section's collapsible header to copy/paste that section's numeric settings as a set to another material (colors and textures are not included, so each material keeps its own color/image; Lighting & Shadow covers Shadow Intensity / Border / Blur).
  • v36_GUIr0 Added Dither Fade (dithered pseudo-transparency). While still rendering as Cutout / Opaque, it produces pseudo-transparency that follows the alpha value using a halftone (dither) pattern. Because semi-transparent presets such as Fade cannot receive cast shadows (Receive Shadow) due to Unity's specification, use Cutout + Dither Fade when you want to overlay bangs over the face and see through them while still receiving shadows (see the Transparency / Rendering section). Default OFF; existing materials look exactly the same as before. As a bundled fix, also resolved an issue where, while Dither Fade was in use, the Outline color showed through the dither holes as a filled area and looked saturated (when Alpha Sync is ON, the outline now follows the same dither pattern as the body).
  • v35_GUIr0 Added Receive Shadow (receive cast shadows). Shadows cast by the world’s directional light (cast shadows from trees or buildings, the shadow of your own bangs, and so on) are received as the toon shadow color (the Shadow Color / Border / Blur settings). Default ON. It appears only when the world’s light has shadow settings; in worlds without shadows the display is the same as before. If shadow banding or roughness stands out, turn it OFF or raise Shadow Blur to blend it in (see the Lighting & Shadow section).
  • v34_GUIr0 Added Alpha Sync (follow material alpha) to Outline (default ON). When the body is see-through with a semi-transparent preset (Transparent / Fade / Additive), the outline (and the outline color seen through the body) follows the body’s transparency (Color’s A × the main texture’s A) and fades together with it. Turn it OFF to return to the previous “always shown regardless of transparency” behavior. Opaque presets (Opaque / Cutout) look unchanged. Also, the A (alpha) of Base Color (HDR) now works as the opacity of the outline itself (it was ignored before; with A=1 it is the same as before. ⚠️ If a saved material had Base Color’s A below 1, the line becomes fainter from v34 — set A back to 1). Furthermore, fixed an issue where the Sweep streak saturated (blew out) the outline: the streak’s maximum brightness is now the same as the solid line with Sweep OFF, so Sweep no longer saturates the outline at any setting (previously only the streak was up to 2× brighter). ⚠️ Because of this, at Base Glow 1 (the old default) the tube and the streak have the same brightness, so the streak is invisible — for saved materials that use Sweep, lower Base Glow (e.g., the new default 0.3; toggling Sweep OFF→ON in the GUI also auto-corrects it).
  • v33_GUIr0 Distance Fade now also applies to the Outline. This fixes an issue where only the body faded with distance while the outline remained visible regardless of distance. The outline now fades together with the body, using the same distance settings and the same strength. Materials that do not use Distance Fade look exactly the same as before.
  • v32_GUIr1 Adjusted Outline usability (GUI only; look and saved values unchanged). (1) Moved Self-Illuminate to right after Base Color (before Intensity) (since this value governs how Intensity / Line Width take effect, the order lets you decide it first). (2) Multiplied the displayed number of the Sweep Speed by 10 (internal 0.1 = display 1). The effect and saved value do not change.
  • v32_GUIr0 Added Use Outline Mask to Outline. You can partially erase the outline with a grayscale mask image (white = line / black = no line). Useful when you want to erase a line only in part, such as the corners of the eyes or the mouth, within a single material. Default OFF; with no mask assigned (white) it is exactly the same as before. Also fixed a bug where the Base Glow (Sweep-only setting) value lingered in the outline brightness when Sweep was turned OFF (when Sweep is OFF the line becomes a uniform solid line, independent of Base Glow).
  • v31_GUIr5 Made each feature's checkbox retain the adjusted values when toggled OFF and then back ON (GUI only). Even if you accidentally uncheck it, values such as Strength, outline thickness, and Sweep settings no longer revert to defaults. Only when a value is 0 (= the feature is invisible) does it supply a default so it becomes visible (Matcap is visible by default so its behavior is unchanged; enabling Outline for the first time on a new material gives the shader-default look).
  • v31_GUIr4 Added the ability to switch the material Inspector's display language between 日本語 / English (GUI only). Switch it with the language toggle directly below the header. The setting is remembered per editor and applies to all materials (it is not saved on the material itself = the shader, saved values, and look do not change).
  • v31_GUIr3 Changed the default Render Queue of the Fade / Additive presets from 3000 → 3001 (GUI only). Semi-transparent effects are drawn in front of glass etc. (Transparent = 3000) by default. The Transparent preset stays at 3000 as before (saved materials reflect it when you reselect the preset).
  • v31_GUIr2 Bumped the displayed numbers of the Outline Line Width slider up by one digit (GUI only). Display range 0–2 → 0–20. The actual effect and saved value do not change.
  • v31_GUIr1 Adjusted the Outline Line Width slider's display range from 0–5 → 0–2, to two decimal places (GUI only). The actual effect and saved value do not change.
  • v31_GUIr0 Adjusted Outline usability. (1) Renamed Lighting Influence to Self-Illuminate and inverted the value direction (0 = follow lighting / 1 = self-emit). (2) Moved Base Glow into the Sweep settings. ※ The default outline now follows lighting. For existing materials that want the old constant emission, set Self-Illuminate to 1.
  • v30_GUIr0 Changed the tracking method of Lighting Influence (dark-area tracking) to "track a uniform brightness from the total of the Directional Light + ambient" (improved so no light/dark boundary appears on the outline). The look and backward compatibility at 0 (default) are unchanged.
  • v29_GUIr0 Improved Lighting Influence (dark-area tracking) to follow the main Directional Light + ambient (fixing the problem where the line sank to gray by looking only at ambient). The look and backward compatibility at 0 (default) are unchanged.
  • v28_GUIr0 Improved Lighting Influence (dark-area tracking) to blend at the same brightness as the body (skin, hair, etc.) (fixing the problem where only the line stayed bright in dim worlds). The look and backward compatibility at 0 (default) are unchanged.
  • v27_GUIr0 Aligned the dark-area lower bound of Lighting Influence (dark-area tracking) to the same brightness as Light Min Limit (fixing the issue where the line stayed brighter than the body in pitch-dark worlds). Backward compatibility at 0 (default) is unchanged.
  • v26_GUIr0 Added Lighting Influence (dark-area tracking) to Outline. Default 0 = self-emission as before (existing materials look unchanged).
  • v25_GUIr0 Fixed the problem where bright parts of the avatar blow out in worlds with many realtime lights (changed to a method that subjects additional lights to a single brightness control together). The shading of additional lights becomes simplified (per-vertex, up to 4 lights), but the impact on toon expression is negligible.
  • v24_GUIr0 Fixed the problem where bright parts of the avatar blow out in worlds with strong realtime lights (so the brightness upper bound Light Max Limit also affects additional realtime lights). When Light Limit is disabled, behavior is as before.
  • v23_GUIr0 Changed Outline Edge Fade to be Sweep-only (fixing the bug where the outline itself disappears on hard-edged meshes). The item moved into the Sweep settings (saved values are kept).
  • v22_GUIr0 Added Edge Fade to Outline (mitigating the problem where the back-side Sweep bleeds radially through when semi-transparent). Default 2 = ON, 0 for the old behavior. In opaque, the look does not change.
  • v19_GUIr0 Added Contrast to Matcap (default 1.0 = existing materials unchanged).
  • v18_GUIr0 Made the 2nd Matcap an independent layer, allowing Color Tint, Strength, and Blend to be set separately for the 1st and 2nd (behavior when OFF unchanged).
  • v17_GUIr0 Added a 2nd slot (Mask Select) to Matcap (default OFF = existing materials unchanged).
  • v16_GUIr0 Added "Disable on Backface" to Rim Light (default OFF = existing materials unchanged).
  • v15_GUIr0 Added "Disable on Backface" to Matcap (default OFF = existing materials unchanged).
  • v14_GUIr0 Removed Additive from the Particle Vertex Color Blend Mode (now a choice of None / Multiply). If a saved material had Additive selected, it falls back to a Multiply-equivalent display. Also tidied the internal light lower-bound clamp processing (behavior and look unchanged).
  • v13_GUIr0 Usability adjustments. (1) Changed the initial value of the Particle Vertex Color Blend Mode to None. (2) Adjusted the initial settings when enabling Outline to Sweep OFF / Intensity 1 / Line Width 0.1. The look of saved materials does not change in either case.
  • v12_GUIr0 (1) Added Blend Mode (Add / Multiply) to Rim Light. (2) Added an alpha mask mode to Texture Layer. Also changed the Outline Line Width slider display range to 0–5 (the actual value and effect unchanged).
  • v10_GUIr0 Changed Sweep falloff from one-sided to symmetric on both sides. Changed Count to integer input (IntRange) and added Pivot Offset. Added a guide for applying to the avatar body to the README.
  • v9_GUIr0 Reorganized features into a two-layer structure of Outline and Sweep (orbiting glow). Changed the default value of Base Glow to 1.
  • v8_GUIr0 Changed Outline edge drawing to an inverted-hull pass method. Added Line Width, Extrude Mode, and Base Glow, and removed Rim Power.
  • v7_GUIr0 Changed the Outline Sweep orbit basis to the camera viewpoint (angle on screen) and removed the Axis property.
  • v6_GUIr0 Added Outline Sweep (outline orbiting glow).
  • v5_GUIr0 Fixed the bug where Dissolve noise became a one-directionally stretched stripe pattern on some faces of rotated objects (a latent issue since v0). The look of objects placed without rotation does not change.
  • v4_GUIr0 Internal code tidy-up (refactoring). No change to features, look, or performance. No material re-setup is needed.
  • v3_GUIr1 Changed so that when Unlit Mode is ON, the shadow detail properties (Shadow Color through Shadow Blur) are automatically hidden (since shadows are not computed in Unlit; GUI-only update).
  • v3_GUIr0 Built the always-ON of Light Limit into the shader default value (_UseLightLimit=1). The clamp is now active even on materials whose Inspector has not been opened.
  • v2_GUIr2 Made the always-ON baking of Light Limit reliable at Inspector display time (fixing the bug where the clamp did not take effect and blew out while a section was collapsed; GUI-only update).
  • v2_GUIr1 Made Light Limit always ON (removed the enable/disable checkbox). Changed so the settings UI is automatically hidden in Unlit Mode (GUI-only update).
  • v2_GUIr0 Added Light Limit (Directional Light influence clamp / prevents blow-out & crushed blacks).
  • v1_GUIr0 Initial release.

File Structure

Assets/ └── ALTIMA/ ├── ARLitToon/ ← shader package (independent subfolder) │ ├── Shaders/ │ │ └── ARLitToon.shader ← the shader itself │ ├── Editor/ │ │ ├── ARLitToonGUI.cs ← material Inspector GUI │ │ └── ARLitToonBaker.cs ← texture baking tool (the shader works without it) │ └── README.md ← this guide └── (various avatar items) ← items live alongside, directly under ALTIMA

The shader is kept independent in its own ALTIMA/ARLitToon/ subfolder. This prevents double-imports when you additionally purchase another avatar item that uses the same ARLitToon shader, and prevents the shader from being deleted together with an item folder.

Requirements

Unity2019.4 LTS or later (2022.3 LTS recommended)
Render pipelineBuilt-in (Legacy)
VRChat SDKSDK3 (Avatars / Worlds)
Supported platformPC only

On VRChat's Android (Quest) version, shaders usable on avatars are restricted to the VRChat Mobile shaders bundled with the VRChat SDK only. If this shader is applied to a Quest avatar, the VRChat client automatically replaces the custom shader with a VRChat Mobile shader. This shader is exclusively for PC-platform avatars and particle effects.

Import Steps

  • Importing the distributed package (.unitypackage) into your project unpacks it into Assets/ALTIMA/ARLitToon/.
  • Unity compiles automatically. From the material's Shader dropdown, select ALTIMA > ARLitToon to apply it.

Always place ARLitToonGUI.cs inside an Editor folder. It still works outside an Editor folder thanks to the #if UNITY_EDITOR guard, but placement inside Editor is recommended.

The order of the sections is the same as the display order in Unity's Inspector (the material settings screen). You can configure while comparing the Inspector and this guide.

Right below the Inspector header (✦ ARLit Toon ✦) there are left-aligned language tabs (日本語 / English). They switch the display language of labels and help text. The setting is remembered per editor and applied to all materials (it is not saved in the material itself).

To the right of the language tabs there is a "Hide help" / "Show help" tab (help is shown initially = the tab reads "Hide help"). The tab text describes what happens when you press it. Pressing it hides the explanations of all items at once, giving a compact display with only the properties. Useful once you are used to it, or when the screen is narrow. It has no effect on setting values or the look (a display-only setting, remembered per editor). The help text is the same size as the property names and automatically follows the editor's font size setting.

Both tell you the cause of "I set it but it does not work", and hiding them would make the cause impossible to trace.

  • Warning messages (yellow icon)
  • Explanations of why a whole item is disabled (e.g. the notes shown in PBR (BRDF), Lighting & Shadow, Toon Shadow and Back Light when Unlit mode is ON)

Press the "Web" button to the right of the help toggle tab to open the web version of this guide in your browser. When the display language is English, the English page opens.

SEC. 02 — CORE

Transparency / Rendering

// transparency and rendering settings

Just choose from Preset according to your purpose, and the internal blend and Cutoff settings are optimized automatically. Basically you only need to choose a Preset; there is no need to touch the detailed settings below manually.

# Blend Preset

  • Opaque: Opaque (default). For ordinary bodies, clothes, weapons, etc. The lightest to process.
  • Cutout: For leaves, wire mesh, etc. Cuts out sharply using the texture's alpha.
  • Fade: For expressions where the whole object gradually becomes transparent, such as magic effects. Use this mode when you want to fade gradually by alpha value (fade in / out). ※ Optimized with the premultiplied (Premult) method so it does not blow out even under multiple lights.
  • Additive: For expressions that glow by adding color to the background, such as flames or glowing magic circles. Fading by alpha value is also possible.
  • Transparent: For glass, slime, etc. When you want transparency while keeping light reflections (highlights). Intended for expressing an always-semi-transparent "material quality", not for fading out gradually with alpha.

(※ With transparent-type presets, a safety process that prevents rendering errors on fully transparent parts is applied automatically.)

In other shaders, fading gradually by alpha is often possible with Transparent-type modes, but this shader's Transparent is optimized for always-semi-transparent material expressions such as glass. Even if you lower the material's transparency (_Color.a or the texture's alpha), highlights (specular reflection), environment reflections and emission remain without becoming transparent (to keep the material quality). Even if you animate _Color.a to 0, only the reflections, environment reflections and emission remain.
Therefore, if you want to fade the whole object in / out with the material's alpha or _Color's alpha, choose Fade (everything, including opaque emission and reflections, becomes transparent) or Additive.
[Exception: particle lifetime fade] Even with Transparent, when lowered by the alpha of the particle vertex color (Color over Lifetime), highlights, environment reflections and emission (including the Dissolve edge, Rim and Emission) all disappear completely. This distinguishes "material transparency = how see-through the glass is (reflections remain)" from "particle lifetime = existence itself (everything disappears when it disappears)". An effect that dissolves a Transparent glass material with Dissolve also works through this mechanism, disappearing naturally together with its reflections. Use it with Vertex Color Blend Mode set to Multiply.

# Detailed settings (normally no change needed)

PropertyDescription
ZWrite (depth write)Whether to write the object's front/back (depth) information. The Preset sets the optimal value automatically, so normally no change is needed. On is for opaque objects and draws front/back relations correctly; Off is for transparent objects and allows drawing in overlapping order.
Cull (culling)Specifies which faces to draw. Back (standard) draws only front faces, Off draws both sides, Front draws only back faces. Use Off for thin shapes where you also want to show the back, such as cloth, leaves or ribbons.
Alpha CutoffThe threshold below which parts with a texture alpha value lower than this number are cut out (erased). Mainly used in Cutout mode. With transparent-type presets it is set to 0.001 automatically to prevent errors in transparent parts.
Render QueueThe order in which objects are drawn. The larger the number, the later (further in front) it is drawn. Set automatically by the Preset.

💡 [Workaround for draw-order bugs (Z-sorting)] Fade / Additive are set to Render Queue = 3001 by default (in front of glass and the like at Transparent = 3000). This is because with the same Render Queue (3000 and 3000), Unity sorts front/back by per-object distance, which can make transparent effects appear to go behind glass. If particles or effects are still hidden behind glass farther back, raise the Inspector's Render Queue number further, e.g. to 3050, to draw them in front. Conversely, lower the number if they come too far to the front.

# Distance Fade (fade by camera distance)

A feature that fades the object's alpha according to the distance from the camera. It can prevent your own aura or effects from blocking your view in first person, or be used for effects that disappear as you approach. The outline also fades together with the same distance settings as the body.

PropertyDescription
Use Distance FadeEnable/disable the feature.
Fade NearFully transparent at or below this distance (distance from the camera).
Fade FarFully opaque (normal display) at or above this distance.

Because it manipulates alpha, it is intended for use with transparent presets (Fade / Additive / Transparent). It can also be used with Cutout / Opaque if you turn Dither Fade ON (the alpha is reflected as the density of the dots). Setting Fade Near larger than Fade Far reverses the behavior to "the farther, the more transparent". _DistanceFadeNear / _DistanceFadeFar can also be animated.

# Distance Darken (darken by camera distance)

A feature that brings the body color closer to a darken color (black by default) according to the distance from the camera. While Distance Fade above manipulates alpha (transparency), this changes the color itself, so it also works on opaque materials. Useful for effects such as "gets darker as you approach", "darken the area under your hand when headpatting" or "darken and hide when someone peeks in". It is a toggle independent of Distance Fade and can be combined with it.

PropertyDescription
Use Distance DarkenEnable/disable the feature.
Darken ColorThe color to move toward when close (black by default = darken).
Darken NearDarkened most strongly at or below this distance (distance from the camera).
Darken FarReturns to the original color (normal display) at or above this distance.
Darken StrengthThe maximum darkening strength (0 = off / 1 = fully Darken Color at Near).

Because it manipulates color, it can be used with both opaque and transparent presets. Setting Darken Near larger than Darken Far reverses the behavior to "the farther, the darker". Additive emission (Emission / Rim / AudioLink, etc.) is not darkened (only the body color becomes darker). _DistanceDarkenColor / _DistanceDarkenStrength and others can also be animated.

SEC. 03 — CORE

Base

// basic colors and patterns of skin, clothing, and effects

Decides the basic color and pattern of a character's skin and clothes, or of an effect.

PropertyDescription
Albedo TextureThe basic image applied to the model's surface. Giving it an A (alpha) channel also enables cutout and semi-transparent expressions.
ColorAdjusts the overall tint. Use it to overwrite the texture color with another color, or to darken slightly to match a dark world. (The color can also be changed by animation.)
Color IntensityAdjusts the brightness (intensity) of the color from 0. Raise the value when you want the whole thing to look brighter.
Hue ShiftRotates the hue without editing the texture to make color variations. 0 = no change. Animating it can also make rainbow color changes.
Saturation / BrightnessCorrects saturation and brightness. Both are 1 for no change (2 = double). Use them to dull or brighten colors.
Albedo/Normal ScrollEntering scroll speeds in X and Y makes the Albedo and Normal flow at the same speed (0 stops it). Used for effects such as flowing flames, water or scanlines. The input fields are X/Y only (Z/W are unused).

At the default values (Hue=0 / Sat=1 / Bright=1), Hue/Saturation/Brightness perform no processing at all (identity transform), so they do not affect the look or performance of existing materials.

SEC. 04 — CORE

Texture Layer

// 2nd-image overlay & alpha mask

A feature with two parts: a "color overlay" that puts another image on top of the base texture, and an "alpha mask" that cuts the base out to transparency using the image's brightness. The two are independent toggles; you can use either one or both together (they share the same Layer texture).

① Color Overlay (Use Texture Layer) — Useful for logos, embroidery, one-point patterns, tattoos, makeup, two-layer effect patterns, etc.

PropertyDescription
Use Texture LayerEnable/disable the color overlay.
Layer Texture (A = blend mask)Sets the image to overlay. The image's alpha (transparency) channel becomes the mask for blend strength (white = blend / black = skip). There is no need to prepare a separate mask image. Placement and repetition can be adjusted independently of the base with Tiling/Offset.
Color Tint (HDR)The tint applied to the layer image. Being HDR, it can be combined with Add/Screen for glowing overlays.
Blend ModeThe blend method. Normal (ordinary overlay) / Multiply (for shading and grime) / Add (glowing overlay) / Screen (brightening overlay).
OpacityBlend strength (0 = fully transparent to 1 = maximum). Animatable, so patterns can fade in / out.
ScrollEntering speeds in X and Y makes the layer image flow (0 stops it). The input fields are X/Y only (Z/W are unused).

② Alpha Mask (Use Texture Layer as Alpha Mask) — A feature that cuts out the base shape with a grayscale mask image.

PropertyDescription
Use Texture Layer as Alpha MaskEnable/disable the alpha mask.
Layer / Mask TextureSets the mask image (shared with the color overlay). The image's brightness becomes the transparency (black = transparent / white = opaque / gradient = semi-transparent). If you use only the mask with the color overlay OFF, opening this toggle shows the texture field.
ScrollFlows the mask so you can move the cut-out position (0 stops it). The input fields are X/Y only (Z/W are unused).

Prepare a grayscale (black to white) mask image, drawing the parts you want to be see-through in black and the parts you want to keep in white. Intermediate colors and gradients become semi-transparent. When combined with the color overlay, the roles of the same image are divided: brightness = alpha mask / alpha = color blend mask.

The alpha mask is visible only with a transparent-type Blend Preset (Cutout / Fade / Transparent). With Opaque, opacity is ignored, so nothing becomes see-through. Cutout suits sharp cut-outs, and Fade suits smooth see-through with gradients. With Transparent, by design to keep the material's transparency, highlights such as reflections and emission remain and are not erased by the mask (for glass expressions).

The color overlay acts only on the object's color (look) and does not change opacity. Hue Shift acts only on the base color and does not affect this layer image (to keep the colors of logos, etc.). When disabled, the cost is almost zero.

# Dither Fade (dithered pseudo-transparency)

A feature that, while keeping Cutout / Opaque rendering, thins out pixels with a fine halftone (dither) pattern to create pseudo-transparency matching the alpha value. It is placed in this section because it is the same kind of "cut out with alpha" feature as the Alpha Mask above.

PropertyDescription
Dither FadeEnable/disable the feature (default OFF). When ON, the alpha value of the texture or layer mask becomes "the ratio of pixels kept" as is.

Transparent presets such as Fade cannot receive cast shadows (Receive Shadow) due to Unity's specification. For parts such as bangs that you "want semi-transparent but also want to receive shadows", use the Cutout preset + Dither Fade ON to make them see-through according to alpha while receiving shadows. Specification notes: Because the dots thin out pixels, a dotted pattern may be visible at very close range (less noticeable where anti-aliasing (MSAA) is enabled). Resolution, anti-aliasing and camera angle differ between the Scene view, the Game view and VRChat itself, so the appearance of the dots (how see-through it looks) changes. Check the final look in VRChat itself. Alpha Cutoff can be used together; alpha below Cutoff is still cut out completely. Alpha from Distance Fade and from the texture layer's alpha mask is also reflected as dots. This feature has no effect with transparent presets (Fade / Transparent / Additive), where ordinary alpha blending is used. Combined with Outline: When Outline's Alpha Sync is ON (default), the outline follows the same dots as the body (this prevents the outline color from showing through the holes as a saturated surface). Turning Alpha Sync OFF makes the outline ignore the dots and always be shown.

SEC. 05 — CORE

Bake to Base (texture baking)

// bake layers & color adjustments into the base texture

A Unity editor tool that bakes multiple layer images (decals, logos, patterns, makeup, etc.) and color adjustments into the base texture, combining them into one image. Whereas Texture Layer above "overlays only one image at runtime", this bakes everything into one image in advance, so there is no limit on the number of images and neither runtime cost nor texture memory increases (after baking, it remains a single texture).

💡 This feature is provided by the additional file Editor/ARLitToonBaker.cs. It is always included in the distributed package. Without this file, only the Bake to Base item is missing from the material Inspector; all other features of the shader work normally.

ItemDescription
Create Bake RecipeCreates a settings file (recipe) for this material. It is saved in the same folder as the material as <material name>_BakeRecipe.asset and records the layer configuration.
Source Texture (Base)The image that forms the base of the bake. The Albedo texture at the time the recipe is created is filled in automatically. This item does not change after baking (you can re-bake from here any number of times). The baked texture is saved in the same folder as this image (shown in Output folder right below).
Output ResolutionDefault is "Same as source". If changed, the image is scaled while keeping the aspect ratio of the source.
Base Color Adjust (source texture only)Hue / Saturation / Brightness applied only to the source texture. This adjustment is not reflected directly on the material; it becomes visible only in the preview or after baking. It does not act on layers. It is kept as a single value, so the adjustment never accumulates however many times you re-bake.
Also take the material's Color Adjust (HSV)Includes the material's Hue / Saturation / Brightness in the bake, merges it into Base Color Adjust after baking, and resets the material side to its initial values (0 / 1 / 1) (default ON). It is a checkbox only; values are edited in the Base section above (during preview, the values being taken are shown as numbers). Color and Color Intensity are not baked (they are kept so they can be animated, e.g. for color-change gimmicks).
Also bake Texture LayerBakes the layer set in Texture Layer above as the bottom-most (deepest) layer (default ON). The texture, Color Tint, Blend Mode, Opacity, Tiling / Offset and alpha mask settings are reflected as they are. After baking, Texture Layer is turned OFF automatically, and its settings are captured at the top of the layer list below (the stacking order can be changed with ▲▼ after capturing) (this prevents the same picture from being applied twice and keeps re-bakes producing the same result). The slot becomes free, so you can use it for the next decal.
LayersThe images to bake are stacked from top to bottom (the higher in the list, the deeper; the lower, the further in front). Use ▲▼ to reorder, ✕ to delete and the checkbox on the left to disable temporarily; values can also be edited later. Each bake rebuilds from the source texture according to this list, so you can fix things later and re-bake. A baked Texture Layer is shown as (captured from Texture Layer).
Layer Adjust (this layer only)Hue / Saturation / Brightness applied only to that layer's image. It does not act on the base color or other layers at all. Use this when you want to change only the color of a decal.
Add LayerApart from Texture Layer, you can add any number of images here and bake them at once (these layers do not exist at runtime). For each image you can specify Texture / Color Tint (HDR) / Blend Mode / Opacity / Tiling / Offset and the adjustment above. Blend Mode and Opacity mean the same as in Texture Layer.
Cut out the base by luminanceUses the brightness of that layer image as an alpha mask and cuts out the base's opacity (black = transparent / white = opaque). The same calculation as Texture Layer's "Alpha Mask".

Workflow

  1. Set the image you want to overlay in Texture Layer above, and decide its position (Tiling / Offset) and blend method (Blend Mode) by the actual look.
  2. Open Bake to Base and press Create Bake Recipe. If you want to stack even more images at once, register them with Add Layer.
  3. Pressing Preview (temporary bake) lets you check the bake result on the actual model. During preview, moving the bake settings (Base Color Adjust, each layer's adjustment, Opacity / Tiling / Offset, etc.) is reflected on the model in real time. The same applies when you change the Texture Layer settings above. It also follows Ctrl+Z (undo). Press End Preview to return to the original state.
  4. If everything looks fine, press Bake (create a new texture). The result is saved as a new PNG (<material name>_Baked.png) and the Albedo texture is replaced with it. A new file is created for each bake (_Baked 1.png → _Baked 2.png …), so previously baked textures are never overwritten. The save location is "the same folder as the source texture" (shown in Output folder of Bake to Base even before baking). When finished, a window showing the texture name and save path opens (you can select and copy the text, and Show in Project takes you to the asset). The baked Texture Layer is turned OFF automatically, and the captured color adjustment is merged into Base Color Adjust while the material side returns to its initial values (to avoid applying it twice).
  5. To stack more, set the next image in the freed Texture Layer and repeat steps 3-4.
  6. To start over, Revert to Source Texture returns to the state before any bake (source texture, HSV and Texture Layer ON/OFF). At that time, the steps added automatically by baking (the color adjustment and the captured Texture Layer) are also undone together (layers you added yourself remain).

Each bake is rebuilt from "source texture + bake steps", but what you baked remains as steps, so previously baked content does not disappear from the second time on. Because it is rebuilt from the original each time, image quality does not degrade no matter how many times you bake on top.

Base Color Adjust applies only to the source texture and a layer's adjustment only to that layer; they do not affect each other. To change only the color of a decal, move that layer's adjustment; to change only the underlying color, move Base Color Adjust. Neither accumulates (it is never applied twice however many times you re-bake). The adjustment captured by Also take the material's Color Adjust (HSV) applies only to the base color. If you move the material's sliders while layers already exist, the whole color changes on screen but only the base changes in the bake result; in that case a note is shown in the Inspector (use each layer's adjustment if you also want to change the layers' colors).

To check that the bake result was applied, look at Last result shown at the bottom of Bake to Base (e.g. Baked: base adjust yes / 2 layers (1 adjusted) (incl. Texture Layer)). If it says 0 layers, no image was baked that time (caused by Texture Layer being OFF, no texture set, etc.).

The bake result is saved as a new file each time (delete old bake results you no longer need from the Project window). Also, when a color adjustment (HSV) is baked, Hue / Saturation / Brightness automatically return to their initial values (0 / 1 / 1) so the same adjustment is not applied twice. These operations can be undone with Unity's Undo (Ctrl+Z).

However, the preview is uncompressed while compression settings apply after saving, so there may be a very slight difference in color. Do the final check after saving.

When the preview starts, the material's Hue / Saturation / Brightness temporarily return to their initial values (because they are included in the bake). Move these two sliders when you want to fine-tune colors (they are reflected in real time and baked with those values).

Baking is an operation in UV space. Elements that move over time cannot be baked (such as Texture Layer's Scroll). When Scroll is not 0, a note is shown and the picture in the stopped state (start position) is baked. Set Scroll to 0 and align the position with Tiling / Offset. Also, after baking, layers cannot be animated individually (scroll, fade, color change). If you have one image you want to move, use Texture Layer (runtime blending); bake designs that do not move. Note that when Color is tinted and a color adjustment (HSV) is baked, the color may change slightly before and after baking (at runtime Color is applied before HSV, while baking applies HSV to the image before Color). A note is shown in the Inspector when this condition applies. Check with the preview, or set Color to white before baking.

# Fake Shadow bake (shadow mesh to receiver mask)

A tool that bakes how the Fake Shadow Mesh (shadow cast from a mesh) falls onto the UVs of the receiving materials and automatically sets it up as a Fake Shadow Texture (drawn shadow). Use it from the menu Tools → ALTIMA → ARLitToon Fake Shadow Bake, or with the Open button in Bake to Base.

Once baked, the shadow becomes a still image and no longer follows the head or light movement, but in exchange the shadow can be shown even in worlds where no depth texture is generated, and rendering needs one pass less.

ItemDescription
Avatar (root)Specifies the root of the avatar to bake. Within it, materials with Fake Shadow Mesh ON are found automatically as "casters".
Casting meshesThe list of caster meshes found. Unchecked meshes do not cast shadows. Unchecking meshes that never shade a receiver, such as back hair or a tail, greatly shortens the bake time (the number of triangles directly becomes the processing time). If you switch Fake Shadow Mesh on the material side, press Rescan.
Receiver materialsThe list of candidates that receive the shadow (ARLitToon materials in the avatar that are not casters). Initially only "materials around the head" are checked — bake time is roughly proportional to the number of selected materials, so having shoes or effects selected from the start would make you wait needlessly. Add the parts you need by checking them by hand (Select all returns to all; Head only returns to the initial state at any time). Unchecked materials are not baked — uncheck materials that should not receive the shadow. Unchecked materials have none of their settings changed (a previously baked Fake Shadow Texture also remains as is). The [ ] on each row shows the names of the parts that use that material (listed side by side when several parts use the same material).
Take direction from the scene lightWhen ON, the direction of the Directional Light in the scene is used (default ON). When OFF, the caster material's "Direction when the light is weak" is used.
Use the Fake Shadow Mesh "fallback direction" settingA read-only display of the direction used when the item above is OFF. It cannot be changed here — set the value with "Direction when the light is weak" in the material's Fake Shadow Mesh section (so the setting lives in one place and the values never diverge).
Mask resolutionThe resolution of the output shadow mask image (default 2048).
Inherit settings from the caster materialWhen ON, the extrusion distance, receive range, shadow color and strength are matched to the caster's Fake Shadow Mesh settings (default ON). This item is for baking with the same look as the original shadow, so normally keep it ON. When OFF, the manual values below are used.
Receive range (m)The upper limit of the depth the shadow reaches (0.001-0.1 m). Making it too large darkens even distant parts and also makes baking take longer. Not used while the inheritance above is ON (the caster's value is used; even if the caster's value exceeds this range, it is used as is).
Coverage thresholdOf several tests at slightly different angles, what fraction must be in shadow for a point to count as shadowed (default 0.5). Higher values make the shadow thinner and less likely to appear. Raise it when shadows appear in concave areas such as eye sockets.
BlurApplies a Gaussian blur to the result to blend in boundary lines that appear where shadows overlap (0-10, 0 = no blur). The amount of blur is proportional to the mask resolution, so the impression stays the same even if you change the resolution.
Apply to the receiver materialsWhen ON, assigns the generated mask to the receiver materials and turns Fake Shadow Texture ON automatically (default ON).
Turn casters' Fake Shadow Mesh off after bakingDefault ON. When ON, after baking the casters' Fake Shadow Mesh is turned OFF and the receivers' Fake Shadow Auto Fallback is also turned OFF (= always show the baked shadow / the replace-with-texture usage). If you want to keep Fake Shadow Mesh and hold the baked shadow as "insurance for worlds where the Mesh cannot be shown", turn this OFF (when OFF, the Mesh keeps being used and the baked shadow is shown only in worlds where the Mesh cannot be shown).
Output folderWhere the generated mask images are saved.
File formatThe file format of the mask image (PNG / TGA, default TGA). The baked content and how it looks in the shader are the same for both; the only difference is whether you can reopen and fix it later in an image editor. With TGA you can fix the baked shadow by hand (see below). Choose PNG if you want smaller files or do not plan to fix it.
  • Replace with the texture (default, checkbox ON) — After baking, turns the casters' Fake Shadow Mesh OFF and also turns the receivers' Fake Shadow Auto Fallback OFF. The baked shadow is always shown in every world. It no longer follows the head or light direction, but it is light on performance and works in any world.
  • Keep as insurance (checkbox OFF) — Bakes while keeping Fake Shadow Mesh. The receivers' Fake Shadow Auto Fallback is turned ON, and the baked shadow appears only in worlds where Fake Shadow Mesh cannot be shown. Fake Shadow Mesh uses the depth texture, so depending on the world's settings the shadow cannot be shown — this usage fills that gap.

While this setting is ON, the drawn shadow (Fake Shadow Texture) is shown only in worlds where no depth texture is generated (to prevent it from doubling with the caster's Fake Shadow Mesh). If you bake with "Turn casters' Fake Shadow Mesh off after baking" ON (the default), this setting is also turned OFF automatically and the baked shadow is always shown.

If you already use the Shared Mask (for the 2nd Matcap, etc.), the contents of R / G / A are carried over as they are, so the settings of other features are never lost. However, if the existing mask image was set up so that it cannot be read, R / G / A are recreated as black, and the report says so. If another feature also reads B (such as a material where the conversion tool put the rim shade mask into B), that mask is replaced by the baked shadow. In this case a warning appears in the report (the original mask image remains in the project). Redraw that feature's mask in a free channel and change its channel selection.

The Shared Mask is data with separate information packed into each channel, not a color image. PNG is a format that treats alpha as transparency, so when you open a newly created mask (A = the reserved slot left at 0) in an image editor, the whole image is shown as transparent, and you cannot follow the shadow baked into the B channel by eye. With TGA (32-bit, uncompressed) the alpha remains a separate channel, so RGB is visible as it is and you can fix the shadow or swap channels. In exchange, the file size is larger. The result imported into Unity is the same for both (the import settings are identical too). The default is TGA; switch to PNG only if you do not plan to fix it and want smaller files.

They are the lines for textures actually created by that bake (material name -> save path). Warning lines starting with [!] are shown in red (the bake finished, but something needs your attention, e.g. the look would break as it is). To copy the whole report, press Copy all to the right of the heading.

It is decided by the overlap between a sphere centered on the Head bone of the avatar's Animator (humanoid) and the faces of each material (not by bone names or material names). Even if the face and body share one mesh, they can be separated per material. For avatars without a humanoid Animator this cannot be decided, so everything is checked as before (above the list, it shows how many are selected and why they could not be narrowed down).

Cancel if it takes too long. When canceled, not a single image is written and no material is changed (the state before baking remains as is). To shorten the time, the most effective step is unchecking unneeded meshes in "Casting meshes". Next most effective is turning "Inherit settings from the caster material" ON (an appropriate distance matched to the caster is used).

It reports "no material with Fake Shadow Mesh enabled", "materials exist but the geometry cannot be read" and "no shadow reached" as separate messages. Check that the casters and receivers overlap along the light direction and that the receiver materials use ARLitToon.

SEC. 06 — LIGHTING

PBR & Specular

// physically based texture, environment reflection, glass & metal mirroring

※ When Unlit Mode (ignore lighting) is ON, all other items in this section have no effect and are hidden from the Inspector (the Unlit Mode checkbox itself remains; the setting values are kept, and turning it OFF shows them again unchanged). The items of Lighting & Shadow, Toon Shadow and Back Light are hidden in the same way.

Both are pseudo effects decided only by the viewing direction, not by how light hits. Likewise Emission, Glitter, AudioLink, the Dissolve edge, Fake Shadow and Outline also work in Unlit. Only things that need real light sources and ambient light (shading, specular highlights, environment reflections, back light) do not work in Unlit.

This shader's lighting is physically based (PBR BRDF). The distinction between metal and non-metal is expressed with Metallic, and the calculation conserves the total amount of light. Toon shading (shadow color, border and blur in Lighting & Shadow) sits directly on top of it, so the cel-shaded look is kept.

PropertyDescription
Unlit ModeCompletely ignores light sources and always displays at 100% brightness. For particles and glowing effects.
MetallicWhether that surface is metal. The closer to 1, the more the paint color (diffuse light) disappears and the highlights and reflections are tinted with the base color (gold shines gold, copper shines copper-red). Metals such as gold, copper and brass are basically 1, and non-metals such as cloth, skin and plastic are 0; intermediate values are basically not used.
SmoothnessThe smoothness of the surface. It decides both how wide the highlight spreads and how blurry reflections are (high = sharp, small highlights + crisp reflections / low = broad, blurry reflections).
No shadow on metal (pure physical)At OFF (default), toon shading is also applied to metal reflections, so cast shadows and toon shadows also appear on metal parts. At ON, shading is not applied, giving the physically correct behavior, the same as a mirror showing the same scene even in shadow. In exchange, metal no longer shows shadows, and the higher the Smoothness, the less shading is visible. It does not affect surfaces with Metallic 0 (glass, cloth, skin).
Normal Map + ScaleUse it when you want to express fine bumps (wrinkles in clothes, grooves in bricks, etc.) without increasing the polygon count.

In the material of fittings or ornaments, set Metallic to 1 and Smoothness to 0.7-0.9 (Reflection Strength can stay at the default 1). Metal gets its color from the surrounding reflections, so it becomes dark if Reflection Strength is left at 0 (the Inspector shows a warning when Metallic is high but it is 0). Toon shading, outlines, Matcap and rim light can be used together as they are, so you can make only the fittings and ornaments look metallic while keeping the cel-shaded look. The shadows of metal can also be adjusted with Lighting & Shadow: since toon shading is also applied to reflections, Shadow Color / Shadow Border / Shadow Blur work on metal parts as they are (with high Smoothness the light-source highlight concentrates into a small point, but the shadow does not disappear because the reflection side expresses it).

A surface with raised Metallic loses its paint color (the diffuse light of the base color). This behavior follows the physical nature of metal. Raising Metallic on non-metal parts such as skin or cloth makes the color wash out and look dark. If you only want stronger shine (highlights), use Specular Highlight instead of Metallic.

# Specular Reflection (environment reflection / reflections on glass and metal)

A feature that reflects the world's scenery (reflection probes / skybox) on the surface. Used for glass, metal, wet looks, etc.

PropertyDescription
Reflection Strength (reflection influence)How much the reflection is applied. The default is 1 (with reflections). At 0 reflections are not calculated at all (zero cost), but at 0 no scenery is reflected even if you raise Metallic. For metal, reflections are the main component of the color, so do not lower it too much. It can be set to 0 for particles and the like where you want to cut the cost.
Fresnel PowerThe sharpness of edge reflection. The larger it is, the more only the "edges" seen at a shallow angle reflect strongly, which looks more like glass. Smaller values make the whole surface reflect uniformly (for mirrors and metal).
Fresnel MinThe amount of reflection on surfaces facing the viewer. Near 0 for glass; raise it for mirrors and metal.
Specular HighlightAdditional shine on top of the highlight produced by the physical calculation (0 = as physics says). When you want stronger shine on non-metal surfaces, use this instead of Metallic.

The sharpness of reflections is decided by Smoothness (high = crisp like a mirror / low = blurry like frosted glass).

Set Blend Preset to Transparent and Unlit to OFF (Lit), raise Reflection Strength, and set Fresnel Power to around 4-6. Add shine with Specular Highlight and pseudo gloss with Matcap as needed. Transparent is designed so that material transparency (_Color.a) does not make reflections, highlights or Matcap see-through, so the reflections sit firmly while the surface is thinly see-through (with Fade/Additive, reflections also follow the alpha and become see-through). Note that when Transparent glass is used in particles and faded out with Color over Lifetime, everything, including environment reflections, Matcap and emission, disappears completely. Effects that dissolve glass with Dissolve also disappear naturally together with the reflections. ※ Unlit mode does not respond to light, so environment reflections and specular highlights are not displayed. Always use glass in Lit (Unlit OFF) (only Matcap works in Unlit, since v47_GUIr0, but the main part of reflections is the environment reflection). In Unlit, the Specular Reflection items themselves are hidden from the Inspector (the setting values are kept, and turning Unlit OFF shows them again unchanged). The calculation is also skipped, so there is no cost.

What gets reflected depends on the VRChat world's reflection probes / skybox. In worlds without probes, reflections may become dark (like soft particles and AudioLink, this is a specification constraint that depends on the world environment).

SEC. 07 — LIGHTING

Lighting & Shadow

// light, shadow & toon adjustment
PropertyDescription
Pseudo LightMoves the light that decides the shadow direction from the real light toward a pseudo light (default 0.5 = half and half). The pseudo light always comes from above (its direction is decided from the distribution of surrounding brightness and restricted so it never goes below the horizon). As a result, shading follows the mesh shape even where light is hitting, and volume remains even in worlds without a directional light. At 1 it is completely independent of the real light direction, and at 0 it goes back to shading that follows the light direction faithfully (the default is the half-and-half 0.5).
Shadow Color / IntensityAdjusts the color of the pseudo shadow and the depth (darkness) of the shadow.
Shadow BorderAdjusts the position of the boundary between light and shadow. Important when creating an anime-style (toon) look.
Shadow BlurAdjusts the softness (smoothness) of the shadow edge. Raise the value a little if shadows on spheres and the like look jagged, or if you want cast shadows to blend in nicely.
Shadow Normal StrengthHow much the bumps of the normal map are reflected in this shadow. At 1 (default) it follows the normal map; the closer to 0, the more the shading is made only from the original mesh shape (lower it when fine skin bumps make the shadow grainy).
Shadow Flat Mode / Flat Border / Flat BlurDecides the shadow only from "the orientation of the model itself" and the light direction, not from the surface direction (normals) (default OFF). For parts such as faces where you want "a flat, illustrated shadow rather than shading that follows bumps". Flat Border decides the direction where the shadow starts, and Flat Blur its width.
Receive ShadowReceives the shadows cast by the world's directional light (shadows of trees and buildings, the shadow of your own bangs, etc.) as the toon shadow above (Shadow Color / Border / Blur) (default OFF). The same setting also applies to the 2nd and 3rd shadow (when it is OFF, no tier receives cast shadows). In worlds where stripes or roughness of the shadows are noticeable, keep it OFF or raise Shadow Blur to blend them in.

Right-click the foldout heading of any section to show the "Copy" and "Paste" menu. What is copied is the set of numeric settings of that section (colors and textures are not included = each material's colors and images are kept; for Lighting & Shadow it is the three items Shadow Intensity / Shadow Border / Shadow Blur, and for Toon Shadow the ON/OFF of the 2nd shadow / 3rd shadow / boundary tint plus their border, blur and normal map strength). Right-click the heading of the same section in another material and choose "Paste" to apply them all at once (the enable/disable state of the feature is transferred too). If you paste with multiple materials selected, it is applied to all of them, and it can be undone with Undo (Ctrl+Z). Use it to align adjusted settings across the materials of other parts.
※ Copying the Transparency / Rendering heading does not include the internal render values managed by Blend Preset (ZWrite, etc.) or the Render Queue. To match the kind of transparency, choose the same Preset on the paste destination as well.

The shadow in this section decides its direction by mixing the real light's direction with the direction of a "pseudo light" decided from the distribution of surrounding brightness (Pseudo Light, default 0.5 = half and half). The pseudo light always comes from above, so even if light comes from below, the shadow is pulled toward a direction from above (at 1, it always falls from above regardless of the light direction). This is intentional behavior matching illustration conventions.

Only the toon shading of this section switches to the pseudo light.

Shadows overlap from the outside in the order 1st shadow → 2nd shadow → 3rd shadow. Basically make Border smaller in the order 1st > 2nd > 3rd (the smaller it is, the more it moves toward the side the light does not reach), and the defaults are already in that order. For an anime look, lower each Blur to make boundaries clear; raise them for a softer look.

Setting it to 0 removes the shadow regardless of the number of tiers.

While Shadow Flat Mode is ON, each shadow's Normal Strength has no effect on the shadow (because normals are no longer referenced). The normal map itself still works on highlights and reflections as before.

Shadows are received only when the world has a realtime directional light, its shadows are enabled, and you are within the shadow draw distance. In worlds that do not meet these conditions, the display is as before (the same look as OFF). The avatar's ability to "cast" shadows has always been enabled; this setting only concerns the "receiving" side.

How detailed the shadow is depends on the world's settings (the shadow draw distance and the light's shadow settings), and it switches with the position where the avatar stands. Because toon shadows have a sharp boundary, that switch shows up clearly as "the shadow appearing / disappearing". This cannot be suppressed by the shader, so the default is OFF from v48_GUIr0. If you turn it ON, raising Shadow Blur makes it less noticeable.

Transparent presets such as Fade / Transparent / Additive cannot receive directional light shadows due to a constraint of Unity's Built-in pipeline (no shadow appears even if it is ON). For parts such as bangs that you "want semi-transparent but also want to receive shadows", use the Cutout preset + Dither Fade (dithered pseudo-transparency) (see the Texture Layer section).

When the checkbox is ON with a transparent preset, "(no effect in the current Preset)" is shown to the right of the checkbox, and the description below switches to a warning explaining the remedy (display only; the setting value does not change). The checkbox can still be operated, so going back to Opaque / Cutout makes your setting work as is.

# Light Limit (ambient clamp / prevents blow-out and crushed blacks)

When the world's ambient light is excessively bright or dark, it limits the amount of light the avatar receives to a fixed range, preventing blow-out or situations where nothing can be seen in the dark. It is darker in dark worlds, and in bright worlds it leaves some headroom for brightness within a range that does not blow out.

PropertyDescription
Light Min LimitThe lower bound of the light that part receives. In shadows or dark worlds, the shortfall below the lower bound is supplemented as flat ambient light. The higher it is, the more the shadows are lifted and brightened; the lower, the deeper the shadows sink (0 = no lower bound = shadows can be completely dark).
Light Max LimitThe upper bound of brightness in bright places (prevents blow-out). The higher it is, the brighter it looks in bright worlds.

The lower bound works on the amount of light received per pixel, so it can lift only the shaded parts while leaving lit surfaces as they are. Raise it when facial shading is crushed and invisible in dark worlds, or when you want to keep shadows light. To change the shadow color itself, use Shadow Color / Shadow Intensity in Lighting & Shadow (these specify the color and depth of the shadow directly rather than the amount of light).

This feature is always enabled. It works only in Lit (Unlit OFF); in Unlit mode it does not respond to light, so this item itself is hidden automatically. Emission and environment reflections are not subject to the limit. Additional realtime lights also go through one combined upper/lower bound process together with the main light and ambient light (additional lights are treated per vertex, up to 4 lights). _LightMinLimit / _LightMaxLimit are animatable.

In worlds dominated by ambient light (light probes) and in back-lit scenes, it automatically restores the lit / shaded side from the directional information contained in the ambient light, reducing the look of the body sinking flat with uniform brightness. A little ambient light from behind wraps around to the outline (silhouette) side, keeping volume even when back-lit. There are no settings; it always runs with the optimal settings (the change is slight in worlds with a strong directional light).

SEC. 08 — LIGHTING

Toon Shadow (multi-tier shadows)

// 2nd / 3rd shadow and shadow boundary tint

Items that stack darker bands inside the 1st shadow decided by Lighting & Shadow, or tint its boundary. Each can be turned ON/OFF with a checkbox, and all are OFF by default (= the look of existing materials does not change).

PropertyDescription
Shadow 2ndStacks one more, darker band inside the 1st shadow. Turned ON/OFF with a checkbox (default OFF); the alpha of the color is the strength. It has its own border position, blur and normal map strength.
Shadow 3rdA 3rd accent color that remains further in (under the neck, inside the sleeves, etc.). Its items are the same as the 2nd shadow; default OFF.
Shadow Border Color / RangePuts a thin band of color just inside the shadow boundary (e.g. bringing out only the boundary in a warm color). Turned ON/OFF with a checkbox (default OFF); alpha is the strength, and Range is the width of the band. The color works as "how much each channel is pulled back toward the base color".

Shadows overlap from the outside in the order 1st (Lighting & Shadow) → 2nd shadow → 3rd shadow. Basically make Border smaller in the order 1st > 2nd > 3rd (the smaller it is, the more it moves toward the side the light does not reach), and the defaults are already in that order. For an anime look, lower each Blur to make boundaries clear; raise them for a softer look.

Setting it to 0 removes the shadow regardless of the number of tiers.

When Unlit Mode (ignore lighting) is ON, the items of this section have no effect (because the shading calculation itself is not performed). The Unlit Mode checkbox is at the top of PBR (BRDF).

SEC. 09 — LIGHTING

Matcap

// pseudo gloss & environment reflection

Expresses a constantly beautiful gloss and environment reflection in a "pseudo" way. It is very light to process, which makes it valuable in VRChat.

PropertyDescription
Matcap TextureSets an environment-reflection-like image drawn on a sphere (angel rings on hair, the sheen of silk, etc.).
Strength / BlendAdjusts the blend strength and blend mode (0 = multiply / 1 = additive glow).
ContrastStrengthens the light/dark definition of the matcap. Raising the value tightens the highlights without lifting the dark areas, giving a metallic look (default 1.0 = no change). For metal, Blend = Add + a high Contrast is a good guideline.
Highlight Threshold / BoostApplies the Boost gain only to parts brighter than the Threshold (brightness threshold), sharpening only the specular sheen. Dark areas and the base are not lifted. Combined with Contrast it looks even more metallic (default Boost = 0 = no change).
Disable on BackfaceWith double-sided rendering (Cull = Off), Matcap is not applied to back-face meshes. Use it when you want the inside of sleeves or the back of a coat to look darker and calmer. Default OFF.
2nd Matcap (Mask Select)Shows 2 kinds of Matcap per part in one material. Switches with the region mask (grayscale): black = 1st / white = 2nd. The 1st and 2nd can each have their own color tint, Strength and Blend (e.g. trims as bright metal, cloth as calm silk). Default OFF.
3rd Matcap (Mask Select)Adds a 3rd kind of material look (e.g. fabric, leather and metal fittings). Its region is decided by a channel separate from the 2nd one (default G), and it is layered on top of the result of the 2nd (black = the result so far / white = 3rd / gray = interpolated). It has no effect on the region of the 2nd at all. Color, strength, blend mode, contrast and highlight are independent for the 1st to 3rd. Default OFF.

Turning "Use 2nd Matcap" ON shows Matcap Texture 2, Matcap 2 Color Tint / Strength / Blend / Contrast / Highlight, Shared Mask RGBA and Region Mask Channel. The Matcap is switched by the specified channel of the Shared Mask (default R) (black = 1st / white = 2nd / gray = interpolated), and the mask is read with the same UV as the main texture. The Shared Mask is a slot shared with other mask features such as Fake Shadow Texture (up to 4 kinds of masks can be packed into the R/G/B/A of one image; see the Fake Shadow Texture section for details). The contents of R/G/B/A are shown side by side right below the channel selection, and you can switch by clicking. The default channels are R for Matcap and B for Fake Shadow Texture, so they do not collide as they are. Materials that had a region mask set before do not change in look, because the default is R (grayscale images have R=G=B, so the values are the same). The 1st and 2nd can each have their own color, strength, blend mode, contrast and highlight boost, so you can build different material looks per part. Disable on Backface and the lifetime fade are applied to both Matcaps in common. When OFF, or when no 2nd one is assigned, it works as a single Matcap as before and the processing cost does not change.

Turning "Use 3rd Matcap" ON shows Matcap Texture 3, Matcap 3 Color Tint / Strength / Blend / Contrast / Highlight, Shared Mask RGBA and Region Mask Channel. The default channel is G, and because it reads a different channel from the 2nd (default R), it does not affect the region of the 2nd. It is blended in the order "the 3rd is layered on top of the result up to the 2nd", and where the mask is black the result so far remains as is. If you draw "R = region of the 2nd" and "G = region of the 3rd" separately in one Shared Mask, you can show 3 kinds of material looks in one material (e.g. fabric, leather and metal fittings). Grayscale images have R=G=B, so the same picture goes into all channels; when two or more features use it, always draw them in separate channels (the Inspector warns when two features read the same channel). Disable on Backface and the lifetime fade are applied to all Matcaps in common. When OFF, or when no 3rd one is assigned, it works as before and the processing cost does not change.

This option takes effect when the render setting Cull is Off (double-sided rendering). Cutting off Matcap on back faces makes those faces look naturally darker, since no highlight is applied (a sinking lining). When Cull is Back (back faces not drawn, the default), the back faces themselves are not displayed, so turning this item ON does not change the look. Cull is in the detailed settings of "Transparency / Rendering".

As a highlight-type effect, Matcap also fades following the alpha of the particle color (Fade/Additive, and the particle lifetime fade with Transparent). With Transparent it remains without becoming see-through by material transparency (_Color.a), and disappears naturally together with its reflections through the particle's Color over Lifetime.

Matcap also works in Unlit mode (since v47_GUIr0; before that it was not displayed in Unlit). Matcap is a pseudo gloss decided only by the viewing direction, not by how light hits, so it works even in Unlit, which ignores light. However, environment reflections and specular highlights are not displayed in Unlit (these require real light sources and ambient light). Use glass expressions that rely on reflections in Lit (Unlit OFF).

SEC. 10 — LIGHTING

Rim Light (edge light / backlight expression)

// edge light / backlight expression

A feature that emphasizes the outline (edges) of the model. Blend Mode switches between "glow" and "darken".

PropertyDescription
Rim Color HDR / IntensityThe color and strength of the edges. With Add it makes the character stand out or expresses a magic aura; with Multiply it expresses edging that darkens the edges.
Rim PowerAdjusts the thickness of the effect. The larger, the thicker and softer; the smaller, the thinner and sharper the edge.
Blend ModeAdd (default) makes the edges glow additively (back light, aura). Multiply darkens the edges. Setting Rim Color to a black-ish color gives edging that darkens the edges (a black rim).
Disable on BackfaceWith double-sided rendering (Cull = Off), no rim is shown on back-face meshes (works in both Add/Multiply modes). Use it when you want the inside of sleeves or the back of a coat to look darker and calmer. Default OFF.
Use Rim MaskWith the specified channel of the Shared Mask (default A), limits where the rim appears, per part (white = show / black = hide / gray = proportional strength). This allows adjustments such as "no rim on the face only" or "make only the metal fittings glow strongly". It works the same way in both Add / Multiply modes and can be combined with Environment Adapt, Dark Floor and Environment Tint. The mask is read with the same UV as the main texture. Default OFF.
Enable Rim Shade (darken the edges)A layer that darkens the edges, independent of Rim Light (default OFF). Keeping Rim Light's Blend Mode at Add and turning this feature ON lets you show glowing edges and dark edges at the same time. You can also show only the dark edges without using Rim Light (turn only this toggle ON).
Rim Shade Color / IntensityThe color the edges move toward, and its strength (0-4). The darker the color, the more strongly the edges sink (white = no change). Even if you raise the strength above 1, the edges never become darker than the edge color (to prevent the color from inverting). The range above 1 works to widen the "fully applied part" of the darkened band (the dark area becomes thicker and the edge crisper). To darken even more, make Rim Shade Color a darker color.
Rim Shade PowerThe width of the darkened band. By default the band is wider than Rim Light (the default assumes a thin glowing edge + a broad dark area).
Use Rim Shade MaskWith the specified channel of the Shared Mask (default A), limits where the edges are darkened. The default is A, the same as the Rim Light mask, so if you use both masks, change the channel of one of them (the Inspector warns).
Environment AdaptDims the rim according to the surrounding brightness (ambient light + main light). It prevents the rim alone from standing out in dark worlds. The value is the degree of "how much it is affected by the environment": at 1 (default) it follows completely, and at 0 the rim has constant brightness as before. In places at or above the brightness of being lit firmly in white, the look is the same as before, and it dims as it gets darker from there (= it only works on the dark side). It works in both Add / Multiply modes and also in Unlit.
Dark FloorThe lower bound of how much rim remains in pitch-dark places. 0 (default) turns it off completely; around 0.2 leaves a faint outline even in darkness. Use this value when you feel it dims too much in dark worlds. Shown only when Environment Adapt is greater than 0.
Environment TintPuts the color cast of the surrounding ambient light onto the rim color. In cool-colored worlds the rim leans bluish; in warm worlds such as sunsets, it leans warm. At 0 (default) the color does not change. It shifts only the color without changing brightness, so combining it with Environment Adapt does not darken twice. It is independent of Environment Adapt, so you can also blend in only the color while keeping brightness constant (Environment Adapt 0 + Environment Tint 1). The effect appears as suppressing the components contained in the rim color by the amount of the ambient light's color cast, so the change is clearer for white or pale rims.

Leave Rim Light's Blend Mode at Add (default) and enable Rim Shade. Rim Light makes the edges glow, and Rim Shade darkens them. The two are independent layers, so color, width, strength and mask can each be set separately. Turning only Rim Shade ON shows only the dark edges without using Rim Light. Rim Shade uses the same calculation as Rim Light's Multiply (a multiplication that moves the edge color toward the specified color), so the kind of look is the same. The differences are that it can be used independently at the same time, and that it has its own band width, color and mask. Rim Shade also works in Unlit mode. The three Environment Adapt settings (Environment Adapt / Dark Floor / Environment Tint) are shared by Rim Light and Rim Shade, and work the same way on both.

Set Blend Mode to Multiply and Rim Color to black or a dark color. Adjust the darkening strength with Intensity and the edging thickness with Rim Power.

This option takes effect when the render setting Cull is Off (double-sided rendering). When Cull is Back (back faces not drawn, the default), the back faces themselves are not displayed, so turning it ON does not change the look. Cull is in the detailed settings of "Transparency / Rendering" (the same idea as Matcap's option of the same name).

Rim glow is originally an effect that is "constant regardless of how light hits", so in dark worlds only the rim can remain bright and stand out. Environment Adapt (default 1) follows the surrounding brightness and darkens it automatically, so it blends into many worlds as it is. The look in bright worlds does not change, so only dark places need adjustment. If it disappears too much in dark places, the guideline is to raise Dark Floor (or lower Environment Adapt a little). Conversely, if you want the rim to always glow at constant brightness as a highlight of your avatar, setting Environment Adapt to 0 gives the constant glow as before.

Environment Adapt works "only on the side darker than the brightness of being lit firmly in white". It is by design that moving the light a little in a bright world shows no change (to keep bright places looking the same as before). To check the effect, bring the Directional Light's Intensity close to 0 or switch to a dark Skybox, and the change becomes clearly visible.

This adjustment brings the color cast, not the brightness, closer to the environment, and can be used independently of Environment Adapt. It extracts the color of the surrounding light and puts only the hue onto the rim color, so brightness never drops twice. The default is 0 (color unchanged). The effect is clearer for white to pale rims (the change may be hard to see for rims that are dark-colored to begin with). If you aim to "not stand out anywhere" while hopping between worlds, combine it with Environment Adapt; if you want to protect the character's colors, keeping it at 0 is safe.

The rim normally appears uniformly on the outline of the whole model, but there are situations where you want adjustments such as no rim on the face / only the metal fittings glowing strongly. When ON, it reads the specified channel of the Shared Mask (default A), and the rim appears only in white places (the strength is proportional for intermediate colors). It is applied at the same point as Disable on Backface, so it works the same way in both Add (additive glow) and Multiply (darkening).

In the Inspector too, they are grouped in one place as "Environment Adapt (shared by Rim Light and Rim Shade)", and can be operated if either one is enabled.

The Shared Mask is a slot shared with Fake Shadow Texture and the 2nd / 3rd Matcap (defaults: R = 2nd Matcap / G = 3rd Matcap / B = Fake Shadow / A = rim light). The Shared Mask defaults to "black" = if you turn it ON without assigning a mask, the rim disappears everywhere (the Inspector warns). Grayscale images have R=G=B, so the same picture goes into all channels; when using it for multiple features, draw them in separate channels. Unlike Fake Shadow Texture, it has no Tiling / Offset of its own (same UV as the main texture).

Both Add / Multiply work in Unlit mode (since v47_GUIr0; before that Multiply did not work in Unlit). The Add rim glow fades in / out following the alpha of the particle color (Fade/Additive, and the particle lifetime fade with Transparent).

SEC. 11 — LIGHTING

Back Light

// backlight that glows only when the light is behind

An illustrative back-light expression that makes a wide area of the outline glow only when the main directional light is behind the character. Whereas Rim Light "always lights the edges depending on the viewing angle", Back Light "glows only when the light is behind", and furthermore parts where the light is blocked by shadows do not glow (places where the back light does not reach because the body blocks it, such as the inside of a jacket or around the collar, do not glow). It becomes a natural back light that reacts to the direction and occlusion of the scene's light.

It is a feature that uses light direction and occlusion, so it does not glow in Unlit mode, which performs no lighting calculation. In Unlit, the Back Light items themselves are hidden from the Inspector (the setting values are kept, and turning Unlit OFF shows them again unchanged).

PropertyDescription
Use Back LightEnable/disable the feature.
Back Light Color (HDR) / IntensityThe color and strength of the back light. It is an HDR color, so combined with Bloom it glows strongly.
WidthThe size of the glowing area. The smaller, the wider the area that glows; the larger, the narrower the area near the outline only.
DirectivityThe directivity for judging "the light is behind". The larger, the more it glows only when the light is almost directly behind; the smaller, the more it also reacts when the light is diagonally behind.
Environment AdaptWeakens the back light according to the surrounding brightness (ambient light + main light). It prevents the back light alone from standing out in dark worlds. The value is the degree of "how much it is affected by the environment": at 1 (default) it follows completely, and at 0 it has constant brightness as before. In places at or above the brightness of being lit firmly in white, the look is the same as before, and it weakens as it gets darker from there. The same mechanism as the items of the same name in Rim Light.
Dark FloorThe lower bound of how much back light remains in pitch-dark places. 0 (default) turns it off completely; around 0.2 leaves it faintly even in darkness. Use this value when you feel it weakens too much in dark worlds. Shown only when Environment Adapt is greater than 0.
Environment TintPuts the color cast of the surrounding ambient light onto the back light color. In cool-colored worlds it leans bluish; in warm worlds, warm. At 0 (default) the color does not change. It shifts only the color without changing brightness, so combining it with Environment Adapt does not darken twice.
Disable on BackfaceWith double-sided rendering (Cull = Off), no back light is shown on back-face meshes. Default OFF.

Rim Light lights "the edges relative to the line of sight" regardless of the light direction. Back Light looks at the direction of the scene's main directional light and glows only when the light is behind the subject, and furthermore parts blocked by shadows do not glow. Both can be used at the same time.

The occlusion test uses the world's shadows. In worlds without shadows (environments where shadows are disabled), occlusion does not work and the judgment is made only from the light direction, so the back light may appear even inside a jacket and the like. It is also disabled in Unlit mode (because it does not respond to light; the same treatment as Rim's Multiply).

Back light used to be judged only by "whether the light is behind" and "whether it is blocked by a shadow", so weakening the light did not change the back light's brightness. With Environment Adapt (default 1), it weakens automatically according to the surrounding brightness and blends into the scenery even in dark worlds. The look in bright worlds does not change, so only dark places need adjustment. To check the effect, bring the Directional Light's Intensity close to 0 or switch to a dark Skybox, and the change becomes clearly visible. It is exactly the same mechanism as the items of the same name in Rim Light, so the key points of setting them are shared when you use both.

The glow fades following transparency (hlFade). The effect is based on the main Directional Light, so it does not glow if the world has no Directional Light. "Disable on Backface" is meaningful only with Cull = Off (double-sided rendering) (the same idea as the options of the same name in Rim / Matcap).

SEC. 12 — LIGHTING

Fake Shadow (cast shadows / shadow of the bangs)

// casting side (Mesh) and receiving side (Texture)

A feature that expresses shadows such as those of the bangs. There are two ways to show it, grouped together in the same section.

  • Fake Shadow Mesh (casting side): creates the shadow from the shape of a mesh. It follows head movement and the light direction.
  • Fake Shadow Texture (receiving side): a still image of the shadow drawn on the UVs. It can always be shown in every world.

Depending on the world's rendering settings, Fake Shadow Mesh may not be displayed. To prepare for that, the basic usage is to combine it with Fake Shadow Texture as "insurance" (the switching is done automatically by Fake Shadow Auto Fallback). The Texture side can be generated automatically with "Fake Shadow bake" in Bake to Base (described above).

# Fake Shadow Mesh (casting side / shadow cast from a mesh)

A feature that pushes the shape of a mesh such as bangs along the light direction and drops it as a shadow onto the face. Whereas Fake Shadow Texture below is a still image drawn on the UVs, this is a shadow that follows head movement and the light direction.

This setting is made on the material of the "casting side" (bangs, etc.). No setting is needed on the receiver (face, etc.).

PropertyDescription
Enable Fake Shadow MeshEnable/disable the feature (default OFF).
Shadow OverlapChooses how the parts where the shadow overlaps itself (such as where strands of bangs cross) look. Flat (default) = the density stays constant even where it overlaps (see the note below). Multiply = darkens in proportion to the receiver's shading; overlapping parts get darker accordingly.
Shadow ColorThe color of the cast shadow. The default is a slightly bluish gray (white = no shadow).
Shadow StrengthThe strength of the shadow (0 = off to 1 = maximum). Animatable.
Cast DistanceHow far the mesh is pushed along the light direction (default 0.6, typically 0.1-1.0). Too small and the shadow is buried in the body; too large and the shadow looks detached. Adjust it to the gap between the face and the bangs. A negative value (-2 to 0) pushes the mesh toward the light (the shadow on the face shifts toward the light). This is for when you want to match how the shadows overlap for a particular hairstyle. When light comes from the camera side, a shadow may also fall on the casting side itself, such as the bangs (the Inspector shows a note when the value is negative).
Receive DepthThe upper limit of the depth the shadow falls into (default 0.5, typically 0.1-1.0). Anything farther than this is not darkened = backgrounds, distant walls and other avatars are not affected. Make it a little larger if the shadow does not reach the face, and smaller if the shadow leaks onto the surroundings.
Cast Shadow GradientSoftens the outer edge of the shadow (default 0 = no blur). The higher it is, the wider the outline blurs, and as it approaches 1 the whole shadow becomes lighter. It works well on hair with thick strands, but has almost no effect on bangs made of flat cards (see the note below).
Cast Shadow Depth FadeFades the shadow out smoothly at the far side of "Receive Depth" (default 0 = it ends abruptly at that position as before). The higher it is, the closer the start of the fade moves, and at 1 it starts fading right next to the casting side. It always works regardless of the mesh shape.
Direction when the light is weak (XYZ, world space)When the light direction is unreliable in dark worlds, moves the direction in which the shadow is cast toward the one specified by the author. The default (0, 0.7, 0.7) assumes light from slightly above and in front (a direction pointing toward the light; the shadow extends to the opposite side).
Brightness where the direction above takes overHow dark it must get before the direction above starts to take over (default 0.1). It reads on the same scale as Light Intensity (0.1 = it starts taking over when the Directional Light's Intensity drops below about 0.1). The switch is interpolated smoothly, so it never snaps suddenly as brightness changes.

The shadow must be drawn after the receiver (face, etc.). Opaque rendering is drawn from front to back, so the bangs would be drawn before the face, and as it is, the shadow would be overwritten by the face and disappear. Turning this feature ON automatically adds +1 to the Render Queue (likewise when you select the Blend Preset again), and turning it OFF restores it. It works the same way with any preset, such as Opaque, Cutout or Fade.

However, if you have changed the Render Queue manually, no automatic adjustment is made (to respect your setting). In that case, in Render Queue of the Transparency / Rendering section, make the value of this (bangs-side) material larger than the receiver. With the same value as the receiver, no shadow appears (+1 is enough). If no shadow appears at all, check this first.

This feature uses the world's rendering settings to decide how far the shadow reaches. In worlds without those settings, no shadow appears. Nothing breaks, such as the background getting dark — it simply does not appear.

This setting works in worlds that are "dark but still have light". In worlds with no light at all, this shadow cannot be displayed in the first place (the mechanism that decides how far the shadow reaches also depends on the same light source, so both are lost at the same time). Therefore "insurance for when there is no light" is handled by Auto Fallback below, and this setting should be thought of as a way to "keep the shadow direction from going wild when it is dim".

A setting that keeps the shadow from disappearing even in the "worlds where it does not appear" mentioned above. Turning "Auto Fallback" ON in the Fake Shadow Texture of the receiver material (face, etc.) makes the drawn shadow hide automatically in worlds where this feature can be shown, and appear instead in worlds where it cannot. The shadow never doubles and never disappears. Turn it ON when combining it with Fake Shadow Mesh. The default is OFF (always show the drawn shadow). If you use only the drawn shadow without Fake Shadow Mesh, you can leave it as is.

The drawn shadow "always appears but does not follow", while this one "follows but does not appear in some worlds". Neither replaces the other, so they can be combined with Auto Fallback above.

Flat is a method that places an upper limit of "no darker than this". Therefore the density stays constant even where it overlaps, but in exchange the receiver's shading and the light/dark of its texture are lost inside the shadow, and no shadow falls on parts that are darker than the shadow color to begin with (dark textures, etc.). The default is Flat. Switch to Multiply if you "want to keep the shading of skin and cloth even inside the shadow".

The Flat shadow color automatically follows the surrounding brightness. With the upper-limit method as it is, as the world gets darker the receiver becomes darker than the shadow color and the shadow would disappear. The look in bright worlds is the same as before (it only works when it is dark).

This shadow is drawn by shifting the mesh along the light direction, so the outline of the shadow on screen is "the silhouette of the casting side seen from the camera". The blur is created by making that boundary — where the surface turns sideways — lighter. Therefore it blurs well on hair with thick strands (tube-shaped meshes), but on bangs made of flat cards, the direction is constant within each card's surface, so even the edges never "turn sideways" and there is almost no change. In that case use Cast Shadow Depth Fade (unaffected by shape), or combine both.

The shape of the shadow is the shape of the mesh itself (the shape of the bangs becomes the shadow as is). Since the receiver is curved, the larger the cast distance, the more the shadow appears detached from the receiver. In VR the look differs between the two eyes, so decide the distance while actually checking in VR. The shadow does not darken emissive effects (Emission, Rim Light, Glitter, etc.). When disabled, no drawing happens at all, so the cost is almost zero.

# Fake Shadow Texture (receiving side / designed cast shadow, shadow of the bangs)

A feature that shows a "shadow drawn by the author", such as the shadow of bangs, on the object always at the same position and strength regardless of the world's light sources. Use it when you want to show the shading intended as part of the illustration's painting without it breaking in any world.

PropertyDescription
Enable Fake Shadow TextureEnable/disable the feature (default OFF).
Shared Mask RGBA (shared with other features / default B)Sets the image in which the shadow shape is drawn. It is the same shared slot as Matcap's region mask (see "How to use the Shared Mask" below).
Mask Channel (R/G/B/A)Which channel of the Shared Mask is read as the shadow (default B). Matcap's region mask defaults to R, so they do not collide as they are. The contents of R/G/B/A are shown side by side right below, and you can also switch by clicking.
Invert Mask (black = shadow)At the default OFF, "white = shadow / black = no shadow". Turn it ON when using a grayscale image where the shadow is painted in black (black = shadow).
Shadow Color (multiply)The color applied to the shadow part. The default is a slightly bluish gray. Use a darker color for a darker shadow (white = no shadow).
Shadow StrengthThe strength of the shadow (0 = off to 1 = maximum). Animatable.
Tiling / OffsetRepetition and position of the shadow mask. Shifting Offset lets you fine-tune the shadow position without redrawing the texture. The base UV is the same as the Albedo texture.
Auto FallbackDefault OFF (always show the drawn shadow). When ON, this drawn shadow is shown only in worlds where Fake Shadow Mesh (above) cannot be displayed. It is a setting you turn ON when using it as a set with Fake Shadow Mesh (see "How to use Auto Fallback" above). If you want to always show only the drawn shadow without using Fake Shadow Mesh, you can leave it OFF.

Receive Shadow in Lighting & Shadow is a physical cast shadow that appears only when the world has a real directional light and shadow settings. No shadow appears in worlds without light or in dark worlds. Fake Shadow Texture, on the other hand, is an illustrated shadow that always appears regardless of the lighting. Their roles differ, so both can be used at the same time.

The "Shared Mask" is a slot where up to 4 kinds of separate black-and-white masks can be packed into the R/G/B/A of one image (shared by Fake Shadow Texture and Matcap's region mask). In an image editor, put a separate picture in each channel, for example following the default assignment: the region of the 2nd Matcap in R / the region of the 3rd Matcap in G / the shadow of the bangs in B / the rim light mask in A, and specify the channel each feature reads. Which channel each feature uses by default is shown in the slot name in the Inspector (e.g. for Fake Shadow Texture, "Shared Mask RGBA (shared with other features / default B)").

Right below the channel selection, the four images R/G/B/A are shown side by side, and the channel currently being read is highlighted with a frame. Clicking a thumbnail switches to that channel. R/G/B are tinted red, green and blue respectively, so you can tell at a glance which channel's picture it is (alpha is shown in grayscale). There is no need to enable "Read/Write Enabled" on the texture.

A grayscale (black-and-white) image has R=G=B, so if you use only one kind, it works just by placing it without worrying about channels (no alpha needed). Conversely, when using it for multiple features, always separate the channels — a grayscale image puts the same picture into all channels, so as it is, Matcap's region mask and the shadow would have the same shape.

Fake Shadow Texture uses this Shared Mask, so Texture Layer's color overlay and alpha mask can still be used freely as before (they can be used at the same time).

It is a still image drawn in UV space, not geometric self-shadowing. Therefore it does not follow head movement or the light direction (the purpose of the feature is to always show the same design). The shadow is applied to the object's color, so it appears the same way in Unlit mode and in dark worlds, but it does not darken emissive effects such as Emission, Rim Light and Glitter (the shadow is hard to see on glowing parts). Scrolling (flowing movement) is not applied. When disabled, the cost is almost zero.

SEC. 13 — VFX

Outline & Sweep

// outline & orbiting-glow option

The base feature that draws the outline of a mesh. It supports everything from toon-style edging to glowing outlines like neon tubes with HDR color + Bloom. It works with any 3D mesh, such as spheres, cubes, text, costumes and accessories, and follows animation on skinned meshes. The basic outline can be drawn without textures or UV unwrapping (a mask is optional: use a mask image only when you want to remove the line partially, such as at the outer corners of the eyes).

PropertyDescription
Use OutlineEnable/disable the feature.
Base Color (HDR)The color of the outline. Being HDR, raising Intensity makes Bloom (light bleeding) work nicely. A (alpha) is the opacity of the outline itself (effective since v34, default 1 = opaque).
Self-IlluminateThe degree to which the outline ignores the world's lighting and self-emits (0-1, default 0). At 0 (default), the outline follows the scene's brightness uniformly (the total of the main Directional Light + ambient light, following Light Min/Max Limit) (bright (white) when there is a Directional Light, gray to black only when the whole scene is dark; the line is uniform with no light/dark boundary; in complete darkness it stops at Light Min Limit and turns off at 0). At 1 it ignores lighting and always glows (the classic neon). Adjust the glow strength with the brightness of Base Color (HDR). Animatable. ※ This value affects how the following Intensity / Line Width work (the brightness reference), so it is placed right after Base Color so it can be decided first.
IntensityThe glow strength of the line (0-16).
Line WidthThe thickness of the outline (the amount the mesh is pushed out). The slider is 0-20 (in 0.01 steps, two decimal places), and at 0 the line disappears. The range is for fine-tuning thin lines (the displayed value is a convenient multiple of the internal value; the meaning of the effect and saved value depends only on its magnitude).
Extrude ModeNormal = along the normal (for beveled text, meshes with multiple parts such as strings of text, and smooth general models) / PivotScale = outward from the pivot (for hard-edged single convex shapes such as cubes; corners do not split).
Alpha Sync (follow material alpha)With transparent presets (Transparent / Fade / Additive), makes the outline follow the body's transparency (Color A × main texture A) (default ON). The more see-through the body, the fainter the outline color seen through the body becomes, and no line appears on fully transparent parts (no depth is written either). OFF = always shown regardless of transparency as before (the previous look where the outline color shows through on the inside). With opaque (Opaque / Cutout) presets the body is not see-through, so it has no effect.
Use Outline Mask (hide line partially)A feature to partially remove the outline with a texture mask (default OFF). You can remove only the places where you do not want a line, such as the outer corners of the eyes or around the mouth. When ON, the mask field below is shown.
Outline MaskA grayscale mask image. White = line / black = no line (gradient in between). It is read with the same UV as the main texture. Parts removed by the mask do not write depth, so see-through of the back side does not increase when transparent.

When you enable Outline, it starts with easy-to-use initial settings (Intensity 1 / Line Width 0.1 / Sweep OFF). The values can be changed freely afterwards. Note that if you turn Outline OFF once and enable it again, it returns to these initial settings.

The outline is drawn geometrically with the method of "drawing only the back faces of a slightly inflated copy of the mesh" (inverted hull). Therefore the outline appears accurately even on flat meshes such as cubes.

  • Normal: pushes out along the normals, so the line thickness is uniform. The line may break at hard-edged (flat-shaded) corners. In that case switch to PivotScale, or give the model bevels / smooth normals.
  • PivotScale: pushes out radially from the pivot, so corners do not split, but the line thickness becomes uneven on meshes with multiple parts such as strings of text, and on concave shapes (no line appears on the side facing the pivot). Consider it dedicated to single convex shapes.
  • The outline follows the bone deformation of skinned meshes. Use Normal for Extrude Mode (PivotScale breaks on full-body meshes).
  • The line thickness is proportional to the avatar's scale (the visual ratio is kept even on huge or tiny avatars).
  • For parts where you do not want an outline, such as the face, turn Outline OFF on that material (or set Line Width to 0). Avatars usually have separate materials per part, so this is the basic means of per-part control. If you want to remove only part of it within one material, such as the outer corners of the eyes, use Use Outline Mask (white = line / black = no line).
  • The vertex processing of that material roughly doubles, plus one more draw call. It is within a practical range even for a full body, but if you care about Performance Rank, narrow down where it is applied.

# Sweep (orbiting glow option)

An option where an especially bright streak of light orbits around the outline of Outline. Useful for "running light" effects on neon tubes, cyber gadgets, magic circles, etc. It works only when Outline is enabled.

PropertyDescription
Use SweepEnable/disable the option.
Base Glow (base tube brightness / contrast with streak)The base brightness of the outline (tube) = the foundation on which the orbiting streak runs (0-1, default 0.3). Lowering it creates the contrast of "a strong streak of light running over a faintly glowing tube". Since v34, the streak's brightness is capped at the same brightness as the solid line with Sweep OFF, so Sweep no longer saturates (blows out) the outline. Therefore at 1 the tube and streak have the same brightness and the streak becomes invisible (when you enable Sweep in the GUI and it is near 1, it is automatically corrected to 0.3). A Sweep-only setting (shown when Sweep is enabled). When Sweep is OFF, Base Glow has no effect and the outline becomes a uniform solid line (adjust the brightness with Intensity and Base Color).
Width (streak length)The total length of the streak of light. The smaller, the more point-like; the larger, the longer it glows.
Sharpness (falloff sharpness / symmetric)The sharpness of the falloff applied symmetrically to both sides from the center of the streak. The larger, the sharper the center stands out; the smaller, the more gently the whole thing glows.
Speed (orbit speed / sign reverses)The orbiting speed. The sign reverses the orbit direction (positive = one direction / negative = the opposite). 0 stops it. Animatable, and the number shown in the Inspector is used directly as the animation value.
Count (number of streaks)The number of streaks orbiting at the same time (an integer from 1 to 8). At 2 or more, multiple evenly spaced lights chase each other.
Pivot Offset (orbit center / object space)The offset of the center the streak orbits around (object space). Normally it can stay at (0,0,0). When used on an avatar body, set Y to chest height (e.g. 1.0) to make the orbit even.
Edge Fade (suppress radial bleed when transparent / 0 = off)When Sweep shows through radially behind the body with transparency (Transparent / Fade), it keeps the rim streak and suppresses only the inner radial part (0-8, default 2). 0 = disabled. A feature for smooth curved surfaces (spheres, organic meshes). When opaque, the back side is hidden by the body, so it has no effect. ⚠️ On hard-edged meshes (cubes, etc.) the rim streak is also attenuated, so set it to 0 in that case (the outline itself is not affected by Edge Fade and is always shown).

The position of the streak is generated from the angle on screen as seen from the camera, so from whatever direction you look, the streak goes around the outline currently visible. Because it is a view-based (viewer-side) effect, tilting your head (camera) also rotates the starting point of the orbit together with the screen. In VRChat mirrors the orbit direction appears reversed; this is a specification common to viewpoint-dependent effects such as Matcap.

  • When using this material on particles, the outline is drawn for each particle, so OFF is recommended for particle use (when ON, the line follows the lifetime fade).
  • This feature does not use shader keywords, so enabling it does not increase the compile time at upload (number of variants). When OFF the rendering cost is almost zero, but there is one more draw call for the dedicated pass.
  • With Transparent / Fade presets, when the body becomes semi-transparent, the back side (the inner wall of the outline color) may show through the body. Since v34, Alpha Sync (default ON) makes the outline color seen through follow the body's transparency and fade together (if the body is fully transparent, the line disappears too). Turning Alpha Sync OFF shows it always regardless of transparency as before (it is drawn geometrically, so it never disappears on any mesh). If radial see-through of Sweep bothers you, on smooth curved surfaces Sweep's Edge Fade (default 2) suppresses the inner radial part (0 recommended for hard-edged meshes).
SEC. 14 — VFX

Emission (HDR-capable)

// HDR-capable emission

Creates materials that glow by themselves even in darkness.

PropertyDescription
Emission Color HDR / IntensityAdjusts the emission color and strength. Raising Intensity makes Unity's Bloom (light overflow effect) work nicely.
Emission MapSpecifies where to glow with a black-and-white image or the like. The RGB is used for the emission color. The alpha serves as the "emission mask" and can be shared by Mask with Emission Map alpha below, AudioLink and Glitter (see below).
Mask with Emission Map alphaWhen ON, limits the glowing area with the alpha of the Emission Map (opaque = glows / transparent = does not glow). The alpha is read with the same UV as the main texture, so even if you move the emission pattern with Scroll or Tiling, the glowing area does not move (e.g. streaks of light flowing only inside a fixed part of the clothes). Default is OFF.
ScrollEntering speeds in X and Y makes the Emission Map flow (0 stops it). For flowing energy and the like. The input fields are X/Y only (Z/W are unused).
Pulse Speed / Pulse MinMakes the emission pulse (flicker). Pulse Speed is the speed of flickering (0 = off), and Pulse Min is the brightness at its darkest (0 = flickers until it disappears completely).

The alpha is one mask shared by Emission, AudioLink and Glitter. Each feature chooses whether to read it with the checkbox in its section (for Emission / AudioLink, Mask with Emission Map alpha; for Glitter, set Mask Channel to Alpha (A)). Because they read the same picture, they apply to the same area (you cannot separate the area per feature). An image without alpha is read as 1 everywhere (= no mask). Set Alpha Is Transparency to OFF in the Emission Map's import settings (when ON, the emission color of transparent parts may change). The Inspector warns about both of these states.

Emission also fades in / out following the alpha of the particle color (Fade/Additive, and the particle lifetime fade with Transparent). It disappears naturally together with its glow through Color over Lifetime.

SEC. 15 — VFX

Glitter / Sparkle (procedural glitter)

// procedural glitter

A decorative emission layer that scatters fine sparkling grains (glitter / sparkle) over the surface without using textures. The grains are generated procedurally in the shader, so no dedicated noise image is needed. The grains glint as you move your view (an expression that twinkles with the viewing angle, like metallic glitter or flakes). It works as an additive layer independent of normal Emission (constant glow), so even with Emission OFF, Glitter alone can glow.

PropertyDescription
Use GlitterEnable/disable the feature. When turned ON, Intensity is automatically set to 1 (kept if it already has a value).
Glitter Color (HDR)The emission color of the glitter (HDR). Raising Intensity affects Bloom.
IntensityThe glow strength (0-16).
ShapeChooses the grain shape from Point (round dot) / Star (a cross-shaped glint with sharp tips) / Diamond / Fine Dust (dense fine glitter). The outline is kept sharp at any size (it does not blur when enlarged).
SpaceChooses the base coordinates of the grains from UV (follows the mesh's UVs; natural scrolling; for flat surfaces / particles) / Object (object space; uniform without stretching even on cube sides or sphere poles thanks to triplanar projection) / View (a "billboard" expression where grains always face the camera, based on world coordinates; completely unaffected by the mesh's UV unwrap and by front/back faces).
Grain ScaleThe size of one grain. The larger the value, the larger the grains; the smaller, the finer (default 181). Making grains smaller automatically increases their number, so density does not fall short even with fine glitter. Raise the value for large glitter (around 290 gives coarse glitter).
CoverageThe ratio of grains that actually glow. Closer to 0 is sparse; closer to 1 glows densely (default 0.6).
Grain SizeThe fill ratio of one grain (how large it is drawn within its cell, default 0.7). Because it is independent of density, grains do not get clipped even if you raise density while keeping them large (the absolute grain size is adjusted with Grain Scale).
View SharpnessThe sharpness of the glint relative to the line of sight. The larger the value, the more sharply and briefly it flashes at specific angles.
Flicker SpeedThe speed of flickering (0 = no flicker). Flickering is random per grain, and speed and timing differ grain by grain. Furthermore, two waves with different periods are overlaid, so a pattern where the same flicker repeats at the same place is practically imperceptible.
Scroll (X,Y)The speed that moves grains as if flowing (translates the UV / Object coordinates respectively). The input fields are X/Y only (Z/W are unused).
AudioLink ReactiveWhen ON, the glitter flicker is driven by sound (AudioLink). Adjust with Band (the frequency range to react to) and Sound Strength (how much the sound affects it).
Localize with Emission MapWhen ON, limits where glitter appears with the Emission Map. The map is shared with Emission (the whole surface if not set).
Mask ChannelChooses the channel of the Emission Map used for localization. Brightness (RGB) (default) = the brightness of the emission picture (white = appears / black = does not). It is read with the same UV as the emission, so it moves with Emission's Tiling and scrolling. Alpha (A) = the alpha of the Emission Map (opaque = appears / transparent = does not). It is read with the same UV as the main texture and is not affected by Emission's Tiling or scrolling. It can be drawn separately from the emission color (RGB), so you can place glitter even where nothing glows. The alpha is shared with the Emission / AudioLink masks (see "About the Emission Map alpha" in the Emission section).

Glitter is an additive emission layer calculated as Glitter Color × Intensity × (shape × view glint × flicker × (AudioLink) × mask). Being procedurally generated without textures, it adds no samplers or keywords (compile load at upload stays the same). The glow follows transparency and blends naturally with particle lifetime fades and semi-transparency. Glitter Color / Intensity / Flicker Speed and others can also be animated.

① An image without alpha (JPG or PNG without alpha) is read with alpha 1 everywhere, so glitter appears over the whole surface. ② Set Alpha Is Transparency to OFF in the Emission Map's import settings. When ON, Unity fills the color of transparent parts with surrounding colors on import, so the emission color may change where no glitter is placed. The Inspector warns about both of these states.

Like the other sound-reactive features, AudioLink Reactive works only when the AudioLink system is installed in the VRChat world (in unsupported worlds only the sound linkage of the flicker is disabled automatically; the glitter itself is shown normally). The Object space is based on object space, so the grains stay fixed to the surface and follow even when the avatar moves or rotates (UV depends on the mesh's UV unwrap, so grains also stretch where UVs are stretched). On double-sided (Cull Off) meshes, grains on the back also glow correctly.

The grains stay tied to world coordinates while always facing the camera, so the mesh's UV unwrap, surface orientation and front/back are not considered at all. Like Object, it is composited with triplanar projection, so grains are not stretched even on surfaces seen at an angle. Grain shape and size stay uniform even on meshes without UVs, places where UVs are heavily distorted, and double-sided polygons. It is also not affected by the object's scale, so grain size stays consistent across multiple meshes. In VR, grains do not shift between the left and right eyes. Note that rotating the camera rearranges the grains (a specification of the always-facing-front expression).

SEC. 17 — VFX

Dissolve (disappear effect)

// disappear effect

A feature that makes objects disappear or appear as if melting along a noise pattern.

PropertyDescription
Dissolve TextureSets the noise image that serves as the basis of how it melts.
ThresholdThe progress of disappearance (-1.0 = fully visible to 1.1 = fully erased). Animating this creates beautiful disappearing effects.
Noise ScaleThe fineness of the noise pattern (1 = standard / 10 = fine). It uses object-space triplanar mapping, so a uniform pattern is maintained regardless of scale changes or surface orientation.
Edge Width / Edge ColorSpecifies the glow width and HDR color of the melting edge.

The glow of the melting edge fades in / out following the alpha (opacity) of the particle color (Fade/Additive, and the particle lifetime fade with Transparent). Even in effects that dissolve a Transparent glass material with Dissolve, it disappears naturally together with the edge glow.

SEC. 18 — ADVANCED

Animation & Particles

// animation properties & particle system

# Particle Color (particle linkage)

PropertyDescription
Vertex Color Blend ModeThe default None = does not receive the Particle System's vertex colors (neither the colors set by Color / Color over Lifetime / Color by Speed nor their alpha reach it). For materials used on particles, change it to Multiply. With Multiply, it receives the Particle System's colors, and fading over the particle's lifetime (the alpha of Color over Lifetime) also works. For uses where you do not want the mesh's vertex colors applied unintentionally, such as avatars and accessories, leave it at None.

Particles are drawn with many layers overlapping, so the reflection calculation accumulates for every overlapping layer and becomes a rendering cost. Particles rarely need reflections in their look, so for materials with Vertex Color Blend Mode set to Multiply, the basic rule is to set PBR's Reflection Strength to 0 (at 0 the calculation is skipped and the cost becomes zero). The Inspector warns when this combination is present. Note that when Unlit mode (Unlit Mode (ignore lighting) in the Inspector) is ON, the reflection calculation itself is skipped, so there is no cost and no warning.

# Soft Particles

A feature that removes the unnatural boundary line where semi-transparent objects (Fade/Additive, etc.) sink into opaque objects such as the ground or walls, blending them in smoothly.

PropertyDescription
Fade DistanceAdjusts the distance over which the boundary fades out (becomes see-through).

It works only when ZWrite is Off (with transparent presets). It is also disabled automatically on VRChat's thumbnail camera and the like (orthographic cameras) to prevent problems.

Soft particles work only when the VRChat world's camera generates a "depth texture". Specifically, it becomes effective when the world uses Deferred Rendering, uses post-processing, or uses other soft-particle shaders.
In simple Forward Rendering worlds that do not meet the above conditions, the soft particle feature is disabled automatically and shown as ordinary semi-transparent rendering.
This is a specification constraint that depends on the VRChat world's rendering settings and cannot be controlled from the avatar's shader. Other shaders for VRChat have the same constraint.
[Behavior in unsupported worlds] It is rendered semi-transparently with the boundary line remaining, but the effect itself is displayed normally. Nothing breaks, such as becoming fully transparent.

How to Control from Animations

By adding the following property names as keyframes in the Unity Animator, you can move effects over time.

Material._Color // Color (RGBA) - overall color Material._ColorIntensity // Float - overall brightness Material._HueShift // Float - hue shift (0-1) Material._Saturation // Float - saturation (1 = no change) Material._Brightness // Float - brightness (1 = no change) Material._Layer1Color // Color (HDR) - texture layer color tint Material._Layer1Opacity // Float - layer blend strength (0-1) Material._Layer1AlphaMask // Float (0/1) - alpha mask ON/OFF (appear / disappear effects) Material._FakeShadowColor // Color - Fake Shadow Texture shadow color Material._FakeShadowStrength // Float - Fake Shadow Texture strength (0 = off) Material._FakeShadowOffset // Vector - Fake Shadow Texture position (X,Y) Material._FSMeshColor // Color - Fake Shadow Mesh shadow color Material._FSMeshStrength // Float - Fake Shadow Mesh strength (0 = off) Material._FSMeshDistance // Float - Fake Shadow Mesh cast distance (-2 to 2) Material._FSReceiveRange // Float - Fake Shadow Mesh receive depth Material._EmissionColor // Color (HDR) - emission color Material._EmissionIntensity // Float - emission strength Material._EmissionPulseSpeed // Float - emission pulse speed (0 = off) Material._DissolveThreshold // Float - dissolve progress (-1.0 to 1.1) Material._RimColor // Color (HDR) - rim light color Material._RimPower // Float - rim light thickness Material._RimIntensity // Float - rim light strength Material._RimBlendMode // Float (0/1) - 0 = Add (additive glow) / 1 = Multiply (darken, black rim) Material._RimEnvAdapt // Float - rim Environment Adapt (0-1) Material._RimEnvFloor // Float - rim Dark Floor (0-1) Material._RimEnvTint // Float - rim Environment Tint (0-1) Material._RimUseMask // Float (0/1) - rim mask ON/OFF Material._RimShadeColor // Color - Rim Shade (dark edge) color Material._RimShadeIntensity // Float - Rim Shade (dark edge) strength Material._BackLightColor // Color (HDR) - back light color Material._BackLightIntensity // Float - back light strength Material._BackLightEnvAdapt // Float - back light Environment Adapt (0-1) Material._BackLightEnvFloor // Float - back light Dark Floor (0-1) Material._BackLightEnvTint // Float - back light Environment Tint (0-1) Material._OutlineColor // Color (HDR) - outline color Material._OutlineIntensity // Float - outline glow strength Material._OutlineBaseGlow // Float - Sweep base tube brightness (contrast with the streak) Material._OutlineSelfGlow // Float - outline self-illumination (0 = follow lighting / 1 = self-emit) Material._OutlineSweepSpeed // Float - Sweep orbit speed (sign reverses direction) Material._UseOutlineMask // Float (0/1) - outline mask ON/OFF Material._OutlineAlphaSync // Float (0/1) - whether the outline follows the body's transparency Material._MatcapStrength // Float - Matcap blend strength Material._MatcapColor // Color - Matcap color tint Material._Matcap2Strength // Float - 2nd Matcap blend strength Material._Matcap2Color // Color - 2nd Matcap color tint Material._Matcap3Strength // Float - 3rd Matcap blend strength Material._Matcap3Color // Color - 3rd Matcap color tint Material._ReflectionStrength // Float - reflection influence (environment reflection strength) Material._LightMinLimit // Float - ambient clamp lower bound Material._LightMaxLimit // Float - ambient clamp upper bound Material._ReceiveShadow // Float (0/1) - receive cast shadows ON/OFF Material._ShadowPseudoLight // Float - pseudo light amount (how the shadow direction is decided, 0-1) Material._UseShadow2nd // Float (0/1) - 2nd shadow ON/OFF Material._UseShadow3rd // Float (0/1) - 3rd shadow ON/OFF Material._UseShadowBorderColor // Float (0/1) - shadow boundary tint ON/OFF Material._Shadow2ndColor // Color - 2nd shadow color (alpha = strength) Material._Shadow3rdColor // Color - 3rd shadow color (alpha = strength) Material._ShadowBorderColor // Color - shadow boundary tint color (alpha = strength) Material._UseDitherFade // Float (0/1) - dithered pseudo-transparency ON/OFF Material._DistanceDarkenColor // Color - distance darken color Material._DistanceDarkenStrength // Float - distance darken strength Material._AudioLinkEmission // Float - AudioLink reaction amount (Master) Material._AudioLinkEmissionColor // Color (HDR) - AudioLink emission color Material._AudioLinkEmissionIntensity // Float - AudioLink emission strength Material._GlitterColor // Color (HDR) - Glitter emission color Material._GlitterIntensity // Float - Glitter emission strength Material._GlitterSpeed // Float - Glitter flicker speed Material._GlitterScrollSpeed // Vector - Glitter scroll speed (X,Y) Material._GlitterALStrength // Float - Glitter AudioLink strength

Steps (VRChat Avatar example)

  1. Open the Animator Controller
  2. Add keyframes with the target GameObject selected
  3. Add Property → Skinned Mesh Renderer (or Mesh Renderer) → Materials → the target material → add the property names above

Using with Particles (Particle System)

This shader is designed with use in particle effects in mind.

  1. Set this material in the Particle System's Renderer > Material
  2. Change the material's Vertex Color Blend Mode to Multiply

That is all it takes. No additional settings such as checking Enable Mesh GPU Instancing or Custom Vertex Streams are needed.

SEC. 19 — MISC

Performance & License

// performance, fallback, license, changelog

Performance & Optimization

This shader is maximally optimized for lightweight operation and compile speed in the VRChat environment.

  • Drawing passes not used for avatar purposes (ShadowCaster, Deferred passes) and internal variants for fog/lightmaps are completely purged, greatly shortening build (upload) time.

About VRChat Fallback

The shader has the "VRCFallback" = "Standard" tag set.

Even if a custom shader is disabled by another user's Safety settings within VRChat, it is automatically replaced with Unity's built-in Standard shader, preventing the avatar from turning pink (material error).

References & Acknowledgements

In developing ARLitToon, we referenced the specifications and design of the following prior shaders and libraries. We extend our respect and gratitude to each project and author who has published such excellent work.

  • lilToon (lilxyzw) — Referenced for avatar-oriented toon-expression feature specifications. https://github.com/lilxyzw/lilToon
  • OpenLit (lilxyzw) — Referenced for lighting settings, particularly the approach to brightness control (handling of additional lights and upper-bound clamping) in environments with many realtime lights. https://github.com/lilxyzw/OpenLit
  • Unity Built-in Shaders (Unity Technologies) — Unity's standard lighting pipeline is used to resolve ambient light and environment reflection (Global Illumination / reflection probes).
  • AudioLink (the AudioLink project) — The music-reactive emission feature is implemented in compliance with AudioLink's specification (the globally-provided audio data texture supplied by the world). https://github.com/llealloo/audiolink

This shader does not reuse the above code as-is; it is an original implementation referencing their publicly available specifications and design philosophy.

Terms of Use (License)

The English translation below is provided for convenience. If it and the Japanese original differ in interpretation, the Japanese original prevails (Article 13). The full Japanese original follows the translation.

ARLitToon Terms of Use, 2nd Edition (effective from the release date of the version with which these Terms are bundled)

By obtaining or using this shader, you are deemed to have agreed to the following Terms of Use.

# Article 1 (Scope)

  1. These Terms apply to the version of ARLitToon with which they are bundled, and to its Modified Works.
  2. Versions released before these Terms took effect remain subject to the terms of use bundled with each of those versions.
  3. The terms of use may change in a newer version. If you obtain or use a newer version, the terms of use bundled with that version apply.
  4. If This Shader is bundled with another product (such as a halo asset), these Terms, not that product's terms of use, apply to the portion that is This Shader.

# Article 2 (Definitions)

  • "This Shader": ARLitToon.shader, ARLitToonGUI.cs, ARLitToonBaker.cs, README.md and the other files that make up ARLitToon.
  • "Modified Works": anything created by modifying, adapting, porting or reusing all or part of This Shader (including anything converted for other rendering pipelines).
  • "Social VR Platform": VRChat or any other online service where users upload the avatars, worlds, etc. they have created and interact with other users.
  • "Social VR Use": the incorporation of This Shader into avatars, worlds, avatar gimmicks, world items, etc. that are uploaded to a Social VR Platform; the creation, sale and distribution of those items; use, photography and streaming on a Social VR Platform; and the creation and publication of promotional images and videos for them (including creation and rendering in the Unity Editor).
  • "Organizations": juridical persons and unincorporated associations (organizations without legal personality). However, sole proprietors and doujin circles (independent creator groups) are treated as "Individuals".
  • "Individuals": natural persons other than Organizations (including sole proprietors and doujin circles).

# Article 3 (Copyright)

  1. The copyright of This Shader belongs to ARL.
  2. In Modified Works as well, the copyright of the portions derived from This Shader belongs to ARL. These Terms apply to the use and distribution of Modified Works.

# Article 4 (Social VR Use)

Both Individuals and Organizations may do the following without any usage fee beyond the price required to obtain This Shader (or a product that bundles it):

  • Social VR Use (including commercial use).
  • Selling and distributing, for Social VR Use, 3D models (avatars, avatar gimmicks, world items, etc.) that bundle This Shader.
  • Modifying the code and GUI script of This Shader (within the scope of Article 6).

# Article 5 (Use Other Than Social VR Use)

  1. Individuals may use This Shader for purposes other than Social VR Use (including commercial use) without any additional usage fee.
  2. An Organization that uses This Shader in the course of its business for purposes other than Social VR Use (including incorporating it into games, applications, video works, etc.) must conclude a separate license agreement with ARL in advance.
  3. Contact: the message feature of the ALTIMA official shop (https://altima.booth.pm/)

# Article 6 (Supported Rendering Pipeline)

This Shader and Modified Works are licensed only for use with Unity's Built-in Render Pipeline. Notwithstanding Articles 4 and 5, porting or converting them for URP, HDRP or any other rendering pipeline, and using such ports or conversions, may not be carried out without ARL's prior permission.

# Article 7 (Provision Through Other Sales Channels)

ARL may provide This Shader through other sales channels under conditions different from these Terms. If you obtain it through such a sales channel, the terms of use of that sales channel apply, and these Terms do not.

# Article 8 (Required Files When Bundling for Distribution)

When you bundle the ARLitToon shader with your work (avatars, gimmicks, world items, etc.) for distribution or sale, always bundle the following 3 files together as a set so that the shader works correctly.

  • ARLitToon.shader (the shader itself)
  • ARLitToonGUI.cs (GUI script for the material Inspector / inside an Editor folder)
  • README.md (this guide)

※ If ARLitToonGUI.cs is missing, the Inspector's custom GUI is not displayed and materials cannot be set up correctly. Bundle README.md so that recipients receive the usage instructions and these Terms of Use.

[File recommended for bundling]

  • ARLitToonBaker.cs (texture baking tool / inside an Editor folder)

※ This file is not required, but bundling it is recommended. If it is bundled, recipients can also use Bake to Base (baking). Without it, the shader still works completely normally; only the baking feature is unavailable.
※ If Unity compilation ever fails because of this one file (due to version differences, conflicts with other assets, etc.), deleting ARLitToonBaker.cs restores things. This is why it is not required.

# Article 9 (Prohibited Acts)

  • Unauthorized redistribution, reposting or sale of This Shader (including Modified Works) on its own (※ bundling it with your own work for sale or distribution is fine).
  • Uploading an avatar that uses This Shader as a "public avatar" on a Social VR Platform (making it possible for third parties to clone or extract the avatar).
  • Any use beyond the scope permitted by these Terms.

# Article 10 (Credit)

Crediting the author's name (ARL) or this shader's name (ARLitToon) is optional (not required).

# Article 11 (Disclaimer)

ARL shall not be liable for any trouble or damage arising from the use of This Shader, except where caused by ARL's intentional misconduct or gross negligence.

# Article 12 (Changes to These Terms)

When laws are revised or when otherwise necessary, ARL may change these Terms in accordance with the provisions of the Civil Code of Japan, after announcing the content of the change and its effective date in advance in this README or on the sales page.

# Article 13 (Governing Law and Authoritative Text)

These Terms are governed by the laws of Japan, and the Japanese version is the authoritative text. If a translated version and the Japanese version differ in interpretation, the Japanese version prevails.

Terms of Use — Japanese original (authoritative)

ARLitToon 利用規約 第2版(本規約を同梱した版の公開日から施行します)

本シェーダーを入手した時点、または利用した時点で、以下の利用規約に同意したものとみなします。

# 第1条(適用範囲)

  1. 本規約は、本規約を同梱した版の ARLitToon およびその改変物に適用されます。
  2. 本規約の施行前の版には、その版に同梱された利用規約が引き続き適用されます。
  3. 新しい版では利用規約が変更されることがあります。新しい版を入手または利用した場合は、その版に同梱された利用規約が適用されます。
  4. 本シェーダーが他の商品(ヘイローアセット等)に同梱されている場合、本シェーダーの部分には、その商品の利用規約ではなく本規約が適用されます。

# 第2条(定義)

  • 「本シェーダー」:ARLitToon.shader、ARLitToonGUI.cs、ARLitToonBaker.cs、README.md その他 ARLitToon を構成するファイル。
  • 「改変物」:本シェーダーの全部または一部を改変・翻案・移植・流用して作成したもの(他のレンダリングパイプライン向けに変換したものを含みます)。
  • 「ソーシャル VR プラットフォーム」:VRChat その他、利用者が作成したアバター・ワールド等をアップロードし、他の利用者と交流するためのオンラインサービス。
  • 「ソーシャル VR 向けの利用」:ソーシャル VR プラットフォームにアップロードされるアバター・ワールド・アバターギミック・ワールドアイテム等への組み込み、それらの制作・販売・配布、ソーシャル VR プラットフォーム上での使用・撮影・配信、およびそれらの宣伝用の画像・動画の制作と公開(Unity エディタ上での制作・レンダリングを含みます)。
  • 「法人等」:法人および法人格のない団体。ただし、個人事業主および同人サークルは「個人」として扱います。
  • 「個人」:法人等以外の自然人(個人事業主および同人サークルを含みます)。

# 第3条(著作権)

  1. 本シェーダーの著作権は ARL に帰属します。
  2. 改変物においても、本シェーダーに由来する部分の著作権は ARL に帰属します。改変物の利用・配布には本規約が適用されます。

# 第4条(ソーシャル VR 向けの利用)

個人・法人等を問わず、本シェーダー(またはこれを同梱した商品)の入手に要する代金のほかに追加の使用料なく、次のことができます。

  • ソーシャル VR 向けの利用(商用利用を含みます)。
  • 本シェーダーを同梱した3Dモデル(アバター、アバターギミック、ワールドアイテム等)の、ソーシャル VR 向けの販売および配布。
  • 本シェーダーのコードおよび GUI スクリプトの改変(第6条の範囲内)。

# 第5条(ソーシャル VR 向け以外での利用)

  1. 個人は、ソーシャル VR 向け以外での利用(商用利用を含みます)を追加の使用料なく行えます。
  2. 法人等が業務としてソーシャル VR 向け以外で利用する場合(ゲーム、アプリケーション、映像作品等への組み込みを含みます)は、事前に ARL との間で別途ライセンス契約を締結する必要があります。
  3. お問い合わせ先:ALTIMA 公式ショップ(https://altima.booth.pm/)のメッセージ機能

# 第6条(対応レンダリングパイプライン)

本シェーダーおよび改変物は、Unity の Built-in Render Pipeline での利用に限り許諾します。URP・HDRP その他のレンダリングパイプライン向けへの移植・変換およびその利用は、第4条・第5条にかかわらず、ARL の事前の許諾なく行うことはできません。

# 第7条(他の販売経路での提供)

ARL は、本シェーダーを本規約と異なる条件で他の販売経路から提供することがあります。その販売経路で入手した場合は、その販売経路の利用条件が適用され、本規約は適用されません。

# 第8条(同梱配布時の必須ファイル)

ARLitToon シェーダーを作品(アバター・ギミック・ワールドアイテム等)に同梱して配布・販売する場合は、シェーダーが正しく動作するよう、以下の 3 ファイルを必ずセットで同梱してください。

  • ARLitToon.shader(シェーダー本体)
  • ARLitToonGUI.cs(マテリアル Inspector 用 GUI スクリプト/Editor フォルダ内)
  • README.md(本ガイド)

※ ARLitToonGUI.cs が欠けると Inspector のカスタム GUI が表示されず、マテリアルを正しく設定できません。README.md は使用方法と本利用規約を受け取り手に伝えるために同梱してください。

【同梱を推奨するファイル】

  • ARLitToonBaker.cs(テクスチャ焼きこみツール/Editor フォルダ内)

※ こちらは必須ではありませんが、同梱を推奨します。同梱すると受け取り手も Bake to Base(焼きこみ)を使えます。同梱しなくてもシェーダーは完全に正常動作し、焼きこみの機能のみが使えなくなります。
※ 万一この 1 ファイルが原因で Unity のコンパイルが通らない場合(バージョン差や他アセットとの競合など)は、ARLitToonBaker.cs を削除すれば復旧します。必須にしていないのはこのためです。

# 第9条(禁止事項)

  • 本シェーダー(改変物を含みます)単体での無断再配布、転載、および販売(※ご自身の作品に同梱して販売・配布する場合は問題ありません)。
  • ソーシャル VR プラットフォームにおいて、本シェーダーを利用したアバターを「パブリックアバター」としてアップロードする行為(第三者がアバターをクローン・抽出できる状態にすること)。
  • 本規約で許諾されていない範囲での利用。

# 第10条(クレジット表記)

作者名(ARL)や本シェーダー名(ARLitToon)のクレジット表記は任意(不要)です。

# 第11条(免責事項)

本シェーダーの利用によって生じたトラブルや損害について、ARL は、ARL の故意または重大な過失による場合を除き、責任を負わないものとします。

# 第12条(規約の変更)

ARL は、法令の改正その他必要がある場合、民法の定めに従い、あらかじめ変更内容および効力発生日を本 README または販売ページで周知したうえで、本規約を変更することがあります。

# 第13条(準拠法・正文)

本規約は日本法に準拠し、日本語版を正文とします。翻訳版との間に解釈の相違がある場合は日本語版が優先します。