载入中...
搜索中...
未找到
UnityFbx.cpp
浏览该文件的文档.
7Result<PreparedAssetImport> prepareUnityFbx(const UnityProjectImportRequest&, const UnitySourceAsset& source) {
41 if (!std::regex_search(text, match, std::regex("(?:^|\\n) " + name + ": *([^\\r\\n]+)"))) return {};
60 if (unity_detail::foldAscii(std::filesystem::path(path).extension().string()) != ".prefab" || bytes.empty())
63 for (std::sregex_iterator match(text.begin(), text.end(), reference), end; match != end; ++match) {
79Result<PreparedAssetImport> meshImport(const UnityProjectImportRequest& request, const UnitySourceAsset& source,
82 if (!mesh.HasPositions() || !mesh.HasNormals() || !mesh.HasTextureCoords(0) || mesh.HasBones() ||
86 "FBX static mesh requires positions, imported normals and UV0; skin/morph conversion is unavailable",
116 auto stream = [&](std::size_t offset, std::size_t length, std::uint64_t count, const char* type, int component) {
128 Value::Object attributes{{"POSITION", Value(std::int64_t(0))}, {"NORMAL", Value(std::int64_t(1))}};
151 ((n.y * t.z - n.z * t.y) * b.x + (n.z * t.x - n.x * t.z) * b.y + (n.x * t.y - n.y * t.x) * b.z) < 0.f
177 DiagnosticCode::Unsupported, "FBX contains non-triangle primitives", source.path, {}, "asset.import"));
181 stream(indexOffset, buffer.size() - indexOffset, std::uint64_t(mesh.mNumFaces) * 3, "SCALAR", 5125);
182 Value primitive(Value::Object{{"attributes", Value(std::move(attributes))}, {"indices", Value(indexAccessor)}});
190 Value(Value::Array{Value(Value::Object{{"primitives", Value(Value::Array{std::move(primitive)})}})})}});
210Result<PreparedAssetImport> prepareUnityFbx(const UnityProjectImportRequest& request, const UnitySourceAsset& source) {
217 if ((generation != 1 && generation != 2) || !scale || *scale <= 0 || setting(meta, "useFileScale") != 1 ||
221 "FBX requires supported file IDs, positive scale, file units, imported normals and original UV0",
225 DiagnosticCode::InvalidArgument, "FBX source exceeds budget", source.path, {}, "asset.import"));
232 Diagnostic::error(DiagnosticCode::ParseError, importer.GetErrorString(), source.path, {}, "asset.import"));
241 if (bytes > request.limits.maximumDecodedBytes || meshBytes > request.limits.maximumDecodedBytes - bytes)
250 if (!scene->mMetaData->Get("UnitScaleFactor", units) && scene->mMetaData->Get("UnitScaleFactor", floatUnits))
256 DiagnosticCode::Unsupported, "FBX file unit scale is unavailable", source.path, {}, "asset.import"));
261 const auto referencedIds = generation == 1 ? referencedMeshIds(request, source.guid) : std::set<std::int64_t>{};
265 for (unsigned index = 0; index < node.mNumChildren; ++index) countMeshNodes(*node.mChildren[index]);
283 DiagnosticCode::InvalidArgument, "FBX hierarchy exceeds budget", source.path, {}, "asset.import"));
332 DiagnosticCode::Unsupported, "FBX contains no static meshes", source.path, {}, "asset.import"));
Direct Unity text-serialization adapter for TerrainData and Prefab assets.
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
Result< asset::EvaManifest > baseManifest(const ImportPackageIdentity &package, std::string_view importer)
Base manifest.
Definition ImportCommon.h:31
void put32(std::vector< std::uint8_t > &bytes, std::uint32_t value)
Append little-endian uint32 to owned storage.
Definition GltfDecode.cpp:27
Definition AssetImporter.h:14
@ Translated
Result< PreparedAssetImport > prepareUnityFbx(const UnityProjectImportRequest &request, const UnitySourceAsset &source)
Convert a static FBX with explicit Unity importer settings and hashed subasset identities.
Definition UnityFbx.cpp:210
EVENGINE_API_PLATFORM Result< PreparedAssetImport > prepareGltfImport(const GltfImportRequest &request)
Decode triangle primitives from glTF 2.0 into canonical typed mesh blobs.
Definition GltfImporter.cpp:205
std::variant< std::monostate, std::int64_t, double, std::string, bool > Value
Definition Database.h:26
@ Exists
@ Close
@ InvalidArgument
@ Unsupported
@ ParseError
@ Conflict
Definition Container.h:602
std::map< std::string, AssetRef > entrypoints
Definition EvaManifest.h:71
std::uint32_t maximumAssets
Definition AssetImporter.h:20
std::uint32_t maximumVerticesPerPrimitive
Definition AssetImporter.h:21
std::uint64_t maximumDecodedBytes
Definition AssetImporter.h:19
std::uint32_t maximumIndicesPerPrimitive
Definition AssetImporter.h:22
std::uint64_t maximumSourceBytes
Definition AssetImporter.h:18
ImportPackageIdentity package
Definition AssetImporter.h:55
Owning, validated source archive candidate not yet published to disk/database.
Definition AssetImporter.h:90
std::vector< ImportFinding > findings
Definition AssetImporter.h:93
std::vector< asset::EvaArchiveEntry > entries
Definition AssetImporter.h:92
std::vector< ImportSourceMapping > sourceMappings
Definition AssetImporter.h:94
asset::EvaManifest manifest
Definition AssetImporter.h:91
In-memory Unity project slice; keys are normalized project-relative paths.
Definition UnityImporter.h:15
Immutable-by-convention owning source index entry; no borrowed source addresses.
Definition UnitySource.h:38