Jump to content
  • Advertisement

AxeGuywithanAxe

Member
  • Content count

    203
  • Joined

  • Last visited

Community Reputation

1229 Excellent

1 Follower

About AxeGuywithanAxe

  • Rank
    Member

Personal Information

  • Role
    Programmer
  • Interests
    Art
    Programming

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. I wanted to see how others are currently handling descriptor heap updates and management. I've read a few articles and there tends to be three major strategies : 1 ) You split up descriptor heaps per shader stage ( i.e one for vertex shader , pixel , hull, etc) 2) You have one descriptor heap for an entire pipeline 3) You split up descriptor heaps for update each update frequency (i.e EResourceSet_PerInstance , EResourceSet_PerPass , EResourceSet_PerMaterial, etc) The benefits of the first two approaches is that it makes it easier to port current code, and descriptor / resource descriptor management and updating tends to be easier to manage, but it seems to be not as efficient. The benefits of the third approach seems to be that it's the most efficient because you only manage and update objects when they change.
  2. AxeGuywithanAxe

    C++ saving this ptr offset

    This seems like a large misunderstanding of the use of both inheritance and the component entity model. I think it would be beneficial for you to look up and develop your understanding of both paradigms. From an inheritance standpoint , You should never find yourself in an instance in which you’re deriving from two different classes with the same base class. From an entity component standpoint, the purpose of the entity is to be a container for the components, not a subclass... and there shouldn’t be any manipulation of “self” using reinterpret cast and etc to access a required component, among other things.
  3. AxeGuywithanAxe

    State of Custom and Commercial Engines as of 2017/2018

    Thank you for your perspective! I think one of my main issues I'm having is forgetting just how long it takes to get the entire project done and might be rushing it to much. I like the idea of creating my code , but it seems like a lot of work, and I don't necessarily know if it outweighs the benefits. I've learned quite a lot building my own engine, but I still don't have a full finished project.
  4. AxeGuywithanAxe

    Open/Infinite worlds in CryEngine

    Star Citizen rewrote a grand majority of the cryengine code base, and switched to lumberyard because of the lack of support from Crytek and the fact that they seem to be an incredibly unstable company right now , a lot of closures , not paying staff, lack of support, etc. Open world and infinite world are two completely different things, but there is some overlap. Both need streaming systems, I believe Star Citizen uses an instancing system , and there are dozens of other things that need to be done. Your question is somewhat like asking how to make an mmorpg.
  5. AxeGuywithanAxe

    State of Custom and Commercial Engines as of 2017/2018

    That makes quite a lot of sense, and I guess I didn't think of it from that aspect. I think my current problem is that I'm not quite sure what my focus is. I wanted to start out as a graphics programmer, but after a series of projects and outside influences, I've sort of burned out on the graphics end (at least when it comes to shaders). I think I'm more suited for either gameplay/general/tools because I have yet to burn out on them, and I like the challenge of designing the architecture , instead of implementing mathematical theories and etc to make things "look pretty". I've always had the notion that the best way to show my work, and to create a game on the side, was to build everything from scratch, but I've started to find a diminishing returns when doing it, I think I constantly fall into the trap of looking how vast other engines are and forgetting that they have been worked on by 100s of people over a decade or more. But I also like the feeling I get when I accomplish something, and like knowing that all the code is my own. That seems to have been a tangent, but from your perspective when looking at an applicant, would you rather see someone who created a full game , leveraging an existing engine, or someone who might have a partial game with a custom built one?
  6. AxeGuywithanAxe

    State of Custom and Commercial Engines as of 2017/2018

    I guess I should have said, will it realistically come to the point where Unreal Engine 4 and Unity take up so much of the market share, that the concept of having a proprietary engine will only be for those running on a decade + of tech. Yeah, and I'm definitely feeling that now. I feel like I'm never making "real" progress with starting from scratch. I'm currently integrating physics into my engine, and I just constantly think about how much time could be saved from using an engine with decades of testing and 100's of titles. Part of me likes designing an engine and knowing exactly how something works, and not having to "rely" on another person and a general purpose method. I think that's the problem I have, it seems like more and more companies are ditching their engines for UE4. From a portfolio perspective, what I can show with a proprietary engine is a lot more visually interesting, but it also relies on others tech. If I start from scratch, I might not be able to have as much to show, but I can explain exactly why I designed my renderer , game layer , reflection layer, etc the way I chose to. I'm just trying to find a proper balance.
  7. Hey all, with the announcement of House Marque ditching their current game engine to use Unreal Engine , http://www.playstationlifestyle.net/2017/12/05/housemarques-next-game-will-use-unreal-engine-4/, I wanted to ask how everyone feels of the current state of commercial and custom game engines in the AAA and Indie Space. It seems like more and more studios are starting to switch to commercial engines, either Unity or UE4. Square Enix is creating Kingdom Hearts , Dragon Quest, and FF Remake in Unreal Engine, Rare is using UE4 for Sea of Thieves, Bend is using Unreal Engine for Days Gone, Insomniac Games used Unity for their smaller titles, and the list continues. As a graduate student that is about to graduate, I just wanted to see if the concept of fully creating a game from scratch is becoming a dying breed for engine developers, and I should focus more on creating my projects using these more popular engines, especially from a portfolio perspective. Thank you.
  8. AxeGuywithanAxe

    Entity-Component systems

    It honestly depends how in depth you want to go with reflection, in reality it can be extremely simple, to complex like code generation. Personally, I'd stick with a custom solution instead of using C++17, but that's just me. This reflection system was started from Insomniac Games and expanded over time : https://github.com/HeliumProject/Reflect A little self promotion , this is a small blog about my old reflection system, it's had a major refactor and looks quite literally nothing like this now, but it worked at the time http://www.ademolathompson.com/archetypesystem/ C++ Reflection is quite a large topic, so there are dozens of papers , blogs, etc about this exact topic if you google it. A basic C++ implementation could be like this class CClass { typedef CObject*(*ClassConstructorType); CClass(const char* Name, .... ClassConstructorType Ref): ... CObject* ConstructInstance() const { return (*m_ClassConstructorRef)(); } private: // member parameters like size, alignment, etc uint32 ClassSize; uint32 ClassAlignment; ClassConstructorType m_ClassConstructorRef; std::vector<CProperty*> Properties; std::vector<CFunction*> Functions; std::string ClassName; CClass* m_SuperClass; }; // base class for all properties (int...float...etc) class CProperty { // functions to construct the value type, destruct the value type, copy, etc }; // base class for all "reflected types" class CObject { virtual CClass* GetClass() const {}; .... }; // in the header class CDerivedClass : public CObject { DECLARE_CLASS(CDerivedClass,CObject) }; // in the cpp file IMPLEMENT_CLASS(CDerivedClass) #define DECLARE_CLASS(TClassType,TSuperClassType)\ typedef TSuperClassType Super;\ virtual CClass* GetClass() const override { return GetStaticClass(); } static CClass* GetStaticClass();\ static CObject* _ClassConstructor() { return new TClassType(); } #define IMPLEMENT_CLASS(TClassType)\ CClass* TClassType:GetStaticClass()\ { static CClass* ReturnClass = nullptr; if(ReturnClass==nullptr) { ReturnClass = new CClass(#TClassType,sizeof(TClassType),AlignOf(TClassType),#_ClassConstructor); ... add the properties, etc } return ReturnClass; }
  9. AxeGuywithanAxe

    Entity-Component systems

    Yeah, the entity-component model has behavior in the components. It takes the idea of composition , so instead of having a hiearchy like CEntity -> CPhysicalEntity -> CMovableEntity , you'll have an entity, and you'll add a physicscomponent and a movecomponent to it. Not all functions have to be virtual, I was just giving an example. It's the same approach you would with any OOP hiearchy, you just separate "logic" into component types, i.e physics, visual , movement, script, etc. In my game engine, different component types have speciific logic when they are activated and deactivated, so they are in the base class, and most components have some sort of "tick" logic. You'll have to be more descriptive of your method, in most ecs approaches, scripts are handled by using a "CScriptComponent", so you would have to explain what your scripts actually do, and the point of them in more depth. Well with an ECS method, you will have data in one class and logic in the system class. This means that you're adding two classes in an entity - component -system model for every one class you would have made using an entity component model. I say I've yet to see one that's worth the added complexity because the largest games that exist , the Witcher 3 , Horizon, UE4 based games , Tomb Raider and etc all use an entity-component model. The only two major game engines that I know of that use ECS are the Overwatch engine , and the Insomniac engine (which isn't pure ECS because logic is still maintained in the components as far as I can tell from presentations). Yeah , I have a function called "GetComponentOfClass" and "GetComponentsOfClass". I programmed an automatic reflection system that preprocesses my c++ code and generates reflection data for classes, enums, structs, functions, properties, etc, but there are dozens of simple ways to create custom type info.
  10. AxeGuywithanAxe

    Entity-Component systems

    Well if you're going to store them by value, then you are effectively doing what is being done in the Unity video, just slightly less efficient. I have yet to personally find a game that requires such an approach that the benefits outway the cost of increased complexity, but it is a valid approach. Yeah, I didn't take the bucketed approach because it has several problems, especially when you decide you want to multithread your engine. Any time spent syncing jobs is time wasted, and a bucketed approach is full of such issues. From a "cache coherency" perspective , then the answer is yes. class CEntity { Array<CComponent*> m_Components; }; // base for all components class CComponent { virtual void ActivateComponent(); virtual void DeactivateComponent(); virtual void TickComponent(float DeltaTime); }; class CPhysicsComponent : public CComponent { }; class CVisualComponent : public CComponent { }; There are many approaches to the EC model, but this is the basics of it.
  11. AxeGuywithanAxe

    Entity-Component systems

    I think i'm starting to understand what you are saying, but it seems like you've also noticed that you hit one of the problems of ECS . Which is leveraging the "system" part while still maintaining the benefits of certain practices like inheritance. The issue with this approach, is that it isn't exactly cache coherent. You are still jumping through memory to access the components, so in what way have you actually benefited? This and a few other issues , for instance not having an easy way to update all of a parent entity's components prior to my own, is why I chose to go with the entity component model in which components contain logic.
  12. AxeGuywithanAxe

    Entity-Component systems

    If you don't mind me asking, why are you choosing the ecs model over entity-component model if you're not going to take certain optimizations like DoD and etc? You will be creating a more complicated system without the benefits of cache coherency. Unity and UE4 are currently using an entity-component model. A benefit is that it's much simpler to write code and encapsulate, but it becomes more difficult to multithread it. To deal with the issue of multithreading, Unity has chosen to switch to an ecs model. I'm currently maintaining the entity-component model, but using messaging to handle multithreading.
  13. Hey , I wanted to combine some ideas of the Actor model with an Entity Component model and wanted to see if anyone had any experience using the actor model for gameplay and if they could present the pros and cons of using such a method. I know that a pro is that it helps with concurrency , but I can see a major con being the allocation of messages for communication between. I've built a code generation tool that can automatically generate messages based on c++ function definitions, so creating a class per message would not be a problem. Thank you!
  14. So I've been trying to implement Eric Bruneton's Atmospheric Scattering implementation, and I seem to be having an issue with the generation of the world space direction vector for the application phase. In his implementation he uses the inverse view projection matrix to project the view vector in the vertex shader to world space. This is the debug view of my engine. Everything that is green is below the x-z plane, i,e the horizon , and everything about that line is red. As you can tell , the line is slanted. I wanted to know if anyone could give me any idea of what I'm doing wrong. I've tried upwards of four different implementations of screen to world space direction projection, but this is my current code. I've also tried projecting to a frustum corner. void DrawRectangle(in uint VertexID, out float4 OutPosition, out float2 OutUV) { OutUV = float2((VertexID << 1) & 2, VertexID & 2); OutPosition = float4(OutUV * float2(2.0, -2.0) + float2(-1.0f, 1.0f), 0, 1); } void MainVertexShader(in uint VertexID : SV_VertexID, out float2 OutTexcoord : TEXCOORD0, out float4 OutScreenVector : TEXCOORD1, out float4 OutPosition : SV_POSITION) { float4 OutSVPosition; // get the parameters DrawRectangle(VertexID,OutSVPosition,OutTexcoord); // set the out position OutPosition = float4(OutSVPosition.xy,1.0f,1.0f); // construct the screen vector OutScreenVector = normalize(mul(View.InvViewProjection,float4(OutSVPosition.xy,1.0f,0.0f))); }
  15. I wanted to get some advice on what everyone thinks of this debugger, I've been getting some strange results from testing my code and I wanted to see if anyone else had an issues. For instance, I added three "ClearRenderTargetView" calls and three "Draw full screen quad" calls and my reported fps became a fifth of what it usually was. Thank you.
  • Advertisement
×

Important Information

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

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!