Posts: 693
Threads: 186
Joined: Jan 2018
Reputation:
1
I will post soon
Brian Beuken
Lecturer in Game Programming at Breda University of Applied Sciences.
Author of The Fundamentals of C/C++ Game Programming: Using Target-based Development on SBC's
Posts: 693
Threads: 186
Joined: Jan 2018
Reputation:
1
04-29-2018, 06:26 PM
(This post was last modified: 04-29-2018, 06:27 PM by Brian Beuken.)
And here I am at last, sorry been busy, lets talk about light and what a difference it can make to your games
The 2 models below are simple examples of a model drawn with a light shader and without, the difference is quite marked.
There are rather a lot of lighting concepts out there and some need a bit more work and effort than others, we'll start with a simple one which can be found in the Model Light demos
Brian Beuken
Lecturer in Game Programming at Breda University of Applied Sciences.
Author of The Fundamentals of C/C++ Game Programming: Using Target-based Development on SBC's
Posts: 693
Threads: 186
Joined: Jan 2018
Reputation:
1
On thing I have noticed and am a bit annoyed with myself, I didn't convert any of my camera positions in to view space before sending them to the shaders....that a doh!
Brian Beuken
Lecturer in Game Programming at Breda University of Applied Sciences.
Author of The Fundamentals of C/C++ Game Programming: Using Target-based Development on SBC's
Posts: 693
Threads: 186
Joined: Jan 2018
Reputation:
1
yes light totally creates a sense of immersion in a game. A shape or model will always look artificial until light is applied and it smooths and adds subtly to the model as the pic above shows.
Get a flickering torchlight in front of you with a distance limit and you get a real sense being in a cave with a flame torch.
Light in all is different forms is one of the main challenges to a graphics programmer trying to achieve realism.
Brian Beuken
Lecturer in Game Programming at Breda University of Applied Sciences.
Author of The Fundamentals of C/C++ Game Programming: Using Target-based Development on SBC's
Posts: 693
Threads: 186
Joined: Jan 2018
Reputation:
1
02-20-2020, 01:28 PM
(This post was last modified: 02-20-2020, 01:36 PM by Brian Beuken.)
Here's a simple vertex light shader for you
Code:
#version 100
uniform mat4 MVP; // A constant representing the combined model/view/projection matrix.
uniform mat4 MV; // A constant representing the combined model/view matrix.
uniform vec4 Ambient; // we will discard this for now, feel free to re add it.
attribute vec2 a_texCoord;
attribute vec4 a_Position; // Per-vertex position information we will pass in.
attribute vec3 a_Normal; // Per-vertex normal information we will pass in.
// These will be passed into the fragment shader.
varying vec2 v_texCoord;
varying float v_Colour;
void main()
{
vec4 u_LightPos = vec4(2.0, 5.0, -10.0, 1.0); // The position of a light in world space. should really be a uniform passed but for test, make it a fixed point in space.
vec4 modelViewVertex = vec4(MV * a_Position); // Transform the vertex into camera space.
vec4 modelViewNormal = vec4(MV * vec4( a_Normal,0.0)); // Transform the normal's orientation into camera space.
u_LightPos = MV * u_LightPos; // put light in camera space (this could be done on the CPU but leaving it here in case you want to do other things)
// Get a lighting direction vector from the light to the vertex.
vec4 lightVector = normalize(u_LightPos - modelViewVertex);
// pass the output values to the fragment
v_Colour = max(dot(modelViewNormal, lightVector), 0.05); // dont allow totally black ie 0.0
v_texCoord = a_texCoord;
gl_Position = MVP * a_Position; // usual positon calc
}
and the frag for it
Code:
#version 100
uniform sampler2D s_texture;
varying vec2 v_texCoord;
varying float v_Colour;
void main()
{
gl_FragColor = texture2D( s_texture, v_texCoord )*v_Colour;
gl_FragColor.a = 1.0;
}
Brian Beuken
Lecturer in Game Programming at Breda University of Applied Sciences.
Author of The Fundamentals of C/C++ Game Programming: Using Target-based Development on SBC's