Greatly improve shading model

- Directional toon lighting component on entities. (extension of the
shadow light source)
The shadows were doing this anyways, but with extremely bad
stairstepping. Now it smoothly blends into the shadow.
- Greatly reduce shadow acne via the above and a larger bias.
- Respect culling mode for each model.
- Two sided shading for course models.
- Disable alpha for water that does not use it.
- Only GBA Sky Garden's skybox receives shadows now.
- Custom light positions for some maps. (you can guess which)
This commit is contained in:
riperiperi committed 2019-06-10 23:06:38 +01:00
1 parent f583ad11b1
commit bbb61394f4
11 files changed
+179 -89

No files matched your search

+2
View File
@@ -31,6 +31,7 @@ window.ObjDecor = function(obji, scene) {
var animMat = null;
function draw(view, pMatrix) {
if (forceBill) nitroRender.setShadBias(0.001);
mat4.translate(mat, view, t.pos);
if (t.angle[2] != 0) mat4.rotateZ(mat, mat, t.angle[2]*(Math.PI/180));
@@ -39,6 +40,7 @@ window.ObjDecor = function(obji, scene) {
mat4.scale(mat, mat, vec3.scale([], t.scale, 16));
res.mdl[0].draw(mat, pMatrix, animMat);
if (forceBill) nitroRender.resetShadOff();
}
function update() {
+4 -5
View File
@@ -322,9 +322,9 @@ window.Kart = function(pos, angle, speed, kartN, charN, controller, scene) {
k.items.update(input);
if (input.turn > 0.3) {
if (k.driveAnimF < 28) k.driveAnimF++;
} else if (input.turn < -0.3) {
if (k.driveAnimF > 0) k.driveAnimF--;
} else if (input.turn < -0.3) {
if (k.driveAnimF < 28) k.driveAnimF++;
} else {
if (k.driveAnimF > 14) k.driveAnimF--;
else if (k.driveAnimF < 14) k.driveAnimF++;
@@ -725,8 +725,7 @@ window.Kart = function(pos, angle, speed, kartN, charN, controller, scene) {
}
var velSeg = vec3.clone(baseVel);
if (k.kartColTimer > 0) {
vec3.scale([], k.kartColVel, k.kartColTimer/COLBOUNCE_TIME);
vec3.add(velSeg, velSeg, k.kartColVel);
vec3.add(velSeg, velSeg, vec3.scale([], k.kartColVel, k.kartColTimer/COLBOUNCE_TIME));
}
var posSeg = vec3.clone(k.pos);
var ignoreList = [];
@@ -1046,7 +1045,7 @@ window.Kart = function(pos, angle, speed, kartN, charN, controller, scene) {
//order y, x, z
var dir = k.physicalDir+k.driftOff+(Math.sin((COLBOUNCE_TIME-k.kartColTimer)/3)*(Math.PI/6)*(k.kartColTimer/COLBOUNCE_TIME));
var forward = [Math.sin(dir), 0, -Math.cos(dir)];
var side = [Math.cos(dir), 0, Math.sin(dir)];
var side = [-Math.cos(dir), 0, -Math.sin(dir)];
if (k.physBasis != null) {
vec3.transformMat4(forward, forward, k.physBasis.mat);
vec3.transformMat4(side, side, k.physBasis.mat);
+7 -3
View File
@@ -27,6 +27,7 @@ window.ObjWater = function(obji, scene) {
var wosc = 12.288;
var wstay = 5*60;
var wchange = 4*60;
var useAlpha = true; //probably a crutch - this should be defined in the water material (though it might be in nsbma)
function draw(view, pMatrix) {
if (nitroRender.flagShadow) return;
@@ -41,7 +42,7 @@ window.ObjWater = function(obji, scene) {
var height = (t.pos[1])+wheight+Math.sin(frame/150)*wosc //0.106
mat4.translate(waterM, view, [Math.sin(frame/180)*96, height, Math.cos(frame/146)*96])
nitroRender.setColMult([1, 1, 1, 0x0A/31]);
if (useAlpha) nitroRender.setColMult([1, 1, 1, 0x0A/31]);
res.mdl[0].drawPoly(mat4.scale([], waterM, [16, 16, 16]), pMatrix, 0, 0); //water
gl.stencilFunc(gl.EQUAL, 0, 0xFF);
@@ -49,7 +50,7 @@ window.ObjWater = function(obji, scene) {
if (obji.ID != 9) {
mat4.translate(waterM, view, [0, height, 0])
nitroRender.setColMult([1, 1, 1, 0x10/31]);
if (useAlpha) nitroRender.setColMult([1, 1, 1, 0x10/31]);
res.mdl[0].drawPoly(mat4.scale([], waterM, [16, 16, 16]), pMatrix, 0, 1); //white shore wash part, water is stencil masked out
}
@@ -57,7 +58,7 @@ window.ObjWater = function(obji, scene) {
if (res.mdl[1] != null) {
mat4.translate(waterM, view, [-Math.sin((frame+30)/180)*96, height, Math.cos((frame+100)/146)*96])
nitroRender.setColMult([1, 1, 1, 0x04/31]);
if (useAlpha) nitroRender.setColMult([1, 1, 1, 0x04/31]);
res.mdl[1].draw(mat4.scale([], waterM, [16, 16, 16]), pMatrix); //water white detail part. stencil should do nothing here, since it's in the same position as the above.
}
@@ -74,10 +75,13 @@ window.ObjWater = function(obji, scene) {
case 0x0001:
return {mdl:[{nsbmd:"beach_waterC.nsbmd"}, {nsbmd:"beach_waterA.nsbmd"}]};
case 0x0003:
useAlpha = false;
return {mdl:[{nsbmd:"town_waterC.nsbmd"}, {nsbmd:"town_waterA.nsbmd"}]};
case 0x0006:
useAlpha = false;
return {mdl:[{nsbmd:"yoshi_waterC.nsbmd"}]};
case 0x0009:
useAlpha = false;
return {mdl:[{nsbmd:"hyudoro_waterC.nsbmd"}, {nsbmd:"hyudoro_waterA.nsbmd"}]};
case 0x000C:
wheight = 38;