RT Shader System Component (RTSS)
- Mattan Furst
- OGRE Retired Team Member
- Posts: 260
- Joined: Tue Jan 01, 2008 11:28 am
- Location: Israel
- x 32
Re: RT Shader System Component (RTSS)
@Nir Hasson
In my project I have a specific implementation of per-pixel lighting sub-render state (SRS). An implementation which is not part of Ogre. I've looked into the implementation of NormalMapLighting SRS. NormalMapLighting SRS implements both the functionality of changing the normal and then the functionality of calculating the per pixel lighting derived from that normal change.
Would it be possible to let the NormalMapLighting calculate the change to the normal only and then let the per-pixel lighting SRS take over?
Would that be a better implementation? and if so can I change the implementation?
In my project I have a specific implementation of per-pixel lighting sub-render state (SRS). An implementation which is not part of Ogre. I've looked into the implementation of NormalMapLighting SRS. NormalMapLighting SRS implements both the functionality of changing the normal and then the functionality of calculating the per pixel lighting derived from that normal change.
Would it be possible to let the NormalMapLighting calculate the change to the normal only and then let the per-pixel lighting SRS take over?
Would that be a better implementation? and if so can I change the implementation?
it's turtles all the way down
-
- Hobgoblin
- Posts: 583
- Joined: Mon Aug 06, 2007 12:53 pm
- Location: Saarland, Germany
- x 50
Re: RT Shader System Component (RTSS)
Hi,
i've got the following material file:
to apply the normal_map tangent space shader, the system needs the normal map texture. I see in the examples, that the texture is specified directly:
But I would like to do this dynamic. So my question is, how to get the "case1_norm.png" from the rtshader_system section in the material file?
Thanks in advance
i've got the following material file:
Code: Select all
// case1 single pass material override.
material Material/SOLID/TEX/Case1.png : RTSS/NormalMapping_SinglePass
{
technique
{
pass
{
// Override the diffuse map.
texture_unit
{
texture case1_bump.png
}
// Override the normal map.
rtshader_system
{
lighting_stage normal_map case1_norm.png tangent_space 0 bilinear 1 -1.0
}
}
}
}
Code: Select all
pNormalMapSubRS->setNormalMapTextureName("case1_norm.png");
Thanks in advance
http://www.lukas-kalinowski.com/Homepage/?page_id=1631
Please support Second Earth Technic Base built of Lego bricks for Lego ideas: https://ideas.lego.com/projects/81b9bd1 ... b97b79be62
-
- Hobgoblin
- Posts: 583
- Joined: Mon Aug 06, 2007 12:53 pm
- Location: Saarland, Germany
- x 50
Re: RT Shader System Component (RTSS)
Maybe I need to rewrite my question. I need the normal map of the rtshader_system section in the material file, but I don't know how to get access to this section by code. I researched the library and found out, that this is managed somehow about a translator and an abstractproperty node but I could nowhere to be found the usage. I do this by an pseudo code example:
This necessity only occurs since you have to set the NormalMap file in order to execute the normalmap shader of the RTShaderSystem.
Code: Select all
//Parameter[0] would be "lighting_stage", Parameter[1] = "normal_map" and Parameter[2] = "case1_norm.png"
Ogre::String strNormalmap = ...getPass()->getRtShaderSection()->getParameter[2]->getName();
http://www.lukas-kalinowski.com/Homepage/?page_id=1631
Please support Second Earth Technic Base built of Lego bricks for Lego ideas: https://ideas.lego.com/projects/81b9bd1 ... b97b79be62
- cose
- Halfling
- Posts: 46
- Joined: Thu Jul 24, 2008 5:48 pm
- Location: Marseille
- Contact:
Re: RT Shader System Component (RTSS)
Hi Nir, im trying to use the rts system with normal maps, im trying to use the 'scale' macro within rtshader_system.
im able to scale the texture unit but not the normal map. could you let me know how to scale the normal map ?
thx !
im able to scale the texture unit but not the normal map. could you let me know how to scale the normal map ?
thx !
Code: Select all
material Floor2
{
technique
{
pass
{
ambient 0.588235 0.588235 0.588235 1
diffuse 0.588235 0.588235 0.588235 1
specular 1 1 1 1 32
texture_unit
{
texture floor2_map.jpg
scale 0.1 0.1
}
rtshader_system
{
lighting_stage normal_map floor2_nmap.jpg tangent_space 0 bilinear 1 -1.0
scale 0.1 0.1 <<---- no effect
}
}
}
}
-
- OGRE Expert User
- Posts: 1227
- Joined: Thu Dec 11, 2008 7:56 pm
- Location: Bristol, UK
- x 157
Re: RT Shader System Component (RTSS)
@cose & @Lax
Guys, this post is already 18 pages long! Please ask questions in a separate posts in the help forum, that way others who have similar issues to you can find solutions much easier. When you have created a new post in the help forum, I will do my best to answer your questions
Guys, this post is already 18 pages long! Please ask questions in a separate posts in the help forum, that way others who have similar issues to you can find solutions much easier. When you have created a new post in the help forum, I will do my best to answer your questions
-
- Gnoblar
- Posts: 12
- Joined: Thu May 21, 2009 12:40 pm
- Contact:
Re: RT Shader System Component (RTSS)
The RTShaderSystem does not support the following from within a material file:
- a normal, FF style pass
- a second pass, with special fragment and vertex shaders
Is there a mechanism to get that second pass working, from within the material file? Could such a mechanism be added if it does not already exist?
- a normal, FF style pass
- a second pass, with special fragment and vertex shaders
Is there a mechanism to get that second pass working, from within the material file? Could such a mechanism be added if it does not already exist?
- Assaf Raman
- OGRE Team Member
- Posts: 3092
- Joined: Tue Apr 11, 2006 3:58 pm
- Location: TLV, Israel
- x 76
Re: RT Shader System Component (RTSS)
Are you sure?
Can you provide a sample?
Can you provide a sample?
Watch out for my OGRE related tweets here.
-
- Gnoblar
- Posts: 12
- Joined: Thu May 21, 2009 12:40 pm
- Contact:
Re: RT Shader System Component (RTSS)
This is on iOS 5, with the latest Ogre 1.8 from Mercurial.
Material File:
Vertex Shader:
Fragment:
Material File:
Code: Select all
vertex_program fresnel_vs_glsles glsles
{
source fresnel_Vp.glsles
default_params
{
param_named_auto worldViewProj worldviewproj_matrix
}
}
fragment_program fresnel_ps_glsles glsles
{
source fresnel_Fp.glsles
default_params {
param_named glowColour float3 1.0 1.0 1.0
// bigger exponent, thinner edges
param_named glowExpo float 2.5
param_named alpha float 0.5
}
}
vertex_program fresnel_vs2 unified
{
delegate fresnel_vs_glsles
//delegate fresnel_vs_cg
}
fragment_program fresnel_ps2 unified
{
delegate fresnel_ps_glsles
//delegate fresnel_ps_cg
}
material cg/fresnel/rbc
{
technique
{
pass
{
ambient 0.8 0.8 0.8
diffuse 0.8 0.8 0.8
specular 0.1 0.1 0.1 12.5
texture_unit
{
texture rbc_512x512.png
scale 0.01 0.01
}
}
pass
{
scene_blend add
depth_check on
lighting on
vertex_program_ref fresnel_vs2
{
param_named inflate float 1
param_named_auto world world_matrix
param_named_auto worldViewProj worldviewproj_matrix
param_named_auto worldInverseTranspose inverse_transpose_world_matrix
param_named_auto inverseView inverse_view_matrix
}
fragment_program_ref fresnel_ps2
{
}
}
}
}
Code: Select all
#version 100
precision mediump int;
precision mediump float;
attribute vec4 position;
attribute vec4 normal;
uniform float inflate;
uniform mat4 world;
uniform mat4 worldViewProj;
uniform mat4 worldInverseTranspose;
uniform mat4 inverseView;
varying vec3 worldNormal;
varying vec3 worldView;
void main()
{
gl_Position = worldViewProj * position;
vec4 pos = position;
pos += inflate + normalize(vec4(normal.xyz, 0));
vec4 pw = world * pos;
worldNormal = (worldInverseTranspose * normal).xyz;
worldView = normalize(vec3(inverseView[0].w, inverseView[1].w, inverseView[2].w) - pw.xyz);
}
Code: Select all
#version 100
precision mediump int;
precision mediump float;
uniform vec3 glowColour;
uniform float glowExpo;
uniform float alpha;
varying vec4 colour;
varying vec3 worldNormal;
varying vec3 worldView;
void main()
{
vec3 n = normalize(worldNormal);
vec3 v = normalize(worldView);
float edge = 1.0 - dot(n, v);
edge = pow(edge, glowExpo) * alpha;
vec3 result = edge * glowColour;
gl_FragColor = vec4(result, edge);
}
- duststorm
- Minaton
- Posts: 921
- Joined: Sat Jul 31, 2010 6:29 pm
- Location: Belgium
- x 80
- Contact:
Re: RT Shader System Component (RTSS)
Is there a way to limit the number of lights that can affect a material (and let the light sorting do the rest)?
I would like to have many lights spread across my scene without the CG compiler choking on too many defined constants.
I would like to have many lights spread across my scene without the CG compiler choking on too many defined constants.
Developer @ MakeHuman.org
-
- OGRE Expert User
- Posts: 1227
- Joined: Thu Dec 11, 2008 7:56 pm
- Location: Bristol, UK
- x 157
- duststorm
- Minaton
- Posts: 921
- Joined: Sat Jul 31, 2010 6:29 pm
- Location: Belgium
- x 80
- Contact:
Re: RT Shader System Component (RTSS)
Thanks! That's exactly what I needed. Now how come I didn't find that the first time around?
Developer @ MakeHuman.org