This commit is contained in:
Yamo4490 2025-06-08 00:55:10 +09:00
parent c5d652764c
commit d897fcd73e
355 changed files with 34487 additions and 0 deletions

8
Assets/External/Fantasy Skybox.meta vendored Normal file
View File

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

BIN
Assets/External/Fantasy Skybox/ReleaseNotes.txt (Stored with Git LFS) vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,15 @@
fileFormatVersion: 2
guid: f14307b5201ecdf4e89f2c843bdec16c
timeCreated: 1434912371
licenseType: Store
TextScriptImporter:
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 18216
packageName: Fantasy Skybox
packageVersion: 1.6.7
assetPath: Assets/Fantasy Skybox/ReleaseNotes.txt
uploadId: 709120

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,16 @@
fileFormatVersion: 2
guid: 06cf16cc9cc7a4f4ca46f643b3c176a9
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/BD Studios Post-Processing
Profile.asset
uploadId: 627812

View File

@ -0,0 +1,64 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!850595691 &4890085278179872738
LightingSettings:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: BD_Lighting
serializedVersion: 4
m_GIWorkflowMode: 1
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_RealtimeEnvironmentLighting: 1
m_BounceScale: 1
m_AlbedoBoost: 1
m_IndirectOutputScale: 1
m_UsingShadowmask: 0
m_BakeBackend: 2
m_LightmapMaxSize: 1024
m_BakeResolution: 20
m_Padding: 2
m_LightmapCompression: 3
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAO: 0
m_MixedBakeMode: 0
m_LightmapsBakeMode: 1
m_FilterMode: 1
m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0}
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_RealtimeResolution: 2
m_ForceWhiteAlbedo: 0
m_ForceUpdates: 0
m_FinalGather: 0
m_FinalGatherRayCount: 256
m_FinalGatherFiltering: 1
m_PVRCulling: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 256
m_PVREnvironmentSampleCount: 256
m_PVREnvironmentReferencePointCount: 2048
m_LightProbeSampleCountMultiplier: 4
m_PVRBounces: 2
m_PVRMinBounces: 2
m_PVREnvironmentMIS: 1
m_PVRFilteringMode: 1
m_PVRDenoiserTypeDirect: 1
m_PVRDenoiserTypeIndirect: 1
m_PVRDenoiserTypeAO: 1
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_PVRTiledBaking: 0

View File

@ -0,0 +1,15 @@
fileFormatVersion: 2
guid: 187345041fe57664fae2aa351414b6b6
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 4890085278179872738
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/BD_Lighting.lighting
uploadId: 627812

BIN
Assets/External/Free Stylized Hand-Painted Skybox/Demo.unity (Stored with Git LFS) vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: f976c0a276862634f8b6bf2eaff818fb
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Demo.unity
uploadId: 627812

View File

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

View File

@ -0,0 +1,33 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Cloudy01
m_Shader: {fileID: 103, guid: 0000000000000000f000000000000000, type: 0}
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _Tex:
m_Texture: {fileID: 8900000, guid: e31e2fa4fd8bdaa478f1675cf5762fd7, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _Exposure: 1
- _Rotation: 0
m_Colors:
- _Tint: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
m_BuildTextureStacks: []

View File

@ -0,0 +1,15 @@
fileFormatVersion: 2
guid: da04fb2a289ef1b47bf5b07b9285dd70
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Materials/Cloudy01.mat
uploadId: 627812

View File

@ -0,0 +1,33 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Cloudy02
m_Shader: {fileID: 103, guid: 0000000000000000f000000000000000, type: 0}
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _Tex:
m_Texture: {fileID: 8900000, guid: f1b504bff46c95346b5b1e99fd731eff, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _Exposure: 1
- _Rotation: 0
m_Colors:
- _Tint: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
m_BuildTextureStacks: []

View File

@ -0,0 +1,15 @@
fileFormatVersion: 2
guid: d4393bf45f92e74499f230d78e8cab9f
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Materials/Cloudy02.mat
uploadId: 627812

View File

@ -0,0 +1,33 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Cloudy03
m_Shader: {fileID: 103, guid: 0000000000000000f000000000000000, type: 0}
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _Tex:
m_Texture: {fileID: 8900000, guid: 3d60c74e415eb044cb7c63f12a1d955e, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _Exposure: 1
- _Rotation: 0
m_Colors:
- _Tint: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
m_BuildTextureStacks: []

View File

@ -0,0 +1,15 @@
fileFormatVersion: 2
guid: 896fe09c49b73a44ead00a982ee46e6b
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Materials/Cloudy03.mat
uploadId: 627812

View File

@ -0,0 +1,33 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Cloudy04
m_Shader: {fileID: 103, guid: 0000000000000000f000000000000000, type: 0}
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _Tex:
m_Texture: {fileID: 8900000, guid: 663e4e044569d5d4fab103ab8ae7719c, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _Exposure: 1
- _Rotation: 0
m_Colors:
- _Tint: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
m_BuildTextureStacks: []

View File

@ -0,0 +1,15 @@
fileFormatVersion: 2
guid: b01d8a5305a527c4daeab5318708e238
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Materials/Cloudy04.mat
uploadId: 627812

View File

@ -0,0 +1,33 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Dawn
m_Shader: {fileID: 103, guid: 0000000000000000f000000000000000, type: 0}
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _Tex:
m_Texture: {fileID: 8900000, guid: 41662f129e3c1054392aed1755433fd5, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _Exposure: 1
- _Rotation: 0
m_Colors:
- _Tint: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
m_BuildTextureStacks: []

View File

@ -0,0 +1,15 @@
fileFormatVersion: 2
guid: b73dc2c0c9eceae4486bdb5b744fceb9
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Materials/Dawn.mat
uploadId: 627812

View File

@ -0,0 +1,33 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Dawn_Cloudy
m_Shader: {fileID: 103, guid: 0000000000000000f000000000000000, type: 0}
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _Tex:
m_Texture: {fileID: 8900000, guid: eb2951db9066f984f85ff41f6e9525f7, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _Exposure: 1
- _Rotation: 0
m_Colors:
- _Tint: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
m_BuildTextureStacks: []

View File

@ -0,0 +1,15 @@
fileFormatVersion: 2
guid: 3776415b8d326db4cb696fe00db0540e
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Materials/Dawn_Cloudy.mat
uploadId: 627812

View File

@ -0,0 +1,33 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Day_Clear
m_Shader: {fileID: 103, guid: 0000000000000000f000000000000000, type: 0}
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _Tex:
m_Texture: {fileID: 8900000, guid: 4c6e3caff9a2c00459a8805bc96f8f69, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _Exposure: 1
- _Rotation: 0
m_Colors:
- _Tint: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
m_BuildTextureStacks: []

View File

@ -0,0 +1,15 @@
fileFormatVersion: 2
guid: 1e5e82b01cae80b44b78975b9c2d7741
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Materials/Day_Clear.mat
uploadId: 627812

View File

@ -0,0 +1,33 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Midnight
m_Shader: {fileID: 103, guid: 0000000000000000f000000000000000, type: 0}
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _Tex:
m_Texture: {fileID: 8900000, guid: ba4f9681a4f907647a229035e27b138a, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _Exposure: 1
- _Rotation: 0
m_Colors:
- _Tint: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
m_BuildTextureStacks: []

View File

@ -0,0 +1,15 @@
fileFormatVersion: 2
guid: 5eae8f65eabf7ee4994b422cd10214bc
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Materials/Midnight.mat
uploadId: 627812

View File

@ -0,0 +1,33 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Midnight_Stars
m_Shader: {fileID: 103, guid: 0000000000000000f000000000000000, type: 0}
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _Tex:
m_Texture: {fileID: 8900000, guid: 3b61a4965ad81044d8fd04c6738c08bb, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _Exposure: 1
- _Rotation: 0
m_Colors:
- _Tint: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
m_BuildTextureStacks: []

View File

@ -0,0 +1,15 @@
fileFormatVersion: 2
guid: b7c00be18a6e7a2428b01c61aea8c5b6
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Materials/Midnight_Stars.mat
uploadId: 627812

View File

@ -0,0 +1,33 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Midnight_Stars02
m_Shader: {fileID: 103, guid: 0000000000000000f000000000000000, type: 0}
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _Tex:
m_Texture: {fileID: 8900000, guid: e29caa9aad3602d40be0bdfa8138d34e, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _Exposure: 1
- _Rotation: 0
m_Colors:
- _Tint: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
m_BuildTextureStacks: []

View File

@ -0,0 +1,15 @@
fileFormatVersion: 2
guid: b8b51e91d70758d4587a58e98389c07a
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Materials/Midnight_Stars02.mat
uploadId: 627812

View File

@ -0,0 +1,33 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Sunset
m_Shader: {fileID: 103, guid: 0000000000000000f000000000000000, type: 0}
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _Tex:
m_Texture: {fileID: 8900000, guid: 8a923fadf769f794a8d3a9806f92c8c9, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _Exposure: 1
- _Rotation: 0
m_Colors:
- _Tint: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
m_BuildTextureStacks: []

View File

@ -0,0 +1,15 @@
fileFormatVersion: 2
guid: 170f2a047c448444ca1b8e2d20f504f1
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Materials/Sunset.mat
uploadId: 627812

View File

@ -0,0 +1,33 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Sunset_Cloudy
m_Shader: {fileID: 103, guid: 0000000000000000f000000000000000, type: 0}
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _Tex:
m_Texture: {fileID: 8900000, guid: 7e3608d3009d2f74c8fc155c9ad6d76e, type: 3}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _Exposure: 1
- _Rotation: 0
m_Colors:
- _Tint: {r: 0.5, g: 0.5, b: 0.5, a: 0.5}
m_BuildTextureStacks: []

View File

@ -0,0 +1,15 @@
fileFormatVersion: 2
guid: bebabbca203115940bf67dfe65237b36
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Materials/Sunset_Cloudy.mat
uploadId: 627812

View File

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

BIN
Assets/External/Free Stylized Hand-Painted Skybox/Textures/Cloudy01.png (Stored with Git LFS) vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: e31e2fa4fd8bdaa478f1675cf5762fd7
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
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 2
cubemapConvolution: 0
seamlessCubemap: 1
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
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: 0
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 2
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
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: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
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: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Textures/Cloudy01.png
uploadId: 627812

BIN
Assets/External/Free Stylized Hand-Painted Skybox/Textures/Cloudy02.png (Stored with Git LFS) vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: f1b504bff46c95346b5b1e99fd731eff
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
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 2
cubemapConvolution: 0
seamlessCubemap: 1
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
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: 0
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 2
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
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: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
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: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Textures/Cloudy02.png
uploadId: 627812

BIN
Assets/External/Free Stylized Hand-Painted Skybox/Textures/Cloudy03.png (Stored with Git LFS) vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: 3d60c74e415eb044cb7c63f12a1d955e
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
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 2
cubemapConvolution: 0
seamlessCubemap: 1
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
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: 0
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 2
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
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: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
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: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Textures/Cloudy03.png
uploadId: 627812

BIN
Assets/External/Free Stylized Hand-Painted Skybox/Textures/Cloudy04.png (Stored with Git LFS) vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: 663e4e044569d5d4fab103ab8ae7719c
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
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 2
cubemapConvolution: 0
seamlessCubemap: 1
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
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: 0
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 2
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
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: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
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: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Textures/Cloudy04.png
uploadId: 627812

BIN
Assets/External/Free Stylized Hand-Painted Skybox/Textures/Dawn.png (Stored with Git LFS) vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: 41662f129e3c1054392aed1755433fd5
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
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 2
cubemapConvolution: 0
seamlessCubemap: 1
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
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: 0
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 2
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
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: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
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: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Textures/Dawn.png
uploadId: 627812

Binary file not shown.

View File

@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: eb2951db9066f984f85ff41f6e9525f7
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
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 2
cubemapConvolution: 0
seamlessCubemap: 1
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
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: 0
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 2
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
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: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
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: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Textures/Dawn_Cloudy.png
uploadId: 627812

BIN
Assets/External/Free Stylized Hand-Painted Skybox/Textures/Day_Clear.png (Stored with Git LFS) vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: 4c6e3caff9a2c00459a8805bc96f8f69
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
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 2
cubemapConvolution: 0
seamlessCubemap: 1
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
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: 0
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 2
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
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: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
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: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Textures/Day_Clear.png
uploadId: 627812

BIN
Assets/External/Free Stylized Hand-Painted Skybox/Textures/Midnight.png (Stored with Git LFS) vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: ba4f9681a4f907647a229035e27b138a
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
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 2
cubemapConvolution: 0
seamlessCubemap: 1
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
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: 0
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 2
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
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: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
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: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Textures/Midnight.png
uploadId: 627812

Binary file not shown.

View File

@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: 3b61a4965ad81044d8fd04c6738c08bb
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
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 2
cubemapConvolution: 0
seamlessCubemap: 1
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
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: 0
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 2
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
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: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
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: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Textures/Midnight_Stars.png
uploadId: 627812

Binary file not shown.

View File

@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: e29caa9aad3602d40be0bdfa8138d34e
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
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 2
cubemapConvolution: 0
seamlessCubemap: 1
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
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: 0
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 2
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
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: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
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: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Textures/Midnight_Stars02.png
uploadId: 627812

BIN
Assets/External/Free Stylized Hand-Painted Skybox/Textures/Sunset.png (Stored with Git LFS) vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: 8a923fadf769f794a8d3a9806f92c8c9
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
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 2
cubemapConvolution: 0
seamlessCubemap: 1
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
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: 0
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 2
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
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: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
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: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Textures/Sunset.png
uploadId: 627812

Binary file not shown.

View File

@ -0,0 +1,129 @@
fileFormatVersion: 2
guid: 7e3608d3009d2f74c8fc155c9ad6d76e
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
ignoreMasterTextureLimit: 0
grayScaleToAlpha: 0
generateCubemap: 2
cubemapConvolution: 0
seamlessCubemap: 1
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 1
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: 0
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 2
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
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: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
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: []
nameFileIdTable: {}
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 265475
packageName: Free Stylized Hand-Painted Skybox
packageVersion: 1.0
assetPath: Assets/Free Stylized Hand-Painted Skybox/Textures/Sunset_Cloudy.png
uploadId: 627812

BIN
Assets/Scenes/123.unity (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: d3384ad04ecf0e049990c1f233d1e2ea
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

BIN
Assets/Scenes/SampleScene.unity (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 99c9720ab356a0642a771bea13969a05
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

8
Assets/Scripts/3rd.meta Normal file
View File

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

View File

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

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<TestSettings name="ローカル" id="f9d1f722-f14e-43ef-9e9b-1c25ab5c774c" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<Description>これらはローカル テスト実行用の既定のテスト設定です。</Description>
<Deployment enabled="false" />
<Execution>
<TestTypeSpecific />
<AgentRule name="Execution Agents">
</AgentRule>
</Execution>
</TestSettings>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<TestLists xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<TestList name="テストの一覧" id="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
<RunConfiguration id="f9d1f722-f14e-43ef-9e9b-1c25ab5c774c" name="ローカル" storage="local.testsettings" type="Microsoft.VisualStudio.TestTools.Common.TestRunConfiguration, Microsoft.VisualStudio.QualityTools.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</TestList>
</TestLists>

View File

@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Text;
using MikuMikuDance.Model.Ver1;
using MikuMikuDance.Model;
using MikuMikuDance.Motion.Motion2;
using MikuMikuDance.Motion;
using MMDIKBakerLibrary;
namespace MMDIKBaker
{
class Program
{
static void Main(string[] args)
{
//コンソールアプリ作りたいわけじゃないのでハードコーディングしとく
string InputPMD = "miku.pmd";
string InputVMD = "TrueMyHeart.vmd";
string OutputVMD = "tmh_bake.vmd";
MMDModel1 model = (MMDModel1)ModelManager.Read(InputPMD, MikuMikuDance.Model.CoordinateType.RightHandedCoordinate);
MMDMotion2 motion = (MMDMotion2)MotionManager.Read(InputVMD, MikuMikuDance.Motion.CoordinateType.RightHandedCoordinate);
motion = IKBaker.bake(motion, model);
MotionManager.Write(OutputVMD, motion);
}
}
}

View File

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。
// アセンブリに関連付けられている情報を変更するには、
// これらの属性値を変更してください。
[assembly: AssemblyTitle("MMDBoneBaker")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("MMDBoneBaker")]
[assembly: AssemblyCopyright("Copyright © 2011")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから
// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、
// その型の ComVisible 属性を true に設定してください。
[assembly: ComVisible(false)]
// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です
[assembly: Guid("49201036-3934-4006-b21b-04eb8fb6aeee")]
// アセンブリのバージョン情報は、以下の 4 つの値で構成されています:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を
// 既定値にすることができます:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -0,0 +1,166 @@
namespace MMDIKBakerGUI
{
partial class Form1
{
/// <summary>
/// 必要なデザイナー変数です。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 使用中のリソースをすべてクリーンアップします。
/// </summary>
/// <param name="disposing">マネージ リソースが破棄される場合 true、破棄されない場合は false です。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows
/// <summary>
/// デザイナー サポートに必要なメソッドです。このメソッドの内容を
/// コード エディターで変更しないでください。
/// </summary>
private void InitializeComponent()
{
this.pmdFileName = new System.Windows.Forms.TextBox();
this.vmdFileName = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.pmdRef = new System.Windows.Forms.Button();
this.vmdRef = new System.Windows.Forms.Button();
this.startBake = new System.Windows.Forms.Button();
this.button1 = new System.Windows.Forms.Button();
this.label3 = new System.Windows.Forms.Label();
this.saveVmdName = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// pmdFileName
//
this.pmdFileName.Location = new System.Drawing.Point(14, 24);
this.pmdFileName.Name = "pmdFileName";
this.pmdFileName.Size = new System.Drawing.Size(270, 19);
this.pmdFileName.TabIndex = 0;
//
// vmdFileName
//
this.vmdFileName.Location = new System.Drawing.Point(14, 61);
this.vmdFileName.Name = "vmdFileName";
this.vmdFileName.Size = new System.Drawing.Size(270, 19);
this.vmdFileName.TabIndex = 1;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 9);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(29, 12);
this.label1.TabIndex = 2;
this.label1.Text = "PMD";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(12, 46);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(30, 12);
this.label2.TabIndex = 3;
this.label2.Text = "VMD";
//
// pmdRef
//
this.pmdRef.Location = new System.Drawing.Point(290, 22);
this.pmdRef.Name = "pmdRef";
this.pmdRef.Size = new System.Drawing.Size(42, 23);
this.pmdRef.TabIndex = 4;
this.pmdRef.Text = "参照";
this.pmdRef.UseVisualStyleBackColor = true;
this.pmdRef.Click += new System.EventHandler(this.pmdRef_Click);
//
// vmdRef
//
this.vmdRef.Location = new System.Drawing.Point(290, 59);
this.vmdRef.Name = "vmdRef";
this.vmdRef.Size = new System.Drawing.Size(42, 23);
this.vmdRef.TabIndex = 5;
this.vmdRef.Text = "参照";
this.vmdRef.UseVisualStyleBackColor = true;
this.vmdRef.Click += new System.EventHandler(this.vmdRef_Click);
//
// startBake
//
this.startBake.Location = new System.Drawing.Point(257, 142);
this.startBake.Name = "startBake";
this.startBake.Size = new System.Drawing.Size(75, 23);
this.startBake.TabIndex = 6;
this.startBake.Text = "Bake !!";
this.startBake.UseVisualStyleBackColor = true;
this.startBake.Click += new System.EventHandler(this.startBake_Click);
//
// button1
//
this.button1.Location = new System.Drawing.Point(290, 96);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(42, 23);
this.button1.TabIndex = 9;
this.button1.Text = "参照";
this.button1.UseVisualStyleBackColor = true;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(12, 83);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(59, 12);
this.label3.TabIndex = 8;
this.label3.Text = "Save VMD";
//
// saveVmdName
//
this.saveVmdName.Location = new System.Drawing.Point(14, 98);
this.saveVmdName.Name = "saveVmdName";
this.saveVmdName.Size = new System.Drawing.Size(270, 19);
this.saveVmdName.TabIndex = 7;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(344, 177);
this.Controls.Add(this.button1);
this.Controls.Add(this.label3);
this.Controls.Add(this.saveVmdName);
this.Controls.Add(this.startBake);
this.Controls.Add(this.vmdRef);
this.Controls.Add(this.pmdRef);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.vmdFileName);
this.Controls.Add(this.pmdFileName);
this.Name = "Form1";
this.Text = "MMDIKBakerGUI";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox pmdFileName;
private System.Windows.Forms.TextBox vmdFileName;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Button pmdRef;
private System.Windows.Forms.Button vmdRef;
private System.Windows.Forms.Button startBake;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox saveVmdName;
}
}

View File

@ -0,0 +1,120 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using MikuMikuDance.Model;
using MikuMikuDance.Model.Ver1;
using MikuMikuDance.Motion;
using MikuMikuDance.Motion.Motion2;
using MMDIKBakerLibrary;
namespace MMDIKBakerGUI
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void startBake_Click(object sender, EventArgs e)
{
// 入力チェック
if (!File.Exists(pmdFileName.Text))
{
MessageBox.Show(
"PMDファイルが見つかりません:\n" + pmdFileName.Text,
"PMD読み込みエラー",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
if (!File.Exists(vmdFileName.Text))
{
MessageBox.Show(
"VMDファイルが見つかりません:\n" + vmdFileName.Text,
"VMD読み込みエラー",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
// saveVMDの上書き確認
if (File.Exists(saveVmdName.Text))
{
var result = MessageBox.Show(
"VMDファイルが存在します。\n" + saveVmdName.Text + "\n上書きしてよろしいですか",
"上書き確認",
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Question);
if(result != System.Windows.Forms.DialogResult.Yes)
return;
// bakeでエラー出るっぽいので削除しておく
File.Delete(saveVmdName.Text);
}
// Bake!
try
{
MMDModel1 model = (MMDModel1)ModelManager.Read(pmdFileName.Text, MikuMikuDance.Model.CoordinateType.RightHandedCoordinate);
MMDMotion2 motion = (MMDMotion2)MotionManager.Read(vmdFileName.Text, MikuMikuDance.Motion.CoordinateType.RightHandedCoordinate);
motion = IKBaker.bake(motion, model);
MotionManager.Write(saveVmdName.Text, motion);
MessageBox.Show(
"Bake完了",
"Baked!!");
}
catch
{
MessageBox.Show(
"Bake中にエラーが発生しました",
"未知のエラー",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
}
private void pmdRef_Click(object sender, EventArgs e)
{
var dialog = new OpenFileDialog();
dialog.Filter = "PMDファイル|*.pmd";
if (dialog.ShowDialog() == DialogResult.OK)
{
pmdFileName.Text = dialog.FileName;
}
}
private void vmdRef_Click(object sender, EventArgs e)
{
var dialog = new OpenFileDialog();
dialog.Filter = "VMDファイル|*.vmd";
if (dialog.ShowDialog() == DialogResult.OK)
{
vmdFileName.Text = dialog.FileName;
var f = new FileInfo(vmdFileName.Text);
saveVmdName.Text = Path.Combine(f.DirectoryName, f.Name.Replace(f.Extension, "_baked") + f.Extension);
}
}
private void saveRef_Click(object sender, EventArgs e)
{
var dialog = new SaveFileDialog();
dialog.Filter = "VMDファイル|*.vmd";
if (dialog.ShowDialog() == DialogResult.OK)
{
saveVmdName.Text = dialog.FileName;
}
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace MMDIKBakerGUI
{
static class Program
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}

View File

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。
// アセンブリに関連付けられている情報を変更するには、
// これらの属性値を変更してください。
[assembly: AssemblyTitle("MMDIKBakerGUI")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("MMDIKBakerGUI")]
[assembly: AssemblyCopyright("Copyright © 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから
// 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、
// その型の ComVisible 属性を true に設定してください。
[assembly: ComVisible(false)]
// 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です
[assembly: Guid("0339f748-b7cb-4486-bae7-b330d0ac3512")]
// アセンブリのバージョン情報は、以下の 4 つの値で構成されています:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を
// 既定値にすることができます:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -0,0 +1,71 @@
//------------------------------------------------------------------------------
// <auto-generated>
// このコードはツールによって生成されました。
// ランタイム バージョン:4.0.30319.269
//
// このファイルへの変更は、以下の状況下で不正な動作の原因になったり、
// コードが再生成されるときに損失したりします
// </auto-generated>
//------------------------------------------------------------------------------
namespace MMDIKBakerGUI.Properties
{
/// <summary>
/// ローカライズされた文字列などを検索するための、厳密に型指定されたリソース クラスです。
/// </summary>
// このクラスは StronglyTypedResourceBuilder クラスが ResGen
// または Visual Studio のようなツールを使用して自動生成されました。
// メンバーを追加または削除するには、.ResX ファイルを編集して、/str オプションと共に
// ResGen を実行し直すか、または VS プロジェクトをビルドし直します。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// このクラスに使用される、キャッシュされた ResourceManager のインスタンスを返します。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MMDIKBakerGUI.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 厳密に型指定されたこのリソース クラスを使用して、すべての検索リソースに対し、
/// 現在のスレッドの CurrentUICulture プロパティをオーバーライドします。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}

View File

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.269
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace MMDIKBakerGUI.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}

View File

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@ -0,0 +1,62 @@
using System;
using System.Collections.Generic;
using System.Text;
using MMDIKBakerLibrary.Model;
using MMDIKBakerLibrary.Motion;
using MMDMotion2 = MikuMikuDance.Motion.Motion2.MMDMotion2;
using MMDModel1 = MikuMikuDance.Model.Ver1.MMDModel1;
namespace MMDIKBakerLibrary
{
public class IKBaker
{
public static MMDMotion2 bake(MMDMotion2 motion, MMDModel1 model)
{
//ボーン取得
MMDBoneManager boneManager = ModelConverter.BuildBoneManager(model);
//ベイク前のモーションとベイク後のモーションを準備
MMDMotion beforeMotion = MotionConverter.Convert(motion);
MMDMotion afterMotion = CreateAfterMotionPrototype(beforeMotion, boneManager);
//アニメーションプレイヤーを作成
AnimationPlayer player = new AnimationPlayer(boneManager);
player.SetMotion(beforeMotion);
//ベイクしていく
uint frameNo = 0;
bool ExitFlag = false;
while (!ExitFlag)
{
ExitFlag = !player.Update();
//ボーンのグローバル行列更新
boneManager.CalcGlobalTransform();
//IK更新
boneManager.CalcIK();
//ベイク
boneManager.bake(frameNo, afterMotion);
++frameNo;
}
//元のMMDMotion2に直して返却
return MotionConverter.Convert(afterMotion, motion.ModelName);
}
private static MMDMotion CreateAfterMotionPrototype(MMDMotion beforeMotion, MMDBoneManager boneManager)
{
//ベイク対象外の情報をコピー
MMDMotion result = new MMDMotion();
//表情は参照をコピーしておく
result.FaceFrames = beforeMotion.FaceFrames;
//ボーンは必要分だけ参照をコピー
result.BoneFrames = new Dictionary<string, List<MMDBoneKeyFrame>>();
foreach (KeyValuePair<string, List<MMDBoneKeyFrame>> boneSet in beforeMotion.BoneFrames)
{
if (!boneManager.IsUnderIK(boneSet.Key))
{
result.BoneFrames.Add(boneSet.Key, boneSet.Value);
}
else
{
result.BoneFrames.Add(boneSet.Key, new List<MMDBoneKeyFrame>());
}
}
return result;
}
}
}

View File

@ -0,0 +1,61 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace MMDIKBakerLibrary.Misc
{
struct BezierCurve
{
internal const float Epsilon = 1.0e-3f;
/// <summary>
/// ベジェ曲線に用いる点1
/// </summary>
public Vector2 v1;
/// <summary>
/// ベジェ曲線に用いる点2
/// </summary>
public Vector2 v2;
/// <summary>
/// 進行度合から移行度合を取得
/// </summary>
/// <param name="Progress">進行度合</param>
/// <returns>移行度合</returns>
public float Evaluate(float Progress)
{
//ニュートン法による近似
float t = MathHelper.Clamp(Progress, 0f, 1f);
float dt;
do
{
dt = -(fx(t) - Progress) / dfx(t);
if (float.IsNaN(dt))
break;
t += MathHelper.Clamp(dt, -1f, 1f);//大幅に移動して別の解に到達するのを防止する用
} while (Math.Abs(dt) > Epsilon);
return MathHelper.Clamp(fy(t), 0f, 1f);//念のため、0-1の間に収まるようにした
}
//fy(t)を計算する関数
private float fy(float t)
{
//fy(t)=(1-t)^3*0+3*(1-t)^2*t*v1.y+3*(1-t)*t^2*v2.y+t^3*1
return 3 * (1 - t) * (1 - t) * t * v1.Y + 3 * (1 - t) * t * t * v2.Y + t * t * t;
}
//fx(t)を計算する関数
float fx(float t)
{
//fx(t)=(1-t)^3*0+3*(1-t)^2*t*v1.x+3*(1-t)*t^2*v2.x+t^3*1
return 3 * (1 - t) * (1 - t) * t * v1.X + 3 * (1 - t) * t * t * v2.X + t * t * t;
}
//dfx/dtを計算する関数
float dfx(float t)
{
//dfx(t)/dt=-6(1-t)*t*v1.x+3(1-t)^2*v1.x-3t^2*v2.x+6(1-t)*t*v2.x+3t^2
return -6 * (1 - t) * t * v1.X + 3 * (1 - t) * (1 - t) * v1.X
- 3 * t * t * v2.X + 6 * (1 - t) * t * v2.X + 3 * t * t;
}
}
}

View File

@ -0,0 +1,123 @@
using System;
using System.Collections.Generic;
using System.Text;
using MMDIKBakerLibrary.Model;
namespace MMDIKBakerLibrary.Misc
{
/// <summary>
/// CCD-IKソルバー
/// </summary>
/// <remarks>Cyclic-Coordinate-Descent(CCD)法によるIK計算クラス</remarks>
class CCDSolver : IIKSolver
{
const double errToleranceSq = 1.0e-8f;
/// <summary>
/// IKのソルブ
/// </summary>
/// <param name="ik">対象IK</param>
/// <param name="BoneManager">ボーンマネージャ</param>
/// <returns>呼び出し側でUpdateGlobalをもう一度呼ぶ場合はtrue</returns>
public bool Solve(MMDIK ik, MMDBoneManager BoneManager)
{
#if SlimDX
Vector4 localTargetPos = Vector4.Zero;
Vector4 localEffectorPos = Vector4.Zero;
#else
Vector3 localTargetPos = Vector3.Zero;
Vector3 localEffectorPos = Vector3.Zero;
#endif
//エフェクタとなるボーンを取得
MMDBone effector = ik.IKTargetBone;
//IK対象のボーンのGlobalを更新(別のIK影響下のボーンからIKチェインが出ている場合があるので)
Matrix local;
for (int i = ik.IKChildBones.Count - 1; i >= 0; --i)
{//順番に親子関係になっている。(Processorでチェックかけてある
//GlobalTransformを仮更新
int parentBone = ik.IKChildBones[i].SkeletonHierarchy;
ik.IKChildBones[i].LocalTransform.CreateMatrix(out local);
Matrix.Multiply(ref local, ref BoneManager[parentBone].GlobalTransform, out ik.IKChildBones[i].GlobalTransform);
}
effector.LocalTransform.CreateMatrix(out local);
Matrix.Multiply(ref local, ref BoneManager[effector.SkeletonHierarchy].GlobalTransform, out effector.GlobalTransform);
//ターゲット位置の取得
Vector3 targetPos;
Matrix.GetTranslation(ref ik.IKBone.GlobalTransform, out targetPos);
//最大ループ回数分ループ
for (int it = 0; it < ik.Iteration; ++it)
{
for (int nodeIndex = 0; nodeIndex < ik.IKChildBones.Count; ++nodeIndex)
{//子ノードを子から順番に……
MMDBone node = ik.IKChildBones[nodeIndex];
//エフェクタの位置
Vector3 effectorPos;
Matrix.GetTranslation(ref effector.GlobalTransform, out effectorPos);
// 注目ノードの位置の取得
Vector3 jointPos;
Matrix.GetTranslation(ref node.GlobalTransform, out jointPos);
// ワールド座標系から注目ノードの局所座標系への変換
Matrix invCoord;
Matrix.Invert(ref node.GlobalTransform, out invCoord);
// 各ベクトルの座標変換を行い、検索中のボーンi基準の座標系にする
// (1) 注目ノード→エフェクタ位置へのベクトル(a)(注目ノード)
Vector3.Transform(ref effectorPos, ref invCoord, out localEffectorPos);
// (2) 基準関節i→目標位置へのベクトル(b)(ボーンi基準座標系)
Vector3.Transform(ref targetPos, ref invCoord, out localTargetPos);
#if SlimDX
//念のため……
// (1) 基準関節→エフェクタ位置への方向ベクトル
Vector3 basis2Effector = Vector3.Normalize(new Vector3(localEffectorPos.X, localEffectorPos.Y, localEffectorPos.Z));
// (2) 基準関節→目標位置への方向ベクトル
Vector3 basis2Target = Vector3.Normalize(new Vector3(localTargetPos.X, localTargetPos.Y, localTargetPos.Z));
#else
// (1) 基準関節→エフェクタ位置への方向ベクトル
Vector3 basis2Effector = Vector3.Normalize(localEffectorPos);
// (2) 基準関節→目標位置への方向ベクトル
Vector3 basis2Target = Vector3.Normalize(localTargetPos);
#endif
// 回転角
float rotationDotProduct = (float)Vector3.Dot(basis2Effector, basis2Target);
float rotationAngle = (float)Math.Acos(rotationDotProduct);
//回転量制限をかける
if (rotationAngle > MathHelper.Pi * ik.ControlWeight * (nodeIndex + 1))
rotationAngle = MathHelper.Pi * ik.ControlWeight * (nodeIndex + 1);
if (rotationAngle < -MathHelper.Pi * ik.ControlWeight * (nodeIndex + 1))
rotationAngle = -MathHelper.Pi * ik.ControlWeight * (nodeIndex + 1);
// 回転軸
Vector3 rotationAxis = Vector3.Cross(basis2Effector, basis2Target);
BoneManager.IKLimitter.Adjust(node.Name, ref rotationAxis);
rotationAxis.Normalize();
if (!float.IsNaN(rotationAngle) && rotationAngle > 1.0e-3f && !rotationAxis.NaN)
{
// 関節回転量の補正
Quaternion subRot = Quaternion.CreateFromAxisAngle(rotationAxis, (decimal)rotationAngle);
Quaternion.Multiply(ref subRot, ref node.LocalTransform.Rotation, out node.LocalTransform.Rotation);
BoneManager.IKLimitter.Adjust(node);
//関係ノードのグローバル座標更新
for (int i = nodeIndex; i >= 0; --i)
{//順番に親子関係になっている。(Processorでチェックかけてある
//GlobalTransformを仮更新
int parentBone = ik.IKChildBones[i].SkeletonHierarchy;
ik.IKChildBones[i].LocalTransform.CreateMatrix(out local);
Matrix.Multiply(ref local, ref BoneManager[parentBone].GlobalTransform, out ik.IKChildBones[i].GlobalTransform);
}
effector.LocalTransform.CreateMatrix(out local);
Matrix.Multiply(ref local, ref BoneManager[effector.SkeletonHierarchy].GlobalTransform, out effector.GlobalTransform);
}
}
}
return true;//UpdateGlobalをもう一度呼ぶ
//IKチェインにぶら下がってるIK影響外のボーンを更新するため。
}
}
}

View File

@ -0,0 +1,273 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace MMDIKBakerLibrary.Misc
{
/// <summary>
/// 回転制限クラス
/// </summary>
public class RotationLimit
{
/// <summary>
/// 最大回転
/// </summary>
/// <remarks>X回転、Y回転、Z回転制限</remarks>
public float[] MaxRot { get; protected set; }
/// <summary>
/// 最小回転
/// </summary>
/// <remarks>X回転、Y回転、Z回転制限</remarks>
public float[] MinRot { get; protected set; }
/// <summary>
/// 角度の反射調整機能使用フラグ
/// </summary>
/// <remarks>IKのCCDソルブは足のIKがになる感じの解を出してくるので、反射してやると上手くいくっぽい</remarks>
public bool[] Mirror { get; private set; }
/// <summary>
/// 角度の反射調整の反発係数
/// </summary>
public float[] Restitution { get; private set; }
/// <summary>
/// 角速度の"粘性"係数。IKのソルブの過程で解が"飛ぶ"のを防ぐために設定
/// </summary>
public float[] Stickness { get; private set; }
/// <summary>
/// 既定のコンストラクタ
/// </summary>
public RotationLimit()
{
MaxRot = new float[3];
MinRot = new float[3];
Mirror = new bool[3];
Restitution = new float[3];
for (int i = 0; i < 3; i++)
{
MaxRot[i] = MathHelper.Pi;
MinRot[i] = -MathHelper.Pi;
Mirror[i] = false;
Restitution[i] = 0.5f;
}
}
/// <summary>
/// 指定した角度をアジャストする
/// </summary>
/// <param name="value">回転角</param>
/// <param name="index">回転軸</param>
/// <returns>アジャスト済み角度</returns>
public float Adjust(float value, int index)
{
if (MinRot[index] > MaxRot[index])
{//角度が逆なら入れ替えておく
float temp = MinRot[index];
MinRot[index] = MaxRot[index];
MaxRot[index] = temp;
}
if (MaxRot[index] < value)
{
if (Mirror[index])
return MaxRot[index] * (1 + Restitution[index]) - value * Restitution[index];
else
return MaxRot[index];
}
else if (MinRot[index] > value)
{
if (Mirror[index])
return MinRot[index] * (1 + Restitution[index]) - value * Restitution[index];
else
return MinRot[index];
}
else
return value;
}
}
/// <summary>
/// IK計算時の回転軸制限クラス
/// </summary>
class RotationAxisLimit
{
/// <summary>
/// 回転制限を行う軸(X,Y,Z)
/// </summary>
public bool[] Limits { get; private set; }
/// <summary>
/// 既定のコンストラクタ
/// </summary>
public RotationAxisLimit()
{
Limits = new bool[3] { false, false, false };
}
/// <summary>
/// 回転軸制限の適用
/// </summary>
/// <param name="rotationAxis"></param>
public void Adjust(ref Vector3 rotationAxis)
{
if (Limits[0])
{
rotationAxis.X = 0;
}
if (Limits[1])
{
rotationAxis.Y = 0;
}
if (Limits[2])
{
rotationAxis.Z = 0;
}
}
}
/// <summary>
/// 標準IKLimitter
/// </summary>
class DefaltIKLimitter : IIKLimitter
{
/// <summary>
/// 総合稼働軸制限一覧
/// </summary>
/// <remarks>ボーン名マッチング用の正規表現オブジェクトと許可回転軸(親ボーン基準)</remarks>
Dictionary<string, RotationLimit> TotalRotationLimits { get; set; }
/// <summary>
/// IK補正回転軸制限一覧
/// </summary>
/// <remarks>IK計算をする際の回転軸の制限</remarks>
Dictionary<string, RotationAxisLimit> RotationAxisLimits { get; set; }
/// <summary>
/// 既定のコンストラクタ
/// </summary>
public DefaltIKLimitter()
{
//総合稼働制限
TotalRotationLimits = new Dictionary<string, RotationLimit>();
RotationLimit limit;
limit = new RotationLimit();
limit.MaxRot[0] = MathHelper.Pi;
limit.MinRot[0] = MathHelper.ToRadians(3f);//3度ぐらい制限を設けてやると上手くいく。
limit.MinRot[1] = 0;
limit.MaxRot[1] = 0;
limit.MinRot[2] = 0;
limit.MaxRot[2] = 0;
limit.Mirror[0] = true;
limit.Restitution[0] = 0.99f;
TotalRotationLimits.Add("左ひざ", limit);
limit = new RotationLimit();
limit.MaxRot[0] = MathHelper.Pi;
limit.MinRot[0] = MathHelper.ToRadians(3f);//3度ぐらい制限を設けてやると上手くいく。
limit.MinRot[1] = 0;
limit.MaxRot[1] = 0;
limit.MinRot[2] = 0;
limit.MaxRot[2] = 0;
limit.Mirror[0] = true;
limit.Restitution[0] = 0.99f;
TotalRotationLimits.Add("右ひざ", limit);
RotationAxisLimits = new Dictionary<string, RotationAxisLimit>();
RotationAxisLimit axisLimit;
axisLimit = new RotationAxisLimit();
axisLimit.Limits[0] = false;
axisLimit.Limits[1] = true;
axisLimit.Limits[2] = false;
RotationAxisLimits.Add("左足", axisLimit);
axisLimit = new RotationAxisLimit();
axisLimit.Limits[0] = false;
axisLimit.Limits[1] = true;
axisLimit.Limits[2] = false;
RotationAxisLimits.Add("右足", axisLimit);
//IKのソルブ及びそれの調整計算に関するメモ
//上記数値調整計算及び各種数値設定はMMDの元コード推定(リバースエンジニアリング、逆コンパイラとかはしてないからRエンジニアって言うのか分からないけど)する過程で落ち着いている今のところの解です。
//ほんとの解法は樋口さんが知ってるんだろうけどw
//解法は今のところIK-CCD法がMMDにとって最適だと考えてます。
//理由として
//・ひざのボーンにIKソルブ時の角度制限が入っているっぽいので、ソルブにボーンの角度を扱う必要があること
//・高速解法が必要であること(MMDが非常に軽いことと、イテレーションの存在とその回数を考えると、軽いアルゴリズムを使ってないとつじつまが合わない)
//が上げられます
//そこで、CCD,Particleかの二つで、角度を使い易かったCCDを選びました。
//ひざの角度調整はCCDのクセを抑える理由もあって工夫してあります。
//CCDのクセとして、正しい解がだとしたら、という解を出してくることが多いという問題があります。(><は足ですw)
//そのために"反発係数"なる謎なパラメータを付けてますw
//また、解がほとんどまっすぐな解を出す際に、|な感じの解で固定されてしまう問題があるため、3度ぐらい下限を入れています(どうも、MMDの方も入れてるっぽいけど、よく分からない……)
//これは現在の推定結果です。もっと再現性が高い解があれば、改造して、ぜひ教えてください
//2012/01/19追記分
//IK計算の本家MMDとの微妙なズレを発見。
//場所は付属モーション(true my heart)の腰振りのあと\(^o^)/な動作に移行する腰振りのところ
//足の動きが微妙に本家とズレていることを発見
//原因を調査したところ、右足、左足のY軸回転の動きがIKの計算により補正されてしまうのが原因と判明
//そのため、新たにaxisLimit機能を追加し、右足、左足がIK計算でY軸回転を補正されないようにした。
//これにより他のモーションに影響が出ないかは現在調査中
}
#region IIKLimitter
/// <summary>
/// 制限の適用
/// </summary>
/// <param name="bone">対象となるボーン</param>
public void Adjust(Model.MMDBone bone)
{
if (!TotalRotationLimits.ContainsKey(bone.Name))
return;
float YRot, XRot, ZRot;
int FactoringType = 0;
//if (MMDMath.FactoringQuaternionZXY(rot, out ZRot, out XRot, out YRot))
//まずはXYZで分解
if (!MathHelper.FactoringQuaternionXYZ(bone.LocalTransform.Rotation, out XRot, out YRot, out ZRot))
{//ジンバルロック対策
//YZXで分解
if (!MathHelper.FactoringQuaternionYZX(bone.LocalTransform.Rotation, out YRot, out ZRot, out XRot))
{
//ZXYで分解
MathHelper.FactoringQuaternionZXY(bone.LocalTransform.Rotation, out ZRot, out XRot, out YRot);
FactoringType = 2;
}
else
FactoringType = 1;
}
else
FactoringType = 0;
RotationLimit lim = TotalRotationLimits[bone.Name];
XRot = lim.Adjust(XRot, 0);
YRot = lim.Adjust(YRot, 1);
ZRot = lim.Adjust(ZRot, 2);
if (FactoringType == 0)
bone.LocalTransform.Rotation = Quaternion.CreateFromRotationMatrix(
Matrix.CreateRotationX(XRot) *
Matrix.CreateRotationY(YRot) *
Matrix.CreateRotationZ(ZRot));
else if (FactoringType == 1)
bone.LocalTransform.Rotation = Quaternion.CreateFromRotationMatrix(
Matrix.CreateRotationY(YRot) *
Matrix.CreateRotationZ(ZRot) *
Matrix.CreateRotationX(XRot));
else
bone.LocalTransform.Rotation = Quaternion.CreateFromYawPitchRoll(YRot, XRot, ZRot);
}
/// <summary>
/// 回転軸制限の適用
/// </summary>
/// <param name="boneName">ボーン名</param>
/// <param name="rotationAxis">回転軸</param>
public void Adjust(string boneName, ref Vector3 rotationAxis)
{
RotationAxisLimit limit;
if (RotationAxisLimits.TryGetValue(boneName, out limit))
{
limit.Adjust(ref rotationAxis);
}
}
#endregion
}
}

View File

@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Text;
using MMDIKBakerLibrary.Model;
namespace MMDIKBakerLibrary.Misc
{
interface IIKLimitter
{
/// <summary>
/// 制限の適用
/// </summary>
/// <param name="bone">対象となるボーン</param>
void Adjust(MMDBone bone);
/// <summary>
/// 回転軸制限の適用
/// </summary>
/// <param name="boneName">対象となるボーン名</param>
/// <param name="rotationAxis">回転軸</param>
void Adjust(string boneName, ref Vector3 rotationAxis);
}
}

View File

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Text;
using MMDIKBakerLibrary.Model;
namespace MMDIKBakerLibrary.Misc
{
interface IIKSolver
{
/// <summary>
/// IKのソルブ
/// </summary>
/// <param name="ik">対象IK</param>
/// <param name="BoneManager">ボーンマネージャ</param>
/// <returns>呼び出し側でUpdateGlobalをもう一度呼ぶ場合はtrue</returns>
bool Solve(MMDIK ik, MMDBoneManager BoneManager);
}
}

View File

@ -0,0 +1,224 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace MMDIKBakerLibrary.Misc
{
static class MathHelper
{
public static float Pi { get { return (float)Math.PI; } }
public static float PiOver2 { get { return Pi / 2; } }
public static decimal Clamp(decimal value, decimal min, decimal max)
{
return Math.Max(min, Math.Min(value, max));
}
public static float Clamp(float value, float min, float max)
{
return Math.Max(min, Math.Min(value, max));
}
public static decimal Lerp(decimal value1, decimal value2, decimal amount)
{
if (value1 == value2)
{
return value1;
}
return value1 + (value2 - value1) * Clamp(amount, 0m, 1m);
}
public static float Lerp(float value1, float value2, float amount)
{
if (value1 == value2)
{
return value1;
}
return value1 + (value2 - value1) * Clamp(amount, 0, 1);
}
public static BezierCurve[] CreateIdentityCurve()
{
BezierCurve[] result = new BezierCurve[4];
for (int i = 0; i < result.Length; i++)
{
result[i].v1 = new Vector2 { X = 0.25f, Y = 0.25f };
result[i].v2 = new Vector2 { X = 0.75f, Y = 0.75f };
}
return result;
}
public static int GetMaxArgIndex(params decimal[] argument)
{
decimal value = decimal.MinValue;
int index = -1;
for (int i = 0; i < argument.Length; ++i)
{
if (argument[i] > value)
{
index = i;
value = argument[i];
}
}
return index;
}
public static Vector3 Round(Vector3 vector, int decimals)
{
return new Vector3(Math.Round(vector.X, decimals),Math.Round(vector.Y, decimals),Math.Round(vector.Z, decimals));
}
public static Quaternion Round(Quaternion rotation, int decimals)
{
return new Quaternion(Math.Round(rotation.X, decimals), Math.Round(rotation.Y, decimals), Math.Round(rotation.Z, decimals), Math.Round(rotation.W, decimals));
}
internal static Matrix Round(Matrix matrix, int decimals)
{
return new Matrix()
{
M11 = Math.Round(matrix.M11, decimals),
M12 = Math.Round(matrix.M12, decimals),
M13 = Math.Round(matrix.M13, decimals),
M14 = Math.Round(matrix.M14, decimals),
M21 = Math.Round(matrix.M21, decimals),
M22 = Math.Round(matrix.M22, decimals),
M23 = Math.Round(matrix.M23, decimals),
M24 = Math.Round(matrix.M24, decimals),
M31 = Math.Round(matrix.M31, decimals),
M32 = Math.Round(matrix.M32, decimals),
M33 = Math.Round(matrix.M33, decimals),
M34 = Math.Round(matrix.M34, decimals),
M41 = Math.Round(matrix.M41, decimals),
M42 = Math.Round(matrix.M42, decimals),
M43 = Math.Round(matrix.M43, decimals),
M44 = Math.Round(matrix.M44, decimals)
};
}
public static float ToRadians(float degrees)
{
return degrees * 0.01745329f;
}
/// <summary>
/// クォータニオンをYaw(Y回転), Pitch(X回転), Roll(Z回転)に分解する関数
/// </summary>
/// <param name="input">分解するクォータニオン</param>
/// <param name="ZRot">Z軸回転</param>
/// <param name="XRot">X軸回転(-PI/2PI/2)</param>
/// <param name="YRot">Y軸回転</param>
/// <returns>ジンバルロックが発生した時はfalse。ジンバルロックはX軸回転で発生</returns>
public static bool FactoringQuaternionZXY(Quaternion input, out float ZRot, out float XRot, out float YRot)
{
//クォータニオンの正規化
Quaternion inputQ = new Quaternion(input.X, input.Y, input.Z, input.W);
inputQ.Normalize();
//マトリクスを生成する
Matrix rot;
Matrix.CreateFromQuaternion(ref inputQ, out rot);
//ヨー(X軸周りの回転)を取得
if ((double)rot.M32 > 1 - 1.0e-4 || (double)rot.M32 < -1 + 1.0e-4)
{//ジンバルロック判定
XRot = (rot.M32 < 0 ? MathHelper.PiOver2 : -MathHelper.PiOver2);
ZRot = 0; YRot = (float)Math.Atan2(-(double)rot.M13, (double) rot.M11);
return false;
}
XRot = -(float)Math.Asin((double)rot.M32);
//ロールを取得
ZRot = (float)Math.Asin((double)rot.M12 / Math.Cos(XRot));
if (float.IsNaN(ZRot))
{//漏れ対策
XRot = (rot.M32 < 0 ? MathHelper.PiOver2 : -MathHelper.PiOver2);
ZRot = 0; YRot = (float)Math.Atan2(-(double)rot.M13, (double)rot.M11);
return false;
}
if (rot.M22 < 0)
ZRot = MathHelper.Pi - ZRot;
//ピッチを取得
YRot = (float)Math.Atan2((double)rot.M31, (double)rot.M33);
return true;
}
/// <summary>
/// クォータニオンをX,Y,Z回転に分解する関数
/// </summary>
/// <param name="input">分解するクォータニオン</param>
/// <param name="XRot">X軸回転</param>
/// <param name="YRot">Y軸回転(-PI/2PI/2)</param>
/// <param name="ZRot">Z軸回転</param>
/// <returns></returns>
public static bool FactoringQuaternionXYZ(Quaternion input, out float XRot, out float YRot, out float ZRot)
{
//クォータニオンの正規化
Quaternion inputQ = new Quaternion(input.X, input.Y, input.Z, input.W);
inputQ.Normalize();
//マトリクスを生成する
Matrix rot;
Matrix.CreateFromQuaternion(ref inputQ, out rot);
//Y軸回りの回転を取得
if ((double)rot.M13 > 1 - 1.0e-4 || (double)rot.M13 < -1 + 1.0e-4)
{//ジンバルロック判定
XRot = 0;
YRot = (rot.M13 < 0 ? MathHelper.PiOver2 : -MathHelper.PiOver2);
ZRot = -(float)Math.Atan2(-(double)rot.M21, (double)rot.M22);
return false;
}
YRot = -(float)Math.Asin((double)rot.M13);
//X軸回りの回転を取得
XRot = (float)Math.Asin((double)rot.M23 / Math.Cos(YRot));
if (float.IsNaN(XRot))
{//ジンバルロック判定(漏れ対策)
XRot = 0;
YRot = (rot.M13 < 0 ? MathHelper.PiOver2 : -MathHelper.PiOver2);
ZRot = -(float)Math.Atan2(-(double)rot.M21, (double)rot.M22);
return false;
}
if (rot.M33 < 0)
XRot = MathHelper.Pi - XRot;
//Z軸回りの回転を取得
ZRot = (float)Math.Atan2((double)rot.M12, (double)rot.M11);
return true;
}
/// <summary>
/// クォータニオンをY,Z,X回転に分解する関数
/// </summary>
/// <param name="input">分解するクォータニオン</param>
/// <param name="YRot">Y軸回転</param>
/// <param name="ZRot">Z軸回転(-PI/2PI/2)</param>
/// <param name="XRot">X軸回転</param>
/// <returns></returns>
public static bool FactoringQuaternionYZX(Quaternion input, out float YRot, out float ZRot, out float XRot)
{
//クォータニオンの正規化
Quaternion inputQ = new Quaternion(input.X, input.Y, input.Z, input.W);
inputQ.Normalize();
//マトリクスを生成する
Matrix rot;
Matrix.CreateFromQuaternion(ref inputQ, out rot);
//Z軸回りの回転を取得
if ((double)rot.M21 > 1 - 1.0e-4 || (double)rot.M21 < -1 + 1.0e-4)
{//ジンバルロック判定
YRot = 0;
ZRot = (rot.M21 < 0 ? MathHelper.PiOver2 : -MathHelper.PiOver2);
XRot = -(float)Math.Atan2(-(double)rot.M32, (double)rot.M33);
return false;
}
ZRot = -(float)Math.Asin((double)rot.M21);
//Y軸回りの回転を取得
YRot = (float)Math.Asin((double)rot.M31 / Math.Cos(ZRot));
if (float.IsNaN(YRot))
{//ジンバルロック判定(漏れ対策)
YRot = 0;
ZRot = (rot.M21 < 0 ? MathHelper.PiOver2 : -MathHelper.PiOver2);
XRot = -(float)Math.Atan2(-(double)rot.M32, (double)rot.M33);
return false;
}
if (rot.M11 < 0)
YRot = MathHelper.Pi - YRot;
//X軸回りの回転を取得
XRot = (float)Math.Atan2((double)rot.M23, (double)rot.M22);
return true;
}
}
}

View File

@ -0,0 +1,393 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace MMDIKBakerLibrary.Misc
{
struct Matrix
{
public decimal M11;
public decimal M12;
public decimal M13;
public decimal M14;
public decimal M21;
public decimal M22;
public decimal M23;
public decimal M24;
public decimal M31;
public decimal M32;
public decimal M33;
public decimal M34;
public decimal M41;
public decimal M42;
public decimal M43;
public decimal M44;
public static Matrix Identity
{
get
{
return new Matrix { M11 = 1, M12 = 0, M13 = 0, M14 = 0, M21 = 0, M22 = 1, M23 = 0, M24 = 0, M31 = 0, M32 = 0, M33 = 1, M34 = 0, M41 = 0, M42 = 0, M43 = 0, M44 = 1 };
}
}
public Vector3 Translation
{
get
{
Vector3 result;
result.X = this.M41;
result.Y = this.M42;
result.Z = this.M43;
result.NaN = false;
return result;
}
}
public static void CreateTranslation(decimal x, decimal y, decimal z, out Matrix result)
{
result.M11 = 1;
result.M12 = 0;
result.M13 = 0;
result.M14 = 0;
result.M21 = 0;
result.M22 = 1;
result.M23 = 0;
result.M24 = 0;
result.M31 = 0;
result.M32 = 0;
result.M33 = 1;
result.M34 = 0;
result.M41 = x;
result.M42 = y;
result.M43 = z;
result.M44 = 1;
}
public static void Invert(ref Matrix matrix, out Matrix result)
{
decimal temp1 = matrix.M33 * matrix.M44 - matrix.M34 * matrix.M43;
decimal temp2 = matrix.M32 * matrix.M44 - matrix.M34 * matrix.M42;
decimal temp3 = matrix.M32 * matrix.M43 - matrix.M33 * matrix.M42;
decimal temp4 = matrix.M31 * matrix.M44 - matrix.M34 * matrix.M41;
decimal temp5 = matrix.M31 * matrix.M43 - matrix.M33 * matrix.M41;
decimal temp6 = matrix.M31 * matrix.M42 - matrix.M32 * matrix.M41;
decimal temp7 = matrix.M22 * temp1 - matrix.M23 * temp2 + matrix.M24 * temp3;
decimal temp8 = -(matrix.M21 * temp1 - matrix.M23 * temp4 + matrix.M24 * temp5);
decimal temp9 = matrix.M21 * temp2 - matrix.M22 * temp4 + matrix.M24 * temp6;
decimal temp10 = -(matrix.M21 * temp3 - matrix.M22 * temp5 + matrix.M23 * temp6);
decimal temp11 = matrix.M23 * matrix.M44 - matrix.M24 * matrix.M43;
decimal temp12 = matrix.M22 * matrix.M44 - matrix.M24 * matrix.M42;
decimal temp13 = matrix.M22 * matrix.M43 - matrix.M23 * matrix.M42;
decimal temp14 = matrix.M21 * matrix.M44 - matrix.M24 * matrix.M41;
decimal temp15 = matrix.M21 * matrix.M43 - matrix.M23 * matrix.M41;
decimal temp16 = matrix.M21 * matrix.M42 - matrix.M22 * matrix.M41;
decimal temp17 = matrix.M23 * matrix.M34 - matrix.M24 * matrix.M33;
decimal temp18 = matrix.M22 * matrix.M34 - matrix.M24 * matrix.M32;
decimal temp19 = matrix.M22 * matrix.M33 - matrix.M23 * matrix.M32;
decimal temp20 = matrix.M21 * matrix.M34 - matrix.M24 * matrix.M31;
decimal temp21 = matrix.M21 * matrix.M33 - matrix.M23 * matrix.M31;
decimal temp22 = matrix.M21 * matrix.M32 - matrix.M22 * matrix.M31;
decimal det = 1m / (matrix.M11 * temp7 + matrix.M12 * temp8 + matrix.M13 * temp9 + matrix.M14 * temp10);
result.M11 = temp7 * det;
result.M21 = temp8 * det;
result.M31 = temp9 * det;
result.M41 = temp10 * det;
result.M12 = -(matrix.M12 * temp1 - matrix.M13 * temp2 + matrix.M14 * temp3) * det;
result.M22 = (matrix.M11 * temp1 - matrix.M13 * temp4 + matrix.M14 * temp5) * det;
result.M32 = -(matrix.M11 * temp2 - matrix.M12 * temp4 + matrix.M14 * temp6) * det;
result.M42 = (matrix.M11 * temp3 - matrix.M12 * temp5 + matrix.M13 * temp6) * det;
result.M13 = (matrix.M12 * temp11 - matrix.M13 * temp12 + matrix.M14 * temp13) * det;
result.M23 = -(matrix.M11 * temp11 - matrix.M13 * temp14 + matrix.M14 * temp15) * det;
result.M33 = (matrix.M11 * temp12 - matrix.M12 * temp14 + matrix.M14 * temp16) * det;
result.M43 = -(matrix.M11 * temp13 - matrix.M12 * temp15 + matrix.M13 * temp16) * det;
result.M14 = -(matrix.M12 * temp17 - matrix.M13 * temp18 + matrix.M14 * temp19) * det;
result.M24 = (matrix.M11 * temp17 - matrix.M13 * temp20 + matrix.M14 * temp21) * det;
result.M34 = -(matrix.M11 * temp18 - matrix.M12 * temp20 + matrix.M14 * temp22) * det;
result.M44 = (matrix.M11 * temp19 - matrix.M12 * temp21 + matrix.M13 * temp22) * det;
}
public static void Multiply(ref Matrix matrix1, ref Matrix matrix2, out Matrix result)
{
result.M11 = matrix1.M11 * matrix2.M11 + matrix1.M12 * matrix2.M21 + matrix1.M13 * matrix2.M31 + matrix1.M14 * matrix2.M41;
result.M12 = matrix1.M11 * matrix2.M12 + matrix1.M12 * matrix2.M22 + matrix1.M13 * matrix2.M32 + matrix1.M14 * matrix2.M42;
result.M13 = matrix1.M11 * matrix2.M13 + matrix1.M12 * matrix2.M23 + matrix1.M13 * matrix2.M33 + matrix1.M14 * matrix2.M43;
result.M14 = matrix1.M11 * matrix2.M14 + matrix1.M12 * matrix2.M24 + matrix1.M13 * matrix2.M34 + matrix1.M14 * matrix2.M44;
result.M21 = matrix1.M21 * matrix2.M11 + matrix1.M22 * matrix2.M21 + matrix1.M23 * matrix2.M31 + matrix1.M24 * matrix2.M41;
result.M22 = matrix1.M21 * matrix2.M12 + matrix1.M22 * matrix2.M22 + matrix1.M23 * matrix2.M32 + matrix1.M24 * matrix2.M42;
result.M23 = matrix1.M21 * matrix2.M13 + matrix1.M22 * matrix2.M23 + matrix1.M23 * matrix2.M33 + matrix1.M24 * matrix2.M43;
result.M24 = matrix1.M21 * matrix2.M14 + matrix1.M22 * matrix2.M24 + matrix1.M23 * matrix2.M34 + matrix1.M24 * matrix2.M44;
result.M31 = matrix1.M31 * matrix2.M11 + matrix1.M32 * matrix2.M21 + matrix1.M33 * matrix2.M31 + matrix1.M34 * matrix2.M41;
result.M32 = matrix1.M31 * matrix2.M12 + matrix1.M32 * matrix2.M22 + matrix1.M33 * matrix2.M32 + matrix1.M34 * matrix2.M42;
result.M33 = matrix1.M31 * matrix2.M13 + matrix1.M32 * matrix2.M23 + matrix1.M33 * matrix2.M33 + matrix1.M34 * matrix2.M43;
result.M34 = matrix1.M31 * matrix2.M14 + matrix1.M32 * matrix2.M24 + matrix1.M33 * matrix2.M34 + matrix1.M34 * matrix2.M44;
result.M41 = matrix1.M41 * matrix2.M11 + matrix1.M42 * matrix2.M21 + matrix1.M43 * matrix2.M31 + matrix1.M44 * matrix2.M41;
result.M42 = matrix1.M41 * matrix2.M12 + matrix1.M42 * matrix2.M22 + matrix1.M43 * matrix2.M32 + matrix1.M44 * matrix2.M42;
result.M43 = matrix1.M41 * matrix2.M13 + matrix1.M42 * matrix2.M23 + matrix1.M43 * matrix2.M33 + matrix1.M44 * matrix2.M43;
result.M44 = matrix1.M41 * matrix2.M14 + matrix1.M42 * matrix2.M24 + matrix1.M43 * matrix2.M34 + matrix1.M44 * matrix2.M44;
}
public static Matrix operator *(Matrix matrix1, Matrix matrix2)
{
Matrix result;
Matrix.Multiply(ref matrix1, ref matrix2, out result);
return result;
}
public static void CreateScale(ref Vector3 scale, out Matrix result)
{
result.M11 = scale.X;
result.M12 = 0;
result.M13 = 0;
result.M14 = 0;
result.M21 = 0;
result.M22 = scale.Y;
result.M23 = 0;
result.M24 = 0;
result.M31 = 0;
result.M32 = 0;
result.M33 = scale.Z;
result.M34 = 0;
result.M41 = 0;
result.M42 = 0;
result.M43 = 0;
result.M44 = 1;
}
public static void CreateFromQuaternion(Quaternion quaternion, out Matrix result)
{
quaternion.Normalize();
decimal xx = quaternion.X * quaternion.X;
decimal yy = quaternion.Y * quaternion.Y;
decimal zz = quaternion.Z * quaternion.Z;
decimal xy = quaternion.X * quaternion.Y;
decimal yz = quaternion.Y * quaternion.Z;
decimal zx = quaternion.Z * quaternion.X;
decimal xw = quaternion.X * quaternion.W;
decimal yw = quaternion.Y * quaternion.W;
decimal zw = quaternion.Z * quaternion.W;
result.M11 = 1 - 2 * (yy + zz);
result.M12 = 2 * (xy + zw);
result.M13 = 2 * (zx - yw);
result.M14 = 0;
result.M21 = 2 * (xy - zw);
result.M22 = 1 - 2 * (zz + xx);
result.M23 = 2 * (yz + xw);
result.M24 = 0;
result.M31 = 2 * (zx + yw);
result.M32 = 2 * (yz - xw);
result.M33 = 1 - 2 * (yy + xx);
result.M34 = 0;
result.M41 = 0;
result.M42 = 0;
result.M43 = 0;
result.M44 = 1;
}
public static void CreateTranslation(ref Vector3 position, out Matrix result)
{
result.M11 = 1;
result.M12 = 0;
result.M13 = 0;
result.M14 = 0;
result.M21 = 0;
result.M22 = 1;
result.M23 = 0;
result.M24 = 0;
result.M31 = 0;
result.M32 = 0;
result.M33 = 1;
result.M34 = 0;
result.M41 = position.X;
result.M42 = position.Y;
result.M43 = position.Z;
result.M44 = 1;
}
public void Decompose(out Vector3 scale, out Quaternion rotation, out Vector3 translation)
{
//移動行列の切り出し
translation = new Vector3(M41, M42, M43);
//スケールの切り出しと回転行列の作成
scale = new Vector3();
Matrix rotMatrix = new Matrix();
Vector3 temp;
temp = new Vector3(M11, M12, M13);
scale.X = temp.Length();
if (scale.X > 0)
{
rotMatrix.M11 = M11 / scale.X;
rotMatrix.M12 = M12 / scale.X;
rotMatrix.M13 = M13 / scale.X;
}
temp = new Vector3(M21, M22, M23);
scale.Y = temp.Length();
if (scale.X > 0)
{
rotMatrix.M21 = M21 / scale.Y;
rotMatrix.M22 = M22 / scale.Y;
rotMatrix.M23 = M23 / scale.Y;
}
temp = new Vector3(M31, M32, M33);
scale.Z = temp.Length();
if (scale.X > 0)
{
rotMatrix.M31 = M31 / scale.Z;
rotMatrix.M32 = M32 / scale.Z;
rotMatrix.M33 = M33 / scale.Z;
}
if (scale.Length() == 0)
{
throw new ArgumentException("scale成分が不明");
}
//回転行列をクォータニオンに変換する
rotation = new Quaternion();
decimal w = (decimal)Math.Sqrt((double)Math.Max(rotMatrix.M11 + rotMatrix.M22 + rotMatrix.M33 + 1, 0)) / 2;
decimal tempX = (decimal)Math.Sqrt((double)Math.Max(rotMatrix.M11 - rotMatrix.M22 - rotMatrix.M33 + 1, 0)) / 2;
decimal tempY = (decimal)Math.Sqrt((double)Math.Max(-rotMatrix.M11 + rotMatrix.M22 - rotMatrix.M33 + 1, 0)) / 2;
decimal tempZ = (decimal)Math.Sqrt((double)Math.Max(-rotMatrix.M11 - rotMatrix.M22 + rotMatrix.M33 + 1, 0)) / 2;
int MaxIndex = MathHelper.GetMaxArgIndex(tempX, tempY, tempZ, w);
switch (MaxIndex)
{
case 0://x
rotation.X = tempX;
rotation.Y = (rotMatrix.M12 + rotMatrix.M21) / (4 * Math.Abs(tempX));
rotation.Z = (rotMatrix.M31 + rotMatrix.M13) / (4 * Math.Abs(tempX));
rotation.W = (rotMatrix.M23 - rotMatrix.M32) / (4 * Math.Abs(tempX));
break;
case 1:
rotation.X = (rotMatrix.M12 + rotMatrix.M21) / (4 * Math.Abs(tempY));
rotation.Y = tempY;
rotation.Z = (rotMatrix.M23 + rotMatrix.M32) / (4 * Math.Abs(tempY));
rotation.W = (rotMatrix.M31 - rotMatrix.M13) / (4 * Math.Abs(tempY));
break;
case 2:
rotation.X = (rotMatrix.M31 + rotMatrix.M13) / (4 * Math.Abs(tempZ));
rotation.Y = (rotMatrix.M23 + rotMatrix.M32) / (4 * Math.Abs(tempZ));
rotation.Z = tempZ;
rotation.W = (rotMatrix.M12 - rotMatrix.M21) / (4 * Math.Abs(tempZ));
break;
default://w
rotation.X = (rotMatrix.M23 - rotMatrix.M32) / (4 * Math.Abs(w));
rotation.Y = (rotMatrix.M31 - rotMatrix.M13) / (4 * Math.Abs(w));
rotation.Z = (rotMatrix.M12 - rotMatrix.M21) / (4 * Math.Abs(w));
rotation.W = w;
break;
}
}
public static void Compose(Vector3 scale,Quaternion rotation, Vector3 translation, out Matrix result)
{
Matrix scaleMat, rotateMat, translationMat;
Matrix.CreateScale(ref scale, out scaleMat);
Matrix.CreateFromQuaternion(rotation, out rotateMat);
Matrix.CreateTranslation(ref translation, out translationMat);
Matrix temp;
Multiply(ref scaleMat, ref rotateMat, out temp);
Multiply(ref temp, ref translationMat, out result);
}
internal static void GetTranslation(ref Matrix matrix, out Vector3 trans)
{
trans = matrix.Translation;
}
public static Matrix CreateRotationX(float radians)
{
Matrix result;
decimal single1 = (decimal)Math.Cos((double)radians);
decimal single2 = (decimal)Math.Sin((double)radians);
result.M11 = 1;
result.M12 = 0;
result.M13 = 0;
result.M14 = 0;
result.M21 = 0;
result.M22 = single1;
result.M23 = single2;
result.M24 = 0;
result.M31 = 0;
result.M32 = -single2;
result.M33 = single1;
result.M34 = 0;
result.M41 = 0;
result.M42 = 0;
result.M43 = 0;
result.M44 = 1;
return result;
}
public static Matrix CreateRotationY(float radians)
{
Matrix result;
decimal single1 = (decimal)Math.Cos((double)radians);
decimal single2 = (decimal)Math.Sin((double)radians);
result.M11 = single1;
result.M12 = 0;
result.M13 = -single2;
result.M14 = 0;
result.M21 = 0;
result.M22 = 1;
result.M23 = 0;
result.M24 = 0;
result.M31 = single2;
result.M32 = 0;
result.M33 = single1;
result.M34 = 0;
result.M41 = 0;
result.M42 = 0;
result.M43 = 0;
result.M44 = 1;
return result;
}
public static Matrix CreateRotationZ(float radians)
{
Matrix result;
decimal single1 = (decimal)Math.Cos((double)radians);
decimal single2 = (decimal)Math.Sin((double)radians);
result.M11 = single1;
result.M12 = single2;
result.M13 = 0;
result.M14 = 0;
result.M21 = -single2;
result.M22 = single1;
result.M23 = 0;
result.M24 = 0;
result.M31 = 0;
result.M32 = 0;
result.M33 = 1;
result.M34 = 0;
result.M41 = 0;
result.M42 = 0;
result.M43 = 0;
result.M44 = 1;
return result;
}
public static void CreateFromQuaternion(ref Quaternion quaternion, out Matrix result)
{
decimal xx = quaternion.X * quaternion.X;
decimal yy = quaternion.Y * quaternion.Y;
decimal zz = quaternion.Z * quaternion.Z;
decimal xy = quaternion.X * quaternion.Y;
decimal zw = quaternion.Z * quaternion.W;
decimal zx = quaternion.Z * quaternion.X;
decimal yw = quaternion.Y * quaternion.W;
decimal yz = quaternion.Y * quaternion.Z;
decimal xw = quaternion.X * quaternion.W;
result.M11 = 1 - 2 * (yy + zz);
result.M12 = 2 * (xy + zw);
result.M13 = 2 * (zx - yw);
result.M14 = 0;
result.M21 = 2 * (xy - zw);
result.M22 = 1 - 2 * (zz + xx);
result.M23 = 2 * (yz + xw);
result.M24 = 0;
result.M31 = 2 * (zx + yw);
result.M32 = 2 * (yz - xw);
result.M33 = 1 - 2 * (yy + xx);
result.M34 = 0;
result.M41 = 0;
result.M42 = 0;
result.M43 = 0;
result.M44 = 1;
}
}
}

View File

@ -0,0 +1,123 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace MMDIKBakerLibrary.Misc
{
struct Quaternion
{
public decimal X;
public decimal Y;
public decimal Z;
public decimal W;
public static Quaternion Identity { get { return new Quaternion(0, 0, 0, 1); } }
public Quaternion(decimal x, decimal y, decimal z, decimal w)
{
X = x; Y = y; Z = z; W = w;
}
public static void Slerp(ref Quaternion quaternion1, ref Quaternion quaternion2, decimal amount, out Quaternion result)
{
decimal rate2;
decimal rate1;
decimal dot = quaternion1.X * quaternion2.X + quaternion1.Y * quaternion2.Y + quaternion1.Z * quaternion2.Z + quaternion1.W * quaternion2.W;
bool flag = false;
if (dot < 0)
{
flag = true;
dot = -dot;
}
if (dot > 0.999999m)
{
rate1 = 1 - amount;
rate2 = (flag ? -amount : amount);
}
else
{
decimal ph = (decimal)Math.Acos((double)dot);
rate1 = (decimal)Math.Sin((double)((1 - amount) * ph)) * (decimal)(1.0f/(float)Math.Sin((double)ph));
rate2 = (decimal)Math.Sin((double)(amount * ph)) * (decimal)(1.0f/(float)Math.Sin((double)ph));
if (flag)
{
rate2 = -rate2;
}
}
result.X = rate1 * quaternion1.X + rate2 * quaternion2.X;
result.Y = rate1 * quaternion1.Y + rate2 * quaternion2.Y;
result.Z = rate1 * quaternion1.Z + rate2 * quaternion2.Z;
result.W = rate1 * quaternion1.W + rate2 * quaternion2.W;
}
public static Quaternion CreateFromAxisAngle(Vector3 axis, decimal angle)
{
decimal temp = (decimal)Math.Sin((double)angle * 0.5);
Quaternion result;
result.X = axis.X * temp;
result.Y = axis.Y * temp;
result.Z = axis.Z * temp;
result.W = (decimal)Math.Cos((double)angle * 0.5);
return result;
}
public void Normalize()
{
decimal temp = 1 / (decimal)Math.Sqrt((double)(this.X * this.X + this.Y * this.Y + this.Z * this.Z + this.W * this.W));
this.X = this.X * temp;
this.Y = this.Y * temp;
this.Z = this.Z * temp;
this.W = this.W * temp;
}
public static void Multiply(ref Quaternion quaternion1, ref Quaternion quaternion2, out Quaternion result)
{
result.X = quaternion1.X * quaternion2.W + quaternion2.X * quaternion1.W + quaternion1.Y * quaternion2.Z - quaternion1.Z * quaternion2.Y;
result.Y = quaternion1.Y * quaternion2.W + quaternion2.Y * quaternion1.W + quaternion1.Z * quaternion2.X - quaternion1.X * quaternion2.Z;
result.Z = quaternion1.Z * quaternion2.W + quaternion2.Z * quaternion1.W + quaternion1.X * quaternion2.Y - quaternion1.Y * quaternion2.X;
result.W = quaternion1.W * quaternion2.W - (quaternion1.X * quaternion2.X + quaternion1.Y * quaternion2.Y + quaternion1.Z * quaternion2.Z);
}
public static Quaternion CreateFromRotationMatrix(Matrix matrix)
{
decimal diag = matrix.M11 + matrix.M22 + matrix.M33;
Quaternion result = new Quaternion();
if (diag > 0)
{
decimal temp1 = (decimal)Math.Sqrt((double)diag + 1);
result.W = temp1 * 0.5m;
temp1 = 0.5m / temp1;
result.X = (matrix.M23 - matrix.M32) * temp1;
result.Y = (matrix.M31 - matrix.M13) * temp1;
result.Z = (matrix.M12 - matrix.M21) * temp1;
}
else
{
if (matrix.M11 >= matrix.M22 && matrix.M11 >= matrix.M33)
{
decimal temp2 = (decimal)Math.Sqrt((double)(1m + matrix.M11 - matrix.M22 - matrix.M33));
decimal temp3 = 0.5m / temp2;
result.X = 0.5m * temp2;
result.Y = (matrix.M12 + matrix.M21) * temp3;
result.Z = (matrix.M13 + matrix.M31) * temp3;
result.W = (matrix.M23 - matrix.M32) * temp3;
}
}
return result;
}
public static Quaternion CreateFromYawPitchRoll(float yaw, float pitch, float roll)
{
decimal sin_roll = (decimal)Math.Sin((double)roll * 0.5);
decimal cos_roll = (decimal)Math.Cos((double)roll * 0.5);
decimal sin_pitch = (decimal)Math.Sin((double)pitch * 0.5);
decimal cos_pitch = (decimal)Math.Cos((double)pitch * 0.5);
decimal sin_yaw = (decimal)Math.Sin((double)yaw * 0.5);
decimal cos_yaw = (decimal)Math.Cos((double)yaw * 0.5);
Quaternion result;
result.X = cos_yaw * sin_pitch * cos_roll + sin_yaw * cos_pitch * sin_roll;
result.Y = sin_yaw * cos_pitch * cos_roll - cos_yaw * sin_pitch * sin_roll;
result.Z = cos_yaw * cos_pitch * sin_roll - sin_yaw * sin_pitch * cos_roll;
result.W = cos_yaw * cos_pitch * cos_roll + sin_yaw * sin_pitch * sin_roll;
return result;
}
}
}

View File

@ -0,0 +1,160 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace MMDIKBakerLibrary.Misc
{
/// <summary>
/// 拡大、回転、移動の3つを表す変換
/// </summary>
struct SQTTransform
{
#region
/// <summary>
/// 拡大
/// </summary>
public Vector3 Scales;
/// <summary>
/// 回転
/// </summary>
public Quaternion Rotation;
/// <summary>
/// 平行移動
/// </summary>
public Vector3 Translation;
#endregion
/// <summary>
/// SQTTransformを生成
/// </summary>
/// <param name="scales">スケールベクトル</param>
/// <param name="rotation">回転クォータニオン</param>
/// <param name="translation">移動ベクトル</param>
public SQTTransform(Vector3 scales, Quaternion rotation, Vector3 translation)
{
Scales = scales;
Rotation = rotation;
Translation = translation;
}
/// <summary>
/// SQTTransformを生成
/// </summary>
/// <param name="scales">スケールベクトル</param>
/// <param name="rotation">回転クォータニオン</param>
/// <param name="translation">移動ベクトル</param>
/// <param name="result">SQTTransform</param>
public static void Create(ref Vector3 scales, ref Quaternion rotation, ref Vector3 translation, out SQTTransform result)
{
result = new SQTTransform() { Scales = scales, Rotation = rotation, Translation = translation };
}
/// <summary>
/// 指定された行列から生成する
/// </summary>
/// <param name="matrix"></param>
/// <returns></returns>
public static SQTTransform FromMatrix(Matrix matrix)
{
// 行列の分解
Quaternion rotation;
Vector3 translation;
Vector3 scale;
matrix.Decompose(out scale, out rotation, out translation);
return new SQTTransform(scale, rotation, translation);
}
/// <summary>
/// SQTTransformの乗算
/// </summary>
public static void Multiply(ref SQTTransform value1, ref SQTTransform value2, out SQTTransform result)
{
result = new SQTTransform();
// 平行移動の算出
// 拡大→回転
Vector3 temp = new Vector3();
Vector3 newTranslation;
temp.X = value1.Translation.X * value2.Scales.X;
temp.Y = value1.Translation.Y * value2.Scales.Y;
temp.Z = value1.Translation.Z * value2.Scales.Z;
Vector3.Transform(ref temp, ref value2.Rotation, out newTranslation);
newTranslation.X += value2.Translation.X;
newTranslation.Y += value2.Translation.Y;
newTranslation.Z += value2.Translation.Z;
// 回転部分の結合(回転と拡大は独立だったはず……)
Quaternion.Multiply(ref value1.Rotation, ref value2.Rotation,
out result.Rotation);
//拡大部分の結合
result.Scales.X = value1.Scales.X * value2.Scales.X;
result.Scales.Y = value1.Scales.Y * value2.Scales.Y;
result.Scales.Z = value1.Scales.Z * value2.Scales.Z;
result.Translation = newTranslation;
}
internal Matrix CreateMatrix()
{
Matrix result;
CreateMatrix(out result);
return result;
}
/// <summary>
/// マトリックスの生成
/// </summary>
/// <param name="result">マトリックス</param>
public void CreateMatrix(out Matrix result)
{
Matrix scales;
Matrix move;
Matrix rot;
Matrix temp;
Matrix.CreateScale(ref Scales, out scales);
Matrix.CreateTranslation(ref Translation, out move);
Matrix.CreateFromQuaternion(Rotation, out rot);
Matrix.Multiply(ref scales, ref rot, out temp);
Matrix.Multiply(ref temp, ref move, out result);
}
#if false
/// <summary>
/// 恒等SQTTransformを返します
/// </summary>
public static SQTTransform Identity { get { return new SQTTransform(new Vector3(1, 1, 1), Quaternion.Identity, Vector3.Zero); } }
#region
#endregion
/// <summary>
/// 姿勢の線形補間
/// </summary>
/// <param name="pose1">姿勢1</param>
/// <param name="pose2">姿勢2</param>
/// <param name="amount">補完係数(0-1)</param>
/// <param name="result">線形補間された姿勢</param>
/// <remarks>Quaternionは球状線形補間を使用</remarks>
internal static void Lerp(ref SQTTransform pose1, ref SQTTransform pose2, float amount, out SQTTransform result)
{
Vector3.Lerp(ref pose1.Scales, ref pose2.Scales, amount, out result.Scales);
Vector3.Lerp(ref pose1.Translation, ref pose2.Translation, amount, out result.Translation);
Quaternion.Slerp(ref pose1.Rotation, ref pose2.Rotation, amount, out result.Rotation);
}
#endif
}
}

View File

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace MMDIKBakerLibrary.Misc
{
struct Vector2
{
public float X;
public float Y;
public Vector2(float x, float y)
{
X = x;
Y = y;
}
}
}

View File

@ -0,0 +1,120 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace MMDIKBakerLibrary.Misc
{
struct Vector3
{
public decimal X;
public decimal Y;
public decimal Z;
public bool NaN;
public static Vector3 Zero { get { return new Vector3(); } }
public static Vector3 One { get { return new Vector3(1, 1, 1); } }
public Vector3(decimal x, decimal y, decimal z)
{
X = x;
Y = y;
Z = z;
NaN = false;
}
public static void Lerp(ref Vector3 value1, ref Vector3 value2, decimal amount, out Vector3 result)
{
result.X = value1.X + (value2.X - value1.X) * amount;
result.Y = value1.Y + (value2.Y - value1.Y) * amount;
result.Z = value1.Z + (value2.Z - value1.Z) * amount;
result.NaN = false;
}
public decimal Length()
{
return (decimal)Math.Sqrt((double)(X * X + Y * Y + Z * Z));
}
public static void Transform(ref Vector3 value, ref Quaternion rotation, out Vector3 result)
{
decimal xx = rotation.X * rotation.X * 2m;
decimal xy = rotation.X * rotation.Y * 2m;
decimal xz = rotation.X * rotation.Z * 2m;
decimal xw = rotation.W * rotation.X * 2m;
decimal yy = rotation.Y * rotation.Y * 2m;
decimal yz = rotation.Y * rotation.Z * 2m;
decimal yw = rotation.W * rotation.Y * 2m;
decimal zz = rotation.Z * rotation.Z * 2m;
decimal zw = rotation.W * rotation.Z * 2m;
result.X = value.X * (1 - yy - zz) + value.Y * (xy - zw) + value.Z * (xz + yw);
result.Y = value.X * (xy + zw) + value.Y * (1 - xx - zz) + value.Z * (yz - xw);
result.Z = value.X * (xz - yw) + value.Y * (yz + xw) + value.Z * (1 - xx - yy);
result.NaN = false;
}
public static Vector3 Normalize(Vector3 value)
{
decimal len2 = value.X * value.X + value.Y * value.Y + value.Z * value.Z;
Vector3 result;
if (len2 == 0)
{
result.X = 0;
result.Y = 0;
result.Z = 0;
result.NaN = true;
return result;
}
else
{
result.X = value.X / (decimal)Math.Sqrt((double)len2);
result.Y = value.Y / (decimal)Math.Sqrt((double)len2);
result.Z = value.Z / (decimal)Math.Sqrt((double)len2);
result.NaN = false;
return result;
}
}
public static decimal Dot(Vector3 vector1, Vector3 vector2)
{
return vector1.X * vector2.X + vector1.Y * vector2.Y + vector1.Z * vector2.Z;
}
public static Vector3 Cross(Vector3 vector1, Vector3 vector2)
{
Vector3 result;
result.X = vector1.Y * vector2.Z - vector1.Z * vector2.Y;
result.Y = vector1.Z * vector2.X - vector1.X * vector2.Z;
result.Z = vector1.X * vector2.Y - vector1.Y * vector2.X;
result.NaN = false;
return result;
}
public static void Transform(ref Vector3 position, ref Matrix matrix, out Vector3 result)
{
result.X = position.X * matrix.M11 + position.Y * matrix.M21 + position.Z * matrix.M31 + matrix.M41;
result.Y = position.X * matrix.M12 + position.Y * matrix.M22 + position.Z * matrix.M32 + matrix.M42;
result.Z = position.X * matrix.M13 + position.Y * matrix.M23 + position.Z * matrix.M33 + matrix.M43;
result.NaN = false;
}
public void Normalize()
{
decimal len2 = X * X + Y * Y + Z * Z;
if (len2 == 0)
{
NaN = true;
}
else
{
X /= (decimal)Math.Sqrt((double)len2);
Y /= (decimal)Math.Sqrt((double)len2);
Z /= (decimal)Math.Sqrt((double)len2);
}
}
}
}

View File

@ -0,0 +1,58 @@
using System;
using System.Collections.Generic;
using System.Text;
using MMDIKBakerLibrary.Misc;
namespace MMDIKBakerLibrary.Model
{
class MMDBone
{
/// <summary>
/// ボーンの名前
/// </summary>
public readonly string Name;
/// <summary>
/// ボーンのバインドポーズ行列
/// </summary>
public readonly SQTTransform BindPose;
/// <summary>
/// ボーンのバインドポーズ逆行列
/// </summary>
/// <remarks>変更しないこと……</remarks>
public Matrix InverseBindPose;
/// <summary>
/// ボーンの親のボーンのインデックス情報
/// </summary>
/// <remarks>親が無い場合は-1</remarks>
public readonly int SkeletonHierarchy;
/// <summary>
/// ボーンのローカル変換行列
/// </summary>
/// <remarks>アニメーション再生時にはアニメーションにより上書きされる</remarks>
public SQTTransform LocalTransform;
/// <summary>
/// ボーンのグローバル変換行列
/// </summary>
/// <remarks>毎フレームごとにLocalTransformから計算され、上書きされる</remarks>
public Matrix GlobalTransform;
/// <summary>
/// コンストラクタ
/// </summary>
/// <param name="name">名前</param>
/// <param name="bindPose">バインドポーズ</param>
/// <param name="inverseBindPose">逆バインドポーズ</param>
/// <param name="skeletonHierarchy">親ボーン番号</param>
public MMDBone(string name, SQTTransform bindPose, Matrix inverseBindPose, int skeletonHierarchy)
{
Name = name;
BindPose = bindPose;
InverseBindPose = inverseBindPose;
SkeletonHierarchy = skeletonHierarchy;
LocalTransform = bindPose;
GlobalTransform = Matrix.Identity;
}
}
}

Some files were not shown because too many files have changed in this diff Show More