Jump to content

  • Log In with Google      Sign In   
  • Create Account


Member Since 17 Jun 2008
Offline Last Active Aug 30 2014 02:27 AM

Topics I've Started

[3D ENGINE] 3ds max game engine

25 April 2014 - 11:45 AM

Project: A game engine embedded in to 3ds Max. (Similar to Blender Game Engine)
Goal: Creating an artist friendly game and interactive application development environment in 3ds Max.
This is a "working in progress" project. We develop both a plug-in for max to syncronize max scene with our game engine and also game engine it self. In the end, we have seen that 3ds Max become a nice WYSIWYG editor for our game engine and the project is doable with the 3ds Max SDK.

We think that the idea has some potential espacially for 3ds max users but we are a small team so we are considering to move on an open source engine, URHO3D and bring this idea to life.


Your thoughts and comments are very welcome.


More about project: http://lostchamber.com/

3ds max plugin Y axis Up Right Handed coordinates

22 June 2013 - 03:22 PM

We are using physx 3d max plugin (3ds Max DCC plug-in 2.8.9 (v03131509)) and export physx scene for 3.x engine as xml file.
The problem is, we couldn't find an option to change up axis (max is using z as up) and I strongly believe there is none sad.png
In order to fix the problem we rotate and translate relevant objects. But this trick doesn't seem to be a good solution more over I suspect it will work for constrains. (And it is problematic, we are doing a lot of tricky things to export the scene properly)
Probably there are people like us out there. How did you overcome the problem ? Thanks

lighting in 3d max realistic mode

09 February 2013 - 05:06 AM

Hello, I am trying to implement lighting as close as possible to lighting done in 3ds max 2013 (realistic mode)
Here are the things that I make similar with max's lights and material in order to get same results
attenuation is inverse square in both max and my lighting
material diffuse, ambient & specular colors. Glossiness & specular level are same
both materials have phong shading model
point light effective area (where lights attenuation is 1) and light radius are same
Effective area start from lights origin and and has a radius "e", every pixel fall in to that region has an attenuation factor of 1
After effective region every light shows inverse square attenuation characteristic. I come to this solution after investigating and examining how lighting and attenuation is handled in max. But I still cant figure out how exactly lighting is handled in max.

here is what I've got so far.
Each light in max dominates its region with its color more clearly, in my program colors are mixed and green dominates the scene and blue is almost lost. This might be a gamma problem I am not sure, so I ask your opinions. 
To see the difference more clearly I changed the contrast of the image

also here is my lighting shader

void phongOmni(out float3 diffCont, out float3 specCont, in light lght, in material mat, in VS_OUT inp)
	float3 ep = mul(eyePos, invWorld).xyz; // object space eye position
	float4 l4p;
	l4p.xyz = lght.position;
	l4p.w = 1;
	float3 lp = mul(l4p, invWorld).xyz; // object space light position
	// lighting
	float3 n = normalize(inp.n);
	float3 v = normalize(ep - inp.p);
	float3 l = normalize(lp - inp.p);
	float3 h = normalize(v + l);
	float diffMag = max(dot(n, l), 0);
	diffCont = lght.color * diffMag; // diffuse contribution
	float specMag = pow(max(dot(n, h), 0), mat.glossiness * 100);
	specCont = mat.specularLevel * lght.color * specMag;  // specular contribution

        // Attenuation   
	float d = distance(lp, inp.p);
	float r = lght.attenuationEnd;
	float e = lght.attenuationStart;

        // if distance of the pixel to the light is less than effective region "e"
        // pixel's attenuation is 1
	float att = 1; 
	if (d > e)
		d = d - e;
		r = r - e;
		float denom = d / r + 1;
		att = 1 / (denom * denom);
        // if attenuation is less than 0.005 than it has a 0 attenuation
	att = (att -  0.005) / (1 -  0.005);
        att = max(att, 0);
	specCont *= att;
	diffCont *= att;

float3 PS(VS_OUT inp) : SV_Target
	float3 dacum = float3(0, 0, 0); // specular light accumulation
	float3 sacum = float3(0, 0, 0); // diffuse light accumulation

	for (int i = 0; i < lightCount; i++) {
		float3 diffCont;
		float3 specCont;
		phongOmni(diffCont, specCont, lights[i], mat, inp);
		dacum += diffCont;
		sacum += specCont;
	float3 color = (sacum + ((dacum + mat.ambientColor) * mat.diffuseColor));
	return color;



hlsl structure packing

13 January 2013 - 04:58 PM


I pass a material definition structure from c++ to hlsl however in the debug view I see some of the values are NAN

here is my c++, hlsl structure definitions and debug view results. Only unused0 must be NAN I use it as padding variable, however

all other float values are olso NAN I couldn't point out the problem here, may be you can


 C++ structure

struct MaterialData {
Vector3 diffuseColor;
float unused0;
Vector3 specularColor;
float specularLevel;
Vector3 ambientColor;
float glossiness;
Shader structure
struct material {
float3 diffuseColor;
float unused0;
float3 specularColor;
float specularLevel;
float3 ambientColor;
float glossiness;
Shader debug values
diffuseColor x = 0.588000000, y = 0.588000000, z = 0.588000000 float3
unused0 NaN float
specularColor x = 0.900000000, y = 0.900000000, z = 0.900000000 float3
specularLevel NaN float
ambientColor x = 0.588000000, y = 0.588000000, z = 0.588000000 float3
glossiness NaN float

inverse transformation of the world matrix

08 January 2013 - 03:55 PM


In a vertex shader program, I've got world transformation matrix and a point. I think that if I take inverse transformation matrix of the world matrix and multiply it by the point, I transform point from world space to object space.




Matrix worldm; // I only have these two variables

float4 point;


Matrix invWorl = inverseTransform(worldm);

float4 objectSpacePoint = invWorld * point; // I want this


How can I do this in hlsl ?