[Orxonox-commit 3572] r8258 - data/branches/environment/programs
marwegma at orxonox.net
marwegma at orxonox.net
Mon Apr 18 18:45:24 CEST 2011
Author: marwegma
Date: 2011-04-18 18:45:23 +0200 (Mon, 18 Apr 2011)
New Revision: 8258
Added:
data/branches/environment/programs/Godrays_blur.cg
data/branches/environment/programs/Godrays_raw.cg
Log:
Added Godray Shader Cg-Programs to Programs-Folder.
Added: data/branches/environment/programs/Godrays_blur.cg
===================================================================
--- data/branches/environment/programs/Godrays_blur.cg (rev 0)
+++ data/branches/environment/programs/Godrays_blur.cg 2011-04-18 16:45:23 UTC (rev 8258)
@@ -0,0 +1,240 @@
+/**
+*
+* @brief Godrays_*.cg is a radial blur based shader implementation of the natural effects of godrays (ray light scattering).
+*
+* @author Markus Wegmann
+*
+**/
+
+
+struct OneTexelVertex {
+ float4 Position : POSITION;
+ float2 UV : TEXCOORD0;
+};
+
+//// Vertex Shader ////
+
+OneTexelVertex ScreenQuadVS(
+ float3 Position : POSITION,
+ float2 UV : TEXCOORD0
+) {
+ OneTexelVertex OUT = (OneTexelVertex)0;
+ OUT.Position = float4(Position, 1);
+ OUT.UV = float2(UV.xy);
+ return OUT;
+}
+
+OneTexelVertex ScreenQuadVSWithLightPosition(
+ float3 Position : POSITION,
+ float2 UV : TEXCOORD0,
+
+ uniform float4x4 viewProj,
+ uniform float4 sunLightPosition,
+
+ out float2 projSunLightPosition : TEXCOORD1
+) {
+ OneTexelVertex OUT = (OneTexelVertex)0;
+ OUT.Position = float4(Position, 1);
+ OUT.UV = float2(UV.xy);
+
+ projSunLightPosition = (mul(viewProj, float4(0,0,0,1))).xy;
+ projSunLightPosition = float2(0.5, 0.5) + projSunLightPosition / 35;
+
+ return OUT;
+}
+
+//// Fragment Shader ////
+
+void godray_blur(
+ OneTexelVertex IN,
+
+ float2 projSunLightPosition : TEXCOORD1,
+
+ out float4 oColor: COLOR,
+
+ uniform float exposure,
+ uniform float decay,
+ uniform float density,
+ uniform sampler2D decal)
+
+{
+ const int NUM_SAMPLES = 36;
+
+ float2 texCoord = IN.UV;
+
+
+ oColor = float4(0,0,0,1);
+
+ float2 deltaTextCoord = IN.UV - projSunLightPosition;
+ deltaTextCoord *= 1.0f / NUM_SAMPLES * density;
+
+ float illuminationDecay = 1.0f;
+
+ for(int i=0; i < NUM_SAMPLES; i++)
+ {
+ texCoord -= deltaTextCoord;
+ float4 sample = tex2D(decal, texCoord);
+
+ oColor += sample;
+ sample *= illuminationDecay;
+
+ illuminationDecay *= decay;
+ }
+
+ oColor *= exposure / NUM_SAMPLES;
+}
+
+
+void combineRenderAndGodrays(
+ OneTexelVertex IN,
+
+ out float4 color : COLOR,
+
+ uniform sampler2D renderDecal,
+ uniform sampler2D godraysDecal)
+{
+ color = tex2D(renderDecal, IN.UV) + tex2D(godraysDecal, IN.UV);
+}
+
+
+
+
+/* CgFx based code
+
+//// Variables ////
+/////////////////////////////////////////////////////////////////////////////////////
+
+float Script : STANDARDSGLOBAL <
+ string UIWidget = "none";
+ string ScriptClass = "scene";
+ string ScriptOrder = "postprocess";
+ string ScriptOutput = "color";
+ string Script = "Technique=Main;";
+> = 0.8;
+
+float4 SunLightPosition : Position <
+ string UIName = "Sun Light Position";
+ string Space = "World";
+> = {0, 0, 0, 1};
+
+float4 SkyColor <
+ string UIName = "Sky Color";
+ string UIWidget = "Color";
+> = {0f,0f,0f,1.0f};
+
+float GodrayExposure = 1f;
+float GodrayDecay = 0.1f;
+float GodrayDensity = 0.7f;
+
+texture ScnTarget : RenderColorTarget <
+ float2 ViewPortRatio = {1,1};
+ int MipLevels = 1;
+ string Format = "X8R8G8B8" ;
+ string UIWidget = "None";
+>;
+
+sampler2D ScnDecal = sampler_state {
+ Texture = <ScnTarget>;
+ WrapS = Repeat;
+ WrapT = Repeat;
+ MinFilter = Linear;
+ MagFilter = Linear;
+};
+
+texture GodrayTarget : RenderColorTarget <
+ float2 ViewPortRatio = {1,1};
+ int MipLevels = 1;
+ string Format = "X8R8G8B8" ;
+ string UIWidget = "None";
+>;
+
+sampler2D GodrayDecal = sampler_state {
+ Texture = <GodrayTarget>;
+ WrapS = ClampToEdge;
+ WrapT = ClampToEdge;
+ MinFilter = Linear;
+ MagFilter = Linear;
+};
+
+texture DepthBuffer : RENDERDEPTHSTENCILTARGET <
+ float2 ViewPortRatio = {1,1};
+ string Format = "D24S8";
+ string UIWidget = "None";
+>;
+
+texture LowDepthBuffer : RENDERDEPTHSTENCILTARGET <
+ float2 ViewPortRatio = {1,1};
+ string Format = "D24S8";
+ string UIWidget = "None";
+>;
+//// UN-TWEAKABLES - AUTOMATICALLY-TRACKED TRANSFORMS ////////////////
+
+float4x4 WorldITXf : WorldInverseTranspose < string UIWidget="None"; >;
+float4x4 WvpXf : WorldViewProjection < string UIWidget="None"; >;
+float4x4 VpXf : ViewProjection < string UIWidget="None"; >;
+float4x4 WorldXf : World < string UIWidget="None"; >;
+float4x4 ViewIXf : ViewInverse < string UIWidget="None"; >;
+
+// Standard full-screen imaging value
+
+float ClearDepth <
+ string UIWidget = "None";
+> = 1.0;
+
+float2 ViewportSize : VIEWPORTPIXELSIZE <
+ string UIName="Screen Size";
+ string UIWidget="None";
+>;
+
+technique Main <
+ string Script =
+ "RenderColorTarget0=ScnTarget;"
+ "RenderDepthStencilTarget=DepthBuffer;"
+ "ClearSetColor=SkyColor;"
+ "ClearSetDepth=ClearDepth;"
+ "Clear=Color;"
+ "Clear=Depth;"
+ "ScriptExternal=color;"
+ "Pass=BlurRaw;"
+ "Pass=CombineRender;";
+>
+{
+
+ pass BlurRaw
+ <
+ string Script = "RenderColorTarget=GodrayTarget;"
+ "RenderDepthStencilTarget=LowDepthBuffer;"
+ "Draw=Buffer;";
+ >
+ {
+ DepthTestEnable = false;
+ DepthMask = false;
+ BlendEnable = false;
+
+ VertexShader = compile vp40 ScreenQuadVSWithLightPosition(VpXf, SunLightPosition);
+ FragmentProgram = compile fp40 godray_blur(
+ GodrayExposure,
+ GodrayDecay,
+ GodrayDensity,
+ ScnDecal);
+ }
+
+ pass CombineRender
+ <
+ string Script = "RenderColorTarget0=;"
+ "RenderDepthStencilTarget=;"
+ "Draw=Buffer;";
+ >
+ {
+ DepthTestEnable = false;
+ DepthMask = false;
+ BlendEnable = false;
+
+ VertexShader = compile vp40 ScreenQuadVS();
+ FragmentProgram = compile fp40 combineRenderAndGodrays(
+ ScnDecal,
+ GodrayDecal);
+ }
+}
+
+*/
\ No newline at end of file
Added: data/branches/environment/programs/Godrays_raw.cg
===================================================================
--- data/branches/environment/programs/Godrays_raw.cg (rev 0)
+++ data/branches/environment/programs/Godrays_raw.cg 2011-04-18 16:45:23 UTC (rev 8258)
@@ -0,0 +1,91 @@
+/**
+*
+* @brief
+* Godrays_*.cg is a radial blur based shader implementation of the natural effects of godrays (ray light scattering).
+* Godrays_raw.cg includes the shader programs for the preparating step.
+*
+* @author Markus Wegmann
+*
+**/
+
+
+void sun_shader(
+ float4 position : POSITION,
+ float4 normal: NORMAL,
+
+ out float4 oPosition : POSITION,
+ out float4 oColor : COLOR,
+
+ uniform float4x4 modelViewProj,
+ uniform float4 sunColor)
+{
+ oPosition = mul(modelViewProj, position);
+ oColor = 2 * normalize(sunColor);
+}
+
+
+void black_shader(
+ float4 position : POSITION,
+
+ out float4 oPosition : POSITION,
+ out float4 oColor: COLOR0,
+
+ uniform float4x4 modelViewProj)
+{
+ oPosition = mul(modelViewProj, position);
+ oColor = float4 (0, 0, 0, 1);
+}
+
+
+/* CgFx based code
+
+
+//// Variables ////
+/////////////////////////////////////////////////////////////////////////////////////
+
+float4 SunLightColor : Specular <
+ string UIName = "Lamp 0 Color";
+ string Object = "Pointlight0";
+ string UIWidget = "Color";
+> = {0.3, 0.42, 1, 1};
+
+//// UN-TWEAKABLES - AUTOMATICALLY-TRACKED TRANSFORMS ////
+
+float4x4 WorldITXf : WorldInverseTranspose < string UIWidget="None"; >;
+float4x4 WvpXf : WorldViewProjection < string UIWidget="None"; >;
+float4x4 VpXf : ViewProjection < string UIWidget="None"; >;
+float4x4 WorldXf : World < string UIWidget="None"; >;
+float4x4 ViewIXf : ViewInverse < string UIWidget="None"; >;
+
+
+//// Techniques ////
+technique SunShader
+{
+ pass p0 <
+ string Script = "Draw=geometry;";
+> {
+ DepthTestEnable = true;
+ DepthMask = true;
+ BlendEnable = true;
+ CullFaceEnable = true;
+
+ VertexProgram = compile vp40 sun_shader(WvpXf, SunLightColor);
+ }
+}
+
+technique BlackShader
+{
+ pass p0 <
+ string Script = "Draw=geometry;";
+> {
+ DepthTestEnable = true;
+ DepthMask = true;
+ BlendEnable = true;
+ CullFaceEnable = true;
+
+ VertexProgram = compile vp40 black_shader(WvpXf);
+ }
+}
+
+*/
+
More information about the Orxonox-commit
mailing list