Skip to content

Commit b8a2ae2

Browse files
authored
Merge pull request #2 from julienkay/Custom_Data
Allow importing self trained scenes from disk
2 parents a461385 + b5b8208 commit b8a2ae2

File tree

7 files changed

+458
-169
lines changed

7 files changed

+458
-169
lines changed

Assets/Editor/MobileNeRFImporter.cs

Lines changed: 296 additions & 169 deletions
Large diffs are not rendered by default.

Assets/Editor/MobileNeRFScene.cs

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
using System;
2+
3+
/// <summary>
4+
/// The names of the available demo scenes.
5+
/// </summary>
6+
public enum MNeRFScene {
7+
Custom = -1,
8+
Chair,
9+
Drums,
10+
Ficus,
11+
Hotdog,
12+
Lego,
13+
Materials,
14+
Mic,
15+
Ship,
16+
Fern,
17+
Flower,
18+
Fortress,
19+
Horns,
20+
Leaves,
21+
Orchids,
22+
Room,
23+
Trex,
24+
Bicycle,
25+
Gardenvase,
26+
Stump
27+
}
28+
29+
public static class MNeRFSceneExtensions {
30+
31+
public static string String(this MNeRFScene scene) {
32+
return scene.ToString().ToLower();
33+
}
34+
35+
public static MNeRFScene ToEnum(string value) {
36+
if (Enum.TryParse(value, ignoreCase: true, out MNeRFScene result)) {
37+
return result;
38+
} else {
39+
return MNeRFScene.Custom;
40+
}
41+
}
42+
43+
public static string GetAxisSwizzleString(this MNeRFScene scene) {
44+
switch (scene) {
45+
case MNeRFScene.Custom:
46+
// Based on user feedback for custom scenes
47+
if (MobileNeRFImporter.SwizzleAxis) {
48+
return "o.rayDirection.xz = -o.rayDirection.xz;" +
49+
"o.rayDirection.xyz = o.rayDirection.xzy;";
50+
} else {
51+
return "o.rayDirection.x = -o.rayDirection.x;";
52+
}
53+
case MNeRFScene.Chair:
54+
case MNeRFScene.Drums:
55+
case MNeRFScene.Ficus:
56+
case MNeRFScene.Hotdog:
57+
case MNeRFScene.Lego:
58+
case MNeRFScene.Materials:
59+
case MNeRFScene.Mic:
60+
case MNeRFScene.Ship:
61+
// Synthetic 360° scenes
62+
return "o.rayDirection.xz = -o.rayDirection.xz;" +
63+
"o.rayDirection.xyz = o.rayDirection.xzy;";
64+
case MNeRFScene.Fern:
65+
case MNeRFScene.Flower:
66+
case MNeRFScene.Fortress:
67+
case MNeRFScene.Horns:
68+
case MNeRFScene.Leaves:
69+
case MNeRFScene.Orchids:
70+
case MNeRFScene.Room:
71+
case MNeRFScene.Trex:
72+
// Forward-facing scenes
73+
return "o.rayDirection.x = -o.rayDirection.x;";
74+
case MNeRFScene.Bicycle:
75+
case MNeRFScene.Gardenvase:
76+
case MNeRFScene.Stump:
77+
// Unbounded 360° scenes
78+
return "o.rayDirection.xz = -o.rayDirection.xz;" +
79+
"o.rayDirection.xyz = o.rayDirection.xzy;";
80+
default:
81+
return "";
82+
}
83+
}
84+
}

Assets/Editor/MobileNeRFScene.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System.Text.RegularExpressions;
2+
using UnityEditor;
3+
4+
/// <summary>
5+
/// Custom import settings for MobileNeRF OBJs.
6+
/// </summary>
7+
public class ObjImportProcessor : AssetPostprocessor {
8+
private void OnPreprocessModel() {
9+
Regex objPattern = new Regex(@"shape.*\.obj");
10+
11+
if (objPattern.IsMatch(assetPath)) {
12+
ModelImporter modelImporter = assetImporter as ModelImporter;
13+
// MobileNeRFs don't use normals, so we disable trying to read them when importing .obj files
14+
// This is not strictly necessary, but prevents the warnings showing in the console.
15+
modelImporter.importTangents = ModelImporterTangents.None;
16+
modelImporter.importNormals = ModelImporterNormals.None;
17+
18+
// one material per shape (each has individual feature textures)
19+
modelImporter.materialLocation = ModelImporterMaterialLocation.External;
20+
modelImporter.materialName = ModelImporterMaterialName.BasedOnModelNameAndMaterialName;
21+
}
22+
}
23+
}

Assets/Editor/ObjImportProcessor.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System.Text.RegularExpressions;
2+
using UnityEditor;
3+
using UnityEngine;
4+
5+
/// <summary>
6+
/// Configures MobileNeRF feature textures to have the correct import settings.
7+
/// </summary>
8+
public class PNGImportProcessor : AssetPostprocessor {
9+
10+
private void OnPreprocessTexture() {
11+
Regex featureTexturePattern = new Regex(@"shape[0-9].pngfeat[0-9]\.png");
12+
if (featureTexturePattern.IsMatch(assetPath)) {
13+
TextureImporter textureImporter = assetImporter as TextureImporter;
14+
textureImporter.maxTextureSize = 4096;
15+
textureImporter.textureCompression = TextureImporterCompression.Uncompressed;
16+
textureImporter.sRGBTexture = false;
17+
textureImporter.filterMode = FilterMode.Point;
18+
textureImporter.mipmapEnabled = false;
19+
textureImporter.alphaIsTransparency = true;
20+
}
21+
}
22+
}

Assets/Editor/PNGImportProcessor.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)