final Function3D baseWood = new CylinderFunction3D(18);
final Function3D woodGrainNoise = new FbmFunction3D(Functions.simplexNoise(), 3, 40, 0.75, 2.3);
final Function3D scaledBaseWoodGrain = Functions.scaleInput(woodGrainNoise, 1, .25, 1);
final Function3D woodGrain = Functions.scaleBias(scaledBaseWoodGrain, .125, 0);
final Function3D combinedWood = Functions.add(baseWood, woodGrain);
final Function3D perturbedWood = new TurbulenceFunction3D(combinedWood, 1 / 256.0, 4, 4.0);
final Function3D translatedWood = Functions.translateInput(perturbedWood, 0, 0, 1.5);
final Function3D rotatedWood = Functions.rotateInput(translatedWood, new Matrix3().fromAngles(
MathUtils.DEG_TO_RAD * 6, 0, 0));
final Function3D finalWood = new TurbulenceFunction3D(rotatedWood, 1 / 512.0, 2, 2.0);
final ReadOnlyColorRGBA[] woodColors = new ReadOnlyColorRGBA[256];
woodColors[0] = new ColorRGBA(189 / 255f, 94 / 255f, 4 / 255f, 1);
woodColors[127] = new ColorRGBA(144 / 255f, 48 / 255f, 6 / 255f, 1);
woodColors[255] = new ColorRGBA(60 / 255f, 10 / 255f, 8 / 255f, 1);