mbu marbles and its shaders

This commit is contained in:
RandomityGuy 2022-12-10 00:16:56 +05:30
parent 0fc64d9b70
commit 30381deb19
48 changed files with 1017 additions and 84 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 KiB

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 KiB

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 KiB

After

Width:  |  Height:  |  Size: 301 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 252 KiB

After

Width:  |  Height:  |  Size: 260 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 241 KiB

After

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 182 KiB

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 204 KiB

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 308 KiB

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 KiB

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 KiB

After

Width:  |  Height:  |  Size: 209 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 261 KiB

After

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 292 KiB

After

Width:  |  Height:  |  Size: 225 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 KiB

After

Width:  |  Height:  |  Size: 209 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 KiB

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 220 KiB

After

Width:  |  Height:  |  Size: 241 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 221 KiB

After

Width:  |  Height:  |  Size: 237 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -1,5 +1,10 @@
package src;
import shaders.marble.ClassicGlass;
import shaders.marble.ClassicMetal;
import shaders.marble.ClassicMarb3;
import shaders.marble.ClassicMarb2;
import shaders.marble.ClassicGlassPureSphere;
import h3d.mat.MaterialDatabase;
import shaders.MarbleReflection;
import shaders.CubemapRenderer;
@ -315,7 +320,73 @@ class Marble extends GameObject {
if (Settings.optionsSettings.reflectiveMarble) {
this.cubemapRenderer = new CubemapRenderer(level.scene, level.sky);
if (Settings.optionsSettings.marbleShader == null
|| Settings.optionsSettings.marbleShader == "Default"
|| Settings.optionsSettings.marbleShader == "") {
mat.mainPass.addShader(new MarbleReflection(this.cubemapRenderer.cubemap));
} else {
// Generate tangents for next shaders
for (node in marbleDts.graphNodes) {
for (ch in node.children) {
var chmesh = cast(ch, Mesh);
var chpoly = cast(chmesh.primitive, h3d.prim.Polygon);
chpoly.addTangents();
}
}
mat.mainPass.removeShader(mat.textureShader);
if (Settings.optionsSettings.marbleShader == "ClassicGlassPureSphere") {
var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/pack1/marble01.normal.png").resource;
var classicGlassShader = new ClassicGlassPureSphere(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 12,
new Vector(0.6, 0.6, 0.6, 0.6), this.level.ambient, this.level.dirLight, this.level.dirLightDir, 1);
mat.mainPass.addShader(classicGlassShader);
}
if (Settings.optionsSettings.marbleShader == "ClassicMarb2") {
var classicMarb2 = new ClassicMarb2(mat.texture, this.cubemapRenderer.cubemap, 12, new Vector(0.6, 0.6, 0.6, 0.6), this.level.ambient,
this.level.dirLight, this.level.dirLightDir, 1);
mat.mainPass.addShader(classicMarb2);
}
if (Settings.optionsSettings.marbleShader == "ClassicMarb3") {
var classicMarb3 = new ClassicMarb3(mat.texture, this.cubemapRenderer.cubemap, 12, new Vector(0.6, 0.6, 0.6, 0.6), this.level.ambient,
this.level.dirLight, this.level.dirLightDir, 1);
mat.mainPass.addShader(classicMarb3);
}
if (Settings.optionsSettings.marbleShader == "ClassicMetal") {
var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/pack1/marble18.normal.png").resource;
marbleNormal.wrap = Repeat;
var classicMetalShader = new ClassicMetal(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 12, new Vector(0.6, 0.6, 0.6, 0.6),
this.level.ambient, this.level.dirLight, this.level.dirLightDir, 1);
mat.mainPass.addShader(classicMetalShader);
}
if (Settings.optionsSettings.marbleShader == "ClassicMarbGlass20") {
var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/pack1/marble20.normal.png").resource;
marbleNormal.wrap = Repeat;
var classicGlassShader = new ClassicGlass(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 12, new Vector(0.6, 0.6, 0.6, 0.6),
this.level.ambient, this.level.dirLight, this.level.dirLightDir, 1);
mat.mainPass.addShader(classicGlassShader);
}
if (Settings.optionsSettings.marbleShader == "ClassicMarbGlass18") {
var marbleNormal = ResourceLoader.getTexture("data/shapes/balls/pack1/marble18.normal.png").resource;
marbleNormal.wrap = Repeat;
var classicGlassShader = new ClassicGlass(mat.texture, marbleNormal, this.cubemapRenderer.cubemap, 12, new Vector(0.6, 0.6, 0.6, 0.6),
this.level.ambient, this.level.dirLight, this.level.dirLightDir, 1);
mat.mainPass.addShader(classicGlassShader);
}
var thisprops:Dynamic = mat.getDefaultProps();
thisprops.light = false; // We will calculate our own lighting
mat.props = thisprops;
mat.castShadows = true;
mat.shadows = true;
mat.receiveShadows = false;
}
}
}

View file

@ -313,7 +313,7 @@ class MarbleWorld extends Scheduler {
worker.loadFile(file);
}
this.scene.camera.zFar = Math.max(4000, Std.parseFloat(this.skyElement.visibledistance));
this.scene.camera.zFar = Std.parseFloat(this.skyElement.visibledistance);
this.sky = new Sky();

View file

@ -38,6 +38,7 @@ typedef OptionsSettings = {
var marbleCategoryIndex:Int;
var marbleSkin:String;
var marbleModel:String;
var marbleShader:String;
}
typedef ControlsSettings = {
@ -97,6 +98,7 @@ class Settings {
marbleCategoryIndex: 0,
marbleSkin: "base",
marbleModel: "data/shapes/balls/ball-superball.dts",
marbleShader: "Default",
vsync: #if js true #end
#if hl
false
@ -190,6 +192,7 @@ class Settings {
marbleSkin: optionsSettings.marbleSkin,
marbleModel: optionsSettings.marbleModel,
marbleCategoryIndex: optionsSettings.marbleCategoryIndex,
marbleShader: optionsSettings.marbleShader,
};
var scoreCount = 0;
var eggCount = 0;
@ -302,6 +305,9 @@ class Settings {
if (optionsSettings.marbleCategoryIndex == null) {
optionsSettings.marbleCategoryIndex = 0;
}
if (optionsSettings.marbleShader == null) {
optionsSettings.marbleShader = "Default";
}
#end
highscoreName = json.highscoreName;
} else {

View file

@ -46,7 +46,7 @@ class Sky extends Object {
// pbrprops.occlusionValue = 0;
// pbrprops.metalnessValue = 1;
skyMesh.scale(3500);
// skyMesh.scale(3500);
// var env = new Environment(texture);
// env.compute();
// var renderer = cast(level.scene.renderer, h3d.scene.pbr.Renderer);

View file

@ -23,88 +23,488 @@ class MarbleSelectGui extends GuiImage {
var marbleData = [
[
{name: "Staff's Original", dts: "data/shapes/balls/ball-superball.dts", skin: "base"},
{name: "3D Marble", dts: "data/shapes/balls/3dMarble.dts", skin: "base"},
{name: "Mid P", dts: "data/shapes/balls/midp.dts", skin: "base"},
{name: "Spade", dts: "data/shapes/balls/ball-superball.dts", skin: "skin4"},
{name: "GMD Logo", dts: "data/shapes/balls/ball-superball.dts", skin: "skin5"},
{name: "Textured Marble", dts: "data/shapes/balls/ball-superball.dts", skin: "skin6"},
{name: "Golden Marble", dts: "data/shapes/balls/ball-superball.dts", skin: "skin7"},
{name: "Rainbow Marble", dts: "data/shapes/balls/ball-superball.dts", skin: "skin8"},
{name: "Brown Swirls", dts: "data/shapes/balls/ball-superball.dts", skin: "skin9"},
{name: "Caution Stripes", dts: "data/shapes/balls/ball-superball.dts", skin: "skin10"},
{name: "Earth", dts: "data/shapes/balls/ball-superball.dts", skin: "skin11"},
{name: "Golf Ball", dts: "data/shapes/balls/ball-superball.dts", skin: "skin12"},
{name: "Jupiter", dts: "data/shapes/balls/ball-superball.dts", skin: "skin13"},
{name: "MB Gold Marble", dts: "data/shapes/balls/ball-superball.dts", skin: "skin14"},
{name: "MBP on the Marble!", dts: "data/shapes/balls/ball-superball.dts", skin: "skin15"},
{name: "Moshe", dts: "data/shapes/balls/ball-superball.dts", skin: "skin16"},
{name: "Strong Bad", dts: "data/shapes/balls/ball-superball.dts", skin: "skin17"},
{name: "Venus", dts: "data/shapes/balls/ball-superball.dts", skin: "skin18"},
{name: "Water", dts: "data/shapes/balls/ball-superball.dts", skin: "skin19"},
{name: "Evil Eye", dts: "data/shapes/balls/ball-superball.dts", skin: "skin20"},
{name: "Desert and Sky", dts: "data/shapes/balls/ball-superball.dts", skin: "skin21"},
{name: "Dirt Marble", dts: "data/shapes/balls/ball-superball.dts", skin: "skin22"},
{name: "Friction Textured Marble", dts: "data/shapes/balls/ball-superball.dts", skin: "skin23"},
{name: "Grass", dts: "data/shapes/balls/ball-superball.dts", skin: "skin24"},
{name: "Mars", dts: "data/shapes/balls/ball-superball.dts", skin: "skin25"},
{name: "Phil's Golf Ball", dts: "data/shapes/balls/ball-superball.dts", skin: "skin26"},
{name: "Molten", dts: "data/shapes/balls/ball-superball.dts", skin: "skin27"},
{name: "Lightning", dts: "data/shapes/balls/ball-superball.dts", skin: "skin28"},
{name: "Phil'sEmpire", dts: "data/shapes/balls/ball-superball.dts", skin: "skin29"},
{name: "Matan's Red Dragon", dts: "data/shapes/balls/ball-superball.dts", skin: "skin30"},
{name: "Metallic Marble", dts: "data/shapes/balls/ball-superball.dts", skin: "skin31"},
{name: "Sun", dts: "data/shapes/balls/ball-superball.dts", skin: "skin32"},
{name: "Underwater", dts: "data/shapes/balls/ball-superball.dts", skin: "skin33"},
{name: "GarageGames logo", dts: "data/shapes/balls/garageGames.dts", skin: "base"},
{name: "Big Marble 1", dts: "data/shapes/balls/bm1.dts", skin: "base"},
{name: "Big Marble 2", dts: "data/shapes/balls/bm2.dts", skin: "base"},
{name: "Big Marble 3", dts: "data/shapes/balls/bm3.dts", skin: "base"},
{name: "Small Marble 1", dts: "data/shapes/balls/sm1.dts", skin: "base"},
{name: "Small Marble 2", dts: "data/shapes/balls/sm2.dts", skin: "base"},
{name: "Small Marble 3", dts: "data/shapes/balls/sm3.dts", skin: "base"}
{
name: "Staff's Original",
dts: "data/shapes/balls/ball-superball.dts",
skin: "base",
shader: "Default"
},
{
name: "3D Marble",
dts: "data/shapes/balls/3dMarble.dts",
skin: "base",
shader: "Default"
},
{
name: "Mid P",
dts: "data/shapes/balls/midp.dts",
skin: "base",
shader: "Default"
},
{
name: "Spade",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin4",
shader: "Default"
},
{
name: "GMD Logo",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin5",
shader: "Default"
},
{
name: "Textured Marble",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin6",
shader: "Default"
},
{
name: "Golden Marble",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin7",
shader: "Default"
},
{
name: "Rainbow Marble",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin8",
shader: "Default"
},
{
name: "Brown Swirls",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin9",
shader: "Default"
},
{
name: "Caution Stripes",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin10",
shader: "Default"
},
{
name: "Earth",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin11",
shader: "Default"
},
{
name: "Golf Ball",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin12",
shader: "Default"
},
{
name: "Jupiter",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin13",
shader: "Default"
},
{
name: "MB Gold Marble",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin14",
shader: "Default"
},
{
name: "MBP on the Marble!",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin15",
shader: "Default"
},
{
name: "Moshe",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin16",
shader: "Default"
},
{
name: "Strong Bad",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin17",
shader: "Default"
},
{
name: "Venus",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin18",
shader: "Default"
},
{
name: "Water",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin19",
shader: "Default"
},
{
name: "Evil Eye",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin20",
shader: "Default"
},
{
name: "Desert and Sky",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin21",
shader: "Default"
},
{
name: "Dirt Marble",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin22",
shader: "Default"
},
{
name: "Friction Textured Marble",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin23",
shader: "Default"
},
{
name: "Grass",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin24",
shader: "Default"
},
{
name: "Mars",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin25",
shader: "Default"
},
{
name: "Phil's Golf Ball",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin26",
shader: "Default"
},
{
name: "Molten",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin27",
shader: "Default"
},
{
name: "Lightning",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin28",
shader: "Default"
},
{
name: "Phil'sEmpire",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin29",
shader: "Default"
},
{
name: "Matan's Red Dragon",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin30",
shader: "Default"
},
{
name: "Metallic Marble",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin31",
shader: "Default"
},
{
name: "Sun",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin32",
shader: "Default"
},
{
name: "Underwater",
dts: "data/shapes/balls/ball-superball.dts",
skin: "skin33",
shader: "Default"
},
{
name: "GarageGames logo",
dts: "data/shapes/balls/garageGames.dts",
skin: "base",
shader: "Default"
},
{
name: "Big Marble 1",
dts: "data/shapes/balls/bm1.dts",
skin: "base",
shader: "Default"
},
{
name: "Big Marble 2",
dts: "data/shapes/balls/bm2.dts",
skin: "base",
shader: "Default"
},
{
name: "Big Marble 3",
dts: "data/shapes/balls/bm3.dts",
skin: "base",
shader: "Default"
},
{
name: "Small Marble 1",
dts: "data/shapes/balls/sm1.dts",
skin: "base",
shader: "Default"
},
{
name: "Small Marble 2",
dts: "data/shapes/balls/sm2.dts",
skin: "base",
shader: "Default"
},
{
name: "Small Marble 3",
dts: "data/shapes/balls/sm3.dts",
skin: "base",
shader: "Default"
}
],
[
{name: "Deep Blue", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin1"},
{name: "Blood Red", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin2"},
{name: "Gang Green", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin6"},
{name: "Pink Candy", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin27"},
{name: "Chocolate", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin5"},
{name: "Grape", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin4"},
{name: "Lemon", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin28"},
{name: "Lime Green", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin8"},
{name: "Blueberry", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin7"},
{name: "Tangerine", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin3"},
{name: "8 Ball", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin9"},
{name: "Ace of Hearts", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin22"},
{name: "Football", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin16"},
{name: "9 Ball", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin29"},
{name: "Ace of Spades", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin24"},
{name: "GarageGames", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin10"},
{name: "Bob", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin30"},
{name: "Skully", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin18"},
{name: "Jack-o-Lantern", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin34"},
{name: "Walled Up", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin25"},
{name: "Sunny Side Up", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin11"},
{name: "Lunar", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin31"},
{name: "Battery", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin14"},
{name: "Static", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin32"},
{name: "Earth", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin20"},
{name: "Red and X", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin13"},
{name: "Orange Spiral", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin12"},
{name: "Blue Spiral", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin15"},
{name: "Sliced Marble", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin21"},
{name: "Orange Checkers", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin19"},
{name: "Torque", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin33"},
{name: "Fred", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin17"},
{name: "Pirate", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin26"},
{name: "Shuriken", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin23"},
{name: "Eyeball", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin35"},
{name: "Woody", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin36"},
{name: "Dat Nostalgia", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin37"},
{name: "Graffiti", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin38"},
{name: "Asteroid", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin39"},
{name: "Disco Ball", dts: "data/shapes/balls/pack1/pack1marble.dts", skin: "uskin40"}
{
name: "Deep Blue",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin1",
shader: "ClassicGlassPureSphere"
},
{
name: "Blood Red",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin2",
shader: "Default"
},
{
name: "Gang Green",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin6",
shader: "ClassicGlassPureSphere"
},
{
name: "Pink Candy",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin27",
shader: "Default"
},
{
name: "Chocolate",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin5",
shader: "ClassicGlassPureSphere"
},
{
name: "Grape",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin4",
shader: "ClassicGlassPureSphere"
},
{
name: "Lemon",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin28",
shader: "Default"
},
{
name: "Lime Green",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin8",
shader: "Default"
},
{
name: "Blueberry",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin7",
shader: "ClassicGlassPureSphere"
},
{
name: "Tangerine",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin3",
shader: "ClassicGlassPureSphere"
},
{
name: "8 Ball",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin9",
shader: "ClassicMarb3"
},
{
name: "Ace of Hearts",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin22",
shader: "ClassicMarb3"
},
{
name: "Football",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin16",
shader: "ClassicMarb3"
},
{
name: "9 Ball",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin29",
shader: "ClassicMarb3"
},
{
name: "Ace of Spades",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin24",
shader: "ClassicMarb3"
},
{
name: "GarageGames",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin10",
shader: "ClassicMarb2"
},
{
name: "Bob",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin30",
shader: "ClassicMarb3"
},
{
name: "Skully",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin18",
shader: "Default"
},
{
name: "Jack-o-Lantern",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin34",
shader: "Default"
},
{
name: "Walled Up",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin25",
shader: "ClassicMarb3"
},
{
name: "Sunny Side Up",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin11",
shader: "ClassicMetal"
},
{
name: "Lunar",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin31",
shader: "ClassicMetal"
},
{
name: "Battery",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin14",
shader: "ClassicMarb3"
},
{
name: "Static",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin32",
shader: "ClassicMarb2"
},
{
name: "Earth",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin20",
shader: "ClassicMarbGlass20"
},
{
name: "Red and X",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin13",
shader: "ClassicMarb3"
},
{
name: "Orange Spiral",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin12",
shader: "ClassicGlassPureSphere"
},
{
name: "Blue Spiral",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin15",
shader: "ClassicGlassPureSphere"
},
{
name: "Sliced Marble",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin21",
shader: "ClassicMarb3"
},
{
name: "Orange Checkers",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin19",
shader: "ClassicMarb3"
},
{
name: "Torque",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin33",
shader: "ClassicMarb3"
},
{
name: "Fred",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin17",
shader: "ClassicMarb3"
},
{
name: "Pirate",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin26",
shader: "ClassicMarbGlass18"
},
{
name: "Shuriken",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin23",
shader: "ClassicMarb3"
},
{
name: "Eyeball",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin35",
shader: "Default"
},
{
name: "Woody",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin36",
shader: "Default"
},
{
name: "Dat Nostalgia",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin37",
shader: "Default"
},
{
name: "Graffiti",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin38",
shader: "Default"
},
{
name: "Asteroid",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin39",
shader: "Default"
},
{
name: "Disco Ball",
dts: "data/shapes/balls/pack1/pack1marble.dts",
skin: "uskin40",
shader: "Default"
}
],
];
@ -139,6 +539,7 @@ class MarbleSelectGui extends GuiImage {
Settings.optionsSettings.marbleCategoryIndex = curCategorySelection;
Settings.optionsSettings.marbleSkin = marbleData[curCategorySelection][curSelection].skin;
Settings.optionsSettings.marbleModel = marbleData[curCategorySelection][curSelection].dts;
Settings.optionsSettings.marbleShader = marbleData[curCategorySelection][curSelection].shader;
Settings.save();
MarbleGame.canvas.popDialog(this);
}

View file

@ -59,11 +59,14 @@ class CubemapRenderer {
public function getCameraFrustums() {
var frustums = [];
var prevFar = this.camera.zFar;
this.camera.zFar = 300; // Max draw distance
for (i in 0...6) {
this.camera.setCubeMap(i, position);
this.camera.update();
frustums.push(camera.frustum.clone());
}
this.camera.zFar = prevFar;
return frustums;
}
}

View file

@ -31,6 +31,7 @@ class NoiseTileMaterial extends hxsl.Shader {
var transformedPosition:Vec3;
var transformedNormal:Vec3;
@var var transformedTangent:Vec4;
@var var fragLightW:Float;
function __init__vertex() {
transformedTangent = vec4(input.tangent * global.modelView.mat3(), input.tangent.dot(input.tangent) > 0.5 ? 1. : -1.);
}
@ -40,6 +41,7 @@ class NoiseTileMaterial extends hxsl.Shader {
}
function vertex() {
calculatedUV = input.uv;
fragLightW = step(0, dot(dirLight, input.normal));
}
function fragment() {
// Diffuse part
@ -85,7 +87,7 @@ class NoiseTileMaterial extends hxsl.Shader {
outCol.xyz *= bumpDot + ambientLight;
var r = reflect(dirLightDir, transformedNormal).normalize();
var specValue = saturate(r.dot((camera.position - transformedPosition).normalize()));
var specValue = saturate(r.dot((camera.position - transformedPosition).normalize())) * fragLightW;
var specular = specularColor * pow(specValue, shininess);
outCol += specular * diffuse.a;

View file

@ -0,0 +1,99 @@
package shaders.marble;
class ClassicGlass extends hxsl.Shader {
static var SRC = {
@param var diffuseMap:Sampler2D;
@param var normalMap:Sampler2D;
@param var envMap:SamplerCube;
@param var shininess:Float;
@param var specularColor:Vec4;
@param var ambientLight:Vec3;
@param var dirLight:Vec3;
@param var dirLightDir:Vec3;
@param var uvScaleFactor:Float;
@global var camera:{
var position:Vec3;
@var var dir:Vec3;
};
@global var global:{
@perObject var modelView:Mat4;
@perObject var modelViewInverse:Mat4;
};
@input var input:{
var normal:Vec3;
var tangent:Vec3;
var uv:Vec2;
};
var calculatedUV:Vec2;
var pixelColor:Vec4;
var specColor:Vec3;
var specPower:Float;
var transformedPosition:Vec3;
var transformedNormal:Vec3;
var pixelTransformedPosition:Vec3;
@var var transformedTangent:Vec4;
@var var fragLightW:Float;
function lambert(normal:Vec3, lightPosition:Vec3):Float {
var result = dot(normal, lightPosition);
return saturate(result);
}
function __init__vertex() {
transformedTangent = vec4(input.tangent * global.modelView.mat3(), input.tangent.dot(input.tangent) > 0.5 ? 1. : -1.);
}
function vertex() {
calculatedUV = input.uv * uvScaleFactor;
fragLightW = step(-0.5, dot(dirLight, input.normal));
}
function fragment() {
// Diffuse part
var texColor = diffuseMap.get(calculatedUV);
var bumpColor = normalMap.get(calculatedUV);
// Normal
// var n = transformedNormal;
// var transformedNormal = normalize(bumpColor.xyz * 2 - 1);
// var tanX = transformedTangent.xyz.normalize();
// var tanY = n.cross(tanX) * transformedTangent.w;
// transformedNormal = (nf.x * tanX + nf.y * tanY + nf.z * n).normalize();
var diffuse = dirLight * (dot(transformedNormal, -dirLightDir) + 1.3) * 0.5;
// Specular
var r = reflect(dirLightDir, transformedNormal).normalize();
var specValue = saturate(r.dot((camera.position - transformedPosition).normalize())) * fragLightW;
var specular = specularColor * pow(specValue, shininess);
var viewDir = normalize(camera.position - pixelTransformedPosition);
// Fresnel
var fresnelBias = 0.0;
var fresnelPow = 1.2;
var fresnelScale = 1.0;
var fresnelTerm = fresnelBias + fresnelScale * (1.0 - fresnelBias) * pow(1.0 - max(dot(viewDir, transformedNormal), 0.0), fresnelPow);
var incidentRay = normalize(pixelTransformedPosition - camera.position);
var reflectionRay = reflect(incidentRay, transformedNormal);
var reflectColor = envMap.get(reflectionRay);
var outCol = mix(texColor * 1.2, reflectColor, fresnelTerm);
outCol *= vec4(diffuse, 1);
outCol += specular * bumpColor.a;
pixelColor = outCol;
}
}
public function new(diffuse, normal, skybox, shininess, specularVal, ambientLight, dirLight, dirLightDir, uvScaleFactor) {
super();
this.diffuseMap = diffuse;
this.normalMap = normal;
this.envMap = skybox;
this.shininess = shininess;
this.specularColor = specularVal;
this.ambientLight = ambientLight.clone();
this.dirLight = dirLight.clone();
this.dirLightDir = dirLightDir.clone();
this.uvScaleFactor = uvScaleFactor;
}
}

View file

@ -0,0 +1,87 @@
package shaders.marble;
class ClassicGlassPureSphere extends hxsl.Shader {
static var SRC = {
@param var diffuseMap:Sampler2D;
@param var normalMap:Sampler2D;
@param var envMap:SamplerCube;
@param var shininess:Float;
@param var specularColor:Vec4;
@param var ambientLight:Vec3;
@param var dirLight:Vec3;
@param var dirLightDir:Vec3;
@param var uvScaleFactor:Float;
@global var camera:{
var position:Vec3;
@var var dir:Vec3;
};
@global var global:{
@perObject var modelView:Mat4;
@perObject var modelViewInverse:Mat4;
};
@input var input:{
var normal:Vec3;
var uv:Vec2;
};
var calculatedUV:Vec2;
var pixelColor:Vec4;
var specColor:Vec3;
var specPower:Float;
var transformedPosition:Vec3;
var transformedNormal:Vec3;
var pixelTransformedPosition:Vec3;
@var var fragLightW:Float;
function lambert(normal:Vec3, lightPosition:Vec3):Float {
var result = dot(normal, lightPosition);
return saturate(result);
}
function vertex() {
calculatedUV = input.uv * uvScaleFactor;
fragLightW = step(-0.5, dot(dirLight, input.normal));
}
function fragment() {
// Diffuse part
var texColor = diffuseMap.get(calculatedUV);
var bumpColor = normalMap.get(calculatedUV);
var diffuse = dirLight * (dot(transformedNormal, -dirLightDir) + 1.3) * 0.5;
// Specular
var r = reflect(dirLightDir, transformedNormal).normalize();
var specValue = saturate(r.dot((camera.position - transformedPosition).normalize())) * fragLightW;
var specular = specularColor * pow(specValue, shininess);
var viewDir = normalize(camera.position - pixelTransformedPosition);
// Fresnel
var fresnelBias = 0.0;
var fresnelPow = 1.2;
var fresnelScale = 1.0;
var fresnelTerm = fresnelBias + fresnelScale * (1.0 - fresnelBias) * pow(1.0 - max(dot(viewDir, transformedNormal), 0.0), fresnelPow);
var incidentRay = normalize(pixelTransformedPosition - camera.position);
var reflectionRay = reflect(incidentRay, transformedNormal);
var reflectColor = envMap.get(reflectionRay);
var outCol = mix(texColor * 1.2, reflectColor, fresnelTerm);
outCol *= vec4(diffuse, 1);
outCol += specular * bumpColor.a;
pixelColor = outCol;
}
}
public function new(diffuse, normal, skybox, shininess, specularVal, ambientLight, dirLight, dirLightDir, uvScaleFactor) {
super();
this.diffuseMap = diffuse;
this.normalMap = normal;
this.envMap = skybox;
this.shininess = shininess;
this.specularColor = specularVal;
this.ambientLight = ambientLight.clone();
this.dirLight = dirLight.clone();
this.dirLightDir = dirLightDir.clone();
this.uvScaleFactor = uvScaleFactor;
}
}

View file

@ -0,0 +1,84 @@
package shaders.marble;
class ClassicMarb2 extends hxsl.Shader {
static var SRC = {
@param var diffuseMap:Sampler2D;
@param var envMap:SamplerCube;
@param var shininess:Float;
@param var specularColor:Vec4;
@param var ambientLight:Vec3;
@param var dirLight:Vec3;
@param var dirLightDir:Vec3;
@param var uvScaleFactor:Float;
@global var camera:{
var position:Vec3;
@var var dir:Vec3;
};
@global var global:{
@perObject var modelView:Mat4;
@perObject var modelViewInverse:Mat4;
};
@input var input:{
var normal:Vec3;
var uv:Vec2;
};
var calculatedUV:Vec2;
var pixelColor:Vec4;
var specColor:Vec3;
var specPower:Float;
var transformedPosition:Vec3;
var transformedNormal:Vec3;
var pixelTransformedPosition:Vec3;
@var var fragLightW:Float;
function lambert(normal:Vec3, lightPosition:Vec3):Float {
var result = dot(normal, lightPosition);
return saturate(result);
}
function vertex() {
calculatedUV = input.uv * uvScaleFactor;
fragLightW = step(-0.5, dot(dirLight, input.normal));
}
function fragment() {
// Diffuse part
var texColor = diffuseMap.get(calculatedUV);
var diffuse = dirLight * (dot(transformedNormal, -dirLightDir) + 1.3) * 0.5;
// Specular
var r = reflect(dirLightDir, transformedNormal).normalize();
var specValue = saturate(r.dot((camera.position - transformedPosition).normalize())) * fragLightW;
var specular = specularColor * pow(specValue, shininess);
var viewDir = normalize(camera.position - pixelTransformedPosition);
// Fresnel
var fresnelBias = 0.0;
var fresnelPow = 1.2;
var fresnelScale = 1.0;
var fresnelTerm = fresnelBias + fresnelScale * (1.0 - fresnelBias) * pow(1.0 - max(dot(viewDir, transformedNormal), 0.0), fresnelPow);
var incidentRay = normalize(pixelTransformedPosition - camera.position);
var reflectionRay = reflect(incidentRay, transformedNormal);
var reflectColor = envMap.get(reflectionRay);
var outCol = mix(texColor * 1.2, reflectColor, fresnelTerm);
outCol *= vec4(diffuse, 1);
outCol += specular * texColor.a * 0.5;
pixelColor = outCol;
}
}
public function new(diffuse, skybox, shininess, specularVal, ambientLight, dirLight, dirLightDir, uvScaleFactor) {
super();
this.diffuseMap = diffuse;
this.envMap = skybox;
this.shininess = shininess;
this.specularColor = specularVal;
this.ambientLight = ambientLight.clone();
this.dirLight = dirLight.clone();
this.dirLightDir = dirLightDir.clone();
this.uvScaleFactor = uvScaleFactor;
}
}

View file

@ -0,0 +1,80 @@
package shaders.marble;
class ClassicMarb3 extends hxsl.Shader {
static var SRC = {
@param var diffuseMap:Sampler2D;
@param var envMap:SamplerCube;
@param var shininess:Float;
@param var specularColor:Vec4;
@param var ambientLight:Vec3;
@param var dirLight:Vec3;
@param var dirLightDir:Vec3;
@param var uvScaleFactor:Float;
@global var camera:{
var position:Vec3;
@var var dir:Vec3;
};
@global var global:{
@perObject var modelView:Mat4;
@perObject var modelViewInverse:Mat4;
};
@input var input:{
var normal:Vec3;
var uv:Vec2;
};
var calculatedUV:Vec2;
var pixelColor:Vec4;
var specColor:Vec3;
var specPower:Float;
var transformedPosition:Vec3;
var transformedNormal:Vec3;
var pixelTransformedPosition:Vec3;
@var var fragLightW:Float;
function lambert(normal:Vec3, lightPosition:Vec3):Float {
var result = dot(normal, lightPosition);
return saturate(result);
}
function vertex() {
calculatedUV = input.uv * uvScaleFactor;
fragLightW = step(-0.5, dot(dirLight, input.normal));
}
function fragment() {
// Diffuse part
var texColor = diffuseMap.get(calculatedUV);
var diffuse = vec4(dirLight, 1) * (dot(transformedNormal, -dirLightDir) + 1.3) * 0.5;
// Specular
var r = reflect(dirLightDir, transformedNormal).normalize();
var specValue = saturate(r.dot((camera.position - transformedPosition).normalize())) * fragLightW;
var specular = specularColor * pow(specValue, shininess);
var viewDir = normalize(camera.position - pixelTransformedPosition);
var incidentRay = normalize(pixelTransformedPosition - camera.position);
var reflectionRay = reflect(incidentRay, transformedNormal);
var reflectColor = envMap.get(reflectionRay);
var avgColor = vec4((reflectColor.r + reflectColor.g + reflectColor.b) / 3.0);
var finalReflectColor = mix(reflectColor, avgColor, 1);
var outCol = mix(texColor * diffuse * 1.2, finalReflectColor * diffuse, texColor.a);
outCol += specular * 0.5;
pixelColor = outCol;
}
}
public function new(diffuse, skybox, shininess, specularVal, ambientLight, dirLight, dirLightDir, uvScaleFactor) {
super();
this.diffuseMap = diffuse;
this.envMap = skybox;
this.shininess = shininess;
this.specularColor = specularVal;
this.ambientLight = ambientLight.clone();
this.dirLight = dirLight.clone();
this.dirLightDir = dirLightDir.clone();
this.uvScaleFactor = uvScaleFactor;
}
}

View file

@ -0,0 +1,100 @@
package shaders.marble;
class ClassicMetal extends hxsl.Shader {
static var SRC = {
@param var diffuseMap:Sampler2D;
@param var normalMap:Sampler2D;
@param var envMap:SamplerCube;
@param var shininess:Float;
@param var specularColor:Vec4;
@param var ambientLight:Vec3;
@param var dirLight:Vec3;
@param var dirLightDir:Vec3;
@param var uvScaleFactor:Float;
@global var camera:{
var position:Vec3;
@var var dir:Vec3;
};
@global var global:{
@perObject var modelView:Mat4;
@perObject var modelViewInverse:Mat4;
};
@input var input:{
var normal:Vec3;
var tangent:Vec3;
var uv:Vec2;
};
var calculatedUV:Vec2;
var pixelColor:Vec4;
var specColor:Vec3;
var specPower:Float;
var transformedPosition:Vec3;
var transformedNormal:Vec3;
var pixelTransformedPosition:Vec3;
@var var transformedTangent:Vec4;
@var var fragLightW:Float;
function lambert(normal:Vec3, lightPosition:Vec3):Float {
var result = dot(normal, lightPosition);
return saturate(result);
}
function __init__vertex() {
transformedTangent = vec4(input.tangent * global.modelView.mat3(), input.tangent.dot(input.tangent) > 0.5 ? 1. : -1.);
}
function vertex() {
calculatedUV = input.uv * uvScaleFactor;
fragLightW = step(-0.5, dot(dirLight, input.normal));
}
function fragment() {
// Diffuse part
var texColor = diffuseMap.get(calculatedUV);
var bumpColor = normalMap.get(calculatedUV);
// Normal
var n = transformedNormal;
var nf = unpackNormal(bumpColor);
var tanX = transformedTangent.xyz.normalize();
var tanY = n.cross(tanX) * transformedTangent.w;
transformedNormal = (nf.x * tanX + nf.y * tanY + nf.z * n).normalize();
var diffuse = dirLight * (dot(transformedNormal, -dirLightDir) + 1.3) * 0.5;
// Specular
var r = reflect(dirLightDir, transformedNormal).normalize();
var specValue = saturate(r.dot((camera.position - transformedPosition).normalize())) * fragLightW;
var specular = specularColor * pow(specValue, shininess);
var viewDir = normalize(camera.position - pixelTransformedPosition);
// Fresnel
var fresnelBias = 0.0;
var fresnelPow = 1.2;
var fresnelScale = 1.0;
var fresnelTerm = fresnelBias + fresnelScale * (1.0 - fresnelBias) * pow(1.0 - max(dot(viewDir, transformedNormal), 0.0), fresnelPow);
var incidentRay = normalize(pixelTransformedPosition - camera.position);
var reflectionRay = reflect(incidentRay, transformedNormal);
var reflectColor = envMap.get(reflectionRay);
var finalReflectColor = vec4((reflectColor.r + reflectColor.g + reflectColor.b) / 3.0);
var outCol = texColor * mix(vec4(1), finalReflectColor, bumpColor.a);
outCol *= vec4(diffuse, 1);
outCol += specular * bumpColor.a;
pixelColor = outCol;
}
}
public function new(diffuse, normal, skybox, shininess, specularVal, ambientLight, dirLight, dirLightDir, uvScaleFactor) {
super();
this.diffuseMap = diffuse;
this.normalMap = normal;
this.envMap = skybox;
this.shininess = shininess;
this.specularColor = specularVal;
this.ambientLight = ambientLight.clone();
this.dirLight = dirLight.clone();
this.dirLightDir = dirLightDir.clone();
this.uvScaleFactor = uvScaleFactor;
}
}