3.8 KiB
Executable File
3.8 KiB
Executable File
Kepler is a open source deferred, pbr based render engine written in Javascript. Current features are:
Load models:
import keplerEngine from './engine/kepler.js';
import sampler2D from './engine/sampler2D.js';
import viewport from './engine/viewport.js';
// Create raprtor engine instance
kepler = new keplerEngine();
// Create viewport to dom element width id keplerEngine
var ViewPort = new viewport("keplerEngine");
// Load 3d model
kepler.assimpLoader.load( "demo.json", ViewPort.scene );
// Add viewport
kepler.addViewport( ViewPort );
// Start application
kepler.application();
Create primitives (Entity's, Materials, textures, samplers):
import keplerEngine from './engine/kepler.js';
import entity from './engine/entity.js';
import material from './engine/material.js';
import sampler2D from './engine/sampler2D.js';
import mesh from './engine/mesh.js';
import viewport from './engine/viewport.js';
kepler = new keplerEngine();
// Viewport
var ViewPort = new viewport("keplerEngine");
// Material
var groundMaterial = new material();
// Create Normal Texture and Sampler
var normalTexture = kepler.resources.getTexture("floorTiles_normal.png");
var normalSampler = new sampler2D();
normalSampler.addTexture(normalTexture);
// Create Diffuse Texture and Sampler
var diffuseTexture = kepler.resources.getTexture("floorTiles_diff.png");
var diffuseSampler = new sampler2D();
diffuseSampler.addTexture(diffuseTexture);
// Add Samplers to Material
groundMaterial.addTexture(diffuseSampler);
groundMaterial.addNormal(normalSampler);
// Properties
groundMaterial.diffuseColor = [179.0 / 256.0, 199.0 / 256.0, 217.0 / 256.0];
groundMaterial.alpha = 1.0;
groundMaterial.reflection = 0.2;
groundMaterial.roughness = 0.3;
groundMaterial.metalic = 0.1;
groundMaterial.uvMultiplier = 6.0;
// Create cube mesh
var cubeMesh = ViewPort.primitives.createCube(10);
cubeMesh.addMaterial(groundMaterial);
// Create cube Entity
var cubeEntity = new entity( );
cubeEntity.addMesh( cubeMesh );
cubeEntity.name = "Cube";
cubeEntity.transform.position = [0, 10, 0];
cubeEntity.transform.update();
// Add cube entity to scene
ViewPort.scene.addEntity( cubeEntity );
// Start application
kepler.application();
Renderpass:
import defaultRenderPass from '../defaultRenderPass.js';
import sampler2D from '../sampler2D.js';
import shader from '../shader.js';
class tonemap extends defaultRenderPass {
prepare() {
var randomTexure = kepler.resources.getTexture("random.png");
var randomSampler = new sampler2D();
randomSampler.addTexture(randomTexure);
this.shader = new shader();
this.shader.createFromFile("shaders/tonemap.shader");
// set uniforms like this
this.shader.setUniform("exposure", 1.1 );
this.shader.setUniform("exampleVector2", [1,1] );
this.shader.setUniform("exampleVector3", [1,1,1] );
this.shader.setUniform("randomSampler", randomSampler );
}
}
export {tonemap as default};
In rendersytem.js in the method createRenderPasses add:
import tonemap from './renderPasses/tonemap.js';
var tonemapPass = new tonemap();
this.deferredRenderPipeline.addRenderpass( tonemapPass, "uber" );
//tonemapPass.renderToViewport = true;
tonemapPass.shader.setUniform("colorSampler", uberPass.framebuffer.getSampler() );
tonemap.shader
attribute vec3 position;
attribute vec2 uv;
uniform mat4 viewProjection;
varying vec2 v_textureCoord;
void main(void) {
v_textureCoord = uv;
gl_Position = viewProjection * vec4(position, 1.0);
}
// #keplerEngine - Split
precision highp float;
uniform sampler2D colorSampler;
varying vec2 v_textureCoord;
void main() {
vec3 color = texture2D( colorSampler, v_textureCoord ).rgb;
gl_FragColor = vec4( tonemap(color), 1.0 );
}