Niko666-CustomSosigToonSkin icon

CustomSosigToonSkin

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

By Niko666
Last updated 7 hours ago
Total downloads 40
Total rating 0 
Categories Tools
Dependency string Niko666-CustomSosigToonSkin-1.0.0
Dependants 1 other package depends on this package

This mod requires the following mods to function

NotGodlike-CustomSosigModelFramework-1.0.0 icon
NotGodlike-CustomSosigModelFramework

A modular custom sosig model framework for H3VR

Preferred version: 1.0.0

README

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

  • State-of-the-art Shitcode 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: 妮可_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 AI Disclosure

This plugin, its shader variants and the bundle build pipeline were written with Deepseek (The Blue Fat Whale) 's help. The stereo failure that wasted an evening was diagnosed with in-game probes rather than guesswork, and the final build was verified in a headset (both eyes, outline, rim light, hands).

ko-fi