ModelBaker Test

MeshCombiner, combine SkinnedMeshRenderers and MeshRenderers into one.
AnimationBaker, bake SkinnedMeshRenderer with of animations into vertex animations.
Test shader, flipped Y compared to previvious version, it now starts at 0,0 and goes into the positive direciton.
This commit is contained in:
max
2021-01-09 15:56:38 +01:00
parent 10b4eb22d3
commit abd6cc9e9e
21 changed files with 1715 additions and 0 deletions

8
Editor/Gizmos.meta Normal file
View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e057e650c2af4ea42a1d1b534a8dfbf9
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -0,0 +1,144 @@
fileFormatVersion: 2
guid: 68e0f0fb3c94dae4c8e1d9d8362085b5
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: 1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 2
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 8192
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 8192
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: iPhone
maxTextureSize: 8192
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 8192
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Windows Store Apps
maxTextureSize: 8192
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: afa9933157fe17b40be247abddb0b2ee
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5fb7e85d011f3c6419742e766fc11aeb
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,109 @@
using UnityEngine;
using UnityEditor;
namespace TAO.VertexAnimation.Editor
{
[CustomEditor(typeof(VA_ModelBaker))]
public class VA_ModelBakerEditor : UnityEditor.Editor
{
private VA_ModelBaker modelBaker = null;
void OnEnable()
{
modelBaker = target as VA_ModelBaker;
}
public override void OnInspectorGUI()
{
serializedObject.Update();
InputGUI();
BakeGUI();
OutputGUI();
serializedObject.ApplyModifiedProperties();
}
private void InputGUI()
{
//public GameObject model;
//public AnimationClip[] animationClips;
//public int fps = 24;
//public int textureWidth = 512;
//public bool saveBakedDataToAsset = true;
//public bool generateAnimationBook = false;
EditorGUILayout.PropertyField(serializedObject.FindProperty("model"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("animationClips"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("fps"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("textureWidth"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("saveBakedDataToAsset"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("generateAnimationBook"));
}
private void BakeGUI()
{
if (GUILayout.Button("Bake"))
{
ClearBakedData();
modelBaker.Bake();
if (modelBaker.saveBakedDataToAsset)
{
SaveBakedData();
}
}
using (new EditorGUILayout.HorizontalScope())
{
if (GUILayout.Button("SaveBakedData", EditorStyles.miniButtonLeft))
{
SaveBakedData();
}
if (GUILayout.Button("ClearBakedData", EditorStyles.miniButtonRight))
{
ClearBakedData();
}
}
}
private void OutputGUI()
{
using (new EditorGUI.DisabledGroupScope(true))
{
EditorGUILayout.PropertyField(serializedObject.FindProperty("bakedData"));
}
}
private void SaveBakedData()
{
AssetDatabase.AddObjectToAsset(modelBaker.BakedData.mesh, modelBaker);
foreach (var pm in modelBaker.BakedData.positionMaps)
{
AssetDatabase.AddObjectToAsset(pm, modelBaker);
}
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
private void ClearBakedData()
{
var assets = AssetDatabase.LoadAllAssetsAtPath(AssetDatabase.GetAssetPath(modelBaker));
foreach (var a in assets)
{
if (a != modelBaker)
{
AssetDatabase.RemoveObjectFromAsset(a);
}
}
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 3a3231c3c369f0c4ab95f98b979d0530
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,12 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace TAO.VertexAnimation.Editor
{
[CreateAssetMenu(fileName = "new AssetConverter", menuName = "VA_Animation/AssetConverter", order = 400)]
public class VA_AssetConverter : ScriptableObject
{
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 55b196764521c964c84e8f2edd5c8da5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: