1
0
Fork 0

Modified reflect effect to include bumpspec. Original effect untouched

This commit is contained in:
Frederic Bouvier 2010-09-21 08:23:13 +02:00
parent d13a73f7fd
commit d734e32bd5
4 changed files with 508 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

View file

@ -0,0 +1,316 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Reflections
PARAMETERS: There are two forms of cube map texture:- vertical cross and 6 images.
Either can be used - alternative forms are shown in <parameters> and in <texture-unit>
The reflection is set proportional to the shininess of the material. Thus by
varying the material shininess value over or between objects the amount of
refection can be controlled. The overall amount of reflection may be
adjusted by the use of <refl_correction> -1.0 (fully transparent)- 1.0 (fully opaque).
The overall values of the noisiness, coloured fringing or fresnel effect may be adjusted
by the use of <noisiness>, <rainbowiness> and <fresneliness>.
If your result is too dark/too light the overall ambient light value can be adjusted
by the use of <ambient_correction>. This correction also takes out some of the blueness
added as default to compensate for the lack of reflection.
To use a reflection map set <reflect_map> to 1,and the path to the map texture in
<texture n="8">
A default, null, bumpspec is specified as texture unit 4. To provide a custom bumpspec map,
define <texture n="4"> in the derived effect file
USE: To use the default reflection effect (controlled by material shininess values) use
<effect>
<inherits-from>Effects/reflect</inherits-from>
<object-name>Fuselage</object-name>
</effect>
To use your own reflection effect, use
<effect>
<inherits-from>Aircraft/Lightning/Models/Effects/lightningreflect</inherits-from>
<object-name>Fuselage</object-name>
</effect>
in your model file.
To use your own effect place your efffect file containing something like this:
<name>Effects/lightningreflect</name>
<inherits-from>Effects/reflect</inherits-from>
and the the modified tags in the path as above
EXAMPLES: You can find examples of both usages in the Hunter and Lightning models.
-->
<PropertyList>
<name>Effects/reflect</name>
<inherits-from>Effects/model-default</inherits-from>
<parameters>
<texture n="4">
<image>Aircraft/Generic/Effects/null_bumpspec.png</image>
<filter>linear-mipmap-linear</filter>
<wrap-s>repeat</wrap-s>
<wrap-t>repeat</wrap-t>
<internal-format>normalized</internal-format>
</texture>
<texture n="5">
<type>cubemap</type>
<!-- use this form for a cube cross -->
<!--<image>Aircraft/Generic/Effects/CubeCrosses/blue_sky_big.jpg</image>-->
<!-- use this form for a 6 image cube map -->
<images>
<positive-x>Aircraft/Generic/Effects/CubeMaps/fair-sky/fair-sky_px.png</positive-x>
<negative-x>Aircraft/Generic/Effects/CubeMaps/fair-sky/fair-sky_nx.png</negative-x>
<positive-y>Aircraft/Generic/Effects/CubeMaps/fair-sky/fair-sky_py.png</positive-y>
<negative-y>Aircraft/Generic/Effects/CubeMaps/fair-sky/fair-sky_ny.png</negative-y>
<positive-z>Aircraft/Generic/Effects/CubeMaps/fair-sky/fair-sky_pz.png</positive-z>
<negative-z>Aircraft/Generic/Effects/CubeMaps/fair-sky/fair-sky_nz.png</negative-z>
</images>
</texture>
<texture n="6">
<image>Aircraft/Generic/Effects/Rainbow.png</image>
<filter>linear-mipmap-linear</filter>
<wrap-s>repeat</wrap-s>
<wrap-t>repeat</wrap-t>
<internal-format>normalized</internal-format>
</texture>
<texture n="7">
<image>Aircraft/Generic/Effects/FresnelLookUp.png</image>
<filter>linear-mipmap-linear</filter>
<wrap-s>repeat</wrap-s>
<wrap-t>repeat</wrap-t>
<internal-format>normalized</internal-format>
</texture>
<texture n="8">
<image>Aircraft/737-300/Models/Effects/733LH.ReflectionMap3.png</image>
<filter>linear-mipmap-linear</filter>
<wrap-s>repeat</wrap-s>
<wrap-t>repeat</wrap-t>
<internal-format>normalized</internal-format>
</texture>
<rendering-hint>transparent</rendering-hint>
<shade-model>smooth</shade-model>
<rainbowiness type="float">0.01</rainbowiness>
<fresneliness>0.1</fresneliness>
<noisiness>0.25</noisiness>
<refl_correction>0.0</refl_correction>
<ambient_correction>0.05</ambient_correction>
<reflect_map>0</reflect_map>
</parameters>
<generate>
<tangent type="int">6</tangent>
<binormal type="int">7</binormal>
</generate>
<technique n="9">
<predicate>
<and>
<property>/sim/rendering/shader-effects</property>
<or>
<less-equal>
<value type="float">2.0</value>
<glversion/>
</less-equal>
<and>
<extension-supported>GL_ARB_shader_objects</extension-supported>
<extension-supported>GL_ARB_shading_language_100</extension-supported>
<extension-supported>GL_ARB_vertex_shader</extension-supported>
<extension-supported>GL_ARB_fragment_shader</extension-supported>
</and>
</or>
</and>
</predicate>
<pass>
<lighting>true</lighting>
<material>
<active><use>material/active</use></active>
<ambient><use>material/ambient</use></ambient>
<diffuse><use>material/diffuse</use></diffuse>
<specular><use>material/specular</use></specular>
<emissive><use>material/emissive</use></emissive>
<shininess><use>material/shininess</use></shininess>
<color-mode><use>material/color-mode</use></color-mode>
</material>
<blend>
<active><use>blend/active</use></active>
<source><use>blend/source</use></source>
<destination><use>blend/destination</use></destination>
</blend>
<shade-model><use>shade-model</use></shade-model>
<cull-face><use>cull-face</use></cull-face>
<rendering-hint><use>rendering-hint</use></rendering-hint>
<texture-unit>
<unit>0</unit>
<image><use>texture[0]/image</use></image>
<filter><use>texture[0]/filter</use></filter>
<wrap-s><use>texture[0]/wrap-s</use></wrap-s>
<wrap-t><use>texture[0]/wrap-t</use></wrap-t>
<internal-format><use>texture[0]/internal-format</use></internal-format>
</texture-unit>
<texture-unit>
<unit>4</unit>
<image><use>texture[4]/image</use></image>
<filter><use>texture[4]/filter</use></filter>
<wrap-s><use>texture[4]/wrap-s</use></wrap-s>
<wrap-t><use>texture[4]/wrap-t</use></wrap-t>
<internal-format><use>texture[4]/internal-format</use></internal-format>
</texture-unit>
<texture-unit>
<unit>5</unit>
<type><use>texture[5]/type</use></type>
<!-- use this form for a cube cross -->
<!--<image><use>texture[5]/image</use></image>-->
<!-- use this form for a 6 image cube map -->
<images><use>texture[5]/images</use></images>
</texture-unit>
<texture-unit>
<unit>6</unit>
<type><use>texture[6]/type</use></type>
<image><use>texture[6]/image</use></image>
<filter><use>texture[6]/filter</use></filter>
<wrap-s><use>texture[6]/wrap-s</use></wrap-s>
<wrap-t><use>texture[6]/wrap-t</use></wrap-t>
</texture-unit>
<texture-unit>
<unit>7</unit>
<type><use>texture[7]/type</use></type>
<image><use>texture[7]/image</use></image>
<filter><use>texture[7]/filter</use></filter>
<wrap-s><use>texture[7]/wrap-s</use></wrap-s>
<wrap-t><use>texture[7]/wrap-t</use></wrap-t>
</texture-unit>
<texture-unit>
<unit>8</unit>
<image><use>texture[8]/image</use></image>
<filter><use>texture[8]/filter</use></filter>
<wrap-s><use>texture[8]/wrap-s</use></wrap-s>
<wrap-t><use>texture[8]/wrap-t</use></wrap-t>
<internal-format><use>texture[0]/internal-format</use></internal-format>
</texture-unit>
<texture-unit>
<unit>9</unit>
<type>noise</type>
</texture-unit>
<program>
<vertex-shader>Shaders/reflect-bump-spec.vert</vertex-shader>
<fragment-shader>Shaders/reflect-bump-spec.frag</fragment-shader>
<attribute>
<name>tangent</name>
<index>6</index>
</attribute>
<attribute>
<name>binormal</name>
<index>7</index>
</attribute>
</program>
<uniform>
<name>BaseTex</name>
<type>sampler-2d</type>
<value type="int">0</value>
</uniform>
<uniform>
<name>NormalTex</name>
<type>sampler-2d</type>
<value type="int">4</value>
</uniform>
<uniform>
<name>Environment</name>
<type>sampler-cube</type>
<value type="int">5</value>
</uniform>
<uniform>
<name>Rainbow</name>
<type>sampler-2d</type>
<value type="int">6</value>
</uniform>
<uniform>
<name>Fresnel</name>
<type>sampler-2d</type>
<value type="int">7</value>
</uniform>
<uniform>
<name>Map</name>
<type>sampler-2d</type>
<value type="int">8</value>
</uniform>
<uniform>
<name>Noise</name>
<type>sampler-3d</type>
<value type="int">9</value>
</uniform>
<!-- set the amount of fringing colour 0.0 - 1.0 -->
<uniform>
<name>rainbowiness</name>
<type>float</type>
<value><use>rainbowiness</use></value>
</uniform>
<!-- set the amount of fresnel effect colour 0.0 - 1.0 -->
<uniform>
<name>fresneliness</name>
<type>float</type>
<value><use>fresneliness</use></value>
</uniform>
<!-- set the amount of noisiness 0.0 - 1.0 -->
<uniform>
<name>noisiness</name>
<type>float</type>
<value><use>noisiness</use></value>
</uniform>
<!-- The reflection is set proportional to the shininess of the material.
The amount of reflection may be adjusted by the use of this correction
-1.0 (fully transparent)- 1.0 (fully opaque) -->
<uniform>
<name>refl_correction</name>
<type>float</type>
<value><use>refl_correction</use></value>
</uniform>
<!-- set the amount of ambient light correction 0.0 - 1.0 -->
<uniform>
<name>ambient_correction</name>
<type>float</type>
<value><use>ambient_correction</use></value>
</uniform>
<!-- use a reflection map-->
<uniform>
<name>reflect_map</name>
<type>float</type>
<value><use>reflect_map</use></value>
</uniform>
</pass>
</technique>
</PropertyList>

View file

@ -0,0 +1,123 @@
// -*- mode: C; -*-
// Licence: GPL v2
// Author: Vivian Meazza.
#version 120
varying vec4 rawpos;
varying vec4 ecPosition;
varying vec3 VNormal;
varying vec3 VTangent;
varying vec3 VBinormal;
varying vec3 Normal;
varying vec4 constantColor;
varying vec3 vViewVec;
varying vec3 reflVec;
varying vec4 Diffuse;
varying vec3 lightDir, halfVector;
varying float alpha, fogCoord;
uniform samplerCube Environment;
uniform sampler2D Rainbow;
uniform sampler2D BaseTex;
uniform sampler2D Fresnel;
uniform sampler2D Map;
uniform sampler2D NormalTex;
uniform sampler3D Noise;
uniform float refl_correction;
uniform float rainbowiness;
uniform float fresneliness;
uniform float noisiness;
uniform float ambient_correction;
uniform float reflect_map;
void main (void)
{
vec3 halfV;
float NdotL, NdotHV;
vec4 color = constantColor;
vec4 specular = vec4(0.0);
vec4 ns = texture2D(NormalTex, gl_TexCoord[0].st);
vec3 n = ns.rgb * 2.0 - 1.0;
n = normalize(n.x * VTangent + n.y * VBinormal + n.z * VNormal);
NdotL = max(0.0, dot(n, lightDir));
// calculate the specular light
if (NdotL > 0.0) {
color += Diffuse * NdotL;
halfV = normalize(halfVector);
NdotHV = max(dot(n, halfV), 0.0);
if (gl_FrontMaterial.shininess > 0.0)
specular.rgb = (gl_FrontMaterial.specular.rgb * ns.a
* gl_LightSource[0].specular.rgb
* pow(NdotHV, gl_FrontMaterial.shininess));
}
color.a = alpha;
color = clamp(color, 0.0, 1.0);
vec4 texel = texture2D(BaseTex, gl_TexCoord[0].st);
vec4 texelcolor = color * texel + specular;
// calculate the fog factor
float fogCoord = ecPosition.z;
const float LOG2 = 1.442695;
float fogFactor = exp2(-gl_Fog.density * gl_Fog.density * fogCoord * fogCoord * LOG2);
fogFactor = clamp(fogFactor, 0.0, 1.0);
if(gl_Fog.density == 1.0)
fogFactor=1.0;
vec3 normal = normalize(VNormal);
vec3 viewVec = normalize(vViewVec);
// Map a rainbowish color
float v = dot(viewVec, normal);
vec4 rainbow = texture2D(Rainbow, vec2(v, 0.0));
// Map a fresnel effect
vec4 fresnel = texture2D(Fresnel, vec2(v, 0.0));
// map the refection of the environment
vec4 reflection = textureCube(Environment, reflVec);
// set the user shininess offse
float transparency_offset = clamp(refl_correction, -1.0, 1.0);
float reflFactor = 0.0;
if(reflect_map > 0){
// map the shininess of the object with user input
vec4 map = texture2D(Map, gl_TexCoord[0].st);
//float pam = (map.a * -2) + 1; //reverse map
reflFactor = map.a + transparency_offset;
} else {
// set the reflectivity proportional to shininess with user
// input
reflFactor = (gl_FrontMaterial.shininess / 128) + transparency_offset;
}
reflFactor = clamp(reflFactor, 0.0, 1.0);
// set ambient adjustment to remove bluiness with user input
float ambient_offset = clamp(ambient_correction, -1.0, 1.0);
vec4 ambient_Correction = vec4(gl_LightSource[0].ambient.rg, gl_LightSource[0].ambient.b * 0.6, 0.5) * ambient_offset ;
ambient_Correction = clamp(ambient_Correction, -1.0, 1.0);
// map noise vectore
vec4 noisevec = texture3D(Noise, rawpos.xyz);
// add fringing fresnel and rainbow effects and modulate by reflection
vec4 reflcolor = mix(reflection, rainbow, rainbowiness * v);
vec4 reflfrescolor = mix(reflcolor, fresnel, fresneliness * v);
vec4 noisecolor = mix(reflfrescolor, noisevec, noisiness);
vec4 raincolor = vec4(noisecolor.rgb, 1.0) * reflFactor;
vec4 mixedcolor = mix(texel, raincolor, reflFactor);
// the final reflection
vec4 reflColor = color * mixedcolor + specular + ambient_Correction ;
reflColor = clamp(reflColor, 0.0, 1.0);
gl_FragColor = mix(gl_Fog.color, reflColor, fogFactor);
}

View file

@ -0,0 +1,69 @@
// -*- mode: C; -*-
// Licence: GPL v2
// Author: Vivian Meazza.
varying vec4 rawpos;
varying vec4 ecPosition;
varying vec3 VNormal;
varying vec3 VTangent;//////////////
varying vec3 VBinormal;/////////////
varying vec3 Normal;
varying vec4 constantColor;
varying vec3 vViewVec;
varying vec3 reflVec;
varying vec4 Diffuse;
varying vec3 normal, lightDir, halfVector;
varying float alpha, fogCoord;
uniform mat4 osg_ViewMatrixInverse;
attribute vec3 tangent;
attribute vec3 binormal;
void main(void)
{
rawpos = gl_Vertex;
ecPosition = gl_ModelViewMatrix * gl_Vertex;
vec3 ecPosition3 = vec3(gl_ModelViewMatrix * gl_Vertex) / ecPosition.w;
vec3 t = normalize(cross(gl_Normal, vec3(1.0,0.0,0.0)));
vec3 b = normalize(cross(gl_Normal,t));
vec3 n = normalize(gl_Normal);
VNormal = normalize(gl_NormalMatrix * gl_Normal);
VTangent = normalize(gl_NormalMatrix * tangent);
VBinormal = normalize(gl_NormalMatrix * binormal);
Normal = normalize(gl_Normal);
lightDir = normalize(vec3(gl_LightSource[0].position));
halfVector = normalize(gl_LightSource[0].halfVector.xyz);
Diffuse = gl_Color * gl_LightSource[0].diffuse;
//Diffuse= gl_Color.rgb * max(0.0, dot(normalize(VNormal), gl_LightSource[0].position.xyz));
// Super hack: if diffuse material alpha is less than 1, assume a
// transparency animation is at work
if (gl_FrontMaterial.diffuse.a < 1.0)
alpha = gl_FrontMaterial.diffuse.a;
else
alpha = gl_Color.a;
fogCoord = abs(ecPosition3.z);
// Vertex in eye coordinates
vec3 vertVec = ecPosition.xyz;
vViewVec.x = dot(t, vertVec);
vViewVec.y = dot(b, vertVec);
vViewVec.z = dot(n, vertVec);
// calculate the reflection vector
vec4 reflect_eye = vec4(reflect(vertVec, VNormal), 0.0);
reflVec = normalize(gl_ModelViewMatrixInverse * reflect_eye).xyz;
gl_FrontColor = gl_Color;
constantColor = gl_FrontMaterial.emission
+ gl_Color * (gl_LightModel.ambient + gl_LightSource[0].ambient);
gl_Position = ftransform();
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
}