• Content count

  • Joined

  • Last visited

Community Reputation

467 Neutral

About TeaTreeTim

  • Rank

Personal Information

  • Interests
  1. Should be opposite:     struct PatchOutputType { float edges[3] : SV_TessFactor; float inside : SV_InsideTessFactor; };     PatchOutputType ExamplePatchFunction(InputPatch<HullInputVertice, 3> input) { PatchOutputType output;   output.edges[2] = FactorFromPoints(input[0].pos.xy, input[1].pos.xy); output.edges[0] = FactorFromPoints(input[1].pos.xy, input[2].pos.xy); output.edges[1] = FactorFromPoints(input[0].pos.xy, input[2].pos.xy); output.inside = FactorFromPoints((input[0].pos.xy + input[1].pos.xy + input[2].pos.xy) / 3.0f);   return output; }  
  2. Since that example (1-3) deliberately eliminates axes with low weights, it might be best to test and not sample if weight is 0. I don't know why they allude to this and not do it in the sample code.
  3. Tessellated ocean with no culling artifacts.

    What depth buffer format are you using? I'd try again with higher precision. 
  4. Tessellated ocean with no culling artifacts.

    Why wouldn't backfaces appear in wireframe. Do you mean you are using culling CW or CCW in the shader or that even in solid they show? What do you mean 'even well above ocean surface'?
  5. I do it like this: http://www.socoso.com.au/Tiogra/Index.html?page=basemesh.html A combination of torus and tesselation. Tesselation has its limits as to how much and it also has other issues, such as the triangular orientation inherent in the system. It is also not magically faster, more triangles still means more resources to render. It is very good for monolithic grids where you have areas that need more detail (such as rocky parts).
  6. If everyone ran from what they didn't like no games will ever get made.   Even if you love programming and enjoy puzzle solving, when you do programming for a living there is going to be a point where you will come to hate it; if only briefly. What will you do at this point, abandon your dreams just because you don't like programming?   What about the Indie developers who dream of making there own games, yet they hate programming and can't afford to hire a programmer, should they give up?   I think the point is games aren't just about programming. Not everyone is suited to programming and just at a person to person level, you are welcome to do something you don't like but if you are more suited to model design, you'd be better off doing that and making some money on turbosquid etc. One day someone might commission you for a game.
  7. So just to go over the basic points: - You are confident the matrix gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] is updated every frame correctly (no silly error in the camera class)? - You confident this is a UV coordinate issue and not for example vertices moving or a depth buffer problem? - You don't have any hardware extras turned on in the Catalyst utility, particularly relating to anti-aliasing? - You are confident this has nothing to do with the reflection mapping you seem to be doing? Edit: and have you tried turning down vsync and matching the frame rate in catalyst if it lets you?
  8. You know you have to set the constant buffer and apply it to a slot for the shader? Show that code if you are already doing it.
  9. Realization of displacement mapping

    What is the displacement for? If you are generating terrain then choice of normal is a big deal because you can end up with collisions. I talk about it a bit here: http://www.socoso.com.au/Tiogra/Index.html?page=Displacement/normals.html I talk specifically about my engine so it's not all generic.   As for division, tessellation does the heavy lifting for you if you are prepared to commit. For pregenerated terrain, I used to use quad tree terrain with a displacement algorithm but that was part CPU part GPU, you might be able to do it all in compute these days I don't know.
  10. Assimp and Skinning transforms

    There's a lot of things that can go wrong. Start with the basics like is the mesh scaled and rotated the same as the armature at identity and are the bone heads where you expect them to be?
  11. Have you tried using b instead of cb?      cbuffer Standard : register(b0)    {        };
  12. It's common practice to not have intersections like that, you would 'stitch'. This is height map based but the need to stitch is the same. Every big triangle has subdivisions to match the smaller neighbours. If you just moved the smaller ones to be in line with the big triangles there would be errors like you describe  
  13. Identify A Model

    Hi,   I have been using a place holder model and have included some shots of it on my web site. I don't remember where I got the model from and don't want to tread on toes. Does anyone recognise the green alien at http://www.socoso.com.au/tiogra/mocap.html  
  14. Dynamic GPU Instancing

    I sort like this: http://www.socoso.com.au/tiogra/trees.html you could still render as meshes, I just pack em all for simplicity.
  15. Subdividing triangles using a GS

    Hi, A long hand version: PSIn MidPoint(PSIn a, PSIn b) { PSIn result; result.pos = (a.pos + b.pos) / 2.0f; result.tex = (a.tex + b.tex) / 2.0f; // project pos to the same radius as the other points here return result; } [maxvertexcount(8)] void GS(triangle PSIn input[3], inout TriangleStream<PSIn> triStream) { PSIn pointA = input[0]; PSIn pointB = input[1]; PSIn pointC = input[2]; PSIn pointAB = MidPoint(pointA, pointB); PSIn pointAC = MidPoint(pointA, pointC); PSIn pointBC = MidPoint(pointB, pointC); pointA.pos = mul(pointA.pos, viewMatrix); pointA.pos = mul(pointA.pos, projectionMatrix); pointB.pos = mul(pointB.pos, viewMatrix); pointB.pos = mul(pointB.pos, projectionMatrix); pointC.pos = mul(pointC.pos, viewMatrix); pointC.pos = mul(pointC.pos, projectionMatrix); pointAB.pos = mul(pointAB.pos, viewMatrix); pointAB.pos = mul(pointAB.pos, projectionMatrix); pointAC.pos = mul(pointAC.pos, viewMatrix); pointAC.pos = mul(pointAC.pos, projectionMatrix); pointBC.pos = mul(pointBC.pos, viewMatrix); pointBC.pos = mul(pointBC.pos, projectionMatrix); triStream.Append(pointA); triStream.Append(pointAB); triStream.Append(pointAC); triStream.Append(pointBC); triStream.Append(pointC); triStream.RestartStrip(); triStream.Append(pointAB); triStream.Append(pointB); triStream.Append(pointBC); triStream.RestartStrip(); } Using triangle strip just seems silly to me, I'd use list and it would make more logical sense but the above will work, you'd need to project the mid points to the sphere as well though. I stand by my original point that I think your order is incorrect, and add the second restart strip like I did.