S&box Wiki

Revision Difference

Scenes#560475

<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!⤶ ⤶ # 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!⤶ ⤶ ## SceneCamera⤶ #### Everything needed for how WE WANT to render everything in a SceneWorld⤶ ⤶ 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.⤶ ⤶ 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.