【Blender】 Interface介紹

帽捲
Maochinn
Published in
May 19, 2020

這邊整理一下blender interface的組成

可以看這篇有做很清楚的介紹,這邊比較偏向內部資料結構的整理,在詳細講之前,先做個架構的整理,原則上分成

Window, Screen, Areas, Regions

直接舉例子來說,使用預設的檔案開啟可以看到

Editor Type>Outlier, Data API

在整份.blend的檔案原則上只有一個window(就是你現在這整個視窗),而這個window裡面卻有一系列的Screens,他其實就對應到最上方的tag

Tag of Screens

進一步我們看到每個screen裡面會有很多Area,我們就以預設的Layout來看

Areas of “Layout”

那每個Area就對應到這個Screen的其中一部份,裡面的3D viewport就對應到Layout裡面的那個顯示方塊的viewport。

3D viewport

這邊可以注意到Area裡面有SpacesRegions,先講Spaces吧,Space紀載了很多Area的屬性,他會根據Area的種類(Editor Type)不同,所以通常Spaces裡面通常只會有一個Space。這邊額外提一點,圖中有兩個Editor Type,上面的是比較general type,下面的是比較detailed type(也就是我們通常在介面上能夠選的),舉例來說,Shader EditorTexture Node Editor都是同一種Node Editor。

另外3D Viewport,有6個region,這邊就舉其中一個當例子

3D viewport regions

Regions Type Window就表示顯示3D物件的視窗。

那接下來介紹一下與python, C對應關係(以當前狀態Context來看)

Python:

Context

bpy.context

Screen

bpy.context.screen

Area

bpy.context.area

Space

bpy.context.space_data

Region

bpy.context.region

那如果是想要拿3D viewport的資訊,因為物件就是render到region(view3d_main_region_draw())

Python:

context = bpy.context

v3d =context.space_data

rv3d = v3d.region_3d

C:

const DRWContextState *draw_ctx = DRW_context_state_get();

View3D *v3d = draw_ctx->v3d;

RegionView3D *rv3d = draw_ctx->rv3d;

這邊可以發現所謂的v3d就是space,也就是area的資訊,他會放一些整個area會共用的資訊,例如說overlay_setting

overlay setting

他對應的code就是

v3d.overlay #python

const View3DOverlay* overlay = v3d->overlay; //C

因為overlay的東西牽涉到複數個region,所以這種東西要存在area裡面,那其他的資訊就可以放在rv3d,裡面就會存一些view matrix之類render到region需要用的資訊。

--

--