Corner Store Sampler
Version 1.0.0, released 7 November 2026 by Socket & Pivot.
The Corner Store Sampler is a free set of ten props from the Corner Store universe. Each prop is built to be used in a game, not only rendered: the fridge door opens and its shelves are stocked, the register drawer slides out, the pedal bin lid lifts, and packaged products can be taken off a shelf and put back. One small interaction system and one data table drive all of it, and both can be reused for props of your own.
The brands on the packaging are invented for this kit. No generative AI was used to make the meshes, the textures or the label artwork.
1. Contents
| Prop | Unreal Engine assets | Behaviour |
|---|---|---|
| Fridge | BP_Fridge, using SM_Fridge_Body and SM_Fridge_Door |
The door opens 100° on its hinge. An interior light and three shelf sockets (Slot_1 to Slot_3). |
| Wall shelf, 100 cm | SM_Shelf_Wall_100 |
Five shelf sockets (Slot_0 to Slot_4) for stocked rows of product. |
| Cash register | BP_Register, using SM_Register_Body and SM_Register_Drawer |
The cash drawer slides out 26 cm. |
| Pedal bin | BP_PedalBin, using SM_Bin_Pedal_Body and SM_Bin_Pedal_Lid |
The lid opens 75° on its rear hinge. |
| Shopping basket | BP_Basket, using SM_Basket_Shopping |
Can be picked up, carried and dropped. |
| Socket Soda can (lime, cherry, orange) | SM_Can_Soda |
Products can be taken from a shelf slot, carried, dropped and put back. |
| Pivot Spring water | SM_Bottle_Water |
As above. |
| Greybox Dairy milk | SM_Carton_Milk |
As above. |
| Tessel Crisps | SM_Bag_Crisps |
As above. |
| Morning Grid cereal | SM_Box_Cereal |
As above. |
The kit also contains:
| Item | Assets |
|---|---|
| Interaction system | BPC_Interactable, BPC_Interactor, BP_Pickup |
| Stocked shelf row | BP_ShelfSlot |
| Product data | DT_StoreItems (7 rows), struct S_SP_StoreItem, enum E_SP_SizeClass |
| Input and demo player | IA_SP_Move, IA_SP_Look, IA_SP_Jump, IA_SP_Interact, IMC_SP_Demo, BP_SP_DemoCharacter, BP_SP_DemoHUD, BP_SP_DemoGameMode |
| Maps | L_Sampler_Demo, a lit and stocked corner of a shop; L_Sampler_Overview, every asset and data-table row with a label |
The download contains three versions of the kit: an Unreal Engine project, a Blender asset library, and FBX files with their textures for other software.
2. Compatibility
| Software | Tested with | Notes |
|---|---|---|
| Unreal Engine | 5.8.3 on Windows 11, DirectX 12, Shader Model 6 | The project is saved in 5.8 and cannot be opened in earlier versions. Mac, Linux, consoles and mobile have not been tested. |
| Blender | 5.2 LTS | Assets were tested with both Append and Link. Blender 4.5 LTS and 5.3 have not been tested. |
| Rendering | Lumen, Virtual Shadow Maps, Nanite | Every mesh also has LODs for platforms without Nanite. Baked lighting has not been tested. |
3. Installation
Opening the Unreal Engine project
Open UE5/SP_CornerStoreSampler/SP_CornerStoreSampler.uproject in Unreal Engine 5.8. The editor starts on L_Sampler_Demo; press Play to walk around it. The first time the project opens, Unreal compiles shaders for the two master materials, so the first start takes longer than later ones.
Adding the props to an existing project
- Close the project.
- Copy the folder
UE5/SP_CornerStoreSampler/Content/SocketAndPivotinto the project'sContentfolder. Keep the folder name unchanged. - Open the project and load
SocketAndPivot/CornerStore/Maps/L_Sampler_Demo.
The demo maps set their own GameMode override, so no project settings need to change. Projects created in Unreal Engine 5 use Enhanced Input by default. An older project may still use the legacy input classes; in that case, open Project Settings > Input and set Default Player Input Class to EnhancedPlayerInput and Default Input Component Class to EnhancedInputComponent.
Blender
Open Edit > Preferences > File Paths > Asset Libraries, click Add, and choose the Blender folder from this download. That folder contains SP_CornerStoreSampler_Library.blend, the catalogue file and the textures. The props then appear in the Asset Browser under Corner Store, split into Fixtures and Products. Append (Reuse Data) is the recommended import method; Link also works.
Opening the .blend file directly shows every asset side by side in the Showcase collection.
FBX files
Exports/FBX holds one FBX file per prop, in centimetres with Z up. Seen in Blender's axes, the front of each prop faces -Y; once imported into Unreal Engine it faces +Y. The files include the collision hulls (UCX_) and sockets (SOCKET_) that Unreal Engine reads on import. Other software can ignore or delete them. Textures are in Exports/Textures, and Exports/materials.csv lists the textures and settings for every material.
4. Demo controls
| Action | Keyboard and mouse | Gamepad |
|---|---|---|
| Move | W, A, S, D | Left stick |
| Look | Mouse | Right stick |
| Jump | Space | Bottom face button |
| Interact | E | Left face button |
When you look at an object you can use, its edges light up in chartreuse and its prompt appears beside the crosshair.
5. Folder structure and naming
Content/SocketAndPivot/
Core/ Shared by every Socket & Pivot kit
Blueprints/ BPC_Interactable, BPC_Interactor, BP_Pickup, BP_SP_DemoCharacter, BP_SP_DemoHUD, BP_SP_DemoGameMode
Data/ S_SP_StoreItem, E_SP_SizeClass
Input/ IA_SP_Move, IA_SP_Look, IA_SP_Jump, IA_SP_Interact, IMC_SP_Demo
Materials/ M_SP_Master, M_SP_Glass and the MI_SP_ surface instances
Textures/ T_Surface_ and T_Default_ textures
CornerStore/ This kit
Blueprints/ BP_Fridge, BP_Register, BP_PedalBin, BP_Basket, BP_ShelfSlot
Data/ DT_StoreItems
Maps/ L_Sampler_Demo, L_Sampler_Overview
Materials/ MI_Label_ instances for the printed packaging
Meshes/Fixtures/ Fridge, shelf, register, bin and basket meshes
Meshes/Products/ Packaged product meshes
Textures/ T_Label_ textures
Demo/ Room, counter and light panel used only by the demo maps
The Core folder is the same in every Socket & Pivot kit. When a second kit is installed into the same project, both use one Core folder, and the newer copy should be kept.
Asset names use these prefixes:
| Prefix | Asset type | Prefix | Asset type |
|---|---|---|---|
SM_ |
Static mesh | M_ |
Material |
BP_ |
Blueprint | MI_ |
Material instance |
BPC_ |
Blueprint component | T_ |
Texture (_D colour, _N normal, _ORM packed masks) |
DT_ |
Data table | IA_, IMC_ |
Enhanced Input action and mapping context |
S_, E_ |
Struct, enum | L_ |
Level |
6. The interaction system
Two Blueprint components handle every interaction in the kit.
BPC_Interactor belongs on the player pawn. Twenty times a second it traces a line from the camera along the Visibility channel, up to TraceDistance (250 cm by default). If the line hits an actor that owns a BPC_Interactable, that component becomes the focus. The focused object is highlighted, and GetPromptText returns the prompt the HUD displays.
TryInteract is called when the player presses Interact. With empty hands, a carryable actor in view is picked up, and anything else runs the focused component's Interact function. With an item in hand, the outcome depends on what is in view:
| In view | Result |
|---|---|
| A slot that stocks the same product | The item goes back on the shelf. |
| A door, drawer or lid | It opens or closes, and the player keeps holding the item. |
| A slot for another product, or another carryable actor | No prompt is shown and nothing happens. |
| Nothing interactive | The item is dropped. |
BPC_Interactable belongs on anything the player can use. Its settings:
| Setting | Purpose |
|---|---|
MovingPart |
The component that moves when the object opens. Set it in the owning actor's construction script. |
OpenRotation, OpenOffset |
The change in relative rotation and location between closed and open. |
OpenTime |
Duration of the eased movement, in seconds. |
Prompt, PromptWhenOpen, PromptWhileHolding |
Text shown to the player in each state. |
PickUp |
When enabled, the player carries the whole actor instead of opening it. |
HighlightWholeActor |
Highlights every mesh of the actor rather than only the one in view. |
OnInteracted |
Event dispatcher, called with the interactor and the hit component, for custom behaviour. |
The highlight is done in the material. When an object gains focus, its meshes receive the value 1 in Custom Primitive Data index 0. M_SP_Master and M_SP_Glass read that value as their Highlight parameter and add a chartreuse Fresnel rim with a 16 % tint towards the same colour. Because nothing is drawn as an overlay or post-process pass, the effect also works on Nanite meshes. To highlight objects that use your own materials, add a scalar parameter to them with Use Custom Primitive Data enabled at index 0.
7. Shelf slots
BP_ShelfSlot represents one row of a single product on a shelf. It attaches to any socket whose name starts with Slot_. The wall shelf has five such sockets and the fridge has three.
| Variable | Purpose |
|---|---|
ItemRow |
The DT_StoreItems row to stock. |
Width, Depth |
Usable shelf area in centimetres: 92 × 34 on the wall shelf, 50 × 46 in the fridge. |
MaxRows |
Maximum number of rows from front to back. |
Gap |
Space between units, in centimetres. |
FillPercent |
How full the slot starts, from 0 to 1. |
Seed |
Changes which positions start empty. |
The construction script works out how many units fit from the product mesh's bounds and the row's Facings value, and lays them out. During play, taking a unit spawns a BP_Pickup in the player's hands. The unit can go back into any empty position of a slot that stocks the same product; a slot holding a different product shows no prompt and keeps it out.
To place a slot by hand, drag BP_ShelfSlot into the level. In the Details panel, set its parent to the shelf or fridge, choose the socket, and reset its relative location and rotation to zero. In a Blueprint, use Attach Actor To Component with the Snap to Target rules. Both shelves and the fridge in L_Sampler_Demo are set up this way.
8. The product data table
DT_StoreItems uses the struct S_SP_StoreItem, which has these fields:
| Field | Purpose |
|---|---|
DisplayName |
Name shown to the player. |
Category |
Shelf category, such as Drinks or Snacks. |
Price |
Shelf price in your game's currency. |
SizeClass |
Small, Medium or Large. |
Mesh |
The product's static mesh. |
Facings |
How many units sit side by side when the product fills a slot. |
OverrideSlot, OverrideMaterial |
Optional. Replaces one material slot, which is how the three Socket Soda flavours share a single can mesh. |
Pickable |
Whether the player can pick the product up. |
9. Prop Blueprints
| Blueprint | Moving part | Movement | Body socket |
|---|---|---|---|
BP_Fridge |
Door |
Rotates -100° in yaw | Hinge_Door. A 900 lm, 7000 K rect light sits at Light_Interior. |
BP_Register |
Drawer |
Slides 26 cm | Slide_Drawer |
BP_PedalBin |
Lid |
Rotates -75° in roll | Hinge_Lid |
BP_Basket |
None | Carried as a whole | None |
On the fridge, looking at any part of the cabinet and pressing Interact opens or closes the door. Carried items are held in front of the camera, and they drop to the floor under physics when released.
10. Using your own character
Add BPC_Interactor to your player pawn and call its TryInteract function from your own Interact input. For the prompt, either read GetPromptText from your interface or bind to the OnFocusChanged dispatcher. BP_SP_DemoHUD exists only to make the demo playable and can be replaced with your own UMG widget.
11. Extending the kit
Adding a product
Import the mesh with its pivot at the centre of its base and its front facing +Y. Add a row for it to DT_StoreItems, then use that row in a BP_ShelfSlot or a BP_Pickup.
Adding a variant of an existing product
Duplicate the product's label material instance, for example MI_Label_SocketSoda_Lime, and assign a new BaseColorMap. Then add a data-table row that names the label's material slot in OverrideSlot and the new instance in OverrideMaterial.
Making another actor interactive
Add a BPC_Interactable component. For a door, drawer or lid, set MovingPart in the actor's construction script, as BP_Fridge does, and give the component an OpenRotation or an OpenOffset. For any other behaviour, such as switching a light or playing a sound, bind an event to OnInteracted.
Creating a new surface
Create a material instance of M_SP_Master, or of M_SP_Glass for transparent surfaces, and set its parameters:
| Parameter | Purpose |
|---|---|
BaseColorMap, Tint |
Colour texture and a colour it is multiplied by. |
NormalMap, NormalStrength |
Normal texture and how strongly it applies. |
ORMMap |
Packed masks: R ambient occlusion, G roughness variation, B metal. |
RoughnessMin, RoughnessMax |
The roughness range that the G channel is mapped into. |
Metallic |
Metalness where the B channel allows it. |
TileMetres |
Metres covered by one repeat of the textures. The kit's UVs are authored in metres. |
EmissiveColor, EmissiveStrength |
Light emitted by the surface. |
Changing the highlight colour
Change HighlightColor and HighlightStrength on the two master materials, or override them on individual material instances.
12. Technical specifications
| Mesh | Size in cm (W × D × H) | Triangles at LOD0 | LODs | Nanite | Convex hulls | Sockets | Material slots |
|---|---|---|---|---|---|---|---|
SM_Fridge_Body |
60.3 × 74.8 × 181.4 | 7,152 | 4 | No | 8 | Hinge_Door, Light_Interior, Slot_1, Slot_2, Slot_3 |
6 |
SM_Fridge_Door |
60 × 21.85 × 165 | 13,432 | 4 | No | 2 | None | 5 |
SM_Shelf_Wall_100 |
100 × 47.6 × 200 | 1,700 | 4 | Yes | 8 | Slot_0, Slot_1, Slot_2, Slot_3, Slot_4 |
3 |
SM_Register_Body |
43 × 42 × 38 | 5,156 | 4 | Yes | 2 | Slide_Drawer |
5 |
SM_Register_Drawer |
38.2 × 40.3 × 8 | 4,192 | 4 | Yes | 1 | None | 4 |
SM_Bin_Pedal_Body |
29.7 × 37.2 × 41 | 2,516 | 4 | Yes | 2 | Hinge_Lid |
4 |
SM_Bin_Pedal_Lid |
29.5 × 30.65 × 2.8 | 1,084 | 4 | Yes | 1 | None | 2 |
SM_Basket_Shopping |
44 × 45.8 × 24.9 | 2,886 | 4 | Yes | 1 | None | 2 |
SM_Can_Soda |
6.4 × 6.4 × 12 | 1,212 | 4 | Yes | 1 | None | 2 |
SM_Bottle_Water |
6.6 × 6.6 × 21.4 | 2,448 | 4 | No | 1 | None | 3 |
SM_Carton_Milk |
7 × 7 × 25.4 | 148 | 4 | Yes | 2 | None | 1 |
SM_Bag_Crisps |
20 × 7.34 × 28 | 3,296 | 4 | Yes | 1 | None | 1 |
SM_Box_Cereal |
26 × 7 × 36 | 108 | 4 | Yes | 1 | None | 1 |
SM_Demo_Room (demo maps only) |
630 × 530 × 320 | 124 | 4 | Yes | 8 | None | 4 |
SM_Demo_Counter (demo maps only) |
166 × 66 × 91 | 484 | 4 | Yes | 1 | None | 3 |
SM_Demo_LightPanel (demo maps only) |
124 × 34 × 3 | 232 | 4 | Yes | 1 | None | 2 |
| Property | Specification |
|---|---|
| Scale | Real-world size in centimetres. |
| Pivots | Centre of the base for every prop. Moving parts pivot on their hinge or slide point. |
| Collision | Simple convex collision on every mesh. The fridge's collision is hollow so that its shelves stay reachable. |
| LODs | Four per mesh, at 100, 50, 25 and 12.5 % of the triangles. |
| Nanite | Enabled on opaque meshes. Disabled on the fridge body, the fridge door and the water bottle, because their transparent parts cannot render through Nanite. |
| Materials | 2 master materials and 29 material instances. |
| Textures | 38 textures. Tiling surfaces are 1024 × 1024 and are applied at 1024 pixels per metre, or 2048 on brushed metal and rubber. Packaging prints are 1024 pixels wide. Prints whose height is not a power of two are stretched to one on import, so they get mipmaps and compression while their UVs stay unchanged. |
| Texture format | Occlusion, roughness and metal masks are packed into one ORM texture. Normal maps are authored in the OpenGL convention and imported with the green channel flipped. |
| UVs | UV0 is measured in metres on tiling surfaces and runs from 0 to 1 across printed labels. No separate lightmap UV channel was authored. |
| Asset count | 106 assets in Content/SocketAndPivot. |
| Blender library | 12 collection assets at metre scale, using Principled BSDF materials that render in EEVEE and Cycles. |
In the Blender library, each moving part is parented to its body and limited to the same travel as in Unreal Engine:
| Part | Constraint | Travel |
|---|---|---|
| Fridge door | Limit Rotation, Z axis | 0° to 100° |
| Bin lid | Limit Rotation, X axis | 0° to -75° |
| Register drawer | Limit Location, Y axis | 0 to -0.26 m |
13. Known limitations
- The kit has been tested in Unreal Engine 5.8.3 and Blender 5.2 LTS only. See section 2 for details.
- Interactions are designed for single-player games and do not replicate over a network.
- The kit includes no sound effects.
- The demo HUD is a minimal Canvas HUD with English text. Prompts are stored as Text, so they can be localised.
- Interaction uses a single line trace. If the crosshair falls exactly on the 8 mm gap between two products, the trace reaches the shelf behind them instead.
- Materials that do not read Custom Primitive Data index 0 will not show the focus highlight. Both included master materials read it.
- The Blender library leaves out the collision hulls and sockets that Unreal Engine uses. They are present in the FBX files.
- GLB and USD exports are not included in this version.
- Baked lighting has not been tested, and the meshes have no dedicated lightmap UV channel.
14. Version history
| Version | Date | Changes |
|---|---|---|
| 1.0.0 | 7 November 2026 | First release. |
15. Licence and credits
The terms of use are in LICENSE.txt. In short, the props are free to use in any number of projects, including commercial ones and client work. They may not be resold or redistributed as assets, put in a public repository in source form, or used to train, evaluate or prompt AI models.
Some surface textures were made from CC0 scans published by ambientCG and Poly Haven, and the packaging artwork uses fonts licensed under the SIL Open Font License. THIRD-PARTY-NOTICES.txt lists each source.
For help with the product, email support@socketandpivot.com with the product version, your engine or Blender version and a description of the problem. We reply within two business days. Licence questions go to hello@socketandpivot.com, and the full licence text is at socketandpivot.com/licence.