Table Of Contents
Thank you for stopping by. I am in the process of adding assets to this page. You can use the Table of Contents to click on sections to navigate more quickly.
The scene and music were a result of the Metroidvania 30 Game Jam. I wanted to compose a piece with some new instruments in Ableton and to try a 3D modeling and texturing pipeline between Blender, ArmorPaint, and Unity.
'Chains' Blender project, with clean UVs, and a metallic material concept!
'Elemental Gem' Blender project, with clean UVs and material concepts!
Elemental Gem imported into ArmorPaint
Models were exported as .obj files after deciding on material layouts, applying transforms and modifiers, and unwrapping the UVs for a cleaner texturing process.
“Why not use an fbx file for the project?”
.fbx, .blend, .stl, .gltf and .glb files are supported, but the importer is not 100% reliable yet. Up to ~4GB .obj files are supported.
(Source)
I only imported one texture map with all of the details for each elemental gem. This disregards the Opaque and Transparent aspects of the object. I instead made a Fade material that used texture maps detailing the full model, rendering the object fully transparent so the animated point lights had a more noticeable impact.
Below are scripts used for features pulled off by the models in the Unity scene:
ContinuousXRotation
The script below was used for rotating the chains:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ContinuousXRotation : MonoBehaviour
{
[Tooltip("Rotation speed in degrees per second. Positive values rotate one way, negative the other.")]
public float rotationSpeed = 90f;
void Update()
{
// Rotates continuously around the local X axis at the specified speed
// Time.deltaTime ensures frame-rate independent rotation
transform.Rotate(rotationSpeed * Time.deltaTime, 0f, 0f, Space.Self);
}
}
RotateObject
This script continuously rotates an object's 'y' transform:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RotateObject : MonoBehaviour
{
[Header("Object to Rotate")]
[Tooltip("Assign the GameObject you want to rotate around its Y-axis")]
public Transform objectToRotate;
[Header("Rotation Settings")]
[Tooltip("Rotation speed in degrees per second")]
public float rotationSpeed = 90f;
private void Update()
{
// Check if an object has been assigned
if (objectToRotate == null)
{
Debug.LogWarning("RotateObject: No object assigned to rotate!", this);
return;
}
// Rotate the assigned object around its local Y-axis over time
// Time.deltaTime ensures smooth, frame-rate independent rotation
objectToRotate.Rotate(Vector3.up, rotationSpeed * Time.deltaTime, Space.Self);
}
// Optional: Visual feedback in the Scene view
private void OnValidate()
{
if (objectToRotate == null)
{
Debug.LogWarning("Please assign a GameObject to 'Object To Rotate' in the Inspector.", this);
}
}
}
Cauldron I modelled for a Unity project in college
Unreal Engine scene I helped create with an ARVR colleague, Ethan Swope.