First commit

This commit is contained in:
2025-11-17 17:18:43 +01:00
parent 2286a3b782
commit bca5ef911b
905 changed files with 950521 additions and 2 deletions

300
engine/material.js Executable file
View File

@@ -0,0 +1,300 @@
/*
* Copyright 2013-2018, kaj dijkstra,
* Author, Kaj Dijkstra.
* All rights reserved.
*
*/
import shader from './shader.js';
import sampler2D from './sampler2D.js';
/**
* Material
**/
class material{
name = "none";
color;
properties = new Array();
textures = new Array();
normals = new Array();
displacementMaps = new Array();
transparencyMaps = new Array();
roughnessMaps = new Array();
specularMaps = new Array();
diffuseColor = new Array( 256/256, 256/256,1 );
shadingModelID = 0.0;
useParallax = false;
uvScale = 1;
roughness = 0.1; // 0.75;
metallic = 0.1;
reflectance = 0.1;
uvMultiplier = 1.0;
alpha = 1.0;
shader;
id = kepler.global_material_id++;
entityID = 0;
created = false;
updated = false;
/**
* set viewport
* @param {(viewport)} viewport
**/
setViewport( viewport ){
this.viewport = viewport;
}
create ( ) {
this.created = true;
this.shader = new shader();
this.shader.definePragma("TEXTURE", (this.textures.length > 0) ? 1.0 : 0.0 );
this.shader.definePragma("NORMAL_MAP", (this.normals.length > 0) ? 1.0 : 0.0 );
this.shader.definePragma("ROUGHNESS_MAP", (this.roughnessMaps.length > 0) ? 1.0 : 0.0 );
this.shader.definePragma("SHADING_MODEL_ID", this.shadingModelID );
this.shader.definePragma("PARALLAX", (this.useParallax) ? 1.0 : 0.0 );
this.shader.definePragma("DEFERRED", 1.0 );
this.shader.createFromFile("shaders/color.shader");
}
updateShader( ) {
if( !this.updated ) {
console.log("shader updated");
var shader = this.shader;
var viewport = kepler.viewports[0];
shader.setUniform("far", viewport.mainCamera.far );
shader.setUniform("reflectionSampler", viewport.system.reflectionSampler );
shader.setUniform("alpha", this.alpha );
shader.setUniform("uvMultiplier", this.uvMultiplier );
shader.setUniform("render_type", 0);
if( this.textures.length > 0 ) {
this.textures[0].anisotropic = 4;
if( this.textures.length > 0 ) {
shader.setUniform("diffuseSampler", this.textures[0] );
}
if( this.transparencyMaps.length > 0 ) {
shader.setUniform("transparencyMapSampler", this.transparencyMaps[0] );
}
if( this.normals.length > 0 ) {
shader.setUniform("normalSampler", this.normals[0] );
}
if( this.roughnessMaps.length > 0 ) {
shader.setUniform("normalSampler", this.roughnessMaps[0] );
}
if( this.displacementMaps.length > 0 ) {
shader.setUniform("heightSampler", this.displacementMaps[0]);
}
} else {
shader.setUniform("diffuseColor", this.diffuseColor );
}
shader.setUniform("shadingModelID", this.shadingModelID );
//shader.setUniform("roughness", this.roughness );
//shader.setUniform("id", this.id );
var shadowNoiseTexure = kepler.resources.getTexture("rotrandom.png");
var shadowNoiseSampler = new sampler2D();
shadowNoiseSampler.addTexture(shadowNoiseTexure);
console.log("shadowNoiseSampler", shadowNoiseSampler);
//if forward
//var depthpass = this.viewport.system.forwardRenderPipeline.getRenderpass("depth")
var depthPasses = this.viewport.system.depthPasses;
var depthpass = depthPasses[0];
shader.setUniform("shadowDepthSampler", depthpass.framebuffer.getSampler() );
shader.setUniform("lightViewProjection", depthpass.viewProjection );
shader.setUniform("lightPosition", depthpass.lightPosition );
shader.setUniform("lightType", depthpass.lightType == "pointLight" ? 0 : 1 );
shader.setUniform("lightDirection", [0.0, -0.7, 0.5] );
console.log("depthpass.lightPosition", depthpass.lightPosition);
shader.setUniform("shadowNoiseSampler", shadowNoiseSampler );
//shader.setUniform("reflectionSampler", viewport.reflectionSampler );
shader.setUniform("shadowBias", .1 );
shader.setUniform("SpotAngles", [30, 0.1]);
shader.setUniform("LightColor", [1, 1, 1] );
shader.setUniform("far", viewport.mainCamera.far );
shader.setUniform("shadowFar", viewport.mainCamera.far );
shader.setUniform("anisotropy", 0.7 );
shader.setUniform("lightGeometry", [1.0 / 85.0, 4.0, 0.1] );
shader.setUniform("clearCoatColor", [1.0, 1.0, 1.0] );
shader.setUniform("lightColor", [1,1,1] ); //colorTemperatureToSRGB(6000.0) );
//shader.setUniform("lightDirection", [0.0, -0.7, 0.5] );
//shader.setUniform("lightPosition", [3, 4, 1] );
shader.setUniform("lightIntensity", .5);
shader.setUniform("environmentLuminance", 0.4);
shader.setUniform("roughness", this.roughness );
shader.setUniform("clearCoatRoughness", this.roughness );
shader.setUniform("clearCoat", 0.3 );
shader.setUniform("clearCoatThickness", 0.2 );
shader.setUniform("clearCoatIOR", .0 );
shader.setUniform("v_metallic", this.metallic );
shader.setUniform("v_reflectance", this.reflectance);
shader.setUniform("cameraPosition", [0,0,0]);
//shader.setUniform("cameraPosition", [0,0,0]);
//shader.update(this.viewport);
this.updated = true;
}
}
updateColor ( id ) {
this.shadingModelID = id;
}
setShadingModelID ( id ) {
this.shadingModelID = id;
}
getShadingModelID ( id ) {
return this.shadingModelID;
}
addProperty (key, value) {
this.properties.push([key, value]);
}
/**
* add texture to material
* @param {(texture)} texture
**/
addTexture(texture) {
this.textures = [];
this.textures.push(texture);
}
/**
* add normal map to material
* @param {(texture)} texture
**/
addNormal(texture) {
this.normals = [];
this.normals.push(texture);
}
/**
* add normal map to material
* @param {(texture)} texture
**/
addRoughness(texture) {
this.roughnessMaps.push(texture);
}
/**
* add transparency map to material
* @param {(texture)} transparentyMap
**/
addTransparentyMap(texture) {
this.transparencyMaps.push(texture);
}
/**
* add displacement map to material
* @param {(texture)} heightmap
**/
addDisplacement( heightmap ) {
this.useParallax = true;
this.displacementMaps.push(heightmap);
}
/**
* add specular map to material
* @param {(texture)} specularMap
**/
addSpecularMap( specularMap ) {
this.specularMaps.push(specularMap);
}
}
export {material as default};