Skip to content

Instantly share code, notes, and snippets.

@aobond2
aobond2 / AssetAuditorWindow.cs
Created February 13, 2026 16:10
Check all object in a scene, get info on triangle count, texture size, and memory size. Then enable sorting based on these.
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEngine;
namespace Editor
{
public class AssetAuditorWindow : EditorWindow
{
private Vector2 _scrollPos;
@aobond2
aobond2 / VFXSummarizer.py
Last active February 1, 2026 17:23
Script to summarize from csv data here into html report, attach utrace as well. More detail here https://www.bondhan.com/2026/02/01/automated-vfx-audit/
import csv
import os
import shutil
import webbrowser
from datetime import datetime
# USE RAW STRINGS (r"") TO AVOID BACKSLASH ERRORS
# TODO: Set this to not be local
csv_folder = r"C:\Users\aobon_ktnb1ku\Documents\Unreal Projects\AutoTest\Saved\Profiling\CSV"
profiling_root = r"C:\Users\aobon_ktnb1ku\Documents\Unreal Projects\AutoTest\Saved\Profiling"
@aobond2
aobond2 / VertexColourByWorldHeight.py
Created January 28, 2026 15:52
Blender plugin to make vertex colour gradient on selected objects, from top to bottom. Work on multiple objects.
import bpy
import mathutils
class VCH_OT_VertexColourByHeight(bpy.types.Operator):
"""Vertex colour based on world space Z position"""
bl_idname = "paint.colour_by_height"
bl_label = "Vertex colour by world height"
bl_options = {'REGISTER', 'UNDO'}
@classmethod
@aobond2
aobond2 / SSIMExample.py
Last active January 28, 2026 15:58
Testing out ssim between 2 images, then visualise the difference. Using scikit-image
from skimage.metrics import structural_similarity as ssim
import cv2
import matplotlib.pyplot as plt
imgGold = cv2.imread("C:/Users/aobon_ktnb1ku/Documents/SSIM Test/Screenshot_1.png", 0)
imgTest = cv2.imread("C:/Users/aobon_ktnb1ku/Documents/SSIM Test/Screenshot_2.png", 0)
ssimScore, diff = ssim(imgGold, imgTest, full=True)
# diff here is image array
@aobond2
aobond2 / BlenderThumbnail.py
Last active April 12, 2024 09:29
Iterate on objects, create camera+lights, then make nice thumbnail render
import bpy
from mathutils import Vector
import math
import os
folderPath = "C:/Users/BondhanKimbalazani/Documents/ModularCharacter/GLB_Test/BodyA"
#folderPath = 'C:/Users/BondhanKimbalazani/Documents/ModularCharacter/GLB_Test/BodyA/TorsoUpper'
thumbnailFolder = 'C:/Users/BondhanKimbalazani/Pictures/Thumbnails/'
def importGLBs():
import json
import os
import csv
bucketURL = "https://storage.googleapis.com/glb-content-bucket/GLB/"
thumbnailLocalPath =""
thumbnailLocalFolder = "C:/Users/BondhanKimbalazani/Documents/ModularCharacter/GLB_Test/Thumbnails"
GLBfolder = "C:/Users/BondhanKimbalazani/Documents/ModularCharacter/GLB_Test/"
csvData = []
csvPath = "C:/Users/BondhanKimbalazani/Documents/parts.csv"
import subprocess
import os
import sys
# TODO: Not sure if this is default folder for everyone
userFolder = os.path.expanduser('~')
avatarToolsFolder = userFolder + '\\avatar-tools'
recursiveArg = '--r'
def getArguments():
@aobond2
aobond2 / MakeMMLFromCSV.py
Last active February 21, 2024 17:29
Read csv for all categories and available GLBs, then write out MML avatar based on some rule
import csv
import random
import os
# Source CSV
CSVfilepath = "C:/Users/BondhanKimbalazani/Documents/ModularCharacter/ClothingTest-Sheet3.csv"
TextOutputFolder = "C:/Users/BondhanKimbalazani/Documents/ModularCharacter/MMLOutput"
BodyArray = []
HairArray = []
LegBaseArray = []
@aobond2
aobond2 / MakeBodyPartsCSV.py
Last active February 21, 2024 16:29
Get all available GLBs, then make a csv to categorized them
import csv
import os
import glob
# Define the CSV file path
characterGLBFolder = "C:/Users/BondhanKimbalazani/Documents/ModularCharacter/GLB_Test"
targetFile = "C:/Users/BondhanKimbalazani/Documents/ModularCharacter/ClothingTest-Sheet3.csv"
BodyArray = []
HairArray = []
LegBaseArray = []
import unreal
# Change this with desired LOD level
targetLOD = 0
# Change this with target folder for GLB output
targetFolder = "C:\\GLBExportTest\\"
targetFileFormat = ".glb"
selectedAssets = unreal.EditorUtilityLibrary.get_selected_assets()
numAssets = len(selectedAssets)