ADD: 260513 숙희님 방송용 씬

This commit is contained in:
DESKTOP-S4BOTN2\user 2026-05-13 16:15:46 +09:00
parent edf6896d65
commit a9e4f04295
49 changed files with 128 additions and 2002 deletions

View File

@ -3,7 +3,7 @@ guid: 695bdc3f20a3a8747b3ce6d630f766da
labels: labels:
- NiloToonBakeSmoothNormalTSIntoUV8 - NiloToonBakeSmoothNormalTSIntoUV8
ModelImporter: ModelImporter:
serializedVersion: 21300 serializedVersion: 24200
internalIDToNameTable: [] internalIDToNameTable: []
externalObjects: externalObjects:
- first: - first:
@ -113,12 +113,6 @@ ModelImporter:
optimizeGameObjects: 0 optimizeGameObjects: 0
removeConstantScaleCurves: 1 removeConstantScaleCurves: 1
motionNodeName: motionNodeName:
rigImportErrors:
rigImportWarnings: "Avatar Rig Configuration mis-match. Bone length in configuration
does not match position in animation file:\n\t'Bip001 L Thigh' : position error
= 16.463823 mm\n\t'Bip001 L Toe0' : position error = 6.382165 mm\n\t'Bip001
R Thigh' : position error = 16.464014 mm\n\t'Bip001 R Toe0' : position error
= 6.382228 mm\n"
animationImportErrors: animationImportErrors:
animationImportWarnings: animationImportWarnings:
animationRetargetingWarnings: animationRetargetingWarnings:
@ -141,6 +135,7 @@ ModelImporter:
addColliders: 0 addColliders: 0
useSRGBMaterialColor: 1 useSRGBMaterialColor: 1
sortHierarchyByName: 1 sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1 importVisibility: 1
importBlendShapes: 1 importBlendShapes: 1
importCameras: 1 importCameras: 1
@ -158,6 +153,9 @@ ModelImporter:
maxBonesPerVertex: 4 maxBonesPerVertex: 4
minBoneWeight: 0.001 minBoneWeight: 0.001
optimizeBones: 1 optimizeBones: 1
generateMeshLods: 0
meshLodGenerationFlags: 0
maximumMeshLod: -1
meshOptimizationFlags: -1 meshOptimizationFlags: -1
indexFormat: 0 indexFormat: 0
secondaryUVAngleDistortion: 8 secondaryUVAngleDistortion: 8
@ -350,30 +348,6 @@ ModelImporter:
value: {x: 0, y: 0, z: 0} value: {x: 0, y: 0, z: 0}
length: 0 length: 0
modified: 0 modified: 0
- boneName: Bip001 L Finger0
humanName: Left Thumb Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: Bip001 L Finger01
humanName: Left Thumb Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: Bip001 L Finger02
humanName: Left Thumb Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: Bip001 L Finger1 - boneName: Bip001 L Finger1
humanName: Left Index Proximal humanName: Left Index Proximal
limit: limit:
@ -470,30 +444,6 @@ ModelImporter:
value: {x: 0, y: 0, z: 0} value: {x: 0, y: 0, z: 0}
length: 0 length: 0
modified: 0 modified: 0
- boneName: Bip001 R Finger0
humanName: Right Thumb Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: Bip001 R Finger01
humanName: Right Thumb Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: Bip001 R Finger02
humanName: Right Thumb Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: Bip001 R Finger1 - boneName: Bip001 R Finger1
humanName: Right Index Proximal humanName: Right Index Proximal
limit: limit:
@ -689,8 +639,7 @@ ModelImporter:
- name: "LowerLeg_L_\uD558\uC580\uC81C\uBCF5" - name: "LowerLeg_L_\uD558\uC580\uC81C\uBCF5"
parentName: LeftLowerLeg parentName: LeftLowerLeg
position: {x: -0.0000000047683715, y: -0.000000038146972, z: 0.000000038146972} position: {x: -0.0000000047683715, y: -0.000000038146972, z: 0.000000038146972}
rotation: {x: -0.0000014305115, y: -0.00000059973513, z: -0.00000030256396, rotation: {x: -0.0000014305115, y: -0.00000059973513, z: -0.00000030256396, w: 1}
w: 1}
scale: {x: 1, y: 1, z: 1} scale: {x: 1, y: 1, z: 1}
- name: "LowerLeg_L_clothes_\uD558\uC580\uC81C\uBCF5" - name: "LowerLeg_L_clothes_\uD558\uC580\uC81C\uBCF5"
parentName: "LowerLeg_L_\uD558\uC580\uC81C\uBCF5" parentName: "LowerLeg_L_\uD558\uC580\uC81C\uBCF5"
@ -895,8 +844,7 @@ ModelImporter:
- name: Bip001 L Finger0Nub - name: Bip001 L Finger0Nub
parentName: Bip001 L Finger02 parentName: Bip001 L Finger02
position: {x: -0.01959076, y: -0.000000019073486, z: 0} position: {x: -0.01959076, y: -0.000000019073486, z: 0}
rotation: {x: 0.0000000037252903, y: -0.0000000018626451, z: 0.00000001571607, rotation: {x: 0.0000000037252903, y: -0.0000000018626451, z: 0.00000001571607, w: 1}
w: 1}
scale: {x: 1, y: 1, z: 1} scale: {x: 1, y: 1, z: 1}
- name: LeftThumbDistal - name: LeftThumbDistal
parentName: Bip001 L Finger02 parentName: Bip001 L Finger02
@ -1116,8 +1064,7 @@ ModelImporter:
- name: "LittleIntermediate_L_\uD558\uC580\uC81C\uBCF5" - name: "LittleIntermediate_L_\uD558\uC580\uC81C\uBCF5"
parentName: LeftLittleIntermediate parentName: LeftLittleIntermediate
position: {x: 0.000000076293944, y: 0.000000076293944, z: -0.000000076293944} position: {x: 0.000000076293944, y: 0.000000076293944, z: -0.000000076293944}
rotation: {x: -0.0000026226046, y: -0.000000037252445, z: 0.00000047683707, rotation: {x: -0.0000026226046, y: -0.000000037252445, z: 0.00000047683707, w: 1}
w: 1}
scale: {x: 1, y: 1, z: 1.000001} scale: {x: 1, y: 1, z: 1.000001}
- name: LeftLittleProximal - name: LeftLittleProximal
parentName: Bip001 L Finger4 parentName: Bip001 L Finger4
@ -1127,8 +1074,7 @@ ModelImporter:
- name: "LittleProximal_L_\uD558\uC580\uC81C\uBCF5" - name: "LittleProximal_L_\uD558\uC580\uC81C\uBCF5"
parentName: LeftLittleProximal parentName: LeftLittleProximal
position: {x: 0.000000038146972, y: 0.000000076293944, z: -0.000000076293944} position: {x: 0.000000038146972, y: 0.000000076293944, z: -0.000000076293944}
rotation: {x: -0.0000026226044, y: -0.000000030732867, z: 0.00000023841847, rotation: {x: -0.0000026226044, y: -0.000000030732867, z: 0.00000023841847, w: 1}
w: 1}
scale: {x: 1, y: 1, z: 1} scale: {x: 1, y: 1, z: 1}
- name: LeftHand - name: LeftHand
parentName: Bip001 L Hand parentName: Bip001 L Hand
@ -1288,8 +1234,7 @@ ModelImporter:
- name: Earring L_Neko Tied Bob hair - name: Earring L_Neko Tied Bob hair
parentName: Head_Neko Tied Bob hair parentName: Head_Neko Tied Bob hair
position: {x: 0.015875628, y: -1.4696712, z: -0.020517724} position: {x: 0.015875628, y: -1.4696712, z: -0.020517724}
rotation: {x: -0.0000005960461, y: -0.00000008940694, z: -0.000000044703473, rotation: {x: -0.0000005960461, y: -0.00000008940694, z: -0.000000044703473, w: 1}
w: 1}
scale: {x: 1, y: 1, z: 1} scale: {x: 1, y: 1, z: 1}
- name: Li-ne_Earring_Neko Tied Bob hair_1 - name: Li-ne_Earring_Neko Tied Bob hair_1
parentName: Earring L_Neko Tied Bob hair parentName: Earring L_Neko Tied Bob hair
@ -1324,8 +1269,7 @@ ModelImporter:
- name: Earring R_Neko Tied Bob hair - name: Earring R_Neko Tied Bob hair
parentName: Head_Neko Tied Bob hair parentName: Head_Neko Tied Bob hair
position: {x: -0.015876366, y: -1.4696715, z: -0.020517616} position: {x: -0.015876366, y: -1.4696715, z: -0.020517616}
rotation: {x: -0.0000005960461, y: -0.00000008940694, z: -0.000000044703473, rotation: {x: -0.0000005960461, y: -0.00000008940694, z: -0.000000044703473, w: 1}
w: 1}
scale: {x: 1, y: 1, z: 1} scale: {x: 1, y: 1, z: 1}
- name: Li-ne_Earring_Neko Tied Bob hair - name: Li-ne_Earring_Neko Tied Bob hair
parentName: Earring R_Neko Tied Bob hair parentName: Earring R_Neko Tied Bob hair
@ -1545,8 +1489,7 @@ ModelImporter:
- name: Bangs.R.001_Neko Tied Bob hair - name: Bangs.R.001_Neko Tied Bob hair
parentName: Bangs.R_Neko Tied Bob hair parentName: Bangs.R_Neko Tied Bob hair
position: {x: 0.000000038146972, y: 0.016436385, z: 0.000000026226044} position: {x: 0.000000038146972, y: 0.016436385, z: 0.000000026226044}
rotation: {x: 0.000000033644028, y: -0.0000000066938566, z: 0.0000007003545, rotation: {x: 0.000000033644028, y: -0.0000000066938566, z: 0.0000007003545, w: 1}
w: 1}
scale: {x: 1, y: 1, z: 1} scale: {x: 1, y: 1, z: 1}
- name: Bangs_Neko Tied Bob hair - name: Bangs_Neko Tied Bob hair
parentName: Hair Root_Neko Tied Bob hair parentName: Hair Root_Neko Tied Bob hair
@ -1916,8 +1859,7 @@ ModelImporter:
- name: "IndexDistal_R_\uD558\uC580\uC81C\uBCF5" - name: "IndexDistal_R_\uD558\uC580\uC81C\uBCF5"
parentName: RightIndexDistal parentName: RightIndexDistal
position: {x: -0.000000038146972, y: 0, z: 0} position: {x: -0.000000038146972, y: 0, z: 0}
rotation: {x: -0.00000047683713, y: 0.00000047683713, z: -0.00000017019411, rotation: {x: -0.00000047683713, y: 0.00000047683713, z: -0.00000017019411, w: 1}
w: 1}
scale: {x: 1, y: 1, z: 1} scale: {x: 1, y: 1, z: 1}
- name: RightIndexIntermediate - name: RightIndexIntermediate
parentName: Bip001 R Finger11 parentName: Bip001 R Finger11
@ -1927,8 +1869,7 @@ ModelImporter:
- name: "IndexIntermediate_R_\uD558\uC580\uC81C\uBCF5" - name: "IndexIntermediate_R_\uD558\uC580\uC81C\uBCF5"
parentName: RightIndexIntermediate parentName: RightIndexIntermediate
position: {x: -0.000000076293944, y: 0, z: -0.000000076293944} position: {x: -0.000000076293944, y: 0, z: -0.000000076293944}
rotation: {x: -0.00000047683716, y: 0.00000047683704, z: -0.00000016768959, rotation: {x: -0.00000047683716, y: 0.00000047683704, z: -0.00000016768959, w: 1}
w: 1}
scale: {x: 1, y: 1, z: 1} scale: {x: 1, y: 1, z: 1}
- name: RightIndexProximal - name: RightIndexProximal
parentName: Bip001 R Finger1 parentName: Bip001 R Finger1
@ -1978,8 +1919,7 @@ ModelImporter:
- name: "MiddleIntermediate_R_\uD558\uC580\uC81C\uBCF5" - name: "MiddleIntermediate_R_\uD558\uC580\uC81C\uBCF5"
parentName: RightMiddleIntermediate parentName: RightMiddleIntermediate
position: {x: -0.000000038146972, y: -0.00000015258789, z: 0} position: {x: -0.000000038146972, y: -0.00000015258789, z: 0}
rotation: {x: -0.00000071525585, y: 0.00000071525574, z: -0.000000073963946, rotation: {x: -0.00000071525585, y: 0.00000071525574, z: -0.000000073963946, w: 1}
w: 1}
scale: {x: 1, y: 1, z: 1} scale: {x: 1, y: 1, z: 1}
- name: RightMiddleProximal - name: RightMiddleProximal
parentName: Bip001 R Finger2 parentName: Bip001 R Finger2
@ -2129,8 +2069,7 @@ ModelImporter:
- name: "LowerArm_twist_R_\uD558\uC580\uC81C\uBCF5" - name: "LowerArm_twist_R_\uD558\uC580\uC81C\uBCF5"
parentName: "LowerArm_R_\uD558\uC580\uC81C\uBCF5" parentName: "LowerArm_R_\uD558\uC580\uC81C\uBCF5"
position: {x: 0.18318504, y: -0.00012519836, z: 0.0078103947} position: {x: 0.18318504, y: -0.00012519836, z: 0.0078103947}
rotation: {x: 0.00000016389947, y: -0.0000000031099965, z: -0.00000012170011, rotation: {x: 0.00000016389947, y: -0.0000000031099965, z: -0.00000012170011, w: 1}
w: 1}
scale: {x: 1, y: 1, z: 1} scale: {x: 1, y: 1, z: 1}
- name: LowerArm_twist_R - name: LowerArm_twist_R
parentName: RightLowerArm parentName: RightLowerArm
@ -2240,8 +2179,7 @@ ModelImporter:
- name: "Breast_L_\uD558\uC580\uC81C\uBCF5" - name: "Breast_L_\uD558\uC580\uC81C\uBCF5"
parentName: "Chest_\uD558\uC580\uC81C\uBCF5" parentName: "Chest_\uD558\uC580\uC81C\uBCF5"
position: {x: -0.03346264, y: 0.069412, z: -0.0038245986} position: {x: -0.03346264, y: 0.069412, z: -0.0038245986}
rotation: {x: 0.000000044587075, y: 0.000000030563104, z: -0.000000030347678, rotation: {x: 0.000000044587075, y: 0.000000030563104, z: -0.000000030347678, w: 1}
w: 1}
scale: {x: 1, y: 1, z: 1} scale: {x: 1, y: 1, z: 1}
- name: "Breast_L.001_\uD558\uC580\uC81C\uBCF5" - name: "Breast_L.001_\uD558\uC580\uC81C\uBCF5"
parentName: "Breast_L_\uD558\uC580\uC81C\uBCF5" parentName: "Breast_L_\uD558\uC580\uC81C\uBCF5"
@ -2256,8 +2194,7 @@ ModelImporter:
- name: "Breast_R_\uD558\uC580\uC81C\uBCF5" - name: "Breast_R_\uD558\uC580\uC81C\uBCF5"
parentName: "Chest_\uD558\uC580\uC81C\uBCF5" parentName: "Chest_\uD558\uC580\uC81C\uBCF5"
position: {x: 0.03346263, y: 0.069412075, z: -0.0038245772} position: {x: 0.03346263, y: 0.069412075, z: -0.0038245772}
rotation: {x: 0.000000044587075, y: 0.000000030563104, z: -0.000000030347678, rotation: {x: 0.000000044587075, y: 0.000000030563104, z: -0.000000030347678, w: 1}
w: 1}
scale: {x: 1, y: 1, z: 1} scale: {x: 1, y: 1, z: 1}
- name: "Breast_R.001_\uD558\uC580\uC81C\uBCF5" - name: "Breast_R.001_\uD558\uC580\uC81C\uBCF5"
parentName: "Breast_R_\uD558\uC580\uC81C\uBCF5" parentName: "Breast_R_\uD558\uC580\uC81C\uBCF5"
@ -2802,6 +2739,7 @@ ModelImporter:
humanoidOversampling: 1 humanoidOversampling: 1
avatarSetup: 1 avatarSetup: 1
addHumanoidExtraRootOnlyWhenUsingAvatar: 1 addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 0
remapMaterialsIfMaterialImportModeIsNone: 0 remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0 additionalBone: 0
userData: userData:

View File

@ -3,7 +3,7 @@ guid: 0603d5a404494434cbb1a5fa57996747
labels: labels:
- NiloToonBakeSmoothNormalTSIntoUV8 - NiloToonBakeSmoothNormalTSIntoUV8
ModelImporter: ModelImporter:
serializedVersion: 21300 serializedVersion: 24200
internalIDToNameTable: [] internalIDToNameTable: []
externalObjects: externalObjects:
- first: - first:
@ -68,8 +68,6 @@ ModelImporter:
optimizeGameObjects: 0 optimizeGameObjects: 0
removeConstantScaleCurves: 1 removeConstantScaleCurves: 1
motionNodeName: motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors: animationImportErrors:
animationImportWarnings: animationImportWarnings:
animationRetargetingWarnings: animationRetargetingWarnings:
@ -92,6 +90,7 @@ ModelImporter:
addColliders: 0 addColliders: 0
useSRGBMaterialColor: 1 useSRGBMaterialColor: 1
sortHierarchyByName: 1 sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1 importVisibility: 1
importBlendShapes: 1 importBlendShapes: 1
importCameras: 1 importCameras: 1
@ -109,6 +108,9 @@ ModelImporter:
maxBonesPerVertex: 4 maxBonesPerVertex: 4
minBoneWeight: 0.001 minBoneWeight: 0.001
optimizeBones: 1 optimizeBones: 1
generateMeshLods: 0
meshLodGenerationFlags: 0
maximumMeshLod: -1
meshOptimizationFlags: -1 meshOptimizationFlags: -1
indexFormat: 0 indexFormat: 0
secondaryUVAngleDistortion: 8 secondaryUVAngleDistortion: 8
@ -119,6 +121,7 @@ ModelImporter:
secondaryUVMinObjectScale: 1 secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4 secondaryUVPackMargin: 4
useFileScale: 1 useFileScale: 1
strictVertexDataChecks: 0
tangentSpace: tangentSpace:
normalSmoothAngle: 60 normalSmoothAngle: 60
normalImportMode: 0 normalImportMode: 0
@ -300,30 +303,6 @@ ModelImporter:
value: {x: 0, y: 0, z: 0} value: {x: 0, y: 0, z: 0}
length: 0 length: 0
modified: 0 modified: 0
- boneName: Bip001 L Finger0
humanName: Left Thumb Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: Bip001 L Finger01
humanName: Left Thumb Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: Bip001 L Finger02
humanName: Left Thumb Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: Bip001 L Finger1 - boneName: Bip001 L Finger1
humanName: Left Index Proximal humanName: Left Index Proximal
limit: limit:
@ -420,30 +399,6 @@ ModelImporter:
value: {x: 0, y: 0, z: 0} value: {x: 0, y: 0, z: 0}
length: 0 length: 0
modified: 0 modified: 0
- boneName: Bip001 R Finger0
humanName: Right Thumb Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: Bip001 R Finger01
humanName: Right Thumb Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: Bip001 R Finger02
humanName: Right Thumb Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: Bip001 R Finger1 - boneName: Bip001 R Finger1
humanName: Right Index Proximal humanName: Right Index Proximal
limit: limit:
@ -929,7 +884,7 @@ ModelImporter:
- name: Bip001 L Finger0 - name: Bip001 L Finger0
parentName: Bip001 L Hand parentName: Bip001 L Hand
position: {x: -0.016265621, y: 0.00864057, z: -0.0108873965} position: {x: -0.016265621, y: 0.00864057, z: -0.0108873965}
rotation: {x: 0.6410494, y: -0.29347494, z: 0.23532903, w: 0.6689905} rotation: {x: 0.6823919, y: -0.23805062, z: 0.11910193, w: 0.68079954}
scale: {x: 0.9999999, y: 0.99999976, z: 0.99999976} scale: {x: 0.9999999, y: 0.99999976, z: 0.99999976}
- name: Bip001 L Finger01 - name: Bip001 L Finger01
parentName: Bip001 L Finger0 parentName: Bip001 L Finger0
@ -939,7 +894,7 @@ ModelImporter:
- name: Bip001 L Finger02 - name: Bip001 L Finger02
parentName: Bip001 L Finger01 parentName: Bip001 L Finger01
position: {x: -0.01807434, y: -0.008923941, z: -0.0014009019} position: {x: -0.01807434, y: -0.008923941, z: -0.0014009019}
rotation: {x: 0.44678405, y: -0.88902724, z: -0.10007322, w: 0.00000005960463} rotation: {x: 0, y: 0, z: 0.000000018335403, w: 1}
scale: {x: 0.9999999, y: 1, z: 1.0000001} scale: {x: 0.9999999, y: 1, z: 1.0000001}
- name: LeftThumbDistal - name: LeftThumbDistal
parentName: Bip001 L Finger02 parentName: Bip001 L Finger02
@ -1734,7 +1689,7 @@ ModelImporter:
- name: Bip001 R Finger0 - name: Bip001 R Finger0
parentName: Bip001 R Hand parentName: Bip001 R Hand
position: {x: -0.01626553, y: 0.008640668, z: 0.010887412} position: {x: -0.01626553, y: 0.008640668, z: 0.010887412}
rotation: {x: -0.6410509, y: 0.29347503, z: 0.23532663, w: 0.66899} rotation: {x: -0.6823917, y: 0.23804893, z: 0.11910342, w: 0.6808}
scale: {x: 0.9999999, y: 0.99999976, z: 1} scale: {x: 0.9999999, y: 0.99999976, z: 1}
- name: Bip001 R Finger01 - name: Bip001 R Finger01
parentName: Bip001 R Finger0 parentName: Bip001 R Finger0
@ -1744,7 +1699,7 @@ ModelImporter:
- name: Bip001 R Finger02 - name: Bip001 R Finger02
parentName: Bip001 R Finger01 parentName: Bip001 R Finger01
position: {x: -0.018074539, y: -0.00892417, z: 0.0014009936} position: {x: -0.018074539, y: -0.00892417, z: 0.0014009936}
rotation: {x: 0.44663087, y: -0.88917565, z: 0.09943632, w: 0.000000007450577} rotation: {x: -9.313223e-10, y: -4.1448995e-25, z: -0.000000014057145, w: 1}
scale: {x: 0.99999976, y: 0.99999976, z: 1.0000002} scale: {x: 0.99999976, y: 0.99999976, z: 1.0000002}
- name: RightThumbDistal - name: RightThumbDistal
parentName: Bip001 R Finger02 parentName: Bip001 R Finger02
@ -2429,6 +2384,7 @@ ModelImporter:
humanoidOversampling: 1 humanoidOversampling: 1
avatarSetup: 1 avatarSetup: 1
addHumanoidExtraRootOnlyWhenUsingAvatar: 1 addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 0
remapMaterialsIfMaterialImportModeIsNone: 0 remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0 additionalBone: 0
userData: userData:

View File

@ -9,6 +9,8 @@ Material:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: 0.Metal_G_Copy m_Name: 0.Metal_G_Copy
m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3} m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: m_ValidKeywords:
- _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS - _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS
- _MATCAP_BLEND - _MATCAP_BLEND
@ -22,6 +24,7 @@ Material:
VRCFallback: UnlitDoubleSided VRCFallback: UnlitDoubleSided
disabledShaderPasses: disabledShaderPasses:
- NiloToonOutline - NiloToonOutline
m_LockedProperties:
m_SavedProperties: m_SavedProperties:
serializedVersion: 3 serializedVersion: 3
m_TexEnvs: m_TexEnvs:
@ -658,7 +661,7 @@ Material:
- _BaseMapStackingLayer10TexUVRotateSpeed: 0 - _BaseMapStackingLayer10TexUVRotateSpeed: 0
- _BaseMapStackingLayer10TexUVRotatedAngle: 0 - _BaseMapStackingLayer10TexUVRotatedAngle: 0
- _BaseMapStackingLayer1ApplytoFaces: 0 - _BaseMapStackingLayer1ApplytoFaces: 0
- _BaseMapStackingLayer1ColorBlendMode: 1 - _BaseMapStackingLayer1ColorBlendMode: 0
- _BaseMapStackingLayer1Enable: 0 - _BaseMapStackingLayer1Enable: 0
- _BaseMapStackingLayer1MaskInvertColor: 0 - _BaseMapStackingLayer1MaskInvertColor: 0
- _BaseMapStackingLayer1MaskRemapEnd: 1 - _BaseMapStackingLayer1MaskRemapEnd: 1
@ -1842,3 +1845,4 @@ Material:
- _egc6: {r: 1, g: 1, b: 1, a: 0} - _egc6: {r: 1, g: 1, b: 1, a: 0}
- _egc7: {r: 1, g: 1, b: 1, a: 0} - _egc7: {r: 1, g: 1, b: 1, a: 0}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
m_AllowLocking: 1

View File

@ -9,6 +9,8 @@ Material:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: 2.Face_effect_Copy m_Name: 2.Face_effect_Copy
m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3} m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: m_ValidKeywords:
- _ALPHAOVERRIDEMAP - _ALPHAOVERRIDEMAP
- _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS - _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS
@ -23,6 +25,7 @@ Material:
m_CustomRenderQueue: 2461 m_CustomRenderQueue: 2461
stringTagMap: {} stringTagMap: {}
disabledShaderPasses: [] disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties: m_SavedProperties:
serializedVersion: 3 serializedVersion: 3
m_TexEnvs: m_TexEnvs:
@ -643,7 +646,7 @@ Material:
- _BaseMapStackingLayer10TexUVRotateSpeed: 0 - _BaseMapStackingLayer10TexUVRotateSpeed: 0
- _BaseMapStackingLayer10TexUVRotatedAngle: 0 - _BaseMapStackingLayer10TexUVRotatedAngle: 0
- _BaseMapStackingLayer1ApplytoFaces: 0 - _BaseMapStackingLayer1ApplytoFaces: 0
- _BaseMapStackingLayer1ColorBlendMode: 1 - _BaseMapStackingLayer1ColorBlendMode: 0
- _BaseMapStackingLayer1Enable: 0 - _BaseMapStackingLayer1Enable: 0
- _BaseMapStackingLayer1MaskInvertColor: 0 - _BaseMapStackingLayer1MaskInvertColor: 0
- _BaseMapStackingLayer1MaskRemapEnd: 1 - _BaseMapStackingLayer1MaskRemapEnd: 1
@ -1852,3 +1855,4 @@ Material:
- _egc6: {r: 1, g: 1, b: 1, a: 0} - _egc6: {r: 1, g: 1, b: 1, a: 0}
- _egc7: {r: 1, g: 1, b: 1, a: 0} - _egc7: {r: 1, g: 1, b: 1, a: 0}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
m_AllowLocking: 1

View File

@ -9,6 +9,8 @@ Material:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: Body 2_Copy m_Name: Body 2_Copy
m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3} m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: m_ValidKeywords:
- _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS - _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS
- _RECEIVE_URP_SHADOW - _RECEIVE_URP_SHADOW
@ -19,6 +21,7 @@ Material:
m_CustomRenderQueue: 2000 m_CustomRenderQueue: 2000
stringTagMap: {} stringTagMap: {}
disabledShaderPasses: [] disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties: m_SavedProperties:
serializedVersion: 3 serializedVersion: 3
m_TexEnvs: m_TexEnvs:
@ -639,7 +642,7 @@ Material:
- _BaseMapStackingLayer10TexUVRotateSpeed: 0 - _BaseMapStackingLayer10TexUVRotateSpeed: 0
- _BaseMapStackingLayer10TexUVRotatedAngle: 0 - _BaseMapStackingLayer10TexUVRotatedAngle: 0
- _BaseMapStackingLayer1ApplytoFaces: 0 - _BaseMapStackingLayer1ApplytoFaces: 0
- _BaseMapStackingLayer1ColorBlendMode: 1 - _BaseMapStackingLayer1ColorBlendMode: 0
- _BaseMapStackingLayer1Enable: 0 - _BaseMapStackingLayer1Enable: 0
- _BaseMapStackingLayer1MaskInvertColor: 0 - _BaseMapStackingLayer1MaskInvertColor: 0
- _BaseMapStackingLayer1MaskRemapEnd: 1 - _BaseMapStackingLayer1MaskRemapEnd: 1
@ -1818,3 +1821,4 @@ Material:
- _egc6: {r: 1, g: 1, b: 1, a: 0} - _egc6: {r: 1, g: 1, b: 1, a: 0}
- _egc7: {r: 1, g: 1, b: 1, a: 0} - _egc7: {r: 1, g: 1, b: 1, a: 0}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
m_AllowLocking: 1

View File

@ -650,7 +650,7 @@ Material:
- _BaseMapStackingLayer10TexUVRotateSpeed: 0 - _BaseMapStackingLayer10TexUVRotateSpeed: 0
- _BaseMapStackingLayer10TexUVRotatedAngle: 0 - _BaseMapStackingLayer10TexUVRotatedAngle: 0
- _BaseMapStackingLayer1ApplytoFaces: 0 - _BaseMapStackingLayer1ApplytoFaces: 0
- _BaseMapStackingLayer1ColorBlendMode: 1 - _BaseMapStackingLayer1ColorBlendMode: 0
- _BaseMapStackingLayer1Enable: 0 - _BaseMapStackingLayer1Enable: 0
- _BaseMapStackingLayer1MaskInvertColor: 0 - _BaseMapStackingLayer1MaskInvertColor: 0
- _BaseMapStackingLayer1MaskRemapEnd: 1 - _BaseMapStackingLayer1MaskRemapEnd: 1

View File

@ -9,8 +9,11 @@ Material:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: White_Boots_Copy m_Name: White_Boots_Copy
m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3} m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: m_ValidKeywords:
- _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS - _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS
- _MATCAP_BLEND
- _NORMALMAP - _NORMALMAP
- _RECEIVE_URP_SHADOW - _RECEIVE_URP_SHADOW
m_InvalidKeywords: [] m_InvalidKeywords: []
@ -21,6 +24,7 @@ Material:
stringTagMap: stringTagMap:
VRCFallback: UnlitDoubleSided VRCFallback: UnlitDoubleSided
disabledShaderPasses: [] disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties: m_SavedProperties:
serializedVersion: 3 serializedVersion: 3
m_TexEnvs: m_TexEnvs:
@ -345,7 +349,7 @@ Material:
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _MatCapAdditiveMap: - _MatCapAdditiveMap:
m_Texture: {fileID: 0} m_Texture: {fileID: 2800000, guid: 00b238d22d752a447959e200998bd4f7, type: 3}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _MatCapAdditiveMaskMap: - _MatCapAdditiveMaskMap:
@ -353,7 +357,7 @@ Material:
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _MatCapAlphaBlendMap: - _MatCapAlphaBlendMap:
m_Texture: {fileID: 0} m_Texture: {fileID: 2800000, guid: 81e8734974f95b249a104d2e3b18aad9, type: 3}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
- _MatCapAlphaBlendMaskMap: - _MatCapAlphaBlendMaskMap:
@ -657,7 +661,7 @@ Material:
- _BaseMapStackingLayer10TexUVRotateSpeed: 0 - _BaseMapStackingLayer10TexUVRotateSpeed: 0
- _BaseMapStackingLayer10TexUVRotatedAngle: 0 - _BaseMapStackingLayer10TexUVRotatedAngle: 0
- _BaseMapStackingLayer1ApplytoFaces: 0 - _BaseMapStackingLayer1ApplytoFaces: 0
- _BaseMapStackingLayer1ColorBlendMode: 1 - _BaseMapStackingLayer1ColorBlendMode: 0
- _BaseMapStackingLayer1Enable: 0 - _BaseMapStackingLayer1Enable: 0
- _BaseMapStackingLayer1MaskInvertColor: 0 - _BaseMapStackingLayer1MaskInvertColor: 0
- _BaseMapStackingLayer1MaskRemapEnd: 1 - _BaseMapStackingLayer1MaskRemapEnd: 1
@ -837,7 +841,7 @@ Material:
- _BumpScale: 1 - _BumpScale: 1
- _CelShadeMidPoint: 0 - _CelShadeMidPoint: 0
- _CelShadeMidPointForFaceArea: -0.3 - _CelShadeMidPointForFaceArea: -0.3
- _CelShadeSoftness: 0.121 - _CelShadeSoftness: 0.05
- _CelShadeSoftnessForFaceArea: 0.15 - _CelShadeSoftnessForFaceArea: 0.15
- _CharacterAreaColorFillEnabled: 0 - _CharacterAreaColorFillEnabled: 0
- _CharacterAreaColorFillRendersBlockedArea: 0 - _CharacterAreaColorFillRendersBlockedArea: 0
@ -866,11 +870,11 @@ Material:
- _DepthTexRimLight3DFallbackRemoveFlatPolygonRimLight: 1 - _DepthTexRimLight3DFallbackRemoveFlatPolygonRimLight: 1
- _DepthTexRimLight3DFallbackSoftness: 0.02 - _DepthTexRimLight3DFallbackSoftness: 0.02
- _DepthTexRimLight3DRimMaskEnable: 0 - _DepthTexRimLight3DRimMaskEnable: 0
- _DepthTexRimLight3DRimMaskThreshold: 0.5 - _DepthTexRimLight3DRimMaskThreshold: 0.075
- _DepthTexRimLightAndShadowReduceWidthWhenCameraIsClose: 1 - _DepthTexRimLightAndShadowReduceWidthWhenCameraIsClose: 1
- _DepthTexRimLightAndShadowSafeViewDistance: 1 - _DepthTexRimLightAndShadowSafeViewDistance: 1
- _DepthTexRimLightAndShadowWidthExtraMultiplier: 1 - _DepthTexRimLightAndShadowWidthExtraMultiplier: 1
- _DepthTexRimLightAndShadowWidthMultiplier: 0.5 - _DepthTexRimLightAndShadowWidthMultiplier: 0.6
- _DepthTexRimLightBlockByShadow: 0 - _DepthTexRimLightBlockByShadow: 0
- _DepthTexRimLightFadeoutRange: 1 - _DepthTexRimLightFadeoutRange: 1
- _DepthTexRimLightFixDottedLineArtifactsExtendMultiplier: 0.1 - _DepthTexRimLightFixDottedLineArtifactsExtendMultiplier: 0.1
@ -1519,7 +1523,7 @@ Material:
- _UseMatCap: 1 - _UseMatCap: 1
- _UseMatCap2nd: 0 - _UseMatCap2nd: 0
- _UseMatCapAdditive: 0 - _UseMatCapAdditive: 0
- _UseMatCapAlphaBlend: 0 - _UseMatCapAlphaBlend: 1
- _UseMatCapOcclusion: 0 - _UseMatCapOcclusion: 0
- _UseNiloGlitter: 0 - _UseNiloGlitter: 0
- _UseNiloToonSelfShadowIntensityMultiplierTex: 0 - _UseNiloToonSelfShadowIntensityMultiplierTex: 0
@ -1745,7 +1749,7 @@ Material:
- _OutlineReplaceColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineReplaceColor: {r: 1, g: 1, b: 1, a: 1}
- _OutlineTexHSVG: {r: 0, g: 1, b: 1, a: 1} - _OutlineTexHSVG: {r: 0, g: 1, b: 1, a: 1}
- _OutlineTex_ScrollRotate: {r: 0, g: 0, b: 0, a: 0} - _OutlineTex_ScrollRotate: {r: 0, g: 0, b: 0, a: 0}
- _OutlineTintColor: {r: 0.254717, g: 0.254717, b: 0.254717, a: 1} - _OutlineTintColor: {r: 0.03773582, g: 0.03773582, b: 0.03773582, a: 1}
- _OutlineTintColorSkinAreaOverride: {r: 0.4, g: 0.2, b: 0.2, a: 1} - _OutlineTintColorSkinAreaOverride: {r: 0.4, g: 0.2, b: 0.2, a: 1}
- _OutlineWidthMaskFromVertexColor: {r: 0, g: 1, b: 0, a: 0} - _OutlineWidthMaskFromVertexColor: {r: 0, g: 1, b: 0, a: 0}
- _OutlineWidthTexChannelMask: {r: 0, g: 1, b: 0, a: 0} - _OutlineWidthTexChannelMask: {r: 0, g: 1, b: 0, a: 0}
@ -1778,7 +1782,7 @@ Material:
- _ScreenSpaceOutlineOcclusionAreaTintColor: {r: 1, g: 1, b: 1, a: 1} - _ScreenSpaceOutlineOcclusionAreaTintColor: {r: 1, g: 1, b: 1, a: 1}
- _ScreenSpaceOutlineReplaceColor: {r: 1, g: 1, b: 1, a: 1} - _ScreenSpaceOutlineReplaceColor: {r: 1, g: 1, b: 1, a: 1}
- _ScreenSpaceOutlineTintColor: {r: 0.1, g: 0.1, b: 0.1, a: 1} - _ScreenSpaceOutlineTintColor: {r: 0.1, g: 0.1, b: 0.1, a: 1}
- _SelfShadowTintColor: {r: 0.9433962, g: 0.9433962, b: 0.9433962, a: 1} - _SelfShadowTintColor: {r: 1, g: 1, b: 1, a: 1}
- _ShadingGradeMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - _ShadingGradeMapChannelMask: {r: 0, g: 1, b: 0, a: 0}
- _Shadow2ndColor: {r: 0.78711283, g: 0.79907835, b: 0.8301887, a: 1} - _Shadow2ndColor: {r: 0.78711283, g: 0.79907835, b: 0.8301887, a: 1}
- _Shadow3rdColor: {r: 0, g: 0, b: 0, a: 0} - _Shadow3rdColor: {r: 0, g: 0, b: 0, a: 0}
@ -1841,3 +1845,4 @@ Material:
- _egc6: {r: 1, g: 1, b: 1, a: 0} - _egc6: {r: 1, g: 1, b: 1, a: 0}
- _egc7: {r: 1, g: 1, b: 1, a: 0} - _egc7: {r: 1, g: 1, b: 1, a: 0}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
m_AllowLocking: 1

View File

@ -9,7 +9,10 @@ Material:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: White_Copy m_Name: White_Copy
m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3} m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: m_ValidKeywords:
- _BASEMAP_STACKING_LAYER2
- _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS - _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS
- _MATCAP_BLEND - _MATCAP_BLEND
- _NORMALMAP - _NORMALMAP
@ -22,6 +25,7 @@ Material:
stringTagMap: stringTagMap:
VRCFallback: UnlitDoubleSided VRCFallback: UnlitDoubleSided
disabledShaderPasses: [] disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties: m_SavedProperties:
serializedVersion: 3 serializedVersion: 3
m_TexEnvs: m_TexEnvs:
@ -642,7 +646,7 @@ Material:
- _BaseMapStackingLayer10TexUVRotateSpeed: 0 - _BaseMapStackingLayer10TexUVRotateSpeed: 0
- _BaseMapStackingLayer10TexUVRotatedAngle: 0 - _BaseMapStackingLayer10TexUVRotatedAngle: 0
- _BaseMapStackingLayer1ApplytoFaces: 0 - _BaseMapStackingLayer1ApplytoFaces: 0
- _BaseMapStackingLayer1ColorBlendMode: 1 - _BaseMapStackingLayer1ColorBlendMode: 0
- _BaseMapStackingLayer1Enable: 0 - _BaseMapStackingLayer1Enable: 0
- _BaseMapStackingLayer1MaskInvertColor: 0 - _BaseMapStackingLayer1MaskInvertColor: 0
- _BaseMapStackingLayer1MaskRemapEnd: 1 - _BaseMapStackingLayer1MaskRemapEnd: 1
@ -657,8 +661,8 @@ Material:
- _BaseMapStackingLayer1TexUVRotateSpeed: 0 - _BaseMapStackingLayer1TexUVRotateSpeed: 0
- _BaseMapStackingLayer1TexUVRotatedAngle: 0 - _BaseMapStackingLayer1TexUVRotatedAngle: 0
- _BaseMapStackingLayer2ApplytoFaces: 0 - _BaseMapStackingLayer2ApplytoFaces: 0
- _BaseMapStackingLayer2ColorBlendMode: 1 - _BaseMapStackingLayer2ColorBlendMode: 4
- _BaseMapStackingLayer2Enable: 0 - _BaseMapStackingLayer2Enable: 1
- _BaseMapStackingLayer2MaskInvertColor: 0 - _BaseMapStackingLayer2MaskInvertColor: 0
- _BaseMapStackingLayer2MaskRemapEnd: 1 - _BaseMapStackingLayer2MaskRemapEnd: 1
- _BaseMapStackingLayer2MaskRemapMinMaxSlider: 1 - _BaseMapStackingLayer2MaskRemapMinMaxSlider: 1
@ -666,9 +670,9 @@ Material:
- _BaseMapStackingLayer2MaskTexAsIDMap: 0 - _BaseMapStackingLayer2MaskTexAsIDMap: 0
- _BaseMapStackingLayer2MaskTexExtractFromID: 255 - _BaseMapStackingLayer2MaskTexExtractFromID: 255
- _BaseMapStackingLayer2MaskUVIndex: 0 - _BaseMapStackingLayer2MaskUVIndex: 0
- _BaseMapStackingLayer2MasterStrength: 1 - _BaseMapStackingLayer2MasterStrength: 0.2
- _BaseMapStackingLayer2TexIgnoreAlpha: 0 - _BaseMapStackingLayer2TexIgnoreAlpha: 0
- _BaseMapStackingLayer2TexUVIndex: 0 - _BaseMapStackingLayer2TexUVIndex: 4
- _BaseMapStackingLayer2TexUVRotateSpeed: 0 - _BaseMapStackingLayer2TexUVRotateSpeed: 0
- _BaseMapStackingLayer2TexUVRotatedAngle: 0 - _BaseMapStackingLayer2TexUVRotatedAngle: 0
- _BaseMapStackingLayer3ApplytoFaces: 0 - _BaseMapStackingLayer3ApplytoFaces: 0
@ -1810,3 +1814,4 @@ Material:
- _egc6: {r: 1, g: 1, b: 1, a: 0} - _egc6: {r: 1, g: 1, b: 1, a: 0}
- _egc7: {r: 1, g: 1, b: 1, a: 0} - _egc7: {r: 1, g: 1, b: 1, a: 0}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
m_AllowLocking: 1

View File

@ -9,6 +9,8 @@ Material:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: _Halo_Copy m_Name: _Halo_Copy
m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3} m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: m_ValidKeywords:
- _ALPHAOVERRIDEMAP - _ALPHAOVERRIDEMAP
- _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS - _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS
@ -21,6 +23,7 @@ Material:
m_CustomRenderQueue: 2450 m_CustomRenderQueue: 2450
stringTagMap: {} stringTagMap: {}
disabledShaderPasses: [] disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties: m_SavedProperties:
serializedVersion: 3 serializedVersion: 3
m_TexEnvs: m_TexEnvs:
@ -661,7 +664,7 @@ Material:
- _BaseMapStackingLayer10TexUVRotateSpeed: 0 - _BaseMapStackingLayer10TexUVRotateSpeed: 0
- _BaseMapStackingLayer10TexUVRotatedAngle: 0 - _BaseMapStackingLayer10TexUVRotatedAngle: 0
- _BaseMapStackingLayer1ApplytoFaces: 0 - _BaseMapStackingLayer1ApplytoFaces: 0
- _BaseMapStackingLayer1ColorBlendMode: 1 - _BaseMapStackingLayer1ColorBlendMode: 0
- _BaseMapStackingLayer1Enable: 0 - _BaseMapStackingLayer1Enable: 0
- _BaseMapStackingLayer1MaskInvertColor: 0 - _BaseMapStackingLayer1MaskInvertColor: 0
- _BaseMapStackingLayer1MaskRemapEnd: 1 - _BaseMapStackingLayer1MaskRemapEnd: 1
@ -1881,3 +1884,4 @@ Material:
- _egc6: {r: 1, g: 1, b: 1, a: 0} - _egc6: {r: 1, g: 1, b: 1, a: 0}
- _egc7: {r: 1, g: 1, b: 1, a: 0} - _egc7: {r: 1, g: 1, b: 1, a: 0}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
m_AllowLocking: 1

View File

@ -9,6 +9,8 @@ Material:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: _Ribbon Pin_Copy m_Name: _Ribbon Pin_Copy
m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3} m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: m_ValidKeywords:
- _ALPHAOVERRIDEMAP - _ALPHAOVERRIDEMAP
- _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS - _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS
@ -22,6 +24,7 @@ Material:
stringTagMap: stringTagMap:
VRCFallback: Unlit VRCFallback: Unlit
disabledShaderPasses: [] disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties: m_SavedProperties:
serializedVersion: 3 serializedVersion: 3
m_TexEnvs: m_TexEnvs:
@ -646,7 +649,7 @@ Material:
- _BaseMapStackingLayer10TexUVRotateSpeed: 0 - _BaseMapStackingLayer10TexUVRotateSpeed: 0
- _BaseMapStackingLayer10TexUVRotatedAngle: 0 - _BaseMapStackingLayer10TexUVRotatedAngle: 0
- _BaseMapStackingLayer1ApplytoFaces: 0 - _BaseMapStackingLayer1ApplytoFaces: 0
- _BaseMapStackingLayer1ColorBlendMode: 1 - _BaseMapStackingLayer1ColorBlendMode: 0
- _BaseMapStackingLayer1Enable: 0 - _BaseMapStackingLayer1Enable: 0
- _BaseMapStackingLayer1MaskInvertColor: 0 - _BaseMapStackingLayer1MaskInvertColor: 0
- _BaseMapStackingLayer1MaskRemapEnd: 1 - _BaseMapStackingLayer1MaskRemapEnd: 1
@ -1850,3 +1853,4 @@ Material:
- _egc6: {r: 1, g: 1, b: 1, a: 0} - _egc6: {r: 1, g: 1, b: 1, a: 0}
- _egc7: {r: 1, g: 1, b: 1, a: 0} - _egc7: {r: 1, g: 1, b: 1, a: 0}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
m_AllowLocking: 1

View File

@ -9,6 +9,8 @@ Material:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: _Silver Pin_Copy m_Name: _Silver Pin_Copy
m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3} m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: m_ValidKeywords:
- _ALPHAOVERRIDEMAP - _ALPHAOVERRIDEMAP
- _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS - _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS
@ -23,6 +25,7 @@ Material:
stringTagMap: {} stringTagMap: {}
disabledShaderPasses: disabledShaderPasses:
- NiloToonOutline - NiloToonOutline
m_LockedProperties:
m_SavedProperties: m_SavedProperties:
serializedVersion: 3 serializedVersion: 3
m_TexEnvs: m_TexEnvs:
@ -663,7 +666,7 @@ Material:
- _BaseMapStackingLayer10TexUVRotateSpeed: 0 - _BaseMapStackingLayer10TexUVRotateSpeed: 0
- _BaseMapStackingLayer10TexUVRotatedAngle: 0 - _BaseMapStackingLayer10TexUVRotatedAngle: 0
- _BaseMapStackingLayer1ApplytoFaces: 0 - _BaseMapStackingLayer1ApplytoFaces: 0
- _BaseMapStackingLayer1ColorBlendMode: 1 - _BaseMapStackingLayer1ColorBlendMode: 0
- _BaseMapStackingLayer1Enable: 0 - _BaseMapStackingLayer1Enable: 0
- _BaseMapStackingLayer1MaskInvertColor: 0 - _BaseMapStackingLayer1MaskInvertColor: 0
- _BaseMapStackingLayer1MaskRemapEnd: 1 - _BaseMapStackingLayer1MaskRemapEnd: 1
@ -1883,3 +1886,4 @@ Material:
- _egc6: {r: 1, g: 1, b: 1, a: 0} - _egc6: {r: 1, g: 1, b: 1, a: 0}
- _egc7: {r: 1, g: 1, b: 1, a: 0} - _egc7: {r: 1, g: 1, b: 1, a: 0}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
m_AllowLocking: 1

View File

@ -9,6 +9,8 @@ Material:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: "\uD788\uB839_Face_Copy" m_Name: "\uD788\uB839_Face_Copy"
m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3} m_Shader: {fileID: 4800000, guid: b4f674f383806e5419ee221e39445de0, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: m_ValidKeywords:
- _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS - _DEPTHTEX_RIMLIGHT_FIX_DOTTED_LINE_ARTIFACTS
- _EMISSION - _EMISSION
@ -23,6 +25,7 @@ Material:
m_CustomRenderQueue: 2449 m_CustomRenderQueue: 2449
stringTagMap: {} stringTagMap: {}
disabledShaderPasses: [] disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties: m_SavedProperties:
serializedVersion: 3 serializedVersion: 3
m_TexEnvs: m_TexEnvs:
@ -1177,3 +1180,4 @@ Material:
- _UV3ScrollSpeed: {r: 0, g: 0, b: 0, a: 0} - _UV3ScrollSpeed: {r: 0, g: 0, b: 0, a: 0}
- _ZOffsetMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0} - _ZOffsetMaskMapChannelMask: {r: 0, g: 1, b: 0, a: 0}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
m_AllowLocking: 1

View File

@ -3,7 +3,7 @@ guid: 34b7e6a787374da44bf5819ad6036fe1
labels: labels:
- NiloToonBakeSmoothNormalTSIntoUV8 - NiloToonBakeSmoothNormalTSIntoUV8
ModelImporter: ModelImporter:
serializedVersion: 21300 serializedVersion: 24200
internalIDToNameTable: [] internalIDToNameTable: []
externalObjects: externalObjects:
- first: - first:
@ -73,8 +73,6 @@ ModelImporter:
optimizeGameObjects: 0 optimizeGameObjects: 0
removeConstantScaleCurves: 1 removeConstantScaleCurves: 1
motionNodeName: motionNodeName:
rigImportErrors:
rigImportWarnings:
animationImportErrors: animationImportErrors:
animationImportWarnings: animationImportWarnings:
animationRetargetingWarnings: animationRetargetingWarnings:
@ -97,6 +95,7 @@ ModelImporter:
addColliders: 0 addColliders: 0
useSRGBMaterialColor: 1 useSRGBMaterialColor: 1
sortHierarchyByName: 1 sortHierarchyByName: 1
importPhysicalCameras: 1
importVisibility: 1 importVisibility: 1
importBlendShapes: 1 importBlendShapes: 1
importCameras: 1 importCameras: 1
@ -114,6 +113,9 @@ ModelImporter:
maxBonesPerVertex: 4 maxBonesPerVertex: 4
minBoneWeight: 0.001 minBoneWeight: 0.001
optimizeBones: 1 optimizeBones: 1
generateMeshLods: 0
meshLodGenerationFlags: 0
maximumMeshLod: -1
meshOptimizationFlags: -1 meshOptimizationFlags: -1
indexFormat: 0 indexFormat: 0
secondaryUVAngleDistortion: 8 secondaryUVAngleDistortion: 8
@ -124,6 +126,7 @@ ModelImporter:
secondaryUVMinObjectScale: 1 secondaryUVMinObjectScale: 1
secondaryUVPackMargin: 4 secondaryUVPackMargin: 4
useFileScale: 1 useFileScale: 1
strictVertexDataChecks: 0
tangentSpace: tangentSpace:
normalSmoothAngle: 60 normalSmoothAngle: 60
normalImportMode: 0 normalImportMode: 0
@ -305,30 +308,6 @@ ModelImporter:
value: {x: 0, y: 0, z: 0} value: {x: 0, y: 0, z: 0}
length: 0 length: 0
modified: 0 modified: 0
- boneName: Bip001 L Finger0
humanName: Left Thumb Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: Bip001 L Finger01
humanName: Left Thumb Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: Bip001 L Finger02
humanName: Left Thumb Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: Bip001 L Finger1 - boneName: Bip001 L Finger1
humanName: Left Index Proximal humanName: Left Index Proximal
limit: limit:
@ -425,30 +404,6 @@ ModelImporter:
value: {x: 0, y: 0, z: 0} value: {x: 0, y: 0, z: 0}
length: 0 length: 0
modified: 0 modified: 0
- boneName: Bip001 R Finger0
humanName: Right Thumb Proximal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: Bip001 R Finger01
humanName: Right Thumb Intermediate
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: Bip001 R Finger02
humanName: Right Thumb Distal
limit:
min: {x: 0, y: 0, z: 0}
max: {x: 0, y: 0, z: 0}
value: {x: 0, y: 0, z: 0}
length: 0
modified: 0
- boneName: Bip001 R Finger1 - boneName: Bip001 R Finger1
humanName: Right Index Proximal humanName: Right Index Proximal
limit: limit:
@ -1154,7 +1109,7 @@ ModelImporter:
- name: Bip001 L Finger02 - name: Bip001 L Finger02
parentName: Bip001 L Finger01 parentName: Bip001 L Finger01
position: {x: -0.015497357, y: -0.0033031388, z: -0.00013909233} position: {x: -0.015497357, y: -0.0033031388, z: -0.00013909233}
rotation: {x: 0.0046196966, y: 0.011030021, z: -0.7769081, w: 0.6295005} rotation: {x: 0, y: 0, z: -0.0000000028412601, w: 1}
scale: {x: 1, y: 1, z: 1.0000001} scale: {x: 1, y: 1, z: 1.0000001}
- name: LeftThumbDistal - name: LeftThumbDistal
parentName: Bip001 L Finger02 parentName: Bip001 L Finger02
@ -1184,7 +1139,7 @@ ModelImporter:
- name: Bip001 L Finger12 - name: Bip001 L Finger12
parentName: Bip001 L Finger11 parentName: Bip001 L Finger11
position: {x: -0.015963897, y: 0.00027361893, z: -0.00030530873} position: {x: -0.015963897, y: 0.00027361893, z: -0.00030530873}
rotation: {x: 0.013121123, y: 0.7684197, z: 0.0027719853, w: 0.63980573} rotation: {x: 0, y: 0, z: 1.0842009e-19, w: 1}
scale: {x: 1, y: 1, z: 1} scale: {x: 1, y: 1, z: 1}
- name: LeftIndexDistal - name: LeftIndexDistal
parentName: Bip001 L Finger12 parentName: Bip001 L Finger12
@ -1214,7 +1169,7 @@ ModelImporter:
- name: Bip001 L Finger22 - name: Bip001 L Finger22
parentName: Bip001 L Finger21 parentName: Bip001 L Finger21
position: {x: -0.017651757, y: 0.0000028352922, z: -0.00024614777} position: {x: -0.017651757, y: 0.0000028352922, z: -0.00024614777}
rotation: {x: 0.00011600167, y: 0.7352607, z: 0.00038105698, w: 0.67778426} rotation: {x: 0, y: -0, z: -0, w: 1}
scale: {x: 1, y: 1, z: 0.9999999} scale: {x: 1, y: 1, z: 0.9999999}
- name: LeftMiddleDistal - name: LeftMiddleDistal
parentName: Bip001 L Finger22 parentName: Bip001 L Finger22
@ -1244,7 +1199,7 @@ ModelImporter:
- name: Bip001 L Finger32 - name: Bip001 L Finger32
parentName: Bip001 L Finger31 parentName: Bip001 L Finger31
position: {x: -0.017104737, y: 0.00013271581, z: 0.00027526956} position: {x: -0.017104737, y: 0.00013271581, z: 0.00027526956}
rotation: {x: 0.005466165, y: 0.70614916, z: -0.0009849312, w: 0.70804137} rotation: {x: 0, y: -0, z: -0, w: 1}
scale: {x: 1, y: 1, z: 1} scale: {x: 1, y: 1, z: 1}
- name: LeftRingDistal - name: LeftRingDistal
parentName: Bip001 L Finger32 parentName: Bip001 L Finger32
@ -1274,7 +1229,7 @@ ModelImporter:
- name: Bip001 L Finger42 - name: Bip001 L Finger42
parentName: Bip001 L Finger41 parentName: Bip001 L Finger41
position: {x: -0.012314505, y: 0.00020215052, z: 0.0003790719} position: {x: -0.012314505, y: 0.00020215052, z: 0.0003790719}
rotation: {x: 0.011848585, y: 0.7279694, z: -0.0029829051, w: 0.6855007} rotation: {x: 0, y: 0, z: 5.4210096e-20, w: 1}
scale: {x: 1, y: 1, z: 1} scale: {x: 1, y: 1, z: 1}
- name: LeftLittleDistal - name: LeftLittleDistal
parentName: Bip001 L Finger42 parentName: Bip001 L Finger42
@ -3549,7 +3504,7 @@ ModelImporter:
- name: Bip001 R Finger02 - name: Bip001 R Finger02
parentName: Bip001 R Finger01 parentName: Bip001 R Finger01
position: {x: -0.015496974, y: -0.0033033846, z: 0.00014100487} position: {x: -0.015496974, y: -0.0033033846, z: 0.00014100487}
rotation: {x: -0.004858545, y: -0.010352027, z: -0.77610344, w: 0.630502} rotation: {x: -0.00000012782401, y: 0.00000007823109, z: -0.00000007028574, w: 1}
scale: {x: 1, y: 1.0000001, z: 0.99999976} scale: {x: 1, y: 1.0000001, z: 0.99999976}
- name: RightThumbDistal - name: RightThumbDistal
parentName: Bip001 R Finger02 parentName: Bip001 R Finger02
@ -3579,7 +3534,7 @@ ModelImporter:
- name: Bip001 R Finger12 - name: Bip001 R Finger12
parentName: Bip001 R Finger11 parentName: Bip001 R Finger11
position: {x: -0.015964579, y: 0.0002734029, z: 0.00030515052} position: {x: -0.015964579, y: 0.0002734029, z: 0.00030515052}
rotation: {x: -0.013070963, y: -0.7682786, z: 0.004489122, w: 0.63996637} rotation: {x: 0, y: -0, z: -0, w: 1}
scale: {x: 1, y: 1.0000001, z: 1} scale: {x: 1, y: 1.0000001, z: 1}
- name: RightIndexDistal - name: RightIndexDistal
parentName: Bip001 R Finger12 parentName: Bip001 R Finger12
@ -3609,7 +3564,7 @@ ModelImporter:
- name: Bip001 R Finger22 - name: Bip001 R Finger22
parentName: Bip001 R Finger21 parentName: Bip001 R Finger21
position: {x: -0.017652212, y: 0.0000037228092, z: 0.00024615522} position: {x: -0.017652212, y: 0.0000037228092, z: 0.00024615522}
rotation: {x: -0.00015213764, y: -0.73532003, z: 0.00039485426, w: 0.67772007} rotation: {x: 0, y: -0, z: -0, w: 1}
scale: {x: 1, y: 1, z: 1} scale: {x: 1, y: 1, z: 1}
- name: RightMiddleDistal - name: RightMiddleDistal
parentName: Bip001 R Finger22 parentName: Bip001 R Finger22
@ -3639,7 +3594,7 @@ ModelImporter:
- name: Bip001 R Finger32 - name: Bip001 R Finger32
parentName: Bip001 R Finger31 parentName: Bip001 R Finger31
position: {x: -0.017104624, y: 0.00013277851, z: -0.00027547355} position: {x: -0.017104624, y: 0.00013277851, z: -0.00027547355}
rotation: {x: -0.005485283, y: -0.7064342, z: -0.00018515853, w: 0.70775753} rotation: {x: 0, y: -0, z: -0, w: 1}
scale: {x: 1, y: 1.0000001, z: 1} scale: {x: 1, y: 1.0000001, z: 1}
- name: RightRingDistal - name: RightRingDistal
parentName: Bip001 R Finger32 parentName: Bip001 R Finger32
@ -3669,7 +3624,7 @@ ModelImporter:
- name: Bip001 R Finger42 - name: Bip001 R Finger42
parentName: Bip001 R Finger41 parentName: Bip001 R Finger41
position: {x: -0.012314654, y: 0.00020226823, z: -0.0003788877} position: {x: -0.012314654, y: 0.00020226823, z: -0.0003788877}
rotation: {x: -0.011842378, y: -0.7271125, z: -0.0031243283, w: 0.6864091} rotation: {x: 0, y: -0, z: -0, w: 1}
scale: {x: 1, y: 1, z: 1} scale: {x: 1, y: 1, z: 1}
- name: RightLittleDistal - name: RightLittleDistal
parentName: Bip001 R Finger42 parentName: Bip001 R Finger42
@ -4874,6 +4829,7 @@ ModelImporter:
humanoidOversampling: 1 humanoidOversampling: 1
avatarSetup: 1 avatarSetup: 1
addHumanoidExtraRootOnlyWhenUsingAvatar: 1 addHumanoidExtraRootOnlyWhenUsingAvatar: 1
importBlendShapeDeformPercent: 0
remapMaterialsIfMaterialImportModeIsNone: 0 remapMaterialsIfMaterialImportModeIsNone: 0
additionalBone: 0 additionalBone: 0
userData: userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: c8bc5db0f70ae78458714af97ea06b0f guid: 56a5467dc7e5f7d4e90b80748067d7b7
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}

Binary file not shown.

View File

@ -1,6 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: a11f56b3c9500aa44b5c30ea70686203 guid: 910b6485da06bce4397a062cc712cc75
folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 1a25fbcb4f851774fa305d24542f021b guid: 08a70818abbb86b4ba6e61ff6ed3054b
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}

View File

@ -1,257 +0,0 @@
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.IMGUI.Controls;
using UnityEngine;
namespace YAMO.BlendShapeLink.EditorTools
{
[CustomEditor(typeof(BlendShapeLink))]
public class BlendShapeLinkEditor : Editor
{
SerializedProperty _rules;
string[] _blendShapeNames; // index i = 블렌드셰이프 i 의 이름
int _blendShapeCount;
void OnEnable()
{
_rules = serializedObject.FindProperty(nameof(BlendShapeLink.rules));
RefreshBlendShapeNames();
}
void RefreshBlendShapeNames()
{
var link = (BlendShapeLink)target;
var smr = link.GetComponent<SkinnedMeshRenderer>();
if (smr == null || smr.sharedMesh == null)
{
_blendShapeNames = new string[0];
_blendShapeCount = 0;
return;
}
var mesh = smr.sharedMesh;
_blendShapeCount = mesh.blendShapeCount;
_blendShapeNames = new string[_blendShapeCount];
for (int i = 0; i < _blendShapeCount; i++)
_blendShapeNames[i] = mesh.GetBlendShapeName(i);
}
public override void OnInspectorGUI()
{
serializedObject.Update();
var smr = ((BlendShapeLink)target).GetComponent<SkinnedMeshRenderer>();
if (smr == null || smr.sharedMesh == null)
{
EditorGUILayout.HelpBox("SkinnedMeshRenderer 또는 sharedMesh 가 없습니다.", MessageType.Warning);
return;
}
if (_blendShapeCount != smr.sharedMesh.blendShapeCount)
RefreshBlendShapeNames();
if (_blendShapeCount == 0)
{
EditorGUILayout.HelpBox("이 메쉬에는 블렌드셰이프가 없습니다.", MessageType.Warning);
return;
}
EditorGUILayout.HelpBox("이 컴포넌트는 플레이 모드에서만 동작합니다.", MessageType.None);
EditorGUILayout.Space(6);
EditorGUILayout.LabelField("Link Rules", EditorStyles.boldLabel);
for (int i = 0; i < _rules.arraySize; i++)
{
var rule = _rules.GetArrayElementAtIndex(i);
var sourceIndex = rule.FindPropertyRelative(nameof(BlendShapeLink.LinkRule.sourceIndex));
var targetIndex = rule.FindPropertyRelative(nameof(BlendShapeLink.LinkRule.targetIndex));
var multiplier = rule.FindPropertyRelative(nameof(BlendShapeLink.LinkRule.multiplier));
var enabledProp = rule.FindPropertyRelative(nameof(BlendShapeLink.LinkRule.enabled));
EditorGUILayout.BeginVertical("box");
EditorGUILayout.BeginHorizontal();
enabledProp.boolValue = EditorGUILayout.ToggleLeft($"Rule {i}", enabledProp.boolValue, GUILayout.Width(80));
GUILayout.FlexibleSpace();
if (GUILayout.Button("▲", GUILayout.Width(24)) && i > 0)
_rules.MoveArrayElement(i, i - 1);
if (GUILayout.Button("▼", GUILayout.Width(24)) && i < _rules.arraySize - 1)
_rules.MoveArrayElement(i, i + 1);
if (GUILayout.Button("X", GUILayout.Width(24)))
{
_rules.DeleteArrayElementAtIndex(i);
EditorGUILayout.EndHorizontal();
EditorGUILayout.EndVertical();
break;
}
EditorGUILayout.EndHorizontal();
DrawBlendShapePicker("Source", i, true);
DrawBlendShapePicker("Target", i, false);
multiplier.floatValue = EditorGUILayout.FloatField(
new GUIContent("Multiplier", "Source 값에 곱해질 배율. 1 = 그대로, 0.5 = 절반"),
multiplier.floatValue);
var modeProp = rule.FindPropertyRelative("mode");
if (modeProp != null)
{
EditorGUILayout.PropertyField(modeProp,
new GUIContent("Mode",
"Multiply: source 는 그대로 두고 target 에 값 기여.\n" +
"Override: target 에 값 기여 후 source 를 0 으로 리셋 (값 이전/swap)."));
}
if (sourceIndex.intValue >= 0 && targetIndex.intValue >= 0 &&
sourceIndex.intValue == targetIndex.intValue)
{
EditorGUILayout.HelpBox(
"Source 와 Target 이 같음 → 자기 자신을 Multiplier 로 감쇠합니다. " +
"애니메이션이 매 프레임 값을 새로 써주지 않으면 0 으로 수렴하니 주의.",
MessageType.Info);
}
EditorGUILayout.EndVertical();
EditorGUILayout.Space(2);
}
EditorGUILayout.Space(4);
if (GUILayout.Button("+ Add Rule"))
{
_rules.arraySize++;
var newRule = _rules.GetArrayElementAtIndex(_rules.arraySize - 1);
newRule.FindPropertyRelative(nameof(BlendShapeLink.LinkRule.sourceIndex)).intValue = -1;
newRule.FindPropertyRelative(nameof(BlendShapeLink.LinkRule.targetIndex)).intValue = -1;
newRule.FindPropertyRelative(nameof(BlendShapeLink.LinkRule.multiplier)).floatValue = 1f;
newRule.FindPropertyRelative(nameof(BlendShapeLink.LinkRule.enabled)).boolValue = true;
}
EditorGUILayout.Space(4);
EditorGUILayout.HelpBox(
"• 같은 Target 에 여러 규칙이 걸리면, (Source × Multiplier) 중 가장 큰 값이 Target 에 덮어써집니다 (Max 방식).\n" +
"• Mode = Override 인 규칙은 Source 를 0 으로 리셋합니다. 서로 독립적인 셰이프키 사이의 '값 이전' 용도.",
MessageType.Info);
if (serializedObject.ApplyModifiedProperties())
{
if (!Application.isPlaying)
EditorUtility.SetDirty(target);
}
}
/// <summary>블렌드셰이프 인덱스를 검색 가능한 드롭다운(AdvancedDropdown)으로 선택.</summary>
void DrawBlendShapePicker(string label, int ruleIndex, bool isSource)
{
var link = (BlendShapeLink)target;
var rule = link.rules[ruleIndex];
int cur = isSource ? rule.sourceIndex : rule.targetIndex;
string currentLabel = (cur >= 0 && cur < _blendShapeCount)
? $"{cur}: {_blendShapeNames[cur]}"
: "(None)";
var rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight);
var labelRect = new Rect(rect.x, rect.y, EditorGUIUtility.labelWidth, rect.height);
var buttonRect = new Rect(labelRect.xMax, rect.y, rect.width - EditorGUIUtility.labelWidth, rect.height);
EditorGUI.LabelField(labelRect, label);
if (EditorGUI.DropdownButton(buttonRect, new GUIContent(currentLabel), FocusType.Keyboard))
{
Debug.Log($"[BlendShapeLink] Dropdown opened. rule={ruleIndex}, field={(isSource ? "Source" : "Target")}, current={cur}");
// 콜백이 비동기로 호출되므로 SerializedProperty 대신 타겟 오브젝트와 인덱스만 캡처.
var capturedLink = link;
int capturedRuleIndex = ruleIndex;
bool capturedIsSource = isSource;
var dropdown = new BlendShapeDropdown(
new AdvancedDropdownState(),
_blendShapeNames,
selectedIndex =>
{
Debug.Log($"[BlendShapeLink] Dropdown callback: selectedIndex={selectedIndex}, ruleIndex={capturedRuleIndex}, isSource={capturedIsSource}, linkNull={capturedLink == null}");
if (capturedLink == null)
{
Debug.LogWarning("[BlendShapeLink] target link is null — 객체가 파괴되었거나 선택이 해제됨");
return;
}
if (capturedRuleIndex < 0 || capturedRuleIndex >= capturedLink.rules.Count)
{
Debug.LogWarning($"[BlendShapeLink] ruleIndex {capturedRuleIndex} 범위 밖 (rules.Count={capturedLink.rules.Count})");
return;
}
Undo.RecordObject(capturedLink, "Change BlendShape Link");
var r = capturedLink.rules[capturedRuleIndex];
int before = capturedIsSource ? r.sourceIndex : r.targetIndex;
if (capturedIsSource)
r.sourceIndex = selectedIndex;
else
r.targetIndex = selectedIndex;
int after = capturedIsSource ? r.sourceIndex : r.targetIndex;
EditorUtility.SetDirty(capturedLink);
Debug.Log($"[BlendShapeLink] Assignment done: {(capturedIsSource ? "sourceIndex" : "targetIndex")} {before} → {after}");
Repaint();
});
dropdown.Show(buttonRect);
}
}
// ──────────────────────────────────────────────
// AdvancedDropdown: 검색창 + 스크롤이 있는 팝업
// ──────────────────────────────────────────────
class ShapeItem : AdvancedDropdownItem
{
public int shapeIndex;
public ShapeItem(string name, int idx) : base(name) { shapeIndex = idx; }
}
class BlendShapeDropdown : AdvancedDropdown
{
readonly string[] _names;
readonly System.Action<int> _onSelect;
public BlendShapeDropdown(AdvancedDropdownState state, string[] names, System.Action<int> onSelect)
: base(state)
{
_names = names;
_onSelect = onSelect;
minimumSize = new Vector2(300f, 400f);
}
protected override AdvancedDropdownItem BuildRoot()
{
Debug.Log($"[BlendShapeLink] BuildRoot called, names.Length={_names.Length}");
var root = new AdvancedDropdownItem("BlendShape");
root.AddChild(new ShapeItem("(None)", -1));
for (int i = 0; i < _names.Length; i++)
root.AddChild(new ShapeItem($"{i}: {_names[i]}", i));
Debug.Log($"[BlendShapeLink] BuildRoot done, children added");
return root;
}
protected override void ItemSelected(AdvancedDropdownItem item)
{
Debug.Log($"[BlendShapeLink] ItemSelected called. item={item?.name}, isShapeItem={item is ShapeItem}");
if (item is ShapeItem si)
{
Debug.Log($"[BlendShapeLink] → invoking callback with shapeIndex={si.shapeIndex}");
_onSelect?.Invoke(si.shapeIndex);
}
else
{
Debug.LogWarning($"[BlendShapeLink] ItemSelected but item is not ShapeItem: {item?.GetType().Name}");
}
}
}
}
}

View File

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 14ad9710d1e90eb47b57864943c5e455

View File

@ -1,121 +0,0 @@
using System.Collections.Generic;
using UnityEngine;
namespace YAMO.BlendShapeLink
{
/// <summary>
/// 특정 블렌드셰이프 값에 반응해서 다른 블렌드셰이프 값을 실시간으로 연동시킨다.
/// 여러 규칙이 같은 타겟에 걸려 있을 경우, (source * multiplier) 중 Max 값을 타겟에 덮어쓴다.
/// 플레이 모드에서만 동작한다.
/// </summary>
[RequireComponent(typeof(SkinnedMeshRenderer))]
[AddComponentMenu("YAMO/BlendShape Link")]
public class BlendShapeLink : MonoBehaviour
{
public enum LinkMode
{
/// <summary>target 에 (source × multiplier) 를 기여. source 는 그대로 둔다.</summary>
Multiply = 0,
/// <summary>target 에 (source × multiplier) 를 기여하고, source 는 0 으로 리셋.
/// 서로 독립적인 블렌드셰이프(EyeBlink ↔ EyeBlinkSmile) 간 값 이전에 사용.</summary>
Override = 1,
}
[System.Serializable]
public class LinkRule
{
[Tooltip("입력이 될 블렌드셰이프 인덱스")]
public int sourceIndex = -1;
[Tooltip("영향을 받을(덮어쓸) 블렌드셰이프 인덱스")]
public int targetIndex = -1;
[Tooltip("source 값에 곱해질 배율. 1 이면 그대로, 0.5 면 절반만 반영")]
public float multiplier = 1f;
[Tooltip("동작 모드. Multiply: source 유지. Override: source 를 0 으로 리셋해서 target 으로 값 이전")]
public LinkMode mode = LinkMode.Multiply;
[Tooltip("이 규칙을 켤지 여부")]
public bool enabled = true;
}
[Tooltip("연동 규칙 목록")]
public List<LinkRule> rules = new List<LinkRule>();
SkinnedMeshRenderer _smr;
// 타겟 인덱스별로 max(source*multiplier)를 모을 버퍼
readonly Dictionary<int, float> _targetMaxBuffer = new Dictionary<int, float>();
// Override 모드에서 0 으로 리셋해야 할 source 인덱스들
readonly HashSet<int> _overrideSources = new HashSet<int>();
void Awake()
{
_smr = GetComponent<SkinnedMeshRenderer>();
}
void LateUpdate()
{
if (_smr == null || _smr.sharedMesh == null)
return;
var mesh = _smr.sharedMesh;
int count = mesh.blendShapeCount;
if (count == 0 || rules == null || rules.Count == 0)
return;
_targetMaxBuffer.Clear();
_overrideSources.Clear();
// 1단계: 모든 규칙에서 source 값을 읽어 target 별 max 계산
// (source 값을 먼저 전부 읽어야 Override 리셋 전의 원본 값이 보존됨)
for (int i = 0; i < rules.Count; i++)
{
var r = rules[i];
if (r == null || !r.enabled)
continue;
if (r.sourceIndex < 0 || r.sourceIndex >= count)
continue;
if (r.targetIndex < 0 || r.targetIndex >= count)
continue;
// source == target 은 허용 — "자기 자신의 값을 multiplier 로 감쇠" 용도.
// (예: mult=0.5 → A = A × 0.5 로 수신량 절반으로 캡)
// 애니메이션이 매 프레임 원본 값을 다시 써주는 환경을 전제로 한다.
float src = _smr.GetBlendShapeWeight(r.sourceIndex);
float v = src * r.multiplier;
if (_targetMaxBuffer.TryGetValue(r.targetIndex, out float cur))
{
if (v > cur)
_targetMaxBuffer[r.targetIndex] = v;
}
else
{
_targetMaxBuffer[r.targetIndex] = v;
}
if (r.mode == LinkMode.Override)
_overrideSources.Add(r.sourceIndex);
}
// 2단계: target 값 쓰기
foreach (var kv in _targetMaxBuffer)
{
float clamped = Mathf.Clamp(kv.Value, 0f, 100f);
_smr.SetBlendShapeWeight(kv.Key, clamped);
}
// 3단계: Override 모드로 사용된 source 를 0 으로 리셋
// (단, 해당 source 가 다른 규칙의 target 이기도 하면 이미 그 값이 쓰였으므로 건너뜀)
foreach (int srcIdx in _overrideSources)
{
if (_targetMaxBuffer.ContainsKey(srcIdx))
continue;
_smr.SetBlendShapeWeight(srcIdx, 0f);
}
}
}
}

View File

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 40a80b2aa10f451409c6b4e7dd827c0d

View File

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

View File

@ -1,14 +0,0 @@
{
"name": "CameraComposition",
"rootNamespace": "",
"references": [],
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": false,
"precompiledReferences": [],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@ -1,14 +0,0 @@
fileFormatVersion: 2
guid: a2f7da84f307c3f4bbb7fed78a3a71b6
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 202816
packageName: Camera Composition - Grid Overlay Tool
packageVersion: 1.0.2
assetPath: Assets/Camera Composition/Scripts/CameraComposition.asmdef
uploadId: 471102

View File

@ -1,81 +0,0 @@
/* This file is part of the "Camera Composition" editor tool by Jordan Cassady.
* You are only permitted to use this software if purchased and downloaded from
* the Unity Asset Store. You shall not sell, license, transfer, distribute or
* otherwise make this software available to any third party.
*/
// You are only permitted to use this package if purchased and downloaded
using UnityEngine;
using UnityEngine.UI;
namespace JordanCassady
{
/// <summary>
/// Provide access to the composition overlay properties and methods for
/// manipulating the Image component from the editor window.
/// </summary>
[RequireComponent(typeof(Image))]
public class CompositionOverlay : MonoBehaviour
{
#region PROPERTIES
public bool IsActive { get { return GetComponent<Image>().enabled; } }
public float Opacity { get { return GetComponent<Image>().color.a; } }
#endregion
public void Activate(bool activate)
{
GetComponent<Image>().enabled = activate;
}
/// <summary>
/// Invert line color from white to black or vice versa.
/// </summary>
/// <param name="invert"></param>
/// <returns></returns>
public bool InvertLineColor(bool invert)
{
if (invert)
{
GetComponent<Image>().color = Color.black;
} else {
GetComponent<Image>().color = Color.white;
}
return invert;
}
/// <summary>
/// Update the grid overlay opacity by changing the Image alpha value.
/// </summary>
/// <param name="alpha"></param>
public void UpdateOpacity(float alpha)
{
var image = GetComponent<Image>();
GetComponent<Image>().color = new Color(image.color.r, image.color.g, image.color.b, alpha);
}
/// <summary>
/// Update the orientation of the overlay image.
/// </summary>
/// <param name="orientation"></param>/
public void Position(string orientation)
{
if (orientation == "Bottom Right")
{
GetComponent<Image>().transform.rotation = Quaternion.Euler(0, 0, 0);
}
else if (orientation == "Bottom Left")
{
GetComponent<Image>().transform.rotation = Quaternion.Euler(-180, 0, -180);
}
else if (orientation == "Top Right")
{
GetComponent<Image>().transform.rotation = Quaternion.Euler(-180, 0, 0);
}
else if (orientation == "Top Left")
{
GetComponent<Image>().transform.rotation = Quaternion.Euler(0, 0, -180);
}
}
}
}

View File

@ -1,18 +0,0 @@
fileFormatVersion: 2
guid: 98b784d50a6597540a070c89dc4b72d0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 202816
packageName: Camera Composition - Grid Overlay Tool
packageVersion: 1.0.2
assetPath: Assets/Camera Composition/Scripts/CompositionOverlay.cs
uploadId: 471102

View File

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

View File

@ -1,236 +0,0 @@
#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
namespace JordanCassady
{
public class CameraComposition : EditorWindow
{
#region PROPERTIES
private GameObject compositionObject;
private GUIStyle guiStyle;
private int tabIndex;
private GameObject targetCamera;
private Vector3 revertCameraPosition;
private Quaternion revertCameraRotation;
#endregion
private readonly string[] tabNames = { "Rule of Thirds", "Diagonal", "Golden Ratio", "Golden Spiral", "Cross" };
private Color greyColor = new Color(56f / 255f, 56f / 255f, 56f / 255f, 1f);
[MenuItem("Tools/Camera Composition")]
public static void ShowWindow()
{
var window = GetWindow<CameraComposition>("Camera Composition");
window.minSize = new Vector2(370, 186);
}
private void OnEnable()
{
InitGUIStyle();
}
private void OnDestroy()
{
if (compositionObject != null)
{
DestroyImmediate(compositionObject);
}
}
private void OnGUI()
{
if (compositionObject == null)
{
compositionObject = Instantiate(Resources.Load<GameObject>("Prefabs/Camera Composition"));
}
DrawTabSection();
DrawOverrideSection();
DrawCameraSection();
}
private void InitGUIStyle()
{
guiStyle = new GUIStyle
{
fontSize = 12,
fontStyle = FontStyle.Bold,
normal = { textColor = Color.white }
};
}
private void DrawTabSection()
{
tabIndex = GUILayout.Toolbar(tabIndex, tabNames);
GUILayout.Space(10);
if (compositionObject == null) return;
GameObject overlayObject = compositionObject.transform.GetChild(tabIndex).gameObject;
DrawGridSection(overlayObject);
DrawColorSection(overlayObject);
DrawOpacitySection(overlayObject);
if (tabIndex == 3) // Golden Spiral만 회전 지원
{
DrawRotationSection(overlayObject);
}
}
private void DrawGridSection(GameObject overlayObject)
{
GUILayout.Label("Grid", guiStyle);
GUILayout.BeginHorizontal();
if (GUILayout.Button("On", GUILayout.Height(20)))
overlayObject.GetComponent<CompositionOverlay>().Activate(true);
if (GUILayout.Button("Off", GUILayout.Height(20)))
overlayObject.GetComponent<CompositionOverlay>().Activate(false);
GUILayout.EndHorizontal();
GUILayout.Space(10);
}
private void DrawRotationSection(GameObject overlayObject)
{
GUILayout.Label("Rotation", guiStyle);
GUILayout.BeginHorizontal();
if (GUILayout.Button("↶ Top Left", GUILayout.Height(30)))
{
overlayObject.GetComponent<CompositionOverlay>().Position("Top Left");
ToggleGrid(overlayObject);
}
if (GUILayout.Button("↷ Top Right", GUILayout.Height(30)))
{
overlayObject.GetComponent<CompositionOverlay>().Position("Top Right");
ToggleGrid(overlayObject);
}
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
if (GUILayout.Button("↶ Bottom Left", GUILayout.Height(30)))
{
overlayObject.GetComponent<CompositionOverlay>().Position("Bottom Left");
ToggleGrid(overlayObject);
}
if (GUILayout.Button("↷ Bottom Right", GUILayout.Height(30)))
{
overlayObject.GetComponent<CompositionOverlay>().Position("Bottom Right");
ToggleGrid(overlayObject);
}
GUILayout.EndHorizontal();
GUILayout.Space(10);
}
private void DrawColorSection(GameObject overlayObject)
{
GUILayout.Label("Color", guiStyle);
GUILayout.BeginHorizontal();
if (GUILayout.Button("White", GUILayout.Height(20)))
{
overlayObject.GetComponent<CompositionOverlay>().InvertLineColor(false);
ToggleGrid(overlayObject);
}
if (GUILayout.Button("Black", GUILayout.Height(20)))
{
overlayObject.GetComponent<CompositionOverlay>().InvertLineColor(true);
ToggleGrid(overlayObject);
}
GUILayout.EndHorizontal();
GUILayout.Space(10);
}
private void DrawOpacitySection(GameObject overlayObject)
{
GUILayout.Label("Opacity", guiStyle);
var opacity = overlayObject.GetComponent<CompositionOverlay>().Opacity;
opacity = EditorGUILayout.Slider(opacity, 0f, 1f);
overlayObject.GetComponent<CompositionOverlay>().UpdateOpacity(opacity);
ToggleGrid(overlayObject);
GUILayout.Space(10);
}
private void DrawOverrideSection()
{
GUILayout.Label("Overrides", guiStyle);
if (GUILayout.Button("Turn Off All Grids", GUILayout.Height(20)))
{
if (compositionObject != null)
{
foreach (Transform overlayObject in compositionObject.transform)
{
overlayObject.gameObject.GetComponent<CompositionOverlay>().Activate(false);
}
}
}
GUILayout.Space(10);
}
private void DrawCameraSection()
{
GUILayout.Label("Target Camera", guiStyle);
targetCamera = (GameObject)EditorGUILayout.ObjectField(targetCamera, typeof(GameObject), true);
if (targetCamera == null)
{
EditorGUILayout.HelpBox("Select a target camera to adjust position & rotation.", MessageType.Info);
return;
}
GUILayout.Space(10);
GUILayout.Label("Position", guiStyle);
Undo.RecordObject(targetCamera.transform, "Camera Position Change");
targetCamera.transform.position = EditorGUILayout.Vector3Field("", targetCamera.transform.position);
GUILayout.Label("Rotation", guiStyle);
Undo.RecordObject(targetCamera.transform, "Camera Rotation Change");
Vector3 rotationVector = EditorGUILayout.Vector3Field("", targetCamera.transform.rotation.eulerAngles);
targetCamera.transform.rotation = Quaternion.Euler(rotationVector);
GUILayout.Space(10);
GUILayout.BeginHorizontal();
if (GUILayout.Button("Align Camera With Scene View", GUILayout.Height(25)))
{
revertCameraPosition = targetCamera.transform.position;
revertCameraRotation = targetCamera.transform.rotation;
SceneView sceneView = SceneView.lastActiveSceneView;
targetCamera.transform.position = sceneView.camera.transform.position;
targetCamera.transform.rotation = sceneView.camera.transform.rotation;
}
if (GUILayout.Button("Revert", GUILayout.Height(25)))
{
targetCamera.transform.position = revertCameraPosition;
targetCamera.transform.rotation = revertCameraRotation;
}
GUILayout.EndHorizontal();
}
private void ToggleGrid(GameObject overlayObject)
{
if (overlayObject.GetComponent<CompositionOverlay>().IsActive)
{
overlayObject.GetComponent<CompositionOverlay>().Activate(false);
overlayObject.GetComponent<CompositionOverlay>().Activate(true);
}
}
}
}
#endif

View File

@ -1,18 +0,0 @@
fileFormatVersion: 2
guid: ebd5b4dd87acf5d4fb4708e7f8254391
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 202816
packageName: Camera Composition - Grid Overlay Tool
packageVersion: 1.0.2
assetPath: Assets/Camera Composition/Scripts/Editor/CameraComposition.cs
uploadId: 471102

View File

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

View File

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

View File

@ -1,117 +0,0 @@
fileFormatVersion: 2
guid: 8d77b5e9fb0b60042bf500b550408d4a
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
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
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 0
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,115 +0,0 @@
fileFormatVersion: 2
guid: c9d95680f7765924597092167a372bb2
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 0
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 4096
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: 4096
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: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 202816
packageName: Camera Composition - Grid Overlay Tool
packageVersion: 1.0.2
assetPath: Assets/Camera Composition/Scripts/Resources/Overlays/overlays.diagonal.png
uploadId: 471102

View File

@ -1,115 +0,0 @@
fileFormatVersion: 2
guid: 79b9b80aefa75f64b9d5a30ea126eea5
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 0
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 4096
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: 4096
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: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 202816
packageName: Camera Composition - Grid Overlay Tool
packageVersion: 1.0.2
assetPath: Assets/Camera Composition/Scripts/Resources/Overlays/overlays.goldenratio.png
uploadId: 471102

View File

@ -1,115 +0,0 @@
fileFormatVersion: 2
guid: 1d42720af587c634194e68d63a6ab372
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 0
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 4096
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: 4096
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: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 202816
packageName: Camera Composition - Grid Overlay Tool
packageVersion: 1.0.2
assetPath: Assets/Camera Composition/Scripts/Resources/Overlays/overlays.goldenspiral.png
uploadId: 471102

View File

@ -1,115 +0,0 @@
fileFormatVersion: 2
guid: 73733fe54b9af5542add1b1dcda3fe6e
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 0
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 4096
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: 4096
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: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 202816
packageName: Camera Composition - Grid Overlay Tool
packageVersion: 1.0.2
assetPath: Assets/Camera Composition/Scripts/Resources/Overlays/overlays.ruleofthirds.png
uploadId: 471102

View File

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

View File

@ -1,14 +0,0 @@
fileFormatVersion: 2
guid: 95ddfacf554c2f24c977dafaf03affcd
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
AssetOrigin:
serializedVersion: 1
productId: 202816
packageName: Camera Composition - Grid Overlay Tool
packageVersion: 1.0.2
assetPath: Assets/Camera Composition/Scripts/Resources/Prefabs/Camera Composition.prefab
uploadId: 471102

View File

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

View File

@ -1,360 +0,0 @@
// ForearmHingeBaker.cs
// Unity Editor 스크립트 — Assets/Editor/ 폴더에 배치
//
// Humanoid 애니메이션 클립에서 Forearm의 비-힌지 회전 성분을 제거하고,
// UpperArm 회전을 보정하여 Hand가 원래 방향을 유지하도록 합니다.
// Biped의 단축(힌지) Forearm과 호환되는 Generic 클립을 생성합니다.
//
// 알고리즘:
// 1. 원본 포즈에서 Hand 월드 위치/회전을 기록
// 2. Forearm 힌지각을 해석적으로 풀이 — Hand가 그리는 원 위에서 원본 Hand에 가장 가까운 점
// 3. UpperArm을 최소한으로 보정하여 Hand가 원래 방향을 가리키도록
// 4. Hand 월드 회전을 원본으로 복원
//
// 사용법:
// 1. 씬에 Animator + Avatar가 설정된 캐릭터 배치
// 2. Tools > Animation > Forearm Hinge Baker
// 3. Animator와 소스 클립 지정
// 4. 힌지축 설정 (Forearm이 구부러지는 로컬 축)
// 5. Bake 실행 → _hinged.anim 파일 생성
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
public class ForearmHingeBaker : EditorWindow
{
Animator animator;
AnimationClip sourceClip;
int sampleRate = 30;
enum HingeAxis { X, Y, Z }
HingeAxis hingeAxis = HingeAxis.Z;
[MenuItem("Tools/Animation/Forearm Hinge Baker")]
static void Open()
{
var win = GetWindow<ForearmHingeBaker>("Forearm Hinge Baker");
win.minSize = new Vector2(350, 280);
}
void OnGUI()
{
EditorGUILayout.Space(4);
animator = EditorGUILayout.ObjectField("Animator (씬)", animator, typeof(Animator), true) as Animator;
sourceClip = EditorGUILayout.ObjectField("소스 클립", sourceClip, typeof(AnimationClip), false) as AnimationClip;
EditorGUILayout.Space(4);
sampleRate = EditorGUILayout.IntSlider("샘플레이트 (fps)", sampleRate, 1, 120);
hingeAxis = (HingeAxis)EditorGUILayout.EnumPopup("Forearm 힌지축 (로컬)", hingeAxis);
EditorGUILayout.Space(4);
EditorGUILayout.HelpBox(
"Forearm 힌지각을 해석적으로 풀이합니다.\n" +
"Hand가 힌지 회전으로 그리는 원 위에서 원본 위치에 가장 가까운 점을 찾고,\n" +
"UpperArm을 최소한으로 보정합니다.\n\n" +
"출력은 Generic 클립 (bone localRotation 기반)입니다.",
MessageType.Info);
EditorGUILayout.Space(4);
GUI.enabled = animator != null && sourceClip != null;
if (GUILayout.Button("Bake", GUILayout.Height(30)))
Bake();
GUI.enabled = true;
}
// ============================================================
// Core
// ============================================================
void Bake()
{
var go = animator.gameObject;
// 양쪽 팔 트리플렛: upper, lower, hand
var armTriplets = new (HumanBodyBones upper, HumanBodyBones lower, HumanBodyBones hand)[]
{
(HumanBodyBones.LeftUpperArm, HumanBodyBones.LeftLowerArm, HumanBodyBones.LeftHand),
(HumanBodyBones.RightUpperArm, HumanBodyBones.RightLowerArm, HumanBodyBones.RightHand),
};
// 본 계층 수집 (루트 자식부터, path = 상대경로)
var allBones = new List<Transform>();
var bonePaths = new Dictionary<Transform, string>();
foreach (Transform child in go.transform)
CollectHierarchy(child, child.name, allBones, bonePaths);
if (allBones.Count == 0)
{
EditorUtility.DisplayDialog("오류", "Animator 하위에 본이 없습니다.", "OK");
return;
}
int frameCount = Mathf.CeilToInt(sourceClip.length * sampleRate) + 1;
// 프레임별 저장소
var rotations = new Dictionary<Transform, Quaternion[]>();
var positions = new Dictionary<Transform, Vector3[]>();
foreach (var bone in allBones)
{
rotations[bone] = new Quaternion[frameCount];
positions[bone] = new Vector3[frameCount];
}
// 힌지축 벡터
Vector3 axisVec = hingeAxis switch
{
HingeAxis.X => Vector3.right,
HingeAxis.Y => Vector3.up,
HingeAxis.Z => Vector3.forward,
_ => Vector3.forward
};
// 수정 대상 본 세트 (arm triplet에 포함된 본들)
var modifiedBones = new HashSet<Transform>();
// 샘플링 + 힌지 제약 적용
AnimationMode.StartAnimationMode();
try
{
for (int i = 0; i < frameCount; i++)
{
float t = Mathf.Min((float)i / sampleRate, sourceClip.length);
AnimationMode.SampleAnimationClip(go, sourceClip, t);
// 모든 본의 원본 로컬 트랜스폼 기록
foreach (var bone in allBones)
{
rotations[bone][i] = bone.localRotation;
positions[bone][i] = bone.localPosition;
}
// 각 팔에 힌지 제약 적용
foreach (var (upperBone, lowerBone, handBone) in armTriplets)
{
var upper = animator.GetBoneTransform(upperBone);
var lower = animator.GetBoneTransform(lowerBone);
var hand = animator.GetBoneTransform(handBone);
if (upper == null || lower == null || hand == null) continue;
// 첫 프레임에서 수정 대상 등록
if (i == 0)
{
modifiedBones.Add(upper);
modifiedBones.Add(lower);
modifiedBones.Add(hand);
}
// --- 0. 원본 월드 트랜스폼 기록 ---
Vector3 origHandPos = hand.position;
Quaternion origHandRot = hand.rotation;
Vector3 shoulderPos = upper.position;
Vector3 elbowPos = lower.position;
// --- 1. 최적 힌지 각도 해석적 풀이 ---
// Forearm이 힌지축으로만 회전하면 Hand는 팔꿈치 중심 원 위를 이동.
// 이 원 위에서 원본 Hand 위치에 가장 가까운 점의 각도를 구함.
// θ=0, θ=90 에서 Hand 위치를 샘플링하여 원의 기하 정의
lower.localRotation = Quaternion.identity;
Vector3 h0 = hand.position - elbowPos;
lower.localRotation = Quaternion.AngleAxis(90f, axisVec);
Vector3 h90 = hand.position - elbowPos;
// 월드 힌지축
Quaternion parentRot = lower.parent != null ? lower.parent.rotation : Quaternion.identity;
Vector3 worldAxis = (parentRot * axisVec).normalized;
// 원의 중심 (elbow 기준 오프셋)
Vector3 centerOffset = Vector3.Dot(h0, worldAxis) * worldAxis;
// 원 위의 기준 방향
Vector3 r0 = h0 - centerOffset;
Vector3 r90 = h90 - centerOffset;
// 타겟을 원 평면에 투영
Vector3 targetOffset = origHandPos - elbowPos - centerOffset;
Vector3 targetInPlane = targetOffset - Vector3.Dot(targetOffset, worldAxis) * worldAxis;
float theta = 0f;
if (targetInPlane.sqrMagnitude > 1e-10f && r0.sqrMagnitude > 1e-10f)
{
theta = Mathf.Atan2(
Vector3.Dot(targetInPlane.normalized, r90.normalized),
Vector3.Dot(targetInPlane.normalized, r0.normalized)
) * Mathf.Rad2Deg;
}
// --- 2. 최적 힌지 각도 적용 ---
lower.localRotation = Quaternion.AngleAxis(theta, axisVec);
// --- 3. UpperArm 최소 보정 ---
// 최적 힌지라도 원본 Hand가 원 밖이면 오차 존재.
// FromToRotation으로 어깨→손 방향을 일치시켜 잔여 오차 보정.
Vector3 currentHandPos = hand.position;
Vector3 curDir = (currentHandPos - shoulderPos);
Vector3 tgtDir = (origHandPos - shoulderPos);
if (curDir.sqrMagnitude > 1e-8f && tgtDir.sqrMagnitude > 1e-8f)
{
Quaternion correction = Quaternion.FromToRotation(curDir.normalized, tgtDir.normalized);
upper.rotation = correction * upper.rotation;
}
// --- 4. Hand 월드 회전 복원 ---
hand.rotation = origHandRot;
// 수정된 로컬 회전 저장
rotations[upper][i] = upper.localRotation;
rotations[lower][i] = lower.localRotation;
rotations[hand][i] = hand.localRotation;
}
// 진행률
if (i % 100 == 0)
EditorUtility.DisplayProgressBar("Forearm Hinge Baker",
$"샘플링 {i}/{frameCount}", (float)i / frameCount);
}
}
finally
{
AnimationMode.StopAnimationMode();
EditorUtility.ClearProgressBar();
}
// 새 클립 생성
var newClip = new AnimationClip();
newClip.frameRate = sampleRate;
foreach (var bone in allBones)
{
string path = bonePaths[bone];
var rots = rotations[bone];
var poss = positions[bone];
// 회전 커브 (Quaternion)
var cx = new AnimationCurve();
var cy = new AnimationCurve();
var cz = new AnimationCurve();
var cw = new AnimationCurve();
for (int j = 0; j < frameCount; j++)
{
float time = (float)j / sampleRate;
cx.AddKey(time, rots[j].x);
cy.AddKey(time, rots[j].y);
cz.AddKey(time, rots[j].z);
cw.AddKey(time, rots[j].w);
}
newClip.SetCurve(path, typeof(Transform), "localRotation.x", cx);
newClip.SetCurve(path, typeof(Transform), "localRotation.y", cy);
newClip.SetCurve(path, typeof(Transform), "localRotation.z", cz);
newClip.SetCurve(path, typeof(Transform), "localRotation.w", cw);
// 위치 커브 (변화가 있는 본만)
bool posAnimated = false;
for (int j = 1; j < frameCount; j++)
{
if ((poss[j] - poss[0]).sqrMagnitude > 1e-6f)
{
posAnimated = true;
break;
}
}
if (posAnimated)
{
var px = new AnimationCurve();
var py = new AnimationCurve();
var pz = new AnimationCurve();
for (int j = 0; j < frameCount; j++)
{
float time = (float)j / sampleRate;
px.AddKey(time, poss[j].x);
py.AddKey(time, poss[j].y);
pz.AddKey(time, poss[j].z);
}
newClip.SetCurve(path, typeof(Transform), "localPosition.x", px);
newClip.SetCurve(path, typeof(Transform), "localPosition.y", py);
newClip.SetCurve(path, typeof(Transform), "localPosition.z", pz);
}
}
newClip.EnsureQuaternionContinuity();
// 저장
string srcPath = AssetDatabase.GetAssetPath(sourceClip);
string newPath;
if (!string.IsNullOrEmpty(srcPath))
{
string dir = System.IO.Path.GetDirectoryName(srcPath);
string name = System.IO.Path.GetFileNameWithoutExtension(srcPath);
newPath = $"{dir}/{name}_hinged.anim";
}
else
{
newPath = "Assets/hinged_clip.anim";
}
newPath = AssetDatabase.GenerateUniqueAssetPath(newPath);
AssetDatabase.CreateAsset(newClip, newPath);
AssetDatabase.SaveAssets();
Debug.Log($"[ForearmHingeBaker] 저장 완료: {newPath} ({frameCount}프레임, {allBones.Count}본)");
EditorUtility.DisplayDialog("완료",
$"저장: {newPath}\n프레임: {frameCount}\n본: {allBones.Count}", "OK");
Selection.activeObject = newClip;
EditorGUIUtility.PingObject(newClip);
}
// ============================================================
// Swing-Twist 분해
// q = swing * twist
// twist = 지정 축 주위 회전 (힌지 성분, forearm에 유지)
// swing = 나머지 회전 (제거 대상)
// ============================================================
static void SwingTwist(Quaternion q, Vector3 twistAxis,
out Quaternion swing, out Quaternion twist)
{
Vector3 r = new Vector3(q.x, q.y, q.z);
Vector3 proj = Vector3.Dot(r, twistAxis) * twistAxis;
twist = new Quaternion(proj.x, proj.y, proj.z, q.w);
float mag = Mathf.Sqrt(twist.x * twist.x + twist.y * twist.y
+ twist.z * twist.z + twist.w * twist.w);
if (mag < 1e-6f)
{
twist = Quaternion.identity;
swing = q;
}
else
{
twist.x /= mag;
twist.y /= mag;
twist.z /= mag;
twist.w /= mag;
swing = q * Quaternion.Inverse(twist);
}
}
// ============================================================
// 본 계층 수집
// ============================================================
void CollectHierarchy(Transform t, string path,
List<Transform> bones, Dictionary<Transform, string> paths)
{
bones.Add(t);
paths[t] = path;
for (int i = 0; i < t.childCount; i++)
{
var child = t.GetChild(i);
CollectHierarchy(child, path + "/" + child.name, bones, paths);
}
}
}

View File

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: d45c483a732289e469d197dbe3a983b2

BIN
Packages/manifest.json (Stored with Git LFS)

Binary file not shown.

BIN
Packages/packages-lock.json (Stored with Git LFS)

Binary file not shown.

BIN
ProjectSettings/ProjectSettings.asset (Stored with Git LFS)

Binary file not shown.