Jump to content

Josh

Staff
  • Content Count

    15,709
  • Joined

  • Last visited

Blog Comments posted by Josh


  1. Sorry, I just meant that in a matter-of-fact way.

    The way the plugin system is set up, the data is always run through the GMF2 data format. So we can have a plugin that loads a GLTF or USD or other files and gives it to the engine in memory as a GMF2 file, or we can make it save the GMF2 for faster loading. Bottom line is if we have an import plugin for any format, we also automatically have a converter. Plus the file format is so simple I think we will see more community-made exporters than we did with GMF1, which had a "tricky" chunk structure.

    Plus, we have the GMF2 SDK, which makes it easy to just create some data structures and then the code saves a file for you. So GMF2 and its SDK is a big funnel we can easily pipe all kinds of data into and either save it or load it from memory.

    I think loading speed is a significant consideration we should be paying attention to. This seems like a really basic consideration we should be designing file formats around, for all games. I guess I need to get some definite numbers on what mesh data load times are like under realistic use cases.


  2. @Monkey Frog Studio You've convinced me to make GMF2 our default file format. If another standard is coming along that replaced GLTF, yet still does not give us fast-loading models, we need to invent our own. We will still provide direct loading and optional conversion of GLTF files, and maybe also this new format, but some of these huge CAD files we are working with would take ages to load if we have to sort through all the data. I think we will be able to show some loading speed comparisons between GLTF and GMF2, and the difference will be massive.

    I am going to introduce the file format at GDC 2020, along with tools for working with it.


  3. Notice there is actually no one talking about a game-ready model format, because I guess that is boring or something. OpenGEX, Collada, and FBX are "exchange formats" for moving data between modeling programs, and I guess this USD format is too. GLTF is a scene (not model) format for web graphics, which is why it uses JPG and PNG textures. No one even considers making something for normal 3D games.

    What do you think the advantage of this USD format is? GLTF is nice because at least you can load all the Sketchfab content up easily.


  4. You might actually be able to use it for commercial games:

    Quote

    1. Grant of License.
    a. Installation and Use.
    Autodesk grants to you a personal, nonexclusive license to make and use the Software for the
    purpose of designing, developing, testing, and producing game content provided that you are the
    only individual or entity using said Software and provided that you do not modify or alter the
    Software. You may also make personal copies (either in hard copy or electronic form) of any
    electronic documents included with the Software only for your personal use on your premises.
    This license is not sublicenseable by you without Autodesk’s prior written permission.

    https://www.turbosquid.com/Download/?ID=L567261&DLC=4GYYVMKP7G

    • Like 1

  5. 40 minutes ago, Mr_SquarePeg said:

    I shared this in the Quake modding discord server since you mentioned quake 3 mapping a few times. Hopefully it drives some more interest into turbo :)

    Quake is what got me into computer programming in the first place, and now I work with NASA. I am very fond of that whole scene.


  6. 3 hours ago, Genebris said:

    But what's the advantage over LODs or even impostors? Is tessellation cheaper or more expensive?

    • Smooth transitions between detail levels.
    • Make one low-poly model and you're done.
    • Better detail up-close.
    • No need to adjust distance settings or anything, it just works.

     

    • Thanks 1

  7. @Rick Maybe because models have to be created without UV seams or cracks in displacement will appear. I am adding a displacement vertex value so that displacement can be pulled in along UV seams.

    I see tessellation being a common thing in two areas: terrain and brushes. With brush geometry I can add some extra vertices so that displacement gets tucked in along the edges and you never have to worry about it. It's common for PBR materials to include a displacement map so I think tessellation will be much more common in Turbo.

    Perhaps a script tool can also be created that detects UV seams and sets those vertices' displacement to zero.

    • Like 2

  8. @Rick The whole thing is very interesting because you are programming a "flow" of events instead of a frame-by-frame slice.

    Maybe a sequence can be created that has two sub-sequences. Something like "bake the chicken and pour the wine" and then dinner is ready when both sequences are complete.

    I am also thinking about a sub-sequence. If your AI is going to a destination point, but they see a powerup on their way there that they want, it makes sense to create a subtask "go get the powerup" and then resume what they were doing. If a peasant is collecting wood and is attacked by an orc, he should fight the enemy and then go back to collecting wood. He would not start the process over, he would go back to the point he left off.

    I can think of how to draw that on paper with lines but I don't know yet what the commands would look like.


  9. @Rick Yeah, it seems like the next logical step is general event binding:

    self:BindEvent(EVENT_MOUSE_DOWN, self.OnClick)

    However, binding to an event is different from binding a key or button. The OnClick method would get called when any mouse button was clicked, so you would need to check the button ID in the OnClick function:

    function Script:OnClick(event)
    	if event.data == MOUSE_LEFT then
    		...
    	end
    end

    And then user-created events would probably be the next step:

    function Script:Start()
    	EVENT_DEATH = AllocateEventID()
    	self:BindEvent(EVENT_DEATH, self.OnDeath)
    end
    
    function Script:TakeDamage(damage)
    	self.health = self.health - damage
    	if self.health <= 0 then
    		EmitEvent(EVENT_DEATH)
    	end
    end

    I can't really think of a way in which user events would be useful. It seems like it just complicates the code for no reason. I am curious to see what you think.

    • Like 1

  10. 4 hours ago, aiaf said:

    Btw the gui system will be available to turbo in a form similar to what we have now ?

    Yes, although the idea of letting Lua run inside the rendering loop (for the drawing function) is definitely verboten in the new architecture. Instead it will use persistent 2D primitives that are created and managed by the script. Like instead of having a function that says "draw a rectangle here" the script will create a rectangle object with the characteristics it needs, and that will be sent to the rendering thread.

    • Like 1
×
×
  • Create New...