Sample Shader nodes and test material definition git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10434 75d07b2b-3a1a-0410-a2c5-0572b91ccdca3.0
parent
0360f9a44a
commit
241cbce7e6
@ -0,0 +1,95 @@ |
|||||||
|
MaterialDef UnshadedNodes { |
||||||
|
|
||||||
|
MaterialParameters { |
||||||
|
Texture2D ColorMap |
||||||
|
Texture2D LightMap |
||||||
|
Color Color (Color) |
||||||
|
Boolean VertexColor (UseVertexColor) |
||||||
|
Boolean SeparateTexCoord |
||||||
|
|
||||||
|
//FOG parameters |
||||||
|
Boolean UseFog |
||||||
|
Float FogDensity :1 |
||||||
|
Color FogColor : 1 1 1 1 |
||||||
|
} |
||||||
|
|
||||||
|
Technique { |
||||||
|
|
||||||
|
WorldParameters { |
||||||
|
WorldViewProjectionMatrix |
||||||
|
//used for fog |
||||||
|
WorldViewMatrix |
||||||
|
} |
||||||
|
|
||||||
|
VertexShaderNodes{ |
||||||
|
ShaderNode FogFactor{ |
||||||
|
Definition: FogFactor : Common/MatDefs/ShaderNodes/Fog/Fog.j3sn |
||||||
|
Condition: UseFog |
||||||
|
InputMapping{ |
||||||
|
modelViewMatrix = WorldParam.WorldViewMatrix |
||||||
|
modelPosition = Global.position |
||||||
|
fogDensity = MatParam.FogDensity |
||||||
|
} |
||||||
|
} |
||||||
|
ShaderNode UnshadedVert{ |
||||||
|
Definition: CommonVert : Common/MatDefs/ShaderNodes/Common/CommonVert.j3sn |
||||||
|
InputMapping{ |
||||||
|
worldViewProjectionMatrix = WorldParam.WorldViewProjectionMatrix |
||||||
|
modelPosition = Global.position.xyz |
||||||
|
texCoord1 = Attr.inTexCoord: ColorMap || (LightMap && !SeparateTexCoord) |
||||||
|
texCoord2 = Attr.inTexCoord2: SeparateTexCoord |
||||||
|
vertColor = Attr.inColor: VertexColor |
||||||
|
} |
||||||
|
OutputMapping{ |
||||||
|
Global.position = projPosition |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
FragmentShaderNodes{ |
||||||
|
ShaderNode UnshadedFrag{ |
||||||
|
Definition: Unshaded : Common/MatDefs/ShaderNodes/Common/Unshaded.j3sn |
||||||
|
InputMapping{ |
||||||
|
texCoord = UnshadedVert.texCoord1: ColorMap |
||||||
|
vertColor = UnshadedVert.vertColor: VertexColor |
||||||
|
matColor = MatParam.Color: Color |
||||||
|
colorMap = MatParam.ColorMap: ColorMap |
||||||
|
color = Global.outColor |
||||||
|
} |
||||||
|
OutputMapping{ |
||||||
|
Global.outColor = color |
||||||
|
} |
||||||
|
} |
||||||
|
ShaderNode LightMap{ |
||||||
|
Definition: LightMapping : Common/MatDefs/ShaderNodes/LightMapping/LightMapping.j3sn |
||||||
|
Condition: LightMap |
||||||
|
InputMapping{ |
||||||
|
texCoord = UnshadedVert.texCoord1: !SeparateTexCoord |
||||||
|
texCoord = UnshadedVert.texCoord2: SeparateTexCoord |
||||||
|
lightMap = MatParam.LightMap |
||||||
|
color = Global.outColor |
||||||
|
} |
||||||
|
OutputMapping{ |
||||||
|
Global.outColor = color |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
ShaderNode FogOutput{ |
||||||
|
Definition: FogOutput : Common/MatDefs/ShaderNodes/Fog/Fog.j3sn |
||||||
|
Condition: UseFog |
||||||
|
InputMapping{ |
||||||
|
fogFactor = FogFactor.fogFactor |
||||||
|
color = Global.outColor |
||||||
|
fogColor = MatParam.FogColor |
||||||
|
} |
||||||
|
OutputMapping{ |
||||||
|
Global.outColor = color |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,29 @@ |
|||||||
|
ShaderNodeDefinitions{ |
||||||
|
ShaderNodeDefinition AttributeToVarying{ |
||||||
|
Type : Vertex |
||||||
|
Shader GLSL100: Common/MatDefs/ShaderNodes/Basic/null.vert |
||||||
|
Documentation{ |
||||||
|
This node can pass an attribute value to a varying value. |
||||||
|
@input floatVariable a float attribute |
||||||
|
@input vec2Variable a vec2 attribute |
||||||
|
@input vec3Variable a vec3 attribute |
||||||
|
@input vec4Variable a vec4 attribute |
||||||
|
@output floatVariable a float varying |
||||||
|
@output vec2Variable a vec2 varying |
||||||
|
@output vec3Variable a vec3 varying |
||||||
|
@output vec4Variable a vec4 varying |
||||||
|
} |
||||||
|
Input { |
||||||
|
float floatVariable |
||||||
|
vec2 vec2Variable |
||||||
|
vec3 vec3Variable |
||||||
|
vec4 vec4Variable |
||||||
|
} |
||||||
|
Output { |
||||||
|
float floatVariable |
||||||
|
vec2 vec2Variable |
||||||
|
vec3 vec3Variable |
||||||
|
vec4 vec4Variable |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
ShaderNodeDefinitions{ |
||||||
|
ShaderNodeDefinition ColorMix { |
||||||
|
Type: Fragment |
||||||
|
Shader GLSL100: Common/MatDefs/ShaderNodes/Basic/colorMix.frag |
||||||
|
Documentation{ |
||||||
|
mixes two colors according to a mix factor |
||||||
|
@input color1 the first color to mix |
||||||
|
@input color2 the second color to mix |
||||||
|
@input factor the mix factor (from 0.0 to 1.0) fpr more information see the gsls mix function |
||||||
|
@output outColor the mixed color |
||||||
|
} |
||||||
|
Input { |
||||||
|
vec4 color1 |
||||||
|
vec4 color2 |
||||||
|
float factor |
||||||
|
} |
||||||
|
Output { |
||||||
|
vec4 outColor |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
ShaderNodeDefinitions{ |
||||||
|
ShaderNodeDefinition ColorMult { |
||||||
|
Type: Fragment |
||||||
|
Shader GLSL100: Common/MatDefs/ShaderNodes/Basic/colorMult.frag |
||||||
|
Documentation{ |
||||||
|
Multiplies two colors |
||||||
|
@input color1 the first color |
||||||
|
@input color2 the second color |
||||||
|
@output outColor the resulting color |
||||||
|
} |
||||||
|
Input { |
||||||
|
vec4 color1 |
||||||
|
vec4 color2 |
||||||
|
} |
||||||
|
Output { |
||||||
|
vec4 outColor |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
ShaderNodeDefinitions{ |
||||||
|
ShaderNodeDefinition TextureFetch { |
||||||
|
Type: Fragment |
||||||
|
Shader GLSL100: Common/MatDefs/ShaderNodes/Basic/texture.frag |
||||||
|
Documentation{ |
||||||
|
Fetches a color value in the given texture acording to given texture coordinates |
||||||
|
@input texture the texture to read |
||||||
|
@input texCoord the texture coordinates |
||||||
|
@output outColor the fetched color |
||||||
|
} |
||||||
|
Input { |
||||||
|
sampler2D texture |
||||||
|
vec2 texCoord |
||||||
|
} |
||||||
|
Output { |
||||||
|
vec4 outColor |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
ShaderNodeDefinitions{ |
||||||
|
ShaderNodeDefinition TransformPosition{ |
||||||
|
Type: Vertex |
||||||
|
Shader GLSL100: Common/MatDefs/ShaderNodes/Basic/transformPosition.vert |
||||||
|
Documentation { |
||||||
|
This node transforms a position according to the given matrix |
||||||
|
@input inputPosition the position to transform |
||||||
|
@input transformsMatrix the matrix to use for this transformation |
||||||
|
@output outPosition the transformed position |
||||||
|
} |
||||||
|
Input { |
||||||
|
vec3 inputPosition |
||||||
|
mat4 transformsMatrix |
||||||
|
} |
||||||
|
Output { |
||||||
|
vec4 outPosition |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,3 @@ |
|||||||
|
void main(){ |
||||||
|
outColor = mix(color1,color2,factor); |
||||||
|
} |
@ -0,0 +1,3 @@ |
|||||||
|
void main(){ |
||||||
|
outColor = color1 * color2; |
||||||
|
} |
@ -0,0 +1,3 @@ |
|||||||
|
void main(){ |
||||||
|
outColor = texture2D(texture,texCoord); |
||||||
|
} |
@ -0,0 +1,3 @@ |
|||||||
|
void main(){ |
||||||
|
outPosition = transformsMatrix * vec4(inputPosition, 1.0); |
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
ShaderNodesDefinitions { |
||||||
|
ShaderNodeDefinition CommonVert { |
||||||
|
Type: Vertex |
||||||
|
Shader GLSL100: Common/MatDefs/ShaderNodes/Common/commonVert.vert |
||||||
|
Documentation { |
||||||
|
This Node is responsible for computing vertex position in projection space. |
||||||
|
It also can pass texture coordinates 1 & 2, and vertexColor to the frgment shader as varying (or inputs for glsl >=1.3) |
||||||
|
@input modelPosition the vertex position in model space (usually assigned with Attr.inPosition or Global.position) |
||||||
|
@input worldViewProjectionMatrix the World View Projection Matrix transforms model space to projection space. |
||||||
|
@input texCoord1 The first texture coordinates of the vertex (usually assigned with Attr.inTexCoord) |
||||||
|
@input texCoord2 The second texture coordinates of the vertex (usually assigned with Attr.inTexCoord2) |
||||||
|
@input vertColor The color of the vertex (usually assigned with Attr.inColor) |
||||||
|
@output projPosition Position of the vertex in projection space.(usually assigned to Global.position) |
||||||
|
@output vec2 texCoord1 The first texture coordinates of the vertex (output as a varying) |
||||||
|
@output vec2 texCoord2 The second texture coordinates of the vertex (output as a varying) |
||||||
|
@output vec4 vertColor The color of the vertex (output as a varying) |
||||||
|
} |
||||||
|
Input{ |
||||||
|
vec3 modelPosition |
||||||
|
mat4 worldViewProjectionMatrix |
||||||
|
vec2 texCoord1 |
||||||
|
vec2 texCoord2 |
||||||
|
vec4 vertColor |
||||||
|
} |
||||||
|
Output{ |
||||||
|
vec4 projPosition |
||||||
|
vec2 texCoord1 |
||||||
|
vec2 texCoord2 |
||||||
|
vec4 vertColor |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
ShaderNodeDefinitions{ |
||||||
|
ShaderNodeDefinition Unshaded{ |
||||||
|
Type: Fragment |
||||||
|
Shader GLSL100: Common/MatDefs/ShaderNodes/Common/unshaded.frag |
||||||
|
Documentation { |
||||||
|
This Node is responsible for outputing the unshaded color of a fragment. |
||||||
|
It can support texture mapping, an arbitrary input color and a vertex color |
||||||
|
(all resulting colors will be multiplied) |
||||||
|
@input texCoord the texture coordinates to use for texture mapping |
||||||
|
@input vertColor the vertex color (often comming from a varrying) |
||||||
|
@input matColor the material color (often comming from a material parameter) |
||||||
|
@input colorMap the texture to use for texture mapping |
||||||
|
@input color the color this node contribution will be multiplied to |
||||||
|
@output outColor the color of the pixel (usually assigned to Global.color) |
||||||
|
} |
||||||
|
Input{ |
||||||
|
vec2 texCoord |
||||||
|
vec4 vertColor |
||||||
|
vec4 matColor |
||||||
|
sampler2D colorMap |
||||||
|
vec4 color |
||||||
|
} |
||||||
|
Output{ |
||||||
|
vec4 color |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,3 @@ |
|||||||
|
void main(){ |
||||||
|
projPosition = worldViewProjectionMatrix * vec4(modelPosition, 1.0); |
||||||
|
} |
@ -0,0 +1,14 @@ |
|||||||
|
void main(){ |
||||||
|
#ifdef colorMap |
||||||
|
color *= texture2D(colorMap, texCoord); |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef vertColor |
||||||
|
color *= vertColor; |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifdef matColor |
||||||
|
color *= matColor; |
||||||
|
#endif |
||||||
|
|
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
ShaderNodesDefinitions { |
||||||
|
ShaderNodeDefinition FogFactor{ |
||||||
|
Type: Vertex |
||||||
|
Shader GLSL100: Common/MatDefs/ShaderNodes/Fog/fogFactor.vert |
||||||
|
Documentation { |
||||||
|
This Node is responsible for computing the fog factor of a vertex in the vertex shader. |
||||||
|
It computes the fogFactor according to view space z (distance from cam to vertex) and a fogDensity parameter. |
||||||
|
This Node should be used with a FogOutput for the fragment shader to effectively output the fog color. |
||||||
|
@input modelPostion the vertex position in model space |
||||||
|
@input modelViewMatrix the model view matrix responsible to transform a vertex position from model space to view space. |
||||||
|
@input fogDensity the fog density (usually assigned with a material parameter) |
||||||
|
@output fogFactor the fog factor of the vertex output as a varying |
||||||
|
} |
||||||
|
Input{ |
||||||
|
vec4 modelPosition |
||||||
|
// Note here that the fog vertex shader will compute position of the vertex in view space |
||||||
|
// This is a pretty common operation that could be used elsewhere. |
||||||
|
// IMO I would split this in 2 ShaderNodes, so that the view space pos could be reused. |
||||||
|
mat4 modelViewMatrix |
||||||
|
float fogDensity |
||||||
|
} |
||||||
|
Output{ |
||||||
|
float fogFactor |
||||||
|
} |
||||||
|
} |
||||||
|
ShaderNodeDefinition FogOutput{ |
||||||
|
Type: Fragment |
||||||
|
Shader GLSL100: Common/MatDefs/ShaderNodes/Fog/fogOutput.frag |
||||||
|
Documentation { |
||||||
|
This Node is responsible for multiplying a fog contribution to a color according to a fogColor and a fogFactor. |
||||||
|
This node should be used with a FogFactor node that will be responsible to compute the fogFactor in the vertex shader. |
||||||
|
@input fogFactor the previously computed fog factor |
||||||
|
@input fogColor the fog color |
||||||
|
@input color the color the fog contribution will be multiplied to. |
||||||
|
@output color the color with fog contribution (usually assigned to Global.color) |
||||||
|
} |
||||||
|
Input{ |
||||||
|
float fogFactor |
||||||
|
vec4 fogColor |
||||||
|
vec4 color |
||||||
|
} |
||||||
|
Output{ |
||||||
|
vec4 color |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,6 @@ |
|||||||
|
const float LOG2 = 1.442695; |
||||||
|
void main(){ |
||||||
|
vec4 viewSpacePos = modelViewMatrix * modelPosition; |
||||||
|
fogFactor = exp2(-fogDensity * fogDensity * viewSpacePos.z * viewSpacePos.z * LOG2 ); |
||||||
|
fogFactor = clamp(fogFactor, 0.0, 1.0); |
||||||
|
} |
@ -0,0 +1,3 @@ |
|||||||
|
void main(){ |
||||||
|
color = mix(fogColor, color, fogFactor); |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
ShaderNodeDefinitions{ |
||||||
|
ShaderNodeDefinition LightMapping{ |
||||||
|
Type: Fragment |
||||||
|
Shader GLSL100: Common/MatDefs/ShaderNodes/LightMapping/lightMap.frag |
||||||
|
Documentation { |
||||||
|
This Node is responsible for multiplying a light mapping contribution to a given color. |
||||||
|
@input texCoord the texture coordinates to use for light mapping |
||||||
|
@input lightMap the texture to use for light mapping |
||||||
|
@input color the color the lightmap color will be multiplied to |
||||||
|
@output color the resulting color |
||||||
|
} |
||||||
|
Input{ |
||||||
|
vec2 texCoord |
||||||
|
sampler2D lightMap |
||||||
|
vec4 color |
||||||
|
} |
||||||
|
Output{ |
||||||
|
vec4 color |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,3 @@ |
|||||||
|
void main(){ |
||||||
|
color *= texture2D(lightMap, texCoord); |
||||||
|
} |
Loading…
Reference in new issue