Cell Vision 渲染器操作文档
完整的 API 参考和操作指南
视口操作
多视口模式
Cell Vision渲染器操作文档 支持多视口显示,可以同时查看多个视角:
- 透视视图(Perspective):默认的3D视角
- 前视图(Front):从正面观察场景
- 顶视图(Top):从上方俯视场景
- 左视图(Left):从左侧观察场景
视口切换
- 空格键(Space):切换单视口/多视口显示模式
- 在视口标题栏点击可以激活对应视口
- 每个视口可以独立设置着色模式和光照模型
对象选择与操作
选择对象
- 左键点击:选择单个对象
- Ctrl + 左键点击:多选对象(添加到选择集)
- 框选:在视口中按住左键拖拽,框选区域内的对象
- 框选时按住 Ctrl 可以添加到当前选择集
- 框选时未按住 Ctrl 会替换当前选择集
删除对象
- Delete 键:删除当前选中的所有对象
居中显示
- Z 键:将相机聚焦到选中的对象
- 如果有选中对象,相机会自动对准该对象
- 如果没有选中对象,相机恢复默认位置
Gizmo 变换工具
Gizmo 是用于在视口中直接操作对象位置、旋转和缩放的交互式工具。
切换 Gizmo 模式
- Q 键:关闭 Gizmo(无变换模式)
- W 键:切换到平移模式(Translate)
- E 键:切换到旋转模式(Rotate)
- R 键:切换到缩放模式(Scale)
使用 Gizmo
- 选中一个或多个对象
- 按 W/E/R 切换到对应的变换模式
- 在视口中会出现 Gizmo 控制器:
- 平移模式:显示 X/Y/Z 轴箭头,拖拽对应轴进行单轴移动
- 旋转模式:显示旋转环,拖拽进行旋转
- 缩放模式:显示缩放控制器,拖拽进行缩放
- 点击并拖拽 Gizmo 的轴或控制器来变换对象
Gizmo 设置(通过 Flow Menu)
- Gizmo 位置:
- Pivot:Gizmo 显示在对象的枢轴点
- Center:Gizmo 显示在对象的中心
- 坐标系统:
- World:世界坐标系
- Local:对象本地坐标系
- Parent:父对象坐标系
- Screen:屏幕坐标系
相机控制
平移相机(Pan)
- 中键拖拽:在视口中按住鼠标中键并拖拽,平移相机视角
旋转相机(Rotate)
- Alt + 中键拖拽:按住 Alt 键和鼠标中键并拖拽,围绕焦点旋转相机
缩放相机(Zoom)
- 鼠标滚轮:向上滚动放大,向下滚动缩小
- Alt + Ctrl + 中键拖拽:按住 Alt + Ctrl 和鼠标中键拖拽进行缩放
聚焦对象
- Z 键:将相机聚焦到选中的对象(见上文)
快捷键列表
视口操作
| 操作 | 快捷键 |
|---|---|
| 切换单视口/多视口 | Space |
| 聚焦选中对象 | Z |
Gizmo 操作
| 操作 | 快捷键 |
|---|---|
| 关闭 Gizmo | Q |
| 平移模式 | W |
| 旋转模式 | E |
| 缩放模式 | R |
选择与删除
| 操作 | 快捷键/操作 |
|---|---|
| 选择对象 | 左键点击 |
| 多选对象 | Ctrl + 左键点击 |
| 框选对象 | 左键拖拽 |
| 删除对象 | Delete |
相机控制
| 操作 | 快捷键/操作 |
|---|---|
| 平移相机 | 中键拖拽 |
| 旋转相机 | Alt + 中键拖拽 |
| 缩放相机 | 鼠标滚轮 或 Alt + Ctrl + 中键拖拽 |
编辑器窗口
| 操作 | 快捷键 |
|---|---|
| 打开/关闭材质编辑器 | M |
| 打开/关闭 MOON NN 编辑器 | N |
| 搜索节点(在节点编辑器中) | S |
着色模式
| 操作 | 快捷键 |
|---|---|
| 切换 PBR/Phong 光照模型 | F1 |
| 切换面片着色模式 | F2 |
| 切换线框模式 | F3 |
| 切换默认线框模式 | F4 |
其他
| 操作 | 快捷键 |
|---|---|
| 打开 Flow Menu | 右键(按住) |
| 退出程序 | Esc |
编辑器窗口
材质编辑器
- 快捷键:
M键打开/关闭 - 功能:
- 创建和编辑材质
- 调整 PBR 材质参数(金属度、粗糙度、高光等)
- 预览材质效果
- 管理材质资源
MOON NN 编辑器(神经网络编辑器)
- 快捷键:
N键打开/关闭 - 功能:
- 可视化构建神经网络
- 通过节点编辑器连接神经元
- 设置训练参数
- 可视化训练过程
- 在节点编辑器中按
S键可以搜索节点
其他编辑器窗口
通过主菜单或 UI 面板可以打开以下窗口:
- 场景窗口:显示场景层级结构
- 检视器窗口:显示选中对象的详细属性
- 资源浏览器:浏览项目资源
- 控制面板:全局设置和工具
- 时间线:动画时间轴
- 渲染设置:配置离线渲染参数
- 环境编辑器:设置 HDRI 环境贴图
- 代码编辑器:脚本编辑
- 性能分析器:性能监控
渲染与着色模式
实时视口着色模式
光照模型切换
- F1 键:在 PBR(基于物理的渲染)和 Phong 光照模型之间切换
着色模式切换
- F2 键:切换面片着色模式(Facet Shading)
- F3 键:切换线框模式(Wireframe)
- F4 键:切换默认线框模式(Default Wireframe)
离线渲染(Rabbit Renderer)
Rabbit Renderer 是基于路径追踪的光线追踪渲染器。
启动渲染
- 在渲染设置窗口中配置渲染参数:
- 输出分辨率
- 采样率(每像素采样次数)
- 最大反射深度
- 加速结构(AABB 或 BVH)
- 纹理过滤模式
- 点击开始渲染按钮,或通过代码调用
Renderer::StartRendering() - 渲染会在后台线程中进行,可以在 VFB(虚拟帧缓冲)窗口中实时查看进度
渲染模式
- Scanline 模式:逐行扫描渲染
- Bucket 模式:分块渲染(默认,支持多线程并行)
中断渲染
- 在代码中设置
Renderer::isAbort = true;可以中断正在进行的渲染
常用操作流程
创建和编辑对象
- 创建基本几何体:
- UI 方式:通过创建窗口或主菜单选择要创建的几何体类型(球体、立方体、圆柱体等),在视口中点击放置对象
- 代码方式:使用
MOON_ModelManager::CreateSmartMesh()函数创建(详见下方"代码创建基本几何体"部分)
- 变换对象:
- 选中对象
- 按 W(平移)、E(旋转)或 R(缩放)切换到对应模式
- 拖拽 Gizmo 进行变换
- 调整对象属性:
- 选中对象后,在检视器窗口中查看和修改属性
- 可以设置位置、旋转、缩放等变换参数
材质编辑流程
- 打开材质编辑器:按 M 键
- 创建新材质:在材质编辑器中点击"创建"按钮
- 调整材质参数:
- 设置基础颜色(Albedo)
- 调整金属度(Metallic)
- 调整粗糙度(Roughness)
- 设置高光参数
- 添加纹理贴图
- 应用材质:将材质拖拽到场景中的对象上,或通过检视器窗口分配
代码创建基本几何体
MoonEngine 完全支持通过代码创建基本几何体。有两种方式:
方式一:使用 CreateSmartMesh 函数(推荐)
// 创建球体
Model* sphere = MOON_ModelManager::CreateSmartMesh(SmartMesh::sphere, "sphere");
// 创建立方体
Model* box = MOON_ModelManager::CreateSmartMesh(SmartMesh::box, "box");
// 创建平面
Model* plane = MOON_ModelManager::CreateSmartMesh(SmartMesh::plane, "plane");
函数签名:
Model* CreateSmartMesh(const SmartMesh& type, const std::string &name, const bool& interactive = false)
参数说明:
type:几何体类型(SmartMesh::sphere、SmartMesh::box、SmartMesh::plane)name:对象名称interactive:是否交互式创建(true为交互式,false为直接创建,默认为false)
当前支持的类型:
SmartMesh::sphere- 球体SmartMesh::box- 立方体SmartMesh::plane- 平面
注意:虽然枚举中还定义了 cylinder、capsule、text,但当前版本的 CreateSmartMesh 函数尚未实现这些类型。
方式二:直接使用构造函数
// 创建球体(可指定半径和分段数)
Sphere* sphere = new Sphere("mySphere", false, 1.0f, 24);
MOON_ModelManager::AddItem(sphere);
// 创建立方体(可指定尺寸和分段数)
Box* box = new Box("myBox", false);
MOON_ModelManager::AddItem(box);
// 创建平面
Plane* plane = new Plane("myPlane", false);
MOON_ModelManager::AddItem(plane);
使用示例:
// 创建球体并设置属性
Model* sphere = MOON_ModelManager::CreateSmartMesh(SmartMesh::sphere, "sphere");
sphere->transform.Translate(Vector3(0.0f, 1.0f, 0.0f));
sphere->transform.Scale(Vector3(2.0f, 2.0f, 2.0f));
sphere->meshList[0]->material = MOON_MaterialManager::GetItem("PBRMat");
// 创建立方体并设置材质
Model* box = MOON_ModelManager::CreateSmartMesh(SmartMesh::box, "box");
box->transform.Translate(Vector3(3.0f, 0.0f, 0.0f));
box->transform.Rotate(Quaternion::Rotate(Vector3(45.0f, 0, 0), Deg2Rad));
导入 OBJ 模型
- 通过代码导入:
Model* model = MOON_ModelManager::LoadModel("Assets\\Models\\your_model.obj"); - 或通过 UI 菜单导入模型文件
设置光照
- 创建光源:
- 通过创建窗口或代码创建点光源、方向光等
- 代码示例:
MOON_LightManager::CreateLight(point_light, "lightName", Vector3(x, y, z));
- 调整光源参数:
- 选中光源对象
- 在检视器窗口中调整颜色、强度等参数
使用 MOON NN 编辑器
- 打开编辑器:按 N 键
- 创建节点:
- 在节点编辑器中右键点击
- 选择节点类型(Data、Operator、Neuron、Optimizer 等)
- 连接节点:
- 拖拽节点的输出插槽到另一个节点的输入插槽
- 设置参数:
- 点击节点打开参数面板
- 调整节点参数(如矩阵形状、学习率等)
- 训练网络:
- 连接输入、标签、损失函数和优化器节点
- 在优化器节点中启动训练
- 使用可视化节点查看训练曲线
多视口工作流程
- 切换多视口模式:按 Space 键
- 在不同视口中工作:
- 在透视视图中进行主要编辑
- 在前视图/顶视图中精确对齐对象
- 在左视图中检查侧视图效果
- 独立设置每个视口:
- 每个视口可以独立切换着色模式(F1-F4)
- 每个视口可以独立设置光照模型
提示与技巧
- 快速切换工具:使用 Q/W/E/R 快速切换 Gizmo 模式,提高工作效率
- 多选操作:按住 Ctrl 键可以同时选择和操作多个对象
- 精确变换:使用 Flow Menu 中的吸附功能可以精确对齐对象
- 相机导航:熟练掌握中键、滚轮和 Alt+中键的组合,可以快速调整视角
- 快捷键记忆:常用快捷键(W/E/R/M/N/Z)建议熟记,可以显著提高操作速度
- 视口布局:使用多视口模式可以同时从多个角度观察场景,提高建模精度
注意事项
- 选择状态:某些操作(如删除、聚焦)需要先选中对象
- UI 焦点:当鼠标悬停在 UI 面板上时,视口快捷键可能不响应
- 渲染性能:离线渲染会占用较多 CPU 资源,建议在渲染时不要进行其他重负载操作
API 参考
MoonEngine 所有功能都提供了 API 接口,可以通过代码完全控制引擎的所有功能。以下是主要的 API 管理器及其常用函数:
模型管理器 (ModelManager)
// 创建基本几何体
Model* CreateSmartMesh(const SmartMesh& type, const std::string &name, const bool& interactive = false);
// 示例:
Model* sphere = MOON_ModelManager::CreateSmartMesh(SmartMesh::sphere, "sphere");
Model* box = MOON_ModelManager::CreateSmartMesh(SmartMesh::box, "box");
Model* plane = MOON_ModelManager::CreateSmartMesh(SmartMesh::plane, "plane");
// 加载 OBJ 模型
Model* LoadModel(const std::string &path, const bool asynchronous = true, const std::string &name = UseFileName);
// 示例:
Model* model = MOON_ModelManager::LoadModel("Assets\\Models\\your_model.obj");
// 获取模型
Model* GetItem(const std::string &name);
Model* GetItem(const int &id);
// 添加/删除模型
void AddItem(Model* item);
void DeleteItem(const std::string &name);
void DeleteItem(const int &id);
光源管理器 (LightManager)
// 创建光源
Light* CreateLight(const LightType &type, const std::string &name,
const Vector3 &pos = Vector3::ZERO(),
const Vector4 &color = Color::WHITE());
// 示例:
Light* pointLight = MOON_LightManager::CreateLight(point_light, "pointLight", Vector3(-10.0f, 10.0f, 10.0f));
Light* dirLight = MOON_LightManager::CreateLight(directional_light, "sun", Vector3::ZERO(), Color::WHITE());
// 获取光源
Light* GetItem(const std::string &name);
Light* GetItem(const int &id);
材质管理器 (MaterialManager)
// 创建材质(通过类型枚举)
Material* CreateMaterial(const MatType &type, const std::string &name);
// 示例:
Material* pbrMat = MOON_MaterialManager::CreateMaterial(moonMtl, "PBRMat");
Material* semMat = MOON_MaterialManager::CreateMaterial(semMtl, "SEMMat");
Material* skinMat = MOON_MaterialManager::CreateMaterial(skinMtl, "SkinMat");
Material* lightMat = MOON_MaterialManager::CreateMaterial(lightMtl, "LightMat");
// 创建材质(通过字符串类型)
Material* CreateMaterial(const std::string &type, const std::string &name);
// 示例:
Material* mat = MOON_MaterialManager::CreateMaterial("MoonMtl", "new_mat");
// 获取材质
Material* GetItem(const std::string &name);
Material* GetItem(const int &id);
// 默认材质
Material* defaultMat; // 可直接访问
纹理管理器 (TextureManager)
// 加载纹理
Texture* LoadTexture(const std::string &path, const std::string &name = UseFileName,
const ColorSpace& _colorSpace = sRGB, bool mipmap = false);
// 示例:
Texture* tex = MOON_TextureManager::LoadTexture("Assets\\Textures\\diffuse.jpg", "diffuse");
// 生成环境贴图(HDRI IBL)
void GenerateIrradianceMap(const Vector2& mapSize = Vector2(512, 512));
// 获取纹理
Texture* GetItem(const std::string &name);
Texture* GetItem(const int &id);
// 环境贴图
Texture* HDRI; // HDRI 环境贴图
FrameBuffer* Irradiance; // 辐照度图
FrameBuffer* prefilterMap; // 预过滤环境贴图
相机管理器 (CameraManager)
// 创建相机
Camera* CreateCamera();
Camera* CreateCamera(const std::string name);
// 示例:
Camera* cam = MOON_CameraManager::CreateCamera("MyCamera");
// 加载场景相机(透视、前、左、顶视图)
bool LoadSceneCamera();
// 获取相机
Camera* GetItem(const std::string &name);
Camera* GetItem(const int &id);
// 活动相机
Camera* activeCamera; // 当前活动相机
std::vector sceneCameras; // 场景相机列表
体积管理器 (VolumeManager)
// 创建体积对象
Volume* CreateVolume(const std::string &name, const bool& interactive = false,
const Vector3& position = Vector3::ZERO(),
const Vector3& boundMin = Vector3(-1, -1, -1),
const Vector3& boundMax = Vector3::ONE());
// 示例:
Volume* cloud = MOON_VolumeManager::CreateVolume("cloud", false, Vector3::ZERO(),
Vector3::ONE() * -5, Vector3::ONE() * 5);
// 加载体积
Volume* LoadVolume(const std::string &path, const std::string &name = UseFileName);
形状管理器 (ShapeManager)
// 创建形状
Shape* CreateShape(const ShapeType &type, const std::string &name);
// 示例:
Shape* line = MOON_ShapeManager::CreateShape(line, "spline");
辅助对象管理器 (HelperManager)
// 创建辅助对象
Helper* CreateHelper(const HelperType &type, const std::string &name);
// 示例:
Helper* dummy = MOON_HelperManager::CreateHelper(dummy, "dummy");
渲染器 API (Renderer)
// 启动离线渲染
void StartRendering();
// 准备渲染
bool PrepareRendering();
// 设置输出尺寸
void SetOutputSize(unsigned int width, unsigned int height);
// 渲染参数
int bucketSize; // 桶渲染块大小
unsigned int samplingRate; // 采样率
unsigned int maxReflectionDepth; // 最大反射深度
bool useIS; // 是否使用重要性采样
bool isAbort; // 中断渲染标志
float progress; // 渲染进度 (0-1)
// 渲染模式
RenderMode renderMode; // scanline / bucket / progressive
AccStruct acc; // 加速结构 (AABB / BVH)
ToneMappingMethod tone; // 色调映射方法
图形系统 API (Graphics)
// 后处理堆栈
std::vector postStack;
// 示例:
Graphics::postStack.push_back(new FXAA());
Graphics::postStack.push_back(new Bloom());
Graphics::postStack.push_back(new ToneMapping());
Graphics::postStack.push_back(new Vignette());
// 环境设置
EnviromentType enviroment; // env_hdri / env_pure_color / env_procedural_sky
Vector4 clearColor; // 清屏颜色
// 着色模式
ShadingMode shading; // DEFAULT / FACET / WIRE / DEFWIRE
LightModel lightModel; // PBR / PHONG
// 渲染管线
PipelineMode pipeline; // FORWARD_SHADING / DEFERRED_SHADING
变换 API (Transform)
所有对象都有 transform 成员,提供变换操作:
// 平移
void Translate(const Vector3& offset, const CoordSys& coord = LOCAL);
// 旋转
void Rotate(const Quaternion& rotation, const CoordSys& coord = LOCAL);
void Rotate(const Vector3& axis, const float& angle, const CoordSys& coord = LOCAL);
// 缩放
void Scale(const Vector3& scale);
// 设置父对象
void SetParent(Transform* parent);
// 变换属性
Vector3 position; // 位置
Quaternion rotation; // 旋转
Vector3 scale; // 缩放
神经网络管理器 (NNManager)
// 创建新图
NGraph* NewGraph();
NGraph* NewGraph(const std::string &name);
// 添加图
void AddGraph(NGraph* g);
// 当前图
NGraph* currentGraph; // 当前活动的神经网络图
NGraph* globalNNGraph; // 全局默认图
std::vector graphList; // 所有图的列表
场景管理器 (SceneManager)
// 初始化场景
void Init();
// 构建 BVH 加速结构
void BuildBVH();
// 删除对象
void DeleteObject(MObject* obj);
// 获取对象类型
std::string GetType(MObject* obj);
// 场景对象列表
std::vector objectList;
输入管理器 (InputManager)
// 选择操作
void Select(const int &id);
void Select_Append(const int &id, const bool &multi = false);
void ClearSelection();
// 选择集
std::vector selection; // 选中的对象 ID 列表
// 鼠标状态
Vector2 mousePos; // 鼠标位置
Vector2 mouseOffset; // 鼠标偏移
Vector2 mouseScrollOffset; // 滚轮偏移
bool mouse_left_hold; // 左键按住
bool mouse_middle_hold; // 中键按住
bool mouse_right_hold; // 右键按住
// 键盘状态
bool left_ctrl_hold; // 左 Ctrl 按住
bool left_shift_hold; // 左 Shift 按住
通用管理器方法
所有管理器都继承自 ObjectManager,提供以下通用方法:
// 获取对象
T* GetItem(const std::string &name);
T* GetItem(const int &id);
// 添加对象
void AddItem(T* item);
// 删除对象
void DeleteItem(const std::string &name);
void DeleteItem(const int &id);
// 列出所有对象
void ListItems();
// 统计数量
int CountItem();
完整示例
// 创建场景对象
Model* sphere = MOON_ModelManager::CreateSmartMesh(SmartMesh::sphere, "sphere");
sphere->transform.Translate(Vector3(0.0f, 1.0f, 0.0f));
sphere->transform.Scale(Vector3(2.0f, 2.0f, 2.0f));
// 创建材质并应用
Material* mat = MOON_MaterialManager::CreateMaterial(moonMtl, "MyMaterial");
sphere->meshList[0]->material = mat;
// 创建光源
Light* light = MOON_LightManager::CreateLight(point_light, "pointLight", Vector3(-10.0f, 10.0f, 10.0f));
// 设置后处理
Graphics::postStack.push_back(new Bloom());
Graphics::postStack.push_back(new ToneMapping());
// 启动离线渲染
Renderer::StartRendering();