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:
1 parent
f583ad11b1
commit
bbb61394f4
11 files changed
+179
-89
No files matched your search
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user