mbu marbles and its shaders
BIN
data/shapes/balls/pack1/marble01.normal.png
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
data/shapes/balls/pack1/marble02.normal.png
Normal file
|
After Width: | Height: | Size: 260 KiB |
BIN
data/shapes/balls/pack1/marble18.normal.png
Normal file
|
After Width: | Height: | Size: 279 KiB |
BIN
data/shapes/balls/pack1/marble20.normal.png
Normal file
|
After Width: | Height: | Size: 139 KiB |
BIN
data/shapes/balls/pack1/marblefx.normal.png
Normal file
|
After Width: | Height: | Size: 140 KiB |
|
Before Width: | Height: | Size: 197 KiB After Width: | Height: | Size: 211 KiB |
|
Before Width: | Height: | Size: 227 KiB After Width: | Height: | Size: 224 KiB |
|
Before Width: | Height: | Size: 298 KiB After Width: | Height: | Size: 301 KiB |
|
Before Width: | Height: | Size: 252 KiB After Width: | Height: | Size: 260 KiB |
|
Before Width: | Height: | Size: 102 KiB After Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 241 KiB After Width: | Height: | Size: 252 KiB |
|
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 143 KiB |
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 182 KiB After Width: | Height: | Size: 173 KiB |
|
Before Width: | Height: | Size: 204 KiB After Width: | Height: | Size: 205 KiB |
|
Before Width: | Height: | Size: 150 KiB After Width: | Height: | Size: 149 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 95 KiB |
|
Before Width: | Height: | Size: 308 KiB After Width: | Height: | Size: 195 KiB |
|
Before Width: | Height: | Size: 146 KiB After Width: | Height: | Size: 157 KiB |
|
Before Width: | Height: | Size: 170 KiB After Width: | Height: | Size: 183 KiB |
|
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 184 KiB |
|
Before Width: | Height: | Size: 205 KiB After Width: | Height: | Size: 192 KiB |
|
Before Width: | Height: | Size: 199 KiB After Width: | Height: | Size: 209 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 95 KiB |
|
Before Width: | Height: | Size: 261 KiB After Width: | Height: | Size: 234 KiB |
|
Before Width: | Height: | Size: 292 KiB After Width: | Height: | Size: 225 KiB |
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 197 KiB After Width: | Height: | Size: 209 KiB |
|
Before Width: | Height: | Size: 213 KiB After Width: | Height: | Size: 227 KiB |
|
Before Width: | Height: | Size: 220 KiB After Width: | Height: | Size: 241 KiB |
|
Before Width: | Height: | Size: 221 KiB After Width: | Height: | Size: 237 KiB |
|
Before Width: | Height: | Size: 175 KiB After Width: | Height: | Size: 188 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
99
src/shaders/marble/ClassicGlass.hx
Normal 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;
|
||||
}
|
||||
}
|
||||
87
src/shaders/marble/ClassicGlassPureSphere.hx
Normal 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;
|
||||
}
|
||||
}
|
||||
84
src/shaders/marble/ClassicMarb2.hx
Normal 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;
|
||||
}
|
||||
}
|
||||
80
src/shaders/marble/ClassicMarb3.hx
Normal 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;
|
||||
}
|
||||
}
|
||||
100
src/shaders/marble/ClassicMetal.hx
Normal 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;
|
||||
}
|
||||
}
|
||||