• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.


  • Content count

  • Joined

  • Last visited

Community Reputation

278 Neutral

About afraidofdark

  • Rank
  1. OpenGL

    Increasing sample count and applying attenuation based on distance may produce a good result. I'll definitely give this a shot. One of my question remained unanswered. How modern engines does this ? Is there a paper, tutorial or a chapter from a book that explains ue4's light cache or Unitiy's light probe ? Before implementing anything I like to know about this.
  2. I have just noticed that, in quake 3 and half - life, dynamic models are effected from light map. For example in dark areas, gun that player holds seems darker. How did they achieve this effect ? I can use image based lighting techniques however (Like placing an environment probe and using it for reflections and ambient lighting), this tech wasn't used in games back then, so there must be a simpler method to do this. Here is a link that shows how modern engines does it. Indirect Lighting Cache It would be nice if you know a paper that explains this technique. Can I apply this to quake 3' s light map generator and bsp format ?
  3. There is a very good game loop in the link which is tailored for windows forms. I need it in c++/cli so I converted the code as below. Here is my main loop. using namespace System; using namespace System::Windows::Forms; HWND g_theAppHandle = nullptr; bool IsApplicationIdle() { MSG msg; return PeekMessage(&msg, g_theAppHandle, 0, 0, 0) == 0; } void OnIdle(System::Object ^sender, System::EventArgs ^e) { while (IsApplicationIdle()) { if (PunkEd::ABTCLI::g_initSuccess) { PunkEd::ABTCLI::Frame(0.0f); } } } [STAThread] int CALLBACK WinMain( _In_ HINSTANCE hInstance, _In_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow ) { _CrtMemState memstate; _CrtMemCheckpoint(&memstate); PunkEd::PunkEdMain^ theApp = gcnew PunkEd::PunkEdMain; g_theAppHandle = (HWND)theApp->Handle.ToPointer(); Application::Idle += gcnew System::EventHandler(&OnIdle); Application::Run(theApp); _CrtMemDumpAllObjectsSince(&memstate); return 0; } This loop triggers PunkEd::ABTCLI::Frame(0.0f); every time the application is idle. And Frame(float deltaTime); function trigger everyting related to game. Like render and physics. However my rendering window is a panel. And I override its mouse move callback as below. private: System::Void panel1_MouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { Debug::WriteLine(e->Location); glm::vec3 cp = glm::vec3(e->Location.X, e->Location.Y, 0); glm::mat4 view = g_camera->GetViewMatrix(); glm::mat4 project = g_camera->m_projection; glm::unProject(cp, view, project, glm::vec4(0.0f, 0.0f, (float)panel1->Width, (float)panel1->Height)); cp.x -= panel1->Width / 2.0f; cp.y -= panel1->Height / 2.0f; g_cursor->m_node->m_translation = cp.xzy; } This function updates my curser's position in the game. However my render function is get called after I stop moving the mouse. How can I overcome this stuation such that my curser position gets update and renders immediatly after I moved mouse.
  4. I liked it. May be you can make it act more frantic ? By the way, I am working on a framework which can give web outputs. Here is a sample http://cihanbal.com/mcs.html I can make your character interactive. I need portfolio too. :) Sure you can use unity maybe unreal engine and it would be more proffesional looking. However, contact me if you are interested. I'd be glad to add something to this job if possible.
  5. I want to scale an object in different spaces. For example, in a hierarchical system I want to scale a node as if it is in its parent coordinate space, or in world space. void ABT::Node::Scale(glm::vec3 val, TransformationSpace space) { switch (space) { case ABT::TS_WORLD: { glm::quat ws = GetOrientation(ABT::TS_WORLD); m_scale += ws * val * glm::inverse(ws); } break; case ABT::TS_PARENT: { glm::quat ps; if (m_parent) ps = m_parent->GetOrientation(ABT::TS_WORLD); m_scale += ps * val * glm::inverse(ps); } break; case ABT::TS_LOCAL: { glm::quat ls = GetOrientation(ABT::TS_LOCAL); m_scale += ls * val * glm::inverse(ls); } break; } } Bad think with this code is, it doesn't apply transformation to one axis. It applies all three of them when I observe it.
  6. 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.   http://www.youtube.com/watch?v=_-InMH0pUxU   More about project: http://lostchamber.com/
  7. I search through web for changing up axis of max. Many people say, there isn't such option here is my solution which matches all axis with opengl -- rotate selected object obj = $ rotate $ (angleaxis -90 [1,0,0]) a = $.pos.z $.pos.z = -$.pos.y; $.pos.y = a;
  8. Hello,  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 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
  9. yep, I did it. Now my lights behave exactly like max lights. The only difference than standard phong - point light shading is that; they apply a gamma correction, and inverse linearly (based on distance) scale the attenuation of the light. also the effective area thing that I explained above.   here is the final result. It is good enough for me.  
  10. Applying gamma correction really helped a lot. However in max, light stop smoothly when it reaches its radius. I am trying to implement it cheaply. Here is the progress  
  11. 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; }    
  12. Hello,  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  
  13. I solve this by passing inverse matrix as a constant parameter. It works fine :)
  14. isn't there a way to find inverse transformation matrix of the world matrix in the hlsl shader ? passing it as a parameter is a solution but not my first choice :)
  15. hello, 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.   psudecode:    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 ?