MBHaxe/src/shaders/DefaultDiffuseMaterial.hx
2024-05-02 19:23:42 +05:30

53 lines
1.3 KiB
Haxe

package shaders;
class DefaultDiffuseMaterial extends hxsl.Shader {
static var SRC = {
@param var diffuseMap:Sampler2D;
@global var camera:{
var position:Vec3;
@var var dir:Vec3;
};
@global var global:{
@perObject var modelView:Mat4;
@perObject var modelViewInverse:Mat4;
@perObject var modelViewTranspose:Mat4;
};
@input var input:{
var position:Vec3;
var normal:Vec3;
var uv:Vec2;
var t:Vec3;
var b:Vec3;
var n:Vec3;
};
var calculatedUV:Vec2;
var pixelColor:Vec4;
@var var outShading:Vec4;
function transposeMat3(m:Mat3):Mat3 {
return mat3(vec3(m[0].x, m[1].x, m[2].x), vec3(m[0].y, m[1].y, m[2].y), vec3(m[0].z, m[1].z, m[2].z));
}
function vertex() {
calculatedUV = input.uv;
var objToTangentSpace = mat3(input.t, input.b, input.n);
var inLightVec = vec3(-0.5732, 0.27536, -0.77176) * mat3(global.modelViewTranspose);
// inLightVec.x *= -1;
var n = input.normal;
// n.x *= -1;
outShading = vec4(saturate(dot(-inLightVec, n)));
outShading.w = 1;
outShading *= vec4(1.08, 1.03, 0.90, 1);
}
function fragment() {
var diffuse = diffuseMap.get(calculatedUV);
var ambient = vec4(0.472, 0.424, 0.475, 1.00);
var outCol = outShading + ambient;
outCol *= diffuse;
pixelColor = outCol;
}
}
public function new(diffuse) {
super();
this.diffuseMap = diffuse;
}
}