Jump to content
  • Advertisement
The search index is currently processing. Activity stream results may not be complete.

All Activity

This stream auto-updates     

  1. Past hour
  2. Have you noticed these issues consistently, or just on your current visit? Mobile, desktop, or both? Apart from one hiccup earlier in the day that I assume was a transient issue the site has been pretty snappy today and recently, at least for me. The homepage is a little slow on a clean load but nice and fast on subsequent loads from cache, and the rest of the site (excluding more intensive tasks like search or activity feeds) are nice and quick. Are there specific blog entries you're seeing problems with? Checking over a couple of the most recent blog entries, as well as a few of your most recent ones, the formatting looks ok to me, and I see a number of embedded videos in recent updates.
  3. Gnollrunner

    What does MMORPG require?

    I'm working on my own MMO but I haven't gotten very far. I'm doing procedural world generation which I'm currently debugging. At some point when I get all the kinks out, I'm going to try to see if I can get some help. On the up side, I don't have to hold down a real job so I have time and I think I'm making reasonable progress.
  4. I noticed the site become so slow as to be barely usable. Also, the blogs have been thrashed - formatting has been ruined. For instance, embedded videos have changed to plain text non-clickable links. Posts that once had images embedded, are now replaced with just the name of the image in plain text. What on earth is going on? This used to be a great site.
  5. the incredible smoker

    3D Add floor in skybox

    Hi, as requested a re-post ( i dont know why the whole topic can not be moved by admin ? ) Here it is : //----------------------------------------------------------------------------------------- Hi, i am very intrested in this topic. If you look to a PS2 game like resident 4, you will see the skybox also have clouds passing by, very nice made. ( i cant find a youtube movie of the last level, they dont look to the skybox ) Anyways this is how i have my skybox with all my super simple tricks : No floor, the level will generate the horizon. No looking up either, there is a empty spot, the background wont be cleared so it remembers the last drawn pixels, you could clear the screen, only it is very cpu demanding, for a simple level you could, then have alpha values in your skybox to blend towards the sky and floor, you need to add some extra vertices for that. I made the skybox have selectable wall ammount, from box to cylinder, so it wont look super warped in the corners like a skybox. The skybox has always the camera position, so it wont move, rotation would look a dumb way to move the clouds. The textures are mirrored in a selectable ammount, can set how many times you want the texture repeating. Still no perfect skybox, i hope you find out some more or someone will post it ( i bet the pro`s are typing on skyboxes instead of posting here ). You could make to load mountain mesh also in the skybox, or some planets and astroids in the skybox. Still i have exact the same question as you : how to make a flat horizon ? Look at this movie its for sega saturn so it should be doable very simple somehow ::
  6. Today
  7. Hello everyone! We are currently creating a multiplayer online battle arena (MOBA). It's a simple platformer where players fight each other in teams. The theme is fantasy/medieval and you therefore fight each other with swords, daggers, crossbows etc! What are we looking for? - Programmer: You should be able to work alone and get the game working as it's supposed to. Also writing decent code and thinking about how to prevent players from cheating. - Composer/SFX Artist: You should be able to create music as well as ambient background sound, sound effects to leveling up etc. Here are some things from the game that's already created: The game contains RPG elements such as leveling: Loading screen for the first map that the players can fight together in: Two of the NPCs: You can see more of the game when we get in touch! This position is paid but with rev-share / fixed amount when the game comes out! Please don't add me and ask for money right away. For more information, please contact us on discord or PM here! The discord is Nafei#9413Have a wonderful day :o)
  8. alvaro

    Separating components of a free form rotation

    I don't understand your "straightforward" plan . Try to explain very carefully what you are trying to do. The first word I don't understand in your description is "affect". I am not being pedantic: I honestly don't understand what you are trying to do, even if I substitute "effect" there. "Tweening" (I had to look it up) presumably refers to interpolation, but between what and what? If you expand the cross product, you'll see that your rotation vector is something very simple, like (delta.Y, delta.X, 0.0) or something like that. The way your code is written obscures what's going on.
  9. Hi, Does anyone know if there is such a thing called the "waters" index? Because we have something called the vegetation index which is calculated with.. float SAVI = (NIR - red / NIR + red + L) * (1+L); which performs really well. It picks up all the vegetations I am after, but what about for waters areas, such as seas, lakes, or rivers? thanks Jack
  10. Well, what are you trying to do? Land a job? Create your own stuff? If it's the latter, then you just need to finish more products because quantity > quality. Just do it. As for landing a job, no idea because I have never worked at any game studios nor do I plan to anytime soon.
  11. Russell Creswell

    TWD in Unity

    That seems like a tough one m9. I'm sure it's possible. Viewtiful Joe on GameCube had a similar art style as well hah
  12. Fritz1

    Asking for your feedback!

    That's cool. I am thankful for your feedback.
  13. Thanks so much for this post. The information is very valuable to me, even if I only pursue D3D11 projects as a hobby (to learn C++ in the process of writing a little game engine). I hope I didn't, quite literally, ask for too much here. Quick edit: in the second third of your post you mention this: I have tried out rendering with structured buffers via pulling vertices directly from the buffer with SV_VertexID, and while I couldn't find a performance difference between rendering from structured buffers and the standard method (D3D11_BIND_SHADER_RESOURCE vs D3D11_BIND_VERTEX_BUFFER etc.) I am curious if I understand you correctly here, as I think UAVs and structured buffers are similar and this info could be quite relevant to me. What I understand is: it is not given, that all the DXGI_FORMAT_'s that are supported by the IA or the equivalent preamble in the shader-code for traditional vertex-buffer usage (D3D11_BIND_VERTEX_BUFFER) are also supported when loading data from structured buffers or UAVs in the shader.
  14. JM-KinematicSoup

    [UNREAL] WIP real-time collaboration plugin - Scene Fusion!

    Thanks a bunch! We released a version for Unity some time ago, which we are actively developing for. The Unreal version is something we have really wanted to do for quite some time, but didn't take the plunge until recently. We are very excited, and when it is released it will be very customizable so that teams can fine-tune it to suit their projects.
  15. sebjf

    alternative to NVidia FX Composer?

    The last videos from ShaderFlex on their YouTube channel were posted ~3 years ago: https://www.youtube.com/channel/UCEljvElA7sJqMr_wy4Agdcw/videos Which would line up with their mention of the Oculus DK1 and DK2, but not CV1 or Vive. There is also ShaderToy, if you're happy to be limited to ~OpenGLES 2.0, though its always just crashed the browser on my home PC. I'd second Unity - its big, but it auto-compiles, has good compile time error reporting through the VS interop, and between the scene view and inspector material preview (where btw you can also tweak material parameters in real-time), gives nice visual feedback.
  16. flodihn

    What does MMORPG require?

    I want to chip in saying that there are some MMOs created by a very small indie team at low or no budget. I think Wurm/Vendetta Online was only two or three guys.
  17. Wow man this looks really cool.
  18. MarcusAseth

    alternative to NVidia FX Composer?

    Thanks Hodgman, I'll consider that as well in case I don't find anything closer to FX Composer. I've also found this one trough google called ShaderFlex, do you guys know anything about it? On that page it says but it also says and I have no idea if "this years" means 2018 or if is an old abandoned page ­čśĽ
  19. 1) If you use the calculation of texture coordinates in vertex shader, you should remove them from Vertex data, 2) You should setup vertex attributes: GLfloat vertices[6][2] = { { x, y + 32 }, { x, y }, { x + 32, y }, { x, y + 32 }, { x + 32, y }, { x + 32, y + 32 } }; glBindTexture(GL_TEXTURE_2D, idTexture); glBindBuffer(GL_ARRAY_BUFFER, VBO); // first you should call glBufferData instead of glBufferSubData, because OpenGL doesn't know about memory size. // if you call glBufferSubData, then you will get GL_INVALID_ENUM, see please: // https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glBufferSubData.xml // https://www.khronos.org/registry/OpenGL-Refpages/es3.0/html/glBufferSubData.xhtml glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC); // you should setup vertex attributes glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), NULL); glUniform1i(this->mTextShaderHandle, GL_ZERO); glDrawArrays(GL_TRIANGLE_STRIP, GL_ZERO, 6); glBindVertexArray(0); 2) Do you set uniforms "texColor", "projection" ? also you can simplify the pixel shader: float alpha = texture(text, TexCoords).r);\n" color = vec4(textColor, alpha);\n" Try to use my corrections. And you use OpenGL ES 3.0, not 2.0, because the VertexArray Object for OpenGL ES 2.0 is supported through GL_OES_vertex_array_object extension.
  20. Hodgman

    What does MMORPG require?

    So, an MMO RPG requires everything needed to make: An RPG A multi-player online game A massive-scale game Each one of those alone can be a tiny garage hobby project, or a professional 1 to 100 million-dollar project, and mixing all three together multiplies their complexities (not just adding together). Asking how to make an MMO as your first project is like asking how to make a Jurassic Park feature film as your first movie making project. That's why people will answer with: you need money (and/or experience) Content is expensive. RPG's need a lot of content. Massive games need a lot of content. It's normal to have 50 to 1000 highly skilled artists / content creators on big projects like that! To get around that... you have to work out how to make content as cheaply / quickly as possible. Find out what kind of content you and your friends can pump out cheaply. Pages of text? Tile-based dungeons? Procedural world generation? Online games take all the complexity of single-player / split-screen / offline games, and then raise it to be exponentially more complicated. Networking is not just a feature you can bolt onto a game -- it has to be architected from the ground up, and the correct architecture depends heavily on the game features / style / genre / player expectations / hosting infrastructure / etc... Massively-multiplayer online games take the complexity of regular online games and add an entirely new level of cloud hosting insanity (and infrastructure expenses). FWIW, you can just go download an engine like GameMaker, Unity, Unreal, etc, and start on this project now. You'll at least want to use an existing game engine, because building that too is just another complexity multiplier on top of all of the above!!! However, it's probably much more useful to keep planning this magnum opus as a future project, and instead start on a few smaller projects to build up experience. e.g. a small single-player RPG, a small online pong game, etc...
  21. Thank you for sharing the tips. Now I learned redis can do push/pop,pub/sub other than key-value search; and MySQL also has in-RAM features. For scaling capacity, probably I'm going to use some cloud DB like aws RDS or dynamoDB. not sure how expensive it can go
  22. JoeJ

    Separating components of a free form rotation

    You could convert the rotation to a rotation vector and split it into two parts (Note that i use the term 'rotation vector' differently: I mean axis times angle, like used to represent angular velocity. Your usage of the term in your snippet is misleading, you should call it 'axisVector' instead.) quaternion initialRotation = ...whatever; vec3 rotationVector; { vec3 axis; float angle; initialRotation.ConcertToaxisandAngle(&axis, &angle); rotationVector = axis * angle; } From there it's intuitive to split the rotation vector using dot products, modify them, and recombine to a single rotation: vec3 splitDirection0 (1,0,0); vec3 splitDirection1 (0,1,0); vec3 splitRV0 = splitDirection0.Dot(rotationVector); vec3 splitRV1 = splitDirection1.Dot(rotationVector); // do some processing with splitRV0 and splitRV1 like tweening // recombine: vec3 alteredRotationVector = splitRV0 + splitRV1; float angle = alteredRotationVector.Length(); quaternion newRotation = Quaternion.CreateFrom´╗┐AxisAngl´╗┐e (alteredRotationVector / angle, angle); // not altering the vectors, newRotation would equal initialRotation Of course you can calculate splitRV0 and splitRV1 directly from mouse input, so no need to generate them from an initial quaternion - i just showed that for completeness. The advantage is that this method is order independent, so no gimbal lock or up-vector like behavior. Hope this helps (i'm not really sure what you want to do exactly). Edit: To smooth user input, it might work best to calculate angular velocity between current and target orientation, smooth this (mixing with previous value), and integrate it to current orientation. It might also help to limit angular acceleration to a max value. Thinking of it this should be the way to go - seperating angles does not make so much sense. Let me know what you think - i'd need to look some things up, as i'm not into physics right now... Bugfix: To preserve the initial rotation this would be correct: vec3 splitRV1 = rotationVector - splitRV0; I accidently seperated rotations along x and y axis only, so summing them the initial z rotation would be still missing.
  23. When scaling, only the number 0 is used as an anchor. Your initial position of (1.0, 1.0) was multiplied by the scaling factor of (image width, image height), resulting in the image being translated by that amount. For your vertices, have the position coordinates be centered around 0, and not 1. So to fix your problem, replace the 1's to 0's, and replace the 2's to 1's for all your position values: float verticies[] = { //Positions. //Texture Coordinates. 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f };
  24. Liudvikas Lazauskas

    What does MMORPG require?

    Whether I am naive or optimistic, I would still like to believe that there is hope for such games to be reborn.
  25. Hey all, so I did some experimenting to try and see what rendered outputs of various methods give me. I'm focusing right now on making sure my rendered image renders hard edges properly and I want it to do so in the least amount of octree traversals as possible. My octree render function looks a little like this: void RenderOctree(v3 Center, octree* Node, u32 Level) { b32 IsLeaf = CheckIfLeaf(Node); i32 MinX, MaxX, MinY, MaxY; f32 FMinX, FMaxX, FMinY, FMaxY; f32 MinZ, MaxZ; ApproximateNodeSize(Center, Level, &FMinX, &FMaxX, &FMinY, &FMaxY, &MinZ, &MaxZ); if (MaxZ <= 0.0f) { // NOTE: Node is behind camera, cull it return; } MinX = SomeRoundingMethod(FMinX); MaxX = SomeRoundingMethod(FMaxX); MinY = SomeRoundingMethod(FMinY); MaxY = SomeRoundingMethod(FMaxY); if (NodeIsPixelSize()) { // Render the node as a dot v2 ProjectedCenter = ProjectPoint(Center); u32 PixelId = SomeRoundingMethod(ProjectedCenter.y)*ScreenX + SomeRoundingMethod(ProjectedCenter.x); f32 Depth = DepthMap[PixelId]; if (Depth > Center.z) { RenderState->DepthMap[PixelId] = Center.z; } return; } if (MinX >= ScreenX || MinY >= ScreenX || MaxX <= 0 || MaxY <= 0) { // NOTE: Node is outside of the screen, don't render it or its children return; } MinX = Max(0, MinX); MinY = Max(0, MinY); MaxX = Min(ScreenX, MaxX); MaxY = Min(ScreenX, MaxY); b32 IsOccluded; { IsOccluded = true; f32* DepthRow = DepthMap + MinY*ScreenX + MinX; for (i32 Y = MinY; Y < MaxY; ++Y) { f32* Depth = DepthRow; for (i32 X = MinX; X < MaxX; ++X) { if (*Depth > MinZ) { // NOTE: We aren't occluded IsOccluded = false; goto EndLoop; } ++Depth; } DepthRow += ScreenX; } } EndLoop: if (IsOccluded) { return; } for (u32 CurrNodeId = 0; CurrNodeId < 8; ++CurrNodeId) { u32 SortedNodeId = Indicies[GetFrontBackSortId(CurrNodeId)]; if (Node->Children[SortedNodeId]) { RenderOctree(GetChildCenter(Node, SortedNodeId), Node->Children[NodeId], Level + 1); } } } So in the above code, we first approximate the nodes size on screen and get its float min/max xy values, we then use some sort of rounding method to convert those values to ints, we check if the nodes size is a pixel (and render if it is), otherwise we clip the node, check for occlusion, and traverse its children. For the various experiments I tried, I used the above code and only modified the rounding method for min/max, the rounding method for rendering the 1 pixel node, and whether the occlusion check was inclusive/exclusive of max x,y values. The first methods I tried render single pixel nodes by projecting and flooring the center of the node to convert to a integer pair, which represents the pixel that node takes up. The reason we floor the center of the node is because flooring corresponds to rendering the node to the pixel it covers the most. Method 1: Render Info: Num Traversals: 5056321 NumRejected: 562733 NumRendered: 3656973 This method takes the floor of FMinX/Y values and the ceiling of FMaxX/Y values to get the pixels a node intersects (for occlusion checks). The idea here is that we try to be conservative with the pixels the node is expected to cover. This method produces renders with sharp edges but traverses a ton of extra nodes to do so. We also check if a node is ready to render by using the FMin/Max values. The node must satisfy (FMaxX - FMinX) <= 1.0f and (FMaxY - FMinY) <= 1.0f to be rendered. Method 2: Render Info: Num Traversals: 3406177 NumRejected: 646950 NumRendered: 2193007 Here we round the FMin/Max values to the nearest integer to calculate the integer Min/Max values. If you look at some of the edges in the renderer, they have pixel crawling (random dots sticking out). Method 1 didn't have this artifact because it would fill in the extra line where the dots stick out (the edges were thicker). In this method, we get a ton of nodes that get rounded down to be inside the edge instead of outside, and thus are rejected and prevented from being rendered correctly, which gives us the pixel crawling. We again use the FMin/Max values to check if a node is small enough to be rendered. Method 3: Render Info: Num Traversals: 3705105 NumRejected: 299739 NumRendered: 2784177 Here we use integer Min/Max values to decide if a node is small enough to be considered a single pixel in size. We check if MaxX - MinX <= 1 and MaxY - MinY <= 1. We take the floor of our FMin/FMax values to generate the min/max values, and we make our occlusion check inclusively check pixels at MaxX and MaxY coordinates. The result has lots of holes and pixel crawling which seems to be caused by improper coverage of the nodes, due to the rounding method. I figured that being inclusive with the bounds check would make the node size correspond to the actual pixels the node takes up but I guess this isn't the case. Method 4: Render Info: Num Traversals: 2544985 NumRejected: 340016 NumRendered: 1777500 Here we use integer Min/Max values to decide when to render a node and we calculate it by rounding FMin/Max to the nearest integer. The idea is that the previous method wasn't capturing the node size properly so maybe rounding provides the actual node size that the nodes take up on screen. We again use integer Min/Max to decide if a node is ready to be rendered. The result looks almost perfect, but it still has a little pixel crawling occurring for hard edges. Method 5: Render Info: Num Traversals: 2686033 NumRejected: 1045595 NumRendered: 1184283 This method (like method 4) uses integer Min/Max to decide when a node should be rendered, and it calculates the Min/Max values by rounding to the nearest integer. The only difference is, if a node's MinX==MaxX or MinY == MaxY, then the node is discarded completely and not rendered. This seems to cleanup Method 4's image and make all the edges sharp. Method 5 seems to be the most correct so far. And best of all, it also has a similar number of traversals as Method 4, so we aren't being overly conservative with approximating the nodes size when converting the coordinates to integers. One thing that bothers me with this method is the fact that nodes which are 0 pixels wide or tall. Of course those nodes should be discarded since they have 0 pixels covered but it feels odd that they exist in the first place and have to be removed. I guess that's just a sacrifice that has to happen because of weird rounding errors that can occur. The other thing that bothers me with this method and the other methods which use integer min/max values to calculate if a node should be rendered is the resulting level map that gets rendered. So when I render each node, I also render into a separate buffer a color for the given level (recursion depth) that the node is. So we have a color for level 1, another color for level 2, and so on. If we use float FMin/FMax values to decide if a node should be rendered, our level map looks like this: If we use integer Min/Max, our level map looks like this: Now there are cases where a node which is 1 pixel by 1 pixel can actually color 4 pixels if it happens to have its center where 4 pixel corners intersect. So from that logic, it makes sense for the node to be rendered based off of integer min/max values. But from the above images, we would expect layers of levels moving farther away from the camera like what we get when we use float FMin/FMax values to decide if a node is small enough to render. So my question is, whats the right answer here? Should my rendering method generate 0 sized nodes that need to be discarded? Should it also have the weird level map as shown above? Or are there some other rounding methods that make more sense theoretically/experimentally?
  26. A have a "free form" rotation method that looks like this: Vector3 screenVector = new Vector3(delta.X, -delta.Y, 0.0f); Vector3 rotationVector = Vector3.Cross(Vector3.UnitZ, screenVector); float angle = rotationVector.Length(); rotation = Quaternion.Concatenate(rotation, Quaternion.CreateFromAxisAngle(Vector3.Normalize(rotationVector), angle)); world = Matrix.CreateFromQuaternion(rotation); The values of delta.X/delta.Y are displacement values along the screen coordinates. This allows me to freely rotate an object in 3D, no matter how it is orientated using touch/mouse movements. I wish to smooth out this affect by adding a tweener to the rotation. This seems straightforward: split up the X and Y components of the rotation vector (the cross product above), separate the angle value in to two values X and Y, tween the angles, and then create a composite Quaternion. However, this doesn't seem to work in practice. When concatenating the two Quaternions, there is no movement along some arbitrary axis (depending on how much the object has been rotated). Furthermore, the object doesn't rotate freely anymore and instead starts to rotate in a manner similar to a third/first person camera (once the elevation goes past 90 degrees, the orientation is "flipped"). Instead of concatenating the Quaternions, I tried to Matrix.CreateFromQuaternion for each one instead, and then multiply the matrices. But this yields the exact same effect as described above. Going to the extremes, I tried to tween the rotation vector, instead of manipulating the angles. This doesn't work as expected either. Whenever the direction changes, the normalization of the rotation vector causes it to rotate on the opposite axis to reverse direction. This means that if you're rotating along the X axis in the positive direction and then suddenly start rotating in the negative direction, at some point during the tweening affect, there will be some rotation along the Y axis, as the rotation "falls over" in the opposite direction. Any recommendations on making this work correctly? Tweening the angle values does feel like the right way to go about it, but how do I construct the correct final rotation matrix if I separate them out?
  27. The main problem with NoSQL overall, is that it requires you to know all your access patterns ahead of time. And because secondary indices are usually cumbersome or expensive, if you have more than the plain "given a key, find me a bag of data" then NoSQL starts showing its weakness. Another thing that NoSQL got first, but SQL is now getting too, is in-RAM databases. Depending on performance needs and cost / operations specifics, you may want to look at databases specific for RAM. On the other hand, if you have data with a "long tail" (old data that's seldom accessed,) then all-RAM is almost certainly the wrong choice. Also: Putting more RAM into a SQL database host, to make it cache better, often reduces the cost difference between in-RAM and on-disk. If you're familiar with MySQL, there's nothing wrong in just using that. It works great, and can scale far. If you need specific features of Redis (atomic push/pop, sets, pub/sub) then you might want to include that, too, with the caveat that you have to put a time-to-live on all data, because when Redis runs out of RAM, that's it -- no more data! Another interesting option is FoundationDB, which recently went open source when the company was bought by Apple. It's a key/value store that supports federation/distribution -- you can add nodes to get more capacity, without changing the semantics of the database. Redis, and most other NoSQL databases, by contrast, don't allow transactional work across multiple hosts.
  1. Load more activity
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!