terminalCode Example
Working with Models and Rendering
Guide to displaying 3D models in s&box.
ModelRenderer Component
CSHARP
public class Player : Component
{
[Property] public ModelRenderer Body { get; set; }
protected override void OnStart()
{
// Set model
Body.Model = Model.Load("models/citizen/citizen.vmdl");
// Enable shadows
Body.CastShadows = true;
// Set color tint
Body.Tint = Color.Red;
// Enable/disable
Body.Enabled = false;
}
}Loading Models
CSHARP
// Load model resource
var model = Model.Load("models/props/balloon.vmdl");
// Check if loaded
if (model is null)
{
Log.Warning("Failed to load model!");
return;
}SkinnedMeshRenderer (Animated Models)
CSHARP
var skinnedMesh = Components.Get<SkinnedMeshRenderer>();
// Play animation
skinnedMesh.SetAnimation("walk");
// Set animation speed
skinnedMesh.AnimationSpeed = 1.5f;Dynamic Model Creation
CSHARP
void CreateVisual()
{
var go = new GameObject("Visual");
go.SetParent(this.GameObject);
var renderer = go.Components.Create<ModelRenderer>();
renderer.Model = Model.Load("models/effects/impact.vmdl");
renderer.Tint = Color.Yellow;
// Auto-destroy after 5 seconds
go.DestroyAsync(5f);
}LODs (Level of Detail)
Models automatically use LODs based on distance. Ensure your model has LOD groups set up in ModelDoc.
Material Override
CSHARP
// Change material on specific mesh group
Body.SetMaterialOverride("skin", Material.Load("materials/characters/alternate_skin.vmat"));Rendering Bounds
CSHARP
// Custom bounds for culling (optional)
Body.Bounds = new BBox(-50, 50);Common Model Paths
CSHARP
// Citizen character
Model.Load("models/citizen/citizen.vmdl");
// Error model (fallback)
Model.Load("models/dev/error.vmdl");
Was this helpful?