1
0
Fork 0

Add mapping and noise

This commit is contained in:
vmmeazza 2010-04-02 14:02:48 +00:00
parent b33e332709
commit 1b49358d0d
3 changed files with 109 additions and 16 deletions

View file

@ -9,13 +9,16 @@ varying the material shininess value over or between objects the amount of
refection can be controlled. The overall amount of reflection may be 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). adjusted by the use of <refl_correction> -1.0 (fully transparent)- 1.0 (fully opaque).
The overall values of the coloured fringing or fresnel effect may be adjusted The overall values of the noisiness, coloured fringing or fresnel effect may be adjusted
by the use of <rainbowiness> and <fresneliness>. by the use of <noisiness>, <rainbowiness> and <fresneliness>.
If your result is too dark/too light the overall ambient light value can be adjusted 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 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. 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">
USE: To use the default reflection effect (controlled by material shininess values) use USE: To use the default reflection effect (controlled by material shininess values) use
<effect> <effect>
@ -49,7 +52,7 @@ EXAMPLES: You can find examples of both usages in the Hunter and Lightning model
<texture n="5"> <texture n="5">
<type>cubemap</type> <type>cubemap</type>
<!-- use this form for a cube cross --> <!-- use this form for a cube cross -->
<!--<image>Aircraft/Generic/Effects/CubeCrosses/blue_sky.jpg</image>--> <!--<image>Aircraft/Generic/Effects/CubeCrosses/blue_sky_big.jpg</image>-->
<!-- use this form for a 6 image cube map --> <!-- use this form for a 6 image cube map -->
<images> <images>
@ -76,12 +79,21 @@ EXAMPLES: You can find examples of both usages in the Hunter and Lightning model
<wrap-t>repeat</wrap-t> <wrap-t>repeat</wrap-t>
<internal-format>normalized</internal-format> <internal-format>normalized</internal-format>
</texture> </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> <rendering-hint>transparent</rendering-hint>
<shade-model>smooth</shade-model> <shade-model>smooth</shade-model>
<rainbowiness>0.075</rainbowiness> <rainbowiness type="float">0.01</rainbowiness>
<fresneliness>0.075</fresneliness> <fresneliness>0.1</fresneliness>
<noisiness>0.25</noisiness>
<refl_correction>0.0</refl_correction> <refl_correction>0.0</refl_correction>
<ambient_correction>0.1</ambient_correction> <ambient_correction>0.05</ambient_correction>
<reflect_map>0</reflect_map>
</parameters> </parameters>
<technique n="9"> <technique n="9">
@ -224,6 +236,31 @@ EXAMPLES: You can find examples of both usages in the Hunter and Lightning model
</wrap-t> </wrap-t>
</texture-unit> </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> <program>
<vertex-shader>Shaders/reflect.vert</vertex-shader> <vertex-shader>Shaders/reflect.vert</vertex-shader>
<fragment-shader>Shaders/reflect.frag</fragment-shader> <fragment-shader>Shaders/reflect.frag</fragment-shader>
@ -265,19 +302,43 @@ EXAMPLES: You can find examples of both usages in the Hunter and Lightning model
<value type="int">7</value> <value type="int">7</value>
</uniform> </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 --> <!-- set the amount of fringing colour 0.0 - 1.0 -->
<uniform> <uniform>
<name>rainbowiness</name> <name>rainbowiness</name>
<type>float</type> <type>float</type>
<value><use>rainbowiness</use></value> <value>
<use>rainbowiness</use>
</value>
</uniform> </uniform>
<!-- set the amount of fresnel effect colour 0.0 - 1.0 --> <!-- set the amount of fresnel effect colour 0.0 - 1.0 -->
<uniform> <uniform>
<name>fresneliness</name> <name>fresneliness</name>
<type>float</type> <type>float</type>
<value><use>fresneliness</use></value> <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> </uniform>
<!-- The reflection is set proportional to the shininess of the material. <!-- The reflection is set proportional to the shininess of the material.
@ -299,6 +360,16 @@ EXAMPLES: You can find examples of both usages in the Hunter and Lightning model
<use>ambient_correction</use> <use>ambient_correction</use>
</value> </value>
</uniform> </uniform>
<!-- use a reflection map-->
<uniform>
<name>reflect_map</name>
<type>float</type>
<value>
<use>reflect_map</use>
</value>
</uniform>noisiness
</pass> </pass>
</technique> </technique>
</PropertyList> </PropertyList>

View file

@ -4,6 +4,7 @@
#version 120 #version 120
varying vec4 rawpos;
varying vec4 ecPosition; varying vec4 ecPosition;
varying vec3 VNormal; varying vec3 VNormal;
varying vec3 Normal; varying vec3 Normal;
@ -19,12 +20,15 @@ uniform samplerCube Environment;
uniform sampler2D Rainbow; uniform sampler2D Rainbow;
uniform sampler2D BaseTex; uniform sampler2D BaseTex;
uniform sampler2D Fresnel; uniform sampler2D Fresnel;
uniform sampler2D Map;
uniform sampler3D Noise;
uniform float refl_correction; uniform float refl_correction;
uniform float rainbowiness; uniform float rainbowiness;
uniform float fresneliness; uniform float fresneliness;
uniform float noisiness;
uniform float ambient_correction; uniform float ambient_correction;
uniform float reflect_map;
void main (void) void main (void)
{ {
@ -75,21 +79,37 @@ void main (void)
// map the refection of the environment // map the refection of the environment
vec4 reflection = textureCube(Environment, reflVec); vec4 reflection = textureCube(Environment, reflVec);
// set the reflectivity proportional to shininess with user // set the user shininess offse
// input ambient
float transparency_offset = clamp(refl_correction, -1.0, 1.0); float transparency_offset = clamp(refl_correction, -1.0, 1.0);
float reflFactor = (gl_FrontMaterial.shininess / 128) + transparency_offset; 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); reflFactor = clamp(reflFactor, 0.0, 1.0);
// set adjust ambient ambient // set adjust ambient
float ambient_offset = clamp(ambient_correction, -1.0, 1.0); float ambient_offset = clamp(ambient_correction, -1.0, 1.0);
vec4 ambient_Correction = mix(gl_LightSource[0].ambient, vec4(1.0, 1.0, 0.9, 1.0), 0.5) vec4 ambient_Correction = mix(gl_LightSource[0].ambient, vec4(1.0, 1.0, 0.6, 1.0), 0.5)
* ambient_offset; * ambient_offset;
// map noise vectore
vec4 noisevec = texture3D(Noise, rawpos.xyz);
// add fringing fresnel and rainbow effects and modulate by reflection // add fringing fresnel and rainbow effects and modulate by reflection
vec4 reflcolor = mix(reflection, rainbow, rainbowiness * v); vec4 reflcolor = mix(reflection, rainbow, rainbowiness * v);
vec4 reflfrescolor = mix(reflcolor, fresnel, fresneliness * v); vec4 reflfrescolor = mix(reflcolor, fresnel, fresneliness * v);
vec4 raincolor = vec4(reflfrescolor.rgb, 1.0) * reflFactor; vec4 noisecolor = mix(reflfrescolor, noisevec, noisiness);
vec4 raincolor = vec4(noisecolor.rgb, 1.0) * reflFactor;
vec4 mixedcolor = mix(texel, raincolor, reflFactor); vec4 mixedcolor = mix(texel, raincolor, reflFactor);
// the final reflection // the final reflection

View file

@ -1,7 +1,8 @@
// -*- mode: C; -*- // -*- mode: C; -*-
// Licence: GPL v2 // Licence: GPL v2
// Author: Vivian Meazza. // Author: Vivian Meazza.
varying vec4 rawpos;
varying vec4 ecPosition; varying vec4 ecPosition;
varying vec3 VNormal; varying vec3 VNormal;
varying vec3 Normal; varying vec3 Normal;
@ -19,6 +20,7 @@ uniform mat4 osg_ViewMatrixInverse;
void main(void) void main(void)
{ {
rawpos = gl_Vertex;
ecPosition = gl_ModelViewMatrix * gl_Vertex; ecPosition = gl_ModelViewMatrix * gl_Vertex;
vec3 ecPosition3 = vec3(gl_ModelViewMatrix * gl_Vertex) / ecPosition.w; vec3 ecPosition3 = vec3(gl_ModelViewMatrix * gl_Vertex) / ecPosition.w;