First commit
This commit is contained in:
164
README.md
Normal file → Executable file
164
README.md
Normal file → Executable file
@@ -1,3 +1,163 @@
|
||||
# Kepler
|
||||
|
||||
A Modern pbr based Render Engine in WebGL.
|
||||
|
||||
|
||||
Kepler is a open source deferred, pbr based render engine written in Javascript.
|
||||
Current features are:
|
||||
|
||||
|
||||
|
||||
# Load models:
|
||||
```javascript
|
||||
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):
|
||||
```javascript
|
||||
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:
|
||||
```javascript
|
||||
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:
|
||||
```javascript
|
||||
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
|
||||
```glsl
|
||||
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 );
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user