S&box Wiki

Revision Difference

Scenes#560912

<cat>Code.Rendering</cat> <title>Scenes</title> <note>This is the system used for rendering. Documentation on the scene system for games can be found [here]( https://docs.facepunch.com/s/sbox-dev/doc/the-scene-system-9V88B33VlE) or [here](https://wiki.facepunch.com/sbox/Scene_System).</note> # Introduction ⤶ Imagine the scene system as what is dealing with all the different types of things for rendering everything to your screen or technically a texture. ⤶ This is only used for clients, server has no reason to be rendering anything, no one will ever see what's rendered. ⤶ Everything from your actual main game world with your player and so on is rendered via the scene system.⤶ Every ModelEntity, WorldEntity and so on, is just creating SceneObjects to go in the main game's SceneWorld to be rendered to the players screen!⤶ ⤶ But it can also be used to do additional stuff like creating extra miniature 3D worlds in UI elements, Or adding an extra SceneCamera to render a CCTV camera to a monitor entity and so on, you can do a lot with them!⤶ ⤶ The scene system is what manages rendering everything you see. ⤶ It can be used to do additional stuff like creating miniature 3D worlds in UI elements, Or adding a SceneCamera to render a CCTV camera to a monitor and so on, you can do a lot with them! # What does the Scene System consist of? ## SceneWorld #### Contains all the SceneObjects for a specific world we want in one place A SceneWorld is just a collection of all the SceneObjects that you want to be contained in one separate world for rendering, then extra options for trace related stuff on all SceneObjects. Every time you want to create anything scene related you need to put it in a SceneWorld. Entities in the main game will do that for you, but if you are doing your own SceneWorld you will have to keep it in mind. ⤶ You can actually get the main game's SceneWorld by just doing `Game.SceneWorld` and you can manually add in SceneObjects and lights if you so desired!⤶ GameObjects in a scene will do that for you, but if you are doing your own SceneWorld you will have to keep it in mind. ## SceneCamera #### Everything needed for how WE WANT to render everything in a SceneWorld⤶ #### The camera that actually renders what you see⤶ A SceneCamera holds all the data about how we should render stuff to a texture, or view, or screen. The camera is provided a world to render, in which it will now render all the SceneObjects within that world! There are also a lot of properties you can mess with to change how the SceneCamera will render everything to the screen. Properties like FOV, Orthographic, ZNear, ZFar and so on. Another thing to remember is you can use [RenderTags](https://wiki.facepunch.com/sbox/RenderTags) to dictate what objects to and not to render, and also [RenderHooks](https://wiki.facepunch.com/sbox/RenderHooks) to hook in and do extra stuff within each render stage when the camera is rendered! ⤶ Lastly, the global `Sandbox.Camera` is technically a wrapper for the main SceneCamera the main world uses!⤶ so you can do `Camera.Main` and this will allow you to get your main game's SceneCamera!⤶ ## SceneObject #### Objects that are rendered models, anything in the SceneWorld that is rendered HAS to inherit from this So where Entities are what allow things to exist physically in our main game world, SceneObjects are what allow models to be rendered by the camera in the SceneWorld. So where GameObjects are what allow things to exist physically in our main game world, SceneObjects are what allow models to be rendered by the camera in the SceneWorld underneath it all. WHATEVER that is in a SceneWorld has to inherit from the `SceneObject` class to be able to be added to a SceneWorld. for example all these are children of SceneObjects! - SceneLight - SceneModel - SceneSkybox - SceneCubemap Now with SceneObjects we now have access to messing with materials, [dynamic expressions](https://wiki.facepunch.com/sbox/Using_Dynamic_Expressions), [attributes](https://wiki.facepunch.com/sbox/material_attributes), body groups, the mesh, interacting with the shaders on the model and so on and so fourth.