A shopfront and market pack in a „cozy gothic" mood - shipping with runtime systems, not just models. Quick Start, systems (cloth, signs, swing physics, global wind), scripting API, performance, troubleshooting and changelog.
Five steps to dress your first alley:
CCA Wind Manager component - one per scene, drives wind for cloth and signs together.Cloth (Banner) shader to flags/awnings - add CCA Cloth Variant for per-instance variety.Wooden Hanging Sign, add CCA Sign Swing to the Hanging_sing_base child (not the root!), set Chain Follower to chain2.Requirements: Unity 6000.3 LTS or newer, Universal Render Pipeline (URP) 17.x. Hand-written HLSL shaders (no Shader Graph), SRP Batcher compatible.
One awning/banner mesh → unlimited color, pattern and damage variants. Tearing, dirt, sun-bleach and wind sway - all procedural, on one shared material (MaterialPropertyBlock, zero extra material instances).
Override Colors is OFF by default - the banner keeps the material's color (e.g. a guild color), only weathering varies. Right-click the component header: Randomize (Colors + Weathering) or Randomize Weathering Only (keeps colors).
An editor window (Tools ▸ Serwus Studio ▸ Cursed Cozy Alley ▸ Cloth Randomizer) - pick a scope (selection / selection+children / whole scene), enable which properties to randomize (color, tear, dirt, wear, sway) with min–max ranges, and dress dozens of banners in one click. One Undo reverts the whole batch.
| Property | Description |
|---|---|
| Tear Amount | 0 = intact, 1 = rags. Holes grow from the edges inward. |
| Dirt Level | Procedural grime, multiply overlay. |
| Wear (Sun Bleach) | Desaturates and pales the fabric from sun exposure. |
| Sway Strength / Speed | Sway strength and speed; top or bottom edge stays pinned (Invert Sway Mask). |
| Shadow Tint | Toon shadow-side color (default: cool violet - the „cursed" mood). |
Two independent ways to put a graphic on a sign - a decal (icon quad, mesh-independent, works on any board) and a carved board (the graphic is carved directly into the board's own material, with depth and shaded grooves).
A quad floated ~1 cm in front of the board, using the Sign Icon (Decal) shader. Assign CCA_SignPresetLibrary and set Preset Index - the icon swaps instantly. Wear Amount peels the paint, Glow Strength adds a cursed rune glow (needs Bloom).
| Property | Description |
|---|---|
| Sign Icon (RGBA) | Your logo/icon as a PNG with alpha. |
| Wear Amount | 0 = freshly painted, 1 = almost gone. Thin brush strokes flake first. |
| Glow Color / Strength | Emissive „cursed" glow for runes (pair with Bloom). |
A separate shader - the graphic is rendered directly into the board's material with a carved effect (Carve Depth, Groove Shadow) instead of a painted-on decal. Use it on a dedicated sign-board mesh instead of the decal when you want a physically engraved look.
A lightweight spring-damper (not noise-driven) for hanging signs and lanterns - wood has inertia and heavy damping, so it settles instead of endlessly waving like a flag.
One rule that decides everything: the CCA Sign Swing component rotates whatever object it sits on - and everything parented under it. Put it on the child whose pivot is at the hinge (e.g. Hanging_sing_base), never on the root (the static wall bracket) - otherwise the whole model, bracket included, will swing.
| Field | Effect |
|---|---|
| Hinge Axis / Max Angle | Hinge axis and the hard swing limit in degrees. |
| Spring Strength / Damping | Spring strength and damping - heavy wood wants high damping. |
| Wind Force / Push Gain | Random idle gusts (work even without a Wind Manager) + steady push from global wind. |
| Chain Follower | Optional CHILD (e.g. the sign board hanging under the chains) that trails the swing with its own secondary spring - gives a two-part wobble. |
Only animates in Play mode (no [ExecuteAlways]) - it's a physics integration over time, so you can't preview it without pressing Play.
One scene object drives every cloth banner and every hinged sign at once through a shared shader global, _CCA_Wind. Runs in Edit Mode - cloth sway previews without pressing Play (the sign swing itself still needs Play, see section 04).
| Field | Description |
|---|---|
| Preset | Gentle / Normal / Stormy presets, or Custom for manual tuning. |
| Direction Yaw | World-space wind heading, degrees. |
| Base / Gust Strength | Steady push + extra strength at gust peaks. |
The same _CCA_Wind hook is shared with the Cursed Cozy Vegetation pack - if both are in the same scene, use one Wind Manager for everything.
Every variant and the swing physics are scriptable - change fields and call Apply():
// banner: the curse spreads... var banner = GetComponent<SerwusStudio.CCAClothVariant>(); banner.tearAmount = 0.6f; banner.Apply(); // sign: swap the icon for a cursed rune var sign = GetComponent<SerwusStudio.CCASignVariant>(); sign.presetIndex = 2; sign.Apply(); // player bumps into a hanging sign var swing = GetComponent<SerwusStudio.CCASignSwing>(); swing.AddImpulse(120f); // degrees/second
The full field and component reference (including CCAWindManager.CurrentStrength / CurrentWind) is in the PDF documentation shipped with the package.
UnityPerMaterial cbuffers, so every shader in the pack batches correctly.CCASignSwing - it is a plain Update() spring-damper per sign. Cheap, but real CPU work per instance (unlike GPU-only cloth sway). It is meant for the handful of hero hanging signs in a scene, not hundreds.| Symptom | Cause and fix |
|---|---|
| The material renders pink | Your project is not on URP 17 / Unity 6, or URP is not the active render pipeline. Check Project Settings → Graphics. |
| The icon quad z-fights with the board | Move the quad slightly further from the board (1–2 cm). The shader already applies polygon offset, but extreme camera distances may need more spacing. |
| The cursed glow does not glow | Glow needs Glow Strength > 0 and a Bloom post-process (Volume) with HDR enabled on the camera. |
| My banner doesn't sway | Check Sway Strength > 0. If the wrong edge is pinned, toggle Invert Sway Mask. The mesh needs some vertex density - a one-quad plane can only swing as a whole. |
| Tears don't show up | Tear Amount below ~0.1 is intentionally subtle. Also make sure your mesh UVs cover 0–1 - tearing is computed in UV space, and holes start at UV borders. |
| The whole hanging sign swings, bracket and all | CCA Sign Swing is on the wrong object - most likely the prefab root (the static wall bracket) instead of the hinge pivot. Move it to Hanging_sing_base and set Chain Follower to chain2. |
| My hanging sign doesn't move at all, even with a Wind Manager in the scene | CCASignSwing only animates in Play mode - press Play. Also check Max Angle isn't 0 and Spring/Damping aren't both extreme. |
| My banners and signs don't react together, or don't react to weather presets | Add a CCA Wind Manager to the scene. Without one, cloth uses only its own local sway and CCASignSwing uses only its baseline idle gusts. |
| Can I animate damage at runtime? | Yes - all variant component fields are plain serialized floats and colors. Drive them from Timeline, animation or code and call Apply(). |
| Built-in / HDRP / UE5? | This version targets Unity 6 + URP. Other pipelines are on the roadmap for the full release. |
Physics and wind systems. New: global wind (CCA Wind Manager, Gentle/Normal/Stormy presets), hanging sign physics (CCASignSwing, spring-damper + secondary chain lag), Cloth Randomizer batch tool, carved sign board shader (CCA_SignBoard), prop/glass/VFX shaders (godray, fog). Shopfront architecture (walls, arches) moved out to the companion Gothic Interiors pack.
Initial systems release. Banner & Cloth Color System, Custom Sign System, shared toon lighting + procedural noise includes, 5 example materials, preset library with placeholder icons.