CustomSosigToonSkin

v1.0.0·Updated 2026-10-01

Cel shading, #FF06B5 outline and rim light for custom Sosig models. RealToon based, stereo-safe, configurable.

About this mod Machine translation

Now with 200% more edge

"Rendering is 90% making sure the model shows up in both eyes." — every VR shader I have ever written

Swaps the plain Standard material that CustomSosigModelFramework builds for custom Sosig models with a cel-shaded RealToon material: flat toon ramp, #FF06B5 outline and a matching rim light. The framework does not expose a shader hook, so this is a small BepInEx companion plugin that patches the framework's material factory and hands back a prebuilt AssetBundle material instead.

Built for NikoSosig, but it is not locked to it — point NameFilter somewhere else and it will shade whatever model you like.

Features

  • Cel shading with configurable ramp, shadow tint and rim light
  • #FF06B5 inverted-hull outline (colour and width configurable)
  • Normal maps, alpha cutout and vanilla tint are carried over from the framework's material
  • Toon.ShaderMode switches between four bundled materials at runtime: RealToon (default), RealToonLite, Simple (my own single-pass cel shader, no outline) and Probe (a stereo diagnostic that paints the per-eye state)
  • Toon.NameFilter keeps it from touching other people's model addons
  • Bonus: patches the framework's hand IK reach gate (Motion.HandIkReachMeters), which is useful for any model whose arms are not Sosig-proportioned
  • Delete the folder and you are back to the vanilla look instantly — nothing is written outside the config

Known Issues and Limitations

  • The bundle ships a modified copy of the RealToon shader. If the shader author ever objects to that, Toon.ShaderMode = Simple uses a shader I wrote myself, so the plugin keeps working
  • The patch targets the framework's internal CreateMaterial signature. If a framework update changes it, the plugin logs the failure and stays passive instead of breaking Sosigs — but then it needs an update from me
  • The toon material is 4 passes (outline + forward + variants) instead of 1, so it costs a bit more than the default material. Fine on modern GPUs, noticeable on potatoes
  • Outline width is in the shader's own units — very large values start to clip at close range
  • It only rebuilds materials whose name or albedo path contains NameFilter (default Niko). Other model addons keep the default look on purpose
  • The cel look is tuned for Niko's texture palette (#FF06B5). Apply it to another model and you may want to change OutlineColor/RimLightColor

I Asked Myself These Questions

How do I make it affect another model addon?

  • Set Toon.NameFilter in BepInEx/config/niko666.customsosigtoonskin.cfg to something that appears in that addon's material name or texture path. Leave it empty to shade every addon the framework loads

My model has no outline / is not cel shaded

  • Check the log for Toon material '...': mode=.... If the plugin never mentions your model, NameFilter did not match it. If the log never mentions the plugin at all, the framework was not found

How do I turn it off?

  • Toon.Enabled = false in the config (then restart), or just delete the plugin folder

One eye renders the model in the wrong place

  • That is the classic symptom of a homemade AssetBundle whose shaders were compiled in a Unity project without VR enabled — the shader has no per-eye code path, so it renders for one eye only. It is fixed in this bundle; if you repackage it yourself, set PlayerSettings.virtualRealitySupported = true and stereoRenderingPath = SinglePass before building
  • Toon.ShaderMode = Probe prints what the shader sees per eye if it ever comes back

The hands are still not on the gun

  • That is the model, not the shader. Raise Motion.HandIkReachMeters from 0.22 to 0.35–0.5 and restart

It looks broken

  • Tell me on Discord: Niko_Niko666 (UTC+8, slow replies). Or just change the config — OutlineWidth = 0 and RimLightPower = 0 get you a plain flat-shaded look

Credits

  • RealToon by MJQ Studio Works for the shader this is built on
  • NotGodlike for CustomSosigModelFramework
  • The H3VR community for the endless shader debugging lore
  • You

Generative …

Install & use Install: BepInEx plugin

  1. The archive from playbuff is the mod itself — usually a BepInEx plugin (a .dll or a plugin folder once unzipped).
  2. Recommended: use a community mod manager (such as r2modman) — pick this game, import the mod, and the manager sets up BepInEx and its dependencies for you.
  3. Manual route: install the BepInEx loader in the game folder, then drop the unzipped .dll or plugin folder into BepInEx/plugins/.
  4. Launch the game — the BepInEx console logs every plugin it loads; seeing this mod in the log means it is installed.

Mods with listed dependencies need those installed too, or they will not load. Options are usually changed in-game or in the plugin's config file.

Dependencies

Install these first, or the mod will not work:

NotGodlike-CustomSosigModelFramework

File & checksum

Filename
CustomSosigToonSkin-1.0.0.zip
File size
168.8 KiB