// Serwus Studio · Cursed Cozy Village series · v0.2

Shop Alley - Documentation

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.

Unity 6000.3+URP 17 · Forward / Forward+ Namespace SerwusStudioNo third-party dependencies

01Quick Start

Five steps to dress your first alley:

  1. Add an empty object with a CCA Wind Manager component - one per scene, drives wind for cloth and signs together.
  2. Place the counter, shelves and shopfront (the window walls live in the companion Gothic Interiors pack - both must be in the project together).
  3. Assign a material using the Cloth (Banner) shader to flags/awnings - add CCA Cloth Variant for per-instance variety.
  4. Hang the Wooden Hanging Sign, add CCA Sign Swing to the Hanging_sing_base child (not the root!), set Chain Follower to chain2.
  5. Press Play - cloth already sways in the editor, the sign starts swinging once you press Play.

Requirements: Unity 6000.3 LTS or newer, Universal Render Pipeline (URP) 17.x. Hand-written HLSL shaders (no Shader Graph), SRP Batcher compatible.

02Banner & Cloth Color System

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).

CCA Cloth Variant - per-instance variant

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).

Cloth Randomizer - batch dressing

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.

PropertyDescription
Tear Amount0 = intact, 1 = rags. Holes grow from the edges inward.
Dirt LevelProcedural grime, multiply overlay.
Wear (Sun Bleach)Desaturates and pales the fabric from sun exposure.
Sway Strength / SpeedSway strength and speed; top or bottom edge stays pinned (Invert Sway Mask).
Shadow TintToon shadow-side color (default: cool violet - the „cursed" mood).

03Sign System

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).

CCA Sign Variant - decal

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).

PropertyDescription
Sign Icon (RGBA)Your logo/icon as a PNG with alpha.
Wear Amount0 = freshly painted, 1 = almost gone. Thin brush strokes flake first.
Glow Color / StrengthEmissive „cursed" glow for runes (pair with Bloom).

CCA_SignBoard - carved board

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.

04Hanging Sign Physics

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.

Key fields

FieldEffect
Hinge Axis / Max AngleHinge axis and the hard swing limit in degrees.
Spring Strength / DampingSpring strength and damping - heavy wood wants high damping.
Wind Force / Push GainRandom idle gusts (work even without a Wind Manager) + steady push from global wind.
Chain FollowerOptional 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.

05Global Wind - CCA Wind Manager

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).

FieldDescription
PresetGentle / Normal / Stormy presets, or Custom for manual tuning.
Direction YawWorld-space wind heading, degrees.
Base / Gust StrengthSteady 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.

06Scripting API

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.

07Performance notes

08Troubleshooting

SymptomCause 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.

09Changelog

0.22026-07

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.

0.12026-06

Initial systems release. Banner & Cloth Color System, Custom Sign System, shared toon lighting + procedural noise includes, 5 example materials, preset library with placeholder icons.