基本概念
渲染服务器是所有可见内容的 API 后端。整个场景系统都挂载在其上进行显示。渲染服务器完全不透明:其内部机制完全由具体实现决定,无法访问。
渲染服务器可用于完全绕过场景/节点 系统。当场景系统成为瓶颈时,这可以提高性能,但在其他情况下(例如,如果 GPU 已满负荷),则不会提高性能。
资源与视口
资源是使用 *_create 函数创建的。这些函数返回 RID,它不是对对象本身的引用,而是指向这些对象的不透明 指针。
所有对象都会被绘制到视口 (viewport)。您可以使用附加到 场景树 (SceneTree) 的视口 (Viewport) ,也可以使用viewport_create() 自行创建。使用自定义场景或画布时,需要使用 viewport_set_scenario() 或 viewport_attach_canvas() 将场景或画布附加到视口。
场景
场景:在 3D 世界中,所有可视对象都必须与一个场景关联。场景是世界观的视觉呈现。如果从正在运行的游戏中访问渲染服务器,则可以通过 Node3D.get_world_3d()从场景树中的任何Node3D 节点访问该场景。否则,可以使用 scene_create() 创建场景。
类似地,在 2D 中,需要一个画布来绘制所有画布项。
3D 渲染
3D:在 3D 环境中,所有可见对象都由资源和实例组成。资源可以是网格、粒子系统、光源或任何其他 3D 对象。为了使资源可见,必须使用 instance_set_base()将资源附加到实例。此外,还必须使用instance_set_scenario() 将实例附加到场景才能使其可见。没有前缀的 RenderingServer 方法通常(但并非总是)特定于 3D 场景。
2D 渲染
2D:在 2D 环境中,所有可见对象都以某种形式存在,即画布项。为了保持可见,画布项必须是附加到视口的画布的子项,或者必须是最终附加到该画布的另一个画布项的子项。2D 特有的 RenderingServer 方法通常以 开头 canvas_*。