• Home
  • Products
    • Game Engine
      • Base
      • Mathematics
      • Geometry
      • Physics
      • Particles
      • Animation
      • Graphics
      • Game
      • Game UI
    • Windows Forms
      • Docking Windows
      • Text Editor Control
  • Downloads
  • Buy
    • Overview
    • Professional
    • Indie
    • Non-Commercial
  • Support
    • Overview
    • Blog
    • Forum
    • License FAQ
    • Documentation
  • About
    • About Us
      • Services
    • Contact Us
    • Press
    • Legal Terms
      • Imprint (English)
      • Imprint (German)
Select the search type
 
  • Site
  • Web
Search
DigitalRune.com
Login |Register
NEWS News RSS Feed BLOG Blog RSS Feed FORUM News RSS Feed DOCUMENTATION DigitalRune Software on YouTube DigitalRune Software on Twitter
You are here: SupportForum

If you want to contribute to the forum discussions, please Register or Login.

SearchHome
  • 1
  • 2
  • 3
  • 4
  • 5
HomeHomeDigitalRune Sof...DigitalRune Sof...Game EngineGame EngineDigitalRune Model EffectsDigitalRune Model Effects
Previous
 
Next
New Post
7/2/2012 7:05 PM
 
patt4179
No Ranking

Joined: 6/22/2012
Posts: 55
DigitalRune Model Effects 

Hey guys! I bought the engine about a week ago and have been loving it!


I downloaded the newest version that includes the graphics part and have run into some questions. I have an ocean effect shader that I had originally gotten from here that I used before I got this engine. I tried my hand at applying this shader in the graphics engine, but an error was thrown stating that I wasn't supplying the TANGENT0 information needed by the shader.


I'm pretty sure this is happening because I changed the content processor to the Digital Rune Model instead of the XNA Model which had an option for generating tangent frames in the processor options. I very well could just not be applying effects the intended way to a Digital Rune model though, so I wanted to see how you would go about doing this. Here's the code that I have for the ocean (I basically took the Ground class in the DefferedLightingSample and made an Ocean version that loads my model, etc):


001.public class Ocean : GameObject
002.    {
003.        private DigitalRune.Graphics.SceneGraph.Model _model;
004.        private RigidBody _body;
005. 
006. 
007.        // Parameters for Ocean shader
008.        EffectParameter projectionOceanParameter;
009.        EffectParameter viewOceanParameter;
010.        EffectParameter worldOceanParameter;
011.        EffectParameter ambientIntensityOceanParameter;
012.        EffectParameter ambientColorOceanParameter;
013. 
014. 
015.        EffectParameter diffuseIntensityOceanParameter;
016.        EffectParameter diffuseColorOceanParameter;
017.        EffectParameter lightDirectionOceanParameter;
018. 
019. 
020.        EffectParameter eyePosOceanParameter;
021.        EffectParameter specularColorOceanParameter;
022. 
023. 
024.        EffectParameter colorMapTextureOceanParameter;
025.        EffectParameter normalMapTextureOceanParameter;
026.        EffectParameter totalTimeOceanParameter;
027. 
028. 
029.        // ocean shader
030.        Effect oceanEffect;
031. 
032. 
033.        // ocean textures
034.        Texture2D diffuseOceanTexture;
035.        Texture2D normalOceanTexture;
036. 
037. 
038.        //variables
039.        float totalTime = 0.0f;
040.        Vector4 ambientLightColor;
041. 
042. 
043. 
044. 
045.        protected override void OnLoad()
046.        {
047.            var contentManager = ServiceLocator.Current.GetInstance<ContentManager>();
048.            var graphicsService = ServiceLocator.Current.GetInstance<IGraphicsService>();
049.            var screen = ((DeferredLightingScreen)graphicsService.Screens["Default"]);
050. 
051. 
052.            //ocean effect
053.            oceanEffect = contentManager.Load<Effect>("OceanShader");
054.            SetupOceanShaderParameters();
055.            diffuseOceanTexture = contentManager.Load<Texture2D>("water");
056.            normalOceanTexture = contentManager.Load<Texture2D>("wavesbump");
057. 
058. 
059.            // Load model and add it to the scene.
060.            _model = (DigitalRune.Graphics.SceneGraph.Model)contentManager.Load<DigitalRune.Graphics.SceneGraph.Model>("ocean").Clone();
061.            _model.ScaleLocal = new Vector3F(0.5f);
062.            screen.Scene.Children.Add(_model);
063. 
064. 
065.            // Disable the CastsShadow flag for ground mesh instances. No need to render
066.            // this model into the shadow map. (This also avoids any shadow acne on the
067.            // ground model.)
068.            foreach (var meshInstance in _model.GetSubtree().OfType<MeshInstance>())
069.                meshInstance.CastsShadows = false;
070. 
071. 
072.            // Create rigid body and add it to the simulation.
073.            var simulation = ServiceLocator.Current.GetInstance<Simulation>();
074.            _body = new RigidBody(new PlaneShape(Vector3F.UnitY, 0))
075.            {
076.                MotionType = MotionType.Static,
077.            };
078.            simulation.RigidBodies.Add(_body);
079.        }
080. 
081. 
082. 
083. 
084.        protected override void OnUnload()
085.        {
086.            // Remove model and body.
087.            _model.Parent.Children.Remove(_model);
088.            _model.Dispose();
089.            _model = null;
090. 
091. 
092.            _body.Simulation.RigidBodies.Remove(_body);
093.            _body = null;
094.        }
095. 
096. 
097.        public void SetupOceanShaderParameters()
098.        {
099.            // Bind the parameters with the shader.
100.            worldOceanParameter = oceanEffect.Parameters["World"];
101.            viewOceanParameter = oceanEffect.Parameters["View"];
102.            projectionOceanParameter = oceanEffect.Parameters["Projection"];
103. 
104. 
105.            ambientColorOceanParameter = oceanEffect.Parameters["AmbientColor"];
106.            ambientIntensityOceanParameter = oceanEffect.Parameters["AmbientIntensity"];
107. 
108. 
109.            diffuseColorOceanParameter = oceanEffect.Parameters["DiffuseColor"];
110.            diffuseIntensityOceanParameter = oceanEffect.Parameters["DiffuseIntensity"];
111.            lightDirectionOceanParameter = oceanEffect.Parameters["LightDirection"];
112. 
113. 
114.            eyePosOceanParameter = oceanEffect.Parameters["EyePosition"];
115.            specularColorOceanParameter = oceanEffect.Parameters["SpecularColor"];
116. 
117. 
118.            colorMapTextureOceanParameter = oceanEffect.Parameters["ColorMap"];
119.            normalMapTextureOceanParameter = oceanEffect.Parameters["NormalMap"];
120.            totalTimeOceanParameter = oceanEffect.Parameters["TotalTime"];
121.        }
122. 
123. 
124.        public void Update(GameTime gameTime)
125.        {
126.            ambientLightColor = Color.White.ToVector4();
127.            totalTime += gameTime.ElapsedGameTime.Milliseconds / 5000.0f;
128.        }
129. 
130. 
131.        public void Draw(GameTime gameTime, Player player)
132.        {
133.            var graphics = ServiceLocator.Current.GetInstance<IGraphicsService>();
134. 
135. 
136.            MeshInstance meshIn = _model.GetSubtree().OfType<MeshInstance>().First();
137.            Submesh meshSub = meshIn.Mesh.Submeshes.First();
138. 
139. 
140.            // Set parameters
141.            projectionOceanParameter.SetValue(player.Camera.Camera.Projection.ToXna());
142.            viewOceanParameter.SetValue(player.Camera.View.ToXna());
143.            worldOceanParameter.SetValue(Matrix.CreateRotationY((float)MathHelper.ToRadians((int)270)) * Matrix.CreateRotationZ((float)MathHelper.ToRadians((int)90)) * Matrix.CreateScale(100.0f) * Matrix.CreateTranslation(0, -60, 0)); //Matrix.CreateScale(50.0f) * Matrix.CreateRotationX(MathHelper.ToRadians(270)) * Matrix.CreateTranslation(0, -60, 0);
144.            ambientIntensityOceanParameter.SetValue(0.4f);
145.            ambientColorOceanParameter.SetValue(ambientLightColor);
146.            diffuseColorOceanParameter.SetValue(Color.White.ToVector4());
147.            diffuseIntensityOceanParameter.SetValue(0.2f);
148.            specularColorOceanParameter.SetValue(Color.White.ToVector4());
149.            eyePosOceanParameter.SetValue(player.Camera.PoseLocal.Position.ToXna());
150.            colorMapTextureOceanParameter.SetValue(diffuseOceanTexture);
151.            normalMapTextureOceanParameter.SetValue(normalOceanTexture);
152.            totalTimeOceanParameter.SetValue(totalTime);
153. 
154. 
155.            Vector3 lightDirection = new Vector3(1.0f, 0.0f, -1.0f);
156. 
157. 
158.            //ensure the light direction is normalized, or
159.            //the shader will give some weird results
160.            lightDirection.Normalize();
161.            lightDirectionOceanParameter.SetValue(lightDirection);
162. 
163. 
164.            //set the vertex source to the mesh's vertex buffer
165.            graphics.GraphicsDevice.SetVertexBuffer(meshSub.VertexBuffer, 0);
166. 
167. 
168.            //set the current index buffer to the sample mesh's index buffer
169.            graphics.GraphicsDevice.Indices = meshSub.IndexBuffer;
170. 
171. 
172.            graphics.GraphicsDevice.BlendState = BlendState.AlphaBlend;
173.            graphics.GraphicsDevice.DepthStencilState = DepthStencilState.DepthRead;
174. 
175. 
176.            oceanEffect.CurrentTechnique = oceanEffect.Techniques["Technique1"];
177. 
178. 
179.            for (int i = 0; i < oceanEffect.CurrentTechnique.Passes.Count; i++)
180.            {
181.                //EffectPass.Apply will update the device to
182.                //begin using the state information defined in the current pass
183.                oceanEffect.CurrentTechnique.Passes[i].Apply();
184. 
185. 
186.                //theMesh contains all of the information required to draw
187.                //the current mesh
188.                graphics.GraphicsDevice.DrawIndexedPrimitives(
189.                    PrimitiveType.TriangleList, 0, 0,
190.                    meshSub.VertexCount, meshSub.StartIndex, meshSub.PrimitiveCount);
191.            }
192.        }
193.    }


=========================================================================================================


If you want to look at the OceanShader code, I can attach or paste it in as well. I just didn't want to have an even more gigantic post if it wasn't necessary.


Thanks for your help!

 
New Post
7/3/2012 11:09 AM
 
MartinG
7th Level Poster

www.digitalrune.com
Joined: 10/15/2006
Posts: 448
Re: DigitalRune Model Effects 

You don't have to use the DigitalRune Model class. You can still use the XNA Model class and XNA ModelProcessor. Then everything should work as before.

But of course, you can use the new Model class: The processor settings need to be specified in a model description file (XML file). The XML file needs to have the same name as the model (example: "ocean.fbx" --> "ocean.xml") and needs to be located in the same folder as the model.

The model description file is used to

  • specify processor settings
  • assign materials to submeshes
  • split/compress animations
  • ...

You can read more about it here: Model description

In your case the following file should do:

<?xml version="1.0" encoding="utf-8"?>
<Model GenerateTangentFrames="True">
</Model>
 
New Post
7/3/2012 9:50 PM
 
patt4179
No Ranking

Joined: 6/22/2012
Posts: 55
Re: DigitalRune Model Effects 

Ahh okay! I'm assuming the proper way to do effects then is to also make a Material Definition xml file for the Model Description xml file to use and then use Effect Bindings in code to update the effect parameters?

 
New Post
7/4/2012 10:43 AM
 
MartinG
7th Level Poster

www.digitalrune.com
Joined: 10/15/2006
Posts: 448
Re: DigitalRune Model Effects 

It depends: 

The effect bindings are primarily used for MeshInstances and Meshes. MeshInstance nodes can be cloned and placed anywhere within a scene. Materials (effects) can be shared between meshes. The MeshInstanceRenderer automatically sorts and renders a list of MeshInstances.

But the ocean is different: 

  • The ocean is usually large and covers everything that isn't covered by land masses in the level. 
  • Most levels have exactly 0 or 1 ocean object.
  • The ocean is transparent, which means that it needs to be rendered after all opaque object.
    [Sidenote: Support for transparent objects will be added in the next update.]

That's why I would treat the ocean different than normal scene nodes. (The same way the skybox is treated differently.)
I would either create a custom Ocean object or OceanRenderer with a custom Render method. Similar to what you posted previously.

In this case there are no benefits using effect bindings.

 
New Post
7/4/2012 10:56 PM
 
patt4179
No Ranking

Joined: 6/22/2012
Posts: 55
Re: DigitalRune Model Effects 

I'm actually planning on making a generic water shader that I will be using across multiple parts of my game that I'd like to share this material for. I've attempted to get the shader working by using EffectBindings, but I can't get it to do anything. Here's the code I'm using now along with the water.xml and ocean.xml files and the shader. What am I not doing?

The code:

public class Ocean : GameObject
    {
        private DigitalRune.Graphics.SceneGraph.Model _model;
        private RigidBody _body;
 
        //variables
        float totalTime = 0.0f;
 
 
        protected override void OnLoad()
        {
            var contentManager = ServiceLocator.Current.GetInstance<ContentManager>();
            var graphicsService = ServiceLocator.Current.GetInstance<IGraphicsService>();
            var screen = ((DeferredLightingScreen)graphicsService.Screens["Default"]);
 
            // Load model and add it to the scene.
            _model = (DigitalRune.Graphics.SceneGraph.Model)contentManager.Load<DigitalRune.Graphics.SceneGraph.Model>("ocean").Clone();
            _model.ScaleLocal = new Vector3F(0.5f);
            screen.Scene.Children.Add(_model);
 
            // Disable the CastsShadow flag for ground mesh instances. No need to render
            // this model into the shadow map. (This also avoids any shadow acne on the
            // ground model.)
            foreach (var meshInstance in _model.GetSubtree().OfType<MeshInstance>())
                meshInstance.CastsShadows = false;
 
            // Create rigid body and add it to the simulation.
            var simulation = ServiceLocator.Current.GetInstance<Simulation>();
            _body = new RigidBody(new PlaneShape(Vector3F.UnitY, 0))
            {
                MotionType = MotionType.Static,
            };
            simulation.RigidBodies.Add(_body);
        }
 
 
        protected override void OnUnload()
        {
            // Remove model and body.
            _model.Parent.Children.Remove(_model);
            _model.Dispose();
            _model = null;
 
            _body.Simulation.RigidBodies.Remove(_body);
            _body = null;
        }
 
        public void Update(GameTime gameTime, Player player)
        {
            totalTime += gameTime.ElapsedGameTime.Milliseconds / 5000.0f;
 
            Vector3 lightDirection = new Vector3(1.0f, 0.0f, -1.0f);
            lightDirection.Normalize();
 
            foreach (var meshInstance in _model.GetSubtree().OfType<MeshInstance>())
            {
                Mesh mesh = meshInstance.Mesh;
 
                foreach (var material in mesh.Materials)
                {
                    var effectBinding = material["Ocean"];
 
                    effectBinding.Set("LightDirection", lightDirection);
                    effectBinding.Set("EyePosition", player.Camera.PoseWorld.Position.ToXna());
                    effectBinding.Set("TotalTime", totalTime);
                }
            }
        }
    }

The XML files:

<?xml version="1.0" encoding="utf-8"?>
 
<Model File="ocean.fbx"  GenerateTangentFrames="True">
    <Mesh>
        <Submesh Material="water.xml" />
    </Mesh>
</Model>

<?xml version="1.0" encoding="utf-8"?>
<Material>  
  <Pass Name="ShadowMap" Effect="DigitalRune/Materials/ShadowMap" />
  <Pass Name="GBuffer" Effect="DigitalRune/Materials/GBuffer">
    <Parameter Name="SpecularPower" Value="10" />
  </Pass>
  <Pass Name="Material" Effect="DigitalRune/Materials/Material">
    <Parameter Name="DiffuseColor" Value="1,1,1" />
    <Parameter Name="SpecularColor" Value="0.1,0.1,0.1" />
    <Texture Name="DiffuseTexture" File="water.jpg" />
  </Pass> 
  <Pass Name="Ocean" Effect="OceanShader.fx">
    <Parameter Name="AmbientIntensity" Value="0.4" />
    <Parameter Name="AmbientColor" Value="1,1,1,1" />
    <Parameter Name="DiffuseColor" Value="1,1,1,1" />
    <Parameter Name="DiffuseIntensity" Value="0.2" />
    <Parameter Name="SpecularColor" Value="1,1,1,1" />
    <Texture Name="ColorMap" File="water.jpg" />
    <Texture Name="NormalMap" File="wavesbump.dds" />
  </Pass>
</Material>

And the effect file:

// Matrix
float4x4 World;
float4x4 View;
float4x4 Projection;
 
// Light related
float4 AmbientColor;
float AmbientIntensity;
 
float3 LightDirection;
float4 DiffuseColor;
float DiffuseIntensity;
 
float4 SpecularColor;
float3 EyePosition;
 
float TotalTime;
 
texture2D ColorMap;
sampler2D ColorMapSampler = sampler_state
{
    Texture = <ColorMap>;
    MinFilter = linear;
    MagFilter = linear;
    MipFilter = linear;
};
 
texture2D NormalMap;
sampler2D NormalMapSampler = sampler_state
{
    Texture = <NormalMap>;
    MinFilter = linear;
    MagFilter = linear;
    MipFilter = linear;
};
 
// The input for the VertexShader
struct VertexShaderInput
{
    float4 Position : POSITION0;
    float2 TexCoord : TEXCOORD0;
    float3 Normal : NORMAL0;
    float3 Binormal : BINORMAL0;
    float3 Tangent : TANGENT0;
};
 
// The output from the vertex shader, used for later processing
struct VertexShaderOutput
{
    float4 Position : POSITION0;
    float2 TexCoord : TEXCOORD0;
    float3 View : TEXCOORD1;
    float3x3 WorldToTangentSpace : TEXCOORD2;
};
 
// The VertexShader.
VertexShaderOutput VertexShaderFunction(VertexShaderInput input)
{
    VertexShaderOutput output;
    input.Position.z += sin((TotalTime*16)+(input.Position.y/1))/16;
 
    float4 worldPosition = mul(input.Position, World);
    float4 viewPosition = mul(worldPosition, View);
    output.Position = mul(viewPosition, Projection);
    output.TexCoord = input.TexCoord;
 
    output.WorldToTangentSpace[0] = mul(normalize(input.Tangent), World);
    output.WorldToTangentSpace[1] = mul(normalize(input.Binormal), World);
    output.WorldToTangentSpace[2] = mul(normalize(input.Normal), World);
     
    output.View = normalize(float4(EyePosition,1.0) - worldPosition);
 
    return output;
}
 
// The Pixel Shader
float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
    input.TexCoord.x = input.TexCoord.x*20.0f + sin(TotalTime*3+10)/256;
    input.TexCoord.y = input.TexCoord.y*20.0f;
 
    float4 color = tex2D(ColorMapSampler, input.TexCoord);
 
    input.TexCoord.y += (sin(TotalTime*3+10)/256)+(TotalTime/16);
    float3 normalMap = 2.0 *(tex2D(NormalMapSampler, input.TexCoord)) - 1.0;
 
    input.TexCoord.y -= ((sin(TotalTime*3+10)/256)+(TotalTime/16))*2;
    float3 normalMap2 =(2 * (tex2D(NormalMapSampler, input.TexCoord))) - 1.0;
 
    normalMap = (normalMap + normalMap2) / 2;
 
    normalMap = normalize(mul(normalMap, input.WorldToTangentSpace));
    float4 normal = float4(normalMap,1.0);
 
    float4 diffuse = saturate(dot(-LightDirection,normal));
    float4 reflect = normalize(2*diffuse*normal-float4(LightDirection,1.0));
    float4 specular = pow(saturate(dot(reflect,input.View)),28);
 
    float4 finalColor =  color * AmbientIntensity +
            color * DiffuseIntensity * diffuse +
            specular*250;
 
    finalColor.a = 0.3f;
    return finalColor;
}
 
// Our Techinique
technique Technique1
{
    pass Pass1
    {
        VertexShader = compile vs_2_0 VertexShaderFunction();
        PixelShader = compile ps_2_0 PixelShaderFunction();
    }
}


Any ideas as to what I'm doing incorrectly here to get this to work?

 
New Post
7/5/2012 10:28 AM
 
MartinG
7th Level Poster

www.digitalrune.com
Joined: 10/15/2006
Posts: 448
Re: DigitalRune Model Effects 

Your material (water.xml) has a new render pass "Ocean". This pass needs to be added to the render pipeline.

DeferredLightingScreen.OnRender():

protected override void OnRender(RenderContext context)
{
  ...
  // ----- Material Pass
  // In the material pass we render all mesh instances a second time into a
  // single full-screen render target. The material pass shaders combine the
  // mesh materials (diffuse texture, etc.) with the light buffer info.
  var sceneRenderTarget = renderTargetPool.Obtain2D(width, height, false, SurfaceFormat.HdrBlendable, DepthFormat.Depth24Stencil8);
  graphicsDevice.SetRenderTargetAndViewport(sceneRenderTarget, context.Viewport);
  graphicsDevice.Clear(Color.Black);
  graphicsDevice.DepthStencilState = DepthStencilState.Default;
  graphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise;
  graphicsDevice.BlendState = BlendState.Opaque;
  context.RenderPass = "Material";
  _meshInstanceRenderer.Render(cameraFrustumQuery.MeshInstances, context);
   
  // ----- Ocean Pass
  context.RenderPass = "Ocean";
  _meshInstanceRenderer.Render(cameraFrustumQuery.MeshInstances, context);
 
  ...
}

I assume that the ocean model should only be rendered in the "Ocean" pass, right? In this case you can remove the other passes from the water.xml:

<?xml version="1.0" encoding="utf-8"?>
<Material> 
  <Pass Name="Ocean" Effect="OceanShader.fx">
    <Parameter Name="AmbientIntensity" Value="0.4" />
    <Parameter Name="AmbientColor" Value="1,1,1,1" />
    <Parameter Name="DiffuseColor" Value="1,1,1,1" />
    <Parameter Name="DiffuseIntensity" Value="0.2" />
    <Parameter Name="SpecularColor" Value="1,1,1,1" />
    <Texture Name="ColorMap" File="water.jpg" />
    <Texture
      Name="NormalMap"
      InputGamma="1.0"
      OutputGamma="1.0"
      PremultiplyAlpha="False"
      Format="NoChange"
      File="wavesbump.dds" />
  </Pass>
</Material>
I have also added a few settings for the normal map. These settings ensure that the texture content is not changed by the content processors.
 
New Post
7/5/2012 4:36 PM
 
patt4179
No Ranking

Joined: 6/22/2012
Posts: 55
Re: DigitalRune Model Effects 

It's working perfectly now! Everything makes sense now knowing about the DeferredLightingScreen.OnRender() method. It's looking great, and I can't wait until transparencies are in with the next update!

Thanks so much for your patience and your help getting this working!

 
New Post
7/6/2012 5:38 AM
 
patt4179
No Ranking

Joined: 6/22/2012
Posts: 55
Re: DigitalRune Model Effects 

Any idea on how to set a render target? I'm attempting to do do some reflection for the water and am trying this to draw into a RenderTarget2D:

_graphicsManager.GraphicsDevice.SetRenderTarget(reflectionRenderTarget);
_graphicsManager.GraphicsDevice.Clear(Color.Black);
_graphicsManager.Render(false);
_graphicsManager.GraphicsDevice.SetRenderTarget(null);
level.UpdateReflection(reflectionRenderTarget);

I'm calling this in the DeferredLightingGame's Draw method after the scene gets rendered. I saved out the render target, and it's not showing up with anything on it. Do I need to do anything special to get this to draw to the render target? Do I need to somehow add it to the GraphicsManager's RenderPool?


 
New Post
7/6/2012 9:34 AM
 
MartinG
7th Level Poster

www.digitalrune.com
Joined: 10/15/2006
Posts: 448
Re: DigitalRune Model Effects 

The GraphicsManager automatically sets/overrides render targets. If there are multiple GraphicsScreens, then the first screens can be rendered into a temporary render target, but the last GraphicsScreen always renders into the back buffer. That's by design.

A problem is that rendering reflections by calling GraphicsManager.Render() multiple times is usually highly inefficient and physically not correct: The reflection image should be low-resolution. Complex effects (such as shadows) should be skipped. Tone-mapping and post-processing should only be applied to the final image.

So instead, reflection rendering needs to be integrated directly into the render pipeline of the scene (method DeferredLightingScreen.OnRender()). In this method you have full control of what is rendered into which render target.

 
New Post
7/6/2012 3:27 PM
 
patt4179
No Ranking

Joined: 6/22/2012
Posts: 55
Re: DigitalRune Model Effects 

Ahh okay, that makes much more sense now that you mention it. I'll mess around and see what I can come up with!

 
 Page 1 of 1
Previous
 
Next
HomeHomeDigitalRune Sof...DigitalRune Sof...Game EngineGame EngineDigitalRune Model EffectsDigitalRune Model Effects


DigitalRune is a trademark of Garstenauer Information Technology OG.

Garstenauer Information Technology OG
Weingartenstrasse 35, 4452 Ternberg
Austria (EUROPE)
office@digitalrune.com

Home Products Downloads Buy Support About Us
Game Engine Particles Windows Forms Professional Blog Services
Base Animation Docking Windows Indie Forum Contact Us
Mathematics Graphics Text Editor Control Non-Commercial License FAQ Press (News)
Geometry Game Documentation Legal Terms
Physics Game UI Imprint
Impressum
Copyright © 2006-2012 Garstenauer Information Technology OG Terms Of UsePrivacy Statement