Skip to content

Instantly share code, notes, and snippets.


Chris Sprance csprance

View GitHub Profile
csprance /
Created October 24, 2021 04:49
A modo script to select verts whose selected weight maps fall within a given range. To use Select a mesh and then select a weight map. Then specify a min and a max value for the range
import lx
import lxu
import modo
import sys
def get_selected_weight_maps():
Get the selected weight maps from the scene
:return: List of selected weight maps
csprance / barycentric_coordinates.c
Created February 9, 2021 01:53
How to calculate barycentric coordinates in houdini using vex given 3 points making up a triangle and a point p we want to get the coordinates for
View barycentric_coordinates.c
// This is the point we want to find barycentric coordinates of
vector p = point(0, "P", 3);
// These are the vertices of the main triangle we want to find coordinates for
vector v1 = point(0, "P", 0),
v2 = point(0, "P", 1),
v3 = point(0, "P", 2);
// Edge Vectors of the main triangle
vector e1 = v3 - v2,
csprance /
Last active March 26, 2020 03:27
Given a set of control points create a bezier curve with n amount of points
def binomial(i, n):
"""Binomial coefficient"""
return math.factorial(n) / float(
math.factorial(i) * math.factorial(n - i))
def bernstein(t, i, n):
"""Bernstein polynom"""
return binomial(i, n) * (t ** i) * ((1 - t) ** (n - i))
csprance /
Created March 4, 2020 16:24
Given a selected node create a merge node that references that node under the mouse curor.
(node,) = hou.selectedNodes()
node.setColor(hou.Color(.302, .525, .114))
parent = node.parent()
merge = parent.createNode('object_merge', '%s_MERGE' %
csprance /
Created December 19, 2019 14:31
Houdini - How to set multiparm defaults.
lod_presets = [100, 50, 25, 12, 6]
def set_hda_defaults(hda):
# if we have a classname detail attrib use that
class_name = hda.geometry(0).findGlobalAttrib("classname")
if class_name:
csprance / MF_Line
Last active September 25, 2019 21:55
Make Line material Function
View MF_Line
Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_0"
Begin Object Class=/Script/Engine.MaterialExpressionFunctionOutput Name="MaterialExpressionFunctionOutput_0"
End Object
Begin Object Name="MaterialExpressionFunctionOutput_0"
csprance / mapUtils.js
Created May 22, 2019 15:52
More Map Data Functions in FlowType Javascript
View mapUtils.js
// @flow
* Name: mapUtils
* Created by chris on 4/22/2017.
* Description:
import React from 'react';
import ReactDOMServer from 'react-dom/server';
import PlaceIcon from 'material-ui/svg-icons/maps/place';
import _ from 'lodash';
csprance /
Last active May 9, 2019 16:30
GDAL2Tiles Instructions
csprance /
Last active April 6, 2023 16:59
VEX Snippets for Houdini
// Detail Wrangle
vector bbsize = getbbox_size(0);
v@size = bbsize; // For reference

s@x = sprintf('%.3f', bbsize.x);
s@y = sprintf('%.3f', bbsize.y);
s@z = sprintf('%.3f', bbsize.z);
csprance /
Last active November 20, 2022 00:16
Chris Sprance - Technical Artist - Resume

Chris Sprance

Technical Artist/Web Developer/SysAdmin

My name is Chris Sprance. I am an artist, programmer, maker, and man of many hats. Proficient in the next-gen game art workflow with a deep understanding of the technical and procedural content pipeline including the constraints that revolve around games and real-time content. With over 10+ years of experience working in the AAA and indie games industry I've been a part of a lot of problem solving and enjoyed every second of it!