载入中...
搜索中...
未找到
VrmDocument.h
浏览该文件的文档.
1#pragma once
2
3#include <array>
4#include <cstddef>
5#include <map>
6#include <span>
7#include <string>
8#include <vector>
9#include "common/Result.h"
10
11namespace eve::avatar {
12
14struct VrmTexture {
15 int image = -1;
16 std::array<float, 2> offset{0, 0}, scale{1, 1};
17 float rotation = 0;
18 int wrapS = 10497, wrapT = 10497;
19};
22 std::string name, alphaMode = "OPAQUE", outlineMode = "none";
23 bool mtoon = false, doubleSided = false, zWrite = false;
24 int queue = 0;
25 std::array<float, 4> color{1, 1, 1, 1};
26 std::array<float, 3> shade{0, 0, 0}, emission{}, matcap{1, 1, 1}, rim{}, outline{};
27 float cutoff = .5f, shift = 0, shiftTextureScale = 1, toony = .9f, gi = .9f;
28 float rimMix = 1, rimPower = 1, rimLift = 0, outlineWidth = 0, outlineMix = 1;
30 // base, shade, normal, shift, emission, matcap, rim, outline width, UV mask.
31 std::array<VrmTexture, 9> textures;
32};
36 struct Morph {
37 int node = -1, index = -1;
38 float weight = 0;
39 };
41 struct Color {
42 int material = -1;
43 std::string type;
44 std::array<float, 4> target{};
45 };
47 struct Uv {
48 int material = -1;
49 std::array<float, 2> scale{1, 1}, offset{};
50 };
51 std::string name, overrideBlink = "none", overrideLookAt = "none", overrideMouth = "none";
52 bool binary = false;
53 std::vector<Morph> morphs;
54 std::vector<Color> colors;
55 std::vector<Uv> uvs;
56};
58struct VrmLookAt {
60 struct Range {
61 float input = 90, output = 10;
62 };
63 bool present = false, expression = false;
64 std::array<float, 3> offset{};
66};
69 int node = -1;
70 std::array<float, 3> offset{}, tail{};
71 float radius = 0;
72 bool capsule = false;
73};
75struct VrmSpring {
77 struct Joint {
78 int node = -1;
79 float radius = 0, stiffness = 1, gravityPower = 0, drag = .5f;
80 std::array<float, 3> gravity{0, -1, 0};
81 };
82 std::string name;
83 int center = -1;
84 std::vector<Joint> joints;
85 std::vector<int> colliders;
86};
89 std::string version;
90 std::vector<std::string> nodes;
91 std::vector<int> parents, nodeMeshes;
92 std::vector<std::vector<int>> meshMaterials;
93 std::map<std::string, int> humanoid;
94 std::vector<VrmExpression> expressions;
96 std::vector<VrmCollider> colliders;
97 std::vector<VrmSpring> springs;
98 std::vector<VrmMaterial> materials;
99 std::vector<std::vector<std::byte>> images;
100};
101
108[[nodiscard]] EVENGINE_API_DOMAINS eve::Result<VrmDocument> parseVrm(std::span<const std::byte> bytes);
109
110} // namespace eve::avatar
#define EVENGINE_API_DOMAINS
Definition Export.h:110
std::uint64_t bytes
Move-only, checked operation results for the common layer.
Move-only operation result carrying either a value or Status.
Definition Result.h:155
eve::Result< VrmDocument > parseVrm(std::span< const std::byte > bytes)
Validate a self-contained GLB's VRM extension before publishing runtime state.
Node-local sphere/capsule used only by referencing spring groups.
Definition VrmDocument.h:68
std::array< float, 3 > tail
Definition VrmDocument.h:70
std::array< float, 3 > offset
Definition VrmDocument.h:70
Validated VRM schema data. Unknown optional fields are ignored; unknown versions fail.
Definition VrmDocument.h:88
std::vector< VrmSpring > springs
Definition VrmDocument.h:97
std::vector< std::vector< int > > meshMaterials
Definition VrmDocument.h:92
std::vector< std::string > nodes
Definition VrmDocument.h:90
std::map< std::string, int > humanoid
Definition VrmDocument.h:93
std::vector< VrmCollider > colliders
Definition VrmDocument.h:96
std::vector< int > nodeMeshes
Definition VrmDocument.h:91
std::vector< int > parents
Definition VrmDocument.h:91
std::vector< std::vector< std::byte > > images
Definition VrmDocument.h:99
std::vector< VrmMaterial > materials
Definition VrmDocument.h:98
std::vector< VrmExpression > expressions
Definition VrmDocument.h:94
std::array< float, 4 > target
Definition VrmDocument.h:44
std::array< float, 2 > offset
Definition VrmDocument.h:49
std::array< float, 2 > scale
Definition VrmDocument.h:49
One expression's indexed morph/material/UV operations.
Definition VrmDocument.h:34
std::vector< Morph > morphs
Definition VrmDocument.h:53
std::vector< Uv > uvs
Definition VrmDocument.h:55
std::vector< Color > colors
Definition VrmDocument.h:54
VRM gaze maps; angles are degrees, expression outputs are weights.
Definition VrmDocument.h:58
std::array< float, 3 > offset
Definition VrmDocument.h:64
Linear material factors and image references from VRMC_materials_mtoon.
Definition VrmDocument.h:21
std::array< float, 3 > outline
Definition VrmDocument.h:26
std::array< float, 3 > matcap
Definition VrmDocument.h:26
std::array< float, 3 > shade
Definition VrmDocument.h:26
std::array< float, 4 > color
Definition VrmDocument.h:25
std::array< VrmTexture, 9 > textures
Definition VrmDocument.h:31
std::array< float, 3 > rim
Definition VrmDocument.h:26
std::array< float, 3 > emission
Definition VrmDocument.h:26
std::array< float, 3 > gravity
Definition VrmDocument.h:80
Ordered joints and explicit collision membership of one VRM spring.
Definition VrmDocument.h:75
std::vector< Joint > joints
Definition VrmDocument.h:84
std::vector< int > colliders
Definition VrmDocument.h:85
Owning, validated VRM import data; independent of parser and source bytes.
Definition VrmDocument.h:14
std::array< float, 2 > scale
Definition VrmDocument.h:16
std::array< float, 2 > offset
Definition VrmDocument.h:16