lragnarsson / emerald-engine Goto Github PK
View Code? Open in Web Editor NEW3D graphics engine using OpenGL
License: MIT License
3D graphics engine using OpenGL
License: MIT License
Create geometry from a heightmap, loaded before anything else.
Forward vs deferred vs G-buffer values
it's sad.
Investigate different storing options (such as UBO and SSBO) and how to sync CPU and GPU representations more efficiently.
Flipping normal vectors creates popping effects. The reason is that light sources that "hit the backside" of a grass straw contributes with 0 light right now.
This image shows the problem. The whole area inside the red circle should get bright, because thats how grass works.
These images illustrate the popping problem:
Notice how a few grass straws are almost completely dark in the first picture, while most are brightly green.
I am not sure how we should tackle this in our deferred fragment shader, since it cannot know that grass should be rendered differently from any other surface. One solution would of course be to run another fragment shader with just the grass, and keep the grass geometry in the normal pipeline for SSAO, but it would be quite performance heavy.
With dead trees (since we do not support alpha)
Rocks
Larger heightmap
Flying model casting shadow along spline
Dead trees
Rocks (cuz they rock)
Other nice models
To optimize SSAO. The lighting pass in the deferred pipeline needs to be moved to view-space for this to work. We would save a matrix product per SSAO-sample, (around 16 per fragment), if this was done.
Should increase performance.
A cube or sphere with flat color shading.
Move bounding spheres and culling logic from model to mesh.
Visualize normal vectors.
Combination of culling on CPU and the light volumes approach mentioned on learnopengl.com?
http://learnopengl.com/#!Advanced-Lighting/Deferred-Shading
is not working well together. blitFrameBuffer is the problem.
With parameter that sets the dependency between the two. Depends on #87
Useful for camera movement paths and moving light sources around following set paths
Possibility to create splines in scene file and attach splines to models perhaps?
Right now this is solved by changing to the correct aspect ratio in the makefile and running make clean -> make.
Would be nice to fix though.
To be able to conveniently write data to file. Would be nice to introduce a #-LOG_TO_FILE to encapsulate such sections so it is completely removed from the program if not in use.
To make speed consistent :)
Create LODs for grass generation
It's getting big. Perhaps break out UI stuff and post processing.
And load from scene file.
Would be nice to implement this in a proper way. Would be convenient for debugging as well.
Would be nice with a wind direction dictating in which direction we move in the gradient map.
Would be nice to use mouse functionality of anttweakbar instead of keyboard-commands.
Create a sun
... from a course project to a named project for use in this course and more!
What are your thoughts?
Name suggestions?
Some inspiration:
http://learnopengl.com/#!Advanced-Lighting/Shadows/Shadow-Mapping
Would be nice in the future!
A first goal could be to expose some model and light functions such as move to a scripting language.
I found an implementation of Scheme which is made for this purpose called Guile
It would be nice to have script files which can move things, trigger animations and such. Could also have functionality triggered by user input. Seems simple enough to also support a REPL for calling functions at runtime :)
It would be nice to at least specify the name of the scene file to the executable like
./exec debug_scene.txt
Like so:
float max_aniso = 0.f;
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &max_aniso);
glBindTexture(...)
//...
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, an);
keep min and mag filters as is.
Place models in the heightmap.
Design splines for light sources.
Design camera splines through the scene.
Tweak for a specific planar scale on heightmap that looks good.
Maybe add LOD3 with even less grass.
On each model, in each render loop, we access these properties:
model->draw_me
model->mesh->diffuse_map->id
model->mesh->specular_map->id
model->mesh->normal_map->id
mesh->get_VAO()
We could probably increase our cache-hit-rate a lot by putting these properties in a struct and then the struct for each model i a vector. I'll work with this starting today - or is there anything else we should look at that's more critical?
Terrain bounding spheres are incorrect due to how the m2w matrix for the Terrain is set.
Tweak these values for our demo
The grass color texture is quite noisy! Might use this as noise.
Use ground height for camera movement. Depends on #83
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.