ADD: 260513 숙희님 방송용 씬
This commit is contained in:
parent
edf6896d65
commit
a9e4f04295
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실.unity
(Stored with Git LFS)
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실.unity
(Stored with Git LFS)
Binary file not shown.
@ -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:
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
BIN
Assets/ResourcesData/Character/@035_공태연/Avatar/공태연_260513_화이트제복/공태연_260513_화이트제복_Biped.prefab
(Stored with Git LFS)
BIN
Assets/ResourcesData/Character/@035_공태연/Avatar/공태연_260513_화이트제복/공태연_260513_화이트제복_Biped.prefab
(Stored with Git LFS)
Binary file not shown.
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
BIN
Assets/ResourcesData/Character/@050_슈니/Avatar/슈니_260513_화이트제복/슈니_260513_화이트제복_Biped.prefab
(Stored with Git LFS)
BIN
Assets/ResourcesData/Character/@050_슈니/Avatar/슈니_260513_화이트제복/슈니_260513_화이트제복_Biped.prefab
(Stored with Git LFS)
Binary file not shown.
BIN
Assets/ResourcesData/Project/260128_지한방송/260128_지한방송_Volume_기본블룸.asset
(Stored with Git LFS)
BIN
Assets/ResourcesData/Project/260128_지한방송/260128_지한방송_Volume_기본블룸.asset
(Stored with Git LFS)
Binary file not shown.
BIN
Assets/ResourcesData/Project/260128_지한방송/260128_지한방송_Volume_차갑게.asset
(Stored with Git LFS)
BIN
Assets/ResourcesData/Project/260128_지한방송/260128_지한방송_Volume_차갑게.asset
(Stored with Git LFS)
Binary file not shown.
@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: c8bc5db0f70ae78458714af97ea06b0f
|
guid: 56a5467dc7e5f7d4e90b80748067d7b7
|
||||||
folderAsset: yes
|
folderAsset: yes
|
||||||
DefaultImporter:
|
DefaultImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
BIN
Assets/ResourcesData/Project/260513_숙희님방송/260513_숙희님방송.unity
(Stored with Git LFS)
Normal file
BIN
Assets/ResourcesData/Project/260513_숙희님방송/260513_숙희님방송.unity
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -1,6 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: a11f56b3c9500aa44b5c30ea70686203
|
guid: 910b6485da06bce4397a062cc712cc75
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
DefaultImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
userData:
|
userData:
|
||||||
@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 1a25fbcb4f851774fa305d24542f021b
|
guid: 08a70818abbb86b4ba6e61ff6ed3054b
|
||||||
folderAsset: yes
|
folderAsset: yes
|
||||||
DefaultImporter:
|
DefaultImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
@ -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}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,2 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 14ad9710d1e90eb47b57864943c5e455
|
|
||||||
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,2 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 40a80b2aa10f451409c6b4e7dd827c0d
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: d055de095e477eb4083e75ec18afc37b
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "CameraComposition",
|
|
||||||
"rootNamespace": "",
|
|
||||||
"references": [],
|
|
||||||
"includePlatforms": [],
|
|
||||||
"excludePlatforms": [],
|
|
||||||
"allowUnsafeCode": false,
|
|
||||||
"overrideReferences": false,
|
|
||||||
"precompiledReferences": [],
|
|
||||||
"autoReferenced": true,
|
|
||||||
"defineConstraints": [],
|
|
||||||
"versionDefines": [],
|
|
||||||
"noEngineReferences": false
|
|
||||||
}
|
|
||||||
@ -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
|
|
||||||
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -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
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: cff1447509629e94e8a9944a36f9ab42
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -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
|
|
||||||
@ -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
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: dd7470611f8359d44bade60d577c1b3a
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: f82d8fb0476d4ec49ba51d3ccc9bb995
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -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:
|
|
||||||
@ -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
|
|
||||||
@ -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
|
|
||||||
@ -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
|
|
||||||
@ -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
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 3da72fa5689b23e4db4a26f4614a4f37
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -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
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 26ba51d5378e4454ab782efd48126706
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,2 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: d45c483a732289e469d197dbe3a983b2
|
|
||||||
BIN
Packages/manifest.json
(Stored with Git LFS)
BIN
Packages/manifest.json
(Stored with Git LFS)
Binary file not shown.
BIN
Packages/packages-lock.json
(Stored with Git LFS)
BIN
Packages/packages-lock.json
(Stored with Git LFS)
Binary file not shown.
BIN
ProjectSettings/ProjectSettings.asset
(Stored with Git LFS)
BIN
ProjectSettings/ProjectSettings.asset
(Stored with Git LFS)
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user