A toy DCC software implemented based on OpenGL and imgui
- PBR viewport / HDRI IBL
- Split view / Multiple display mode
- Interactive mesh creation
- Hierarcial transform
- Import and view .OBJ mesh
- Basic viewport interaction
- SEM Shader (ZBRush style outlook)
- Post-Processing supported
- Operation stack (Something like the modifiers in 3ds Max)
- Volume rendering supported
- Procedural texture generation
- RABBIT RENDERER: a basic raytracing renderer
- MOON CAKE: procedural modeling tools
- MOON NN: node based interactive neural network training platform
Operation | Hotkey |
---|---|
Gizmo::Move | w |
Gizmo::Rotate | e |
Gizmo::Scale | r |
Camera::Pan | middle mouse (hold) |
Camera::Zoom | mouse wheel |
Camera::Rotate | alt + middle mouse |
Select Object | left click |
Delete Object | delete |
Select Multiple Object | ctrl + left click |
Centering Selected Object | z |
Flow Menu | right click (hold) |
Open Material Editor | m |
Open MOON NN Editor | n |
Search Node | s |
Change Shading Mode | F1-F4 |
Switch Split/Single View | space |
auto boxes = MOON_ModelManager::LoadModel("Assets\\Models\\box_stack.obj");
boxes->transform.Translate(Vector3(0.0f, 1.0f, 0.0f), LOCAL);
boxes->transform.Rotate(Quaternion(Vector3(90.0f, 0, 0)), WORLD);
boxes->transform.Scale(Vector3(0.2f, 0.2f, 0.2f));
Model* sphere = MOON_ModelManager::CreateSmartMesh(SmartMesh::sphere, "sphere");
boxes->transform.SetParent(&sphere->transform);
auto light = MOON_LightManager::CreateLight(point_light, "pointLight", Vector3(-10.0f, 10.0f, 10.0f));
auto cloud = MOON_VolumeManager::CreateVolume(
"cloud", false, Vector3::ZERO(),
Vector3::ONE() * -5, Vector3::ONE() * 5
);
auto newMat = MaterialManager::CreateMaterial("MoonMtl", "new_mat");
// a model may contain multiple sub-meshes
// *each mesh corresponds to a material
boxes->meshList[0].material = newMat;
Graphics::postStack.push_back(new FXAA());
Graphics::postStack.push_back(new DepthOfField());
Renderer::StartRendering();
Renderer::isAbort = true;
// graph: a container to hold all created neurons
auto graph = new NGraph("newGraph");
// n-dimensional input vector, not participating in training
// input_size: dimension of input feature
auto feature = new NVariable(Vector2(input_size, 1), graph, false, false);
// m-dimensional output vector, not participating in training
// output_size: dimension of input feature
auto label = new NVariable(Vector2(output_size, 1), graph, false, false);
// construct full connection layer
// y = wx+b
// hsize: number of neuron
auto output = new NAdd({
new NMatMul({
new NVariable(Vector2(hsize, input_size), graph, true),
feature
}, graph),
new NVariable(Vector2(hsize, 1), graph, true)
}, graph);
// activation function
output = ReLU(output, graph);
// output neural node
auto predict = new NAdd({
new NMatMul({
new NVariable(Vector2(output_size, input_size), graph, true),
input_vec
}, graph),
new NVariable(Vector2(output_size, 1), graph, true)
}, graph);
// loss function
auto loss = MSE({predict, label}, graph);
// optimizer
auto opt = Adam(graph, loss);
// set input feature
feature->SetVal(...);
// set label for calculate loss
label->SetVal(...);
// calculate predict vector based on input feature
opt->Forward();
// calculate gradient map
opt->Backward();
// update weight and bias
opt->Update();
// clear gradient map
opt->ClearGrad();
๐ MOON ENGINE v0.20๏ผYoutube/Bilibili
๐ MOON ENGINE v0.03
๐ MOON NN
Welcome to visit my homepage: https://huanime.com.cn/.