ADD : 웹 리타겟팅 기능 추가 및 연습실 크기 키우기 바닥 그림자 기능 추가 시스템 컨트롤러에서 클라이언트 없으면 자동 추가
This commit is contained in:
parent
951ccedb06
commit
8daba5b832
@ -17,8 +17,10 @@ namespace UnityEditor.Rendering.Universal.ShaderGUI
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
private LitSplatGUI.LitProperties litSplatProperties;
|
private LitSplatGUI.LitProperties litSplatProperties;
|
||||||
private LitScreenSpaceOutlineGUI.LitProperties litScreenSpaceOutlineProperties;
|
private LitScreenSpaceOutlineGUI.LitProperties litScreenSpaceOutlineProperties;
|
||||||
|
private LitCharSelfShadowGUI.LitProperties litCharSelfShadowProperties;
|
||||||
private SavedBool m_SplatInputsFolder;
|
private SavedBool m_SplatInputsFolder;
|
||||||
private SavedBool m_ScreenSpaceOutlineInputsFolder;
|
private SavedBool m_ScreenSpaceOutlineInputsFolder;
|
||||||
|
private SavedBool m_CharSelfShadowInputsFolder;
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
|
||||||
// NiloToon added (to support URP 12):
|
// NiloToon added (to support URP 12):
|
||||||
@ -31,6 +33,7 @@ namespace UnityEditor.Rendering.Universal.ShaderGUI
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
materialScopesList.RegisterHeaderScope(LitSplatGUI.Styles.splatInputs, Expandable.Details, _ => LitSplatGUI.DoSplatArea(litSplatProperties, materialEditor));
|
materialScopesList.RegisterHeaderScope(LitSplatGUI.Styles.splatInputs, Expandable.Details, _ => LitSplatGUI.DoSplatArea(litSplatProperties, materialEditor));
|
||||||
materialScopesList.RegisterHeaderScope(LitScreenSpaceOutlineGUI.Styles.outlineInputs, Expandable.Details, _ => LitScreenSpaceOutlineGUI.DoScreenSpaceOutlineArea(litScreenSpaceOutlineProperties, materialEditor));
|
materialScopesList.RegisterHeaderScope(LitScreenSpaceOutlineGUI.Styles.outlineInputs, Expandable.Details, _ => LitScreenSpaceOutlineGUI.DoScreenSpaceOutlineArea(litScreenSpaceOutlineProperties, materialEditor));
|
||||||
|
materialScopesList.RegisterHeaderScope(LitCharSelfShadowGUI.Styles.charSelfShadowInputs, Expandable.Details, _ => LitCharSelfShadowGUI.DoCharSelfShadowArea(litCharSelfShadowProperties, materialEditor));
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
}
|
}
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@ -46,6 +49,7 @@ namespace UnityEditor.Rendering.Universal.ShaderGUI
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
litSplatProperties = new LitSplatGUI.LitProperties(properties);
|
litSplatProperties = new LitSplatGUI.LitProperties(properties);
|
||||||
litScreenSpaceOutlineProperties = new LitScreenSpaceOutlineGUI.LitProperties(properties);
|
litScreenSpaceOutlineProperties = new LitScreenSpaceOutlineGUI.LitProperties(properties);
|
||||||
|
litCharSelfShadowProperties = new LitCharSelfShadowGUI.LitProperties(properties);
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,6 +74,7 @@ namespace UnityEditor.Rendering.Universal.ShaderGUI
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
LitSplatGUI.SetMaterialKeywords(material);
|
LitSplatGUI.SetMaterialKeywords(material);
|
||||||
LitScreenSpaceOutlineGUI.SetMaterialKeywords(material);
|
LitScreenSpaceOutlineGUI.SetMaterialKeywords(material);
|
||||||
|
LitCharSelfShadowGUI.SetMaterialKeywords(material);
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -533,6 +538,73 @@ namespace UnityEditor.Rendering.Universal.ShaderGUI
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal class LitCharSelfShadowGUI
|
||||||
|
{
|
||||||
|
public static class Styles
|
||||||
|
{
|
||||||
|
public static readonly GUIContent charSelfShadowInputs = new GUIContent("NiloToon Character Self Shadow",
|
||||||
|
"These settings let you receive shadow from NiloToon characters.");
|
||||||
|
|
||||||
|
public static readonly GUIContent receiveCharShadow = new GUIContent("Receive Char Shadow",
|
||||||
|
"Enable to receive shadow cast by NiloToon characters. Requires NiloToon Renderer Feature's Character Self Shadow to be enabled.");
|
||||||
|
public static readonly GUIContent charShadowStrength = new GUIContent("Shadow Strength",
|
||||||
|
"Controls the intensity of the received character shadow.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct LitProperties
|
||||||
|
{
|
||||||
|
public MaterialProperty receiveNiloToonCharShadow;
|
||||||
|
public MaterialProperty niloToonCharShadowStrength;
|
||||||
|
|
||||||
|
public LitProperties(MaterialProperty[] properties)
|
||||||
|
{
|
||||||
|
receiveNiloToonCharShadow = BaseShaderGUI.FindProperty("_ReceiveNiloToonCharShadow", properties, false);
|
||||||
|
niloToonCharShadowStrength = BaseShaderGUI.FindProperty("_NiloToonCharShadowStrength", properties, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DoCharSelfShadowArea(LitProperties properties, MaterialEditor materialEditor)
|
||||||
|
{
|
||||||
|
// Toggle for receiving character shadow
|
||||||
|
if (properties.receiveNiloToonCharShadow != null)
|
||||||
|
{
|
||||||
|
EditorGUI.BeginChangeCheck();
|
||||||
|
EditorGUI.showMixedValue = properties.receiveNiloToonCharShadow.hasMixedValue;
|
||||||
|
var value = EditorGUILayout.Toggle(Styles.receiveCharShadow, properties.receiveNiloToonCharShadow.floatValue > 0.5f);
|
||||||
|
if (EditorGUI.EndChangeCheck())
|
||||||
|
properties.receiveNiloToonCharShadow.floatValue = value ? 1.0f : 0.0f;
|
||||||
|
EditorGUI.showMixedValue = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shadow strength slider (only show when receive shadow is enabled)
|
||||||
|
if (properties.niloToonCharShadowStrength != null && properties.receiveNiloToonCharShadow != null)
|
||||||
|
{
|
||||||
|
if (properties.receiveNiloToonCharShadow.floatValue > 0.5f)
|
||||||
|
{
|
||||||
|
EditorGUI.indentLevel++;
|
||||||
|
EditorGUI.BeginChangeCheck();
|
||||||
|
EditorGUI.showMixedValue = properties.niloToonCharShadowStrength.hasMixedValue;
|
||||||
|
var strengthValue = EditorGUILayout.Slider(Styles.charShadowStrength, properties.niloToonCharShadowStrength.floatValue, 0f, 1f);
|
||||||
|
if (EditorGUI.EndChangeCheck())
|
||||||
|
properties.niloToonCharShadowStrength.floatValue = strengthValue;
|
||||||
|
EditorGUI.showMixedValue = false;
|
||||||
|
EditorGUI.indentLevel--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Info box
|
||||||
|
EditorGUILayout.HelpBox("Requires NiloToon Renderer Feature's 'Character Self Shadow' to be enabled.", MessageType.Info);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SetMaterialKeywords(Material material)
|
||||||
|
{
|
||||||
|
if (material.HasProperty("_ReceiveNiloToonCharShadow"))
|
||||||
|
{
|
||||||
|
CoreUtils.SetKeyword(material, "_RECEIVE_NILOTOON_CHAR_SHADOW", material.GetFloat("_ReceiveNiloToonCharShadow") > 0.5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
//=====================================================================================================================================
|
//=====================================================================================================================================
|
||||||
|
|
||||||
// direct copy from URP10.5.1's LitDetailGUI.cs (no edit)
|
// direct copy from URP10.5.1's LitDetailGUI.cs (no edit)
|
||||||
|
|||||||
@ -114,6 +114,12 @@ Shader "Universal Render Pipeline/NiloToon/NiloToon_Environment"
|
|||||||
_ScreenSpaceOutlineIntensity("_ScreenSpaceOutlineIntensity", Range(0,1)) = 1
|
_ScreenSpaceOutlineIntensity("_ScreenSpaceOutlineIntensity", Range(0,1)) = 1
|
||||||
[HDR]_ScreenSpaceOutlineColor("_ScreenSpaceOutlineColor", Color) = (1,1,1,1)
|
[HDR]_ScreenSpaceOutlineColor("_ScreenSpaceOutlineColor", Color) = (1,1,1,1)
|
||||||
_ScreenSpaceOutlineWidth("_ScreenSpaceOutlineWidth", Float) = 1
|
_ScreenSpaceOutlineWidth("_ScreenSpaceOutlineWidth", Float) = 1
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// NiloToon Character Self Shadow (receive shadow from NiloToon characters)
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
[Toggle(_RECEIVE_NILOTOON_CHAR_SHADOW)] _ReceiveNiloToonCharShadow("Receive NiloToon Char Shadow", Float) = 0
|
||||||
|
_NiloToonCharShadowStrength(" Shadow Strength", Range(0, 1)) = 1.0
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
// Blending state
|
// Blending state
|
||||||
@ -282,6 +288,8 @@ Shader "Universal Render Pipeline/NiloToon/NiloToon_Environment"
|
|||||||
#pragma shader_feature_local _SPLATMAP
|
#pragma shader_feature_local _SPLATMAP
|
||||||
#pragma multi_compile_fragment _ _NILOTOON_GLOBAL_ENABLE_SCREENSPACE_OUTLINE
|
#pragma multi_compile_fragment _ _NILOTOON_GLOBAL_ENABLE_SCREENSPACE_OUTLINE
|
||||||
//#pragma multi_compile_fragment _ _NILOTOON_GLOBAL_ENABLE_SCREENSPACE_OUTLINE_V2 //WIP, temp disabled
|
//#pragma multi_compile_fragment _ _NILOTOON_GLOBAL_ENABLE_SCREENSPACE_OUTLINE_V2 //WIP, temp disabled
|
||||||
|
#pragma shader_feature_local_fragment _RECEIVE_NILOTOON_CHAR_SHADOW
|
||||||
|
#pragma multi_compile_fragment _ _NILOTOON_RECEIVE_SELF_SHADOW
|
||||||
//==========================================================================================================
|
//==========================================================================================================
|
||||||
|
|
||||||
//[NiloToon] remove:
|
//[NiloToon] remove:
|
||||||
|
|||||||
@ -26,6 +26,8 @@
|
|||||||
#define _NILOTOON_GLOBAL_ENABLE_SCREENSPACE_OUTLINE 1
|
#define _NILOTOON_GLOBAL_ENABLE_SCREENSPACE_OUTLINE 1
|
||||||
#define _NILOTOON_GLOBAL_ENABLE_SCREENSPACE_OUTLINE_V2 1
|
#define _NILOTOON_GLOBAL_ENABLE_SCREENSPACE_OUTLINE_V2 1
|
||||||
#define _SPLATMAP 1
|
#define _SPLATMAP 1
|
||||||
|
#define _RECEIVE_NILOTOON_CHAR_SHADOW 1
|
||||||
|
#define _NILOTOON_RECEIVE_SELF_SHADOW 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../../ShaderLibrary/NiloUtilityHLSL/NiloAllUtilIncludes.hlsl"
|
#include "../../ShaderLibrary/NiloUtilityHLSL/NiloAllUtilIncludes.hlsl"
|
||||||
@ -251,8 +253,88 @@ float _GlobalScreenSpaceOutlineV2NormalAngleCosThetaThresholdForEnvi;
|
|||||||
// global camera uniforms
|
// global camera uniforms
|
||||||
float _CurrentCameraFOV;
|
float _CurrentCameraFOV;
|
||||||
|
|
||||||
|
// NiloToon Character Self Shadow uniforms and texture
|
||||||
|
#if defined(_RECEIVE_NILOTOON_CHAR_SHADOW) && defined(_NILOTOON_RECEIVE_SELF_SHADOW)
|
||||||
|
TEXTURE2D(_NiloToonCharSelfShadowMapRT);
|
||||||
|
SAMPLER_CMP(sampler_NiloToonCharSelfShadowMapRT_LinearClampCompare);
|
||||||
|
SAMPLER(sampler_NiloToonCharSelfShadowMapRT_Linear_Clamp); // for raw depth sampling
|
||||||
|
|
||||||
|
float4x4 _NiloToonSelfShadowWorldToClip;
|
||||||
|
float4 _NiloToonSelfShadowParam; // (1/w, 1/h, w, h)
|
||||||
|
float3 _NiloToonSelfShadowLightDirection;
|
||||||
|
float _GlobalReceiveNiloToonSelfShadowMap;
|
||||||
|
float _NiloToonSelfShadowRange;
|
||||||
|
float _NiloToonSelfShadowUseNdotLFix;
|
||||||
|
float _NiloToonCharShadowStrength; // per-material shadow strength
|
||||||
|
#endif
|
||||||
|
|
||||||
// include files, include as late as possible to get all defines
|
// include files, include as late as possible to get all defines
|
||||||
#include "NiloToonEnvironment_ExtendFunctionsForUserCustomLogic.hlsl"
|
#include "NiloToonEnvironment_ExtendFunctionsForUserCustomLogic.hlsl"
|
||||||
|
|
||||||
|
// NiloToon Character Self Shadow sampling function
|
||||||
|
#if defined(_RECEIVE_NILOTOON_CHAR_SHADOW) && defined(_NILOTOON_RECEIVE_SELF_SHADOW)
|
||||||
|
half SampleNiloToonCharSelfShadow(float3 positionWS, float3 normalWS, float linearEyeDepth)
|
||||||
|
{
|
||||||
|
// Transform world position to shadow map clip space
|
||||||
|
float4 positionSelfShadowCS = mul(_NiloToonSelfShadowWorldToClip, float4(positionWS, 1));
|
||||||
|
float3 positionSelfShadowNDC = positionSelfShadowCS.xyz;
|
||||||
|
|
||||||
|
// Convert NDC.xy[-1,1] to UV[0,1]
|
||||||
|
float2 shadowMapUV = positionSelfShadowNDC.xy * 0.5 + 0.5;
|
||||||
|
|
||||||
|
// Calculate compare value for shadow test
|
||||||
|
float ndcZCompareValue = positionSelfShadowNDC.z;
|
||||||
|
|
||||||
|
// If OpenGL, convert NDC.z[-1,1] to [0,1], because shadowmap uses [0,1] range
|
||||||
|
// If DirectX, it's already [0,1]
|
||||||
|
ndcZCompareValue = UNITY_NEAR_CLIP_VALUE < 0 ? ndcZCompareValue * 0.5 + 0.5 : ndcZCompareValue;
|
||||||
|
|
||||||
|
// If DirectX, flip shadowMapUV.y (y = 1-y)
|
||||||
|
// If OpenGL, do nothing
|
||||||
|
#if UNITY_UV_STARTS_AT_TOP
|
||||||
|
shadowMapUV.y = 1 - shadowMapUV.y;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Check if outside shadow map UV bounds - no shadow outside
|
||||||
|
if(shadowMapUV.x < 0 || shadowMapUV.x > 1 || shadowMapUV.y < 0 || shadowMapUV.y > 1)
|
||||||
|
{
|
||||||
|
return 1; // no shadow
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sample raw depth from shadow map to check if this is an empty area (no character)
|
||||||
|
// Empty areas have depth = 0 (cleared value), which would incorrectly cause shadow
|
||||||
|
float shadowMapRawDepth = SAMPLE_TEXTURE2D_LOD(_NiloToonCharSelfShadowMapRT,
|
||||||
|
sampler_NiloToonCharSelfShadowMapRT_Linear_Clamp,
|
||||||
|
shadowMapUV, 0).r;
|
||||||
|
|
||||||
|
// If shadowmap depth is near 0 (empty area - no character rendered there), no shadow
|
||||||
|
// In reverse-Z, 0 = far plane (empty/cleared), values closer to 1 = actual geometry
|
||||||
|
if(shadowMapRawDepth < 0.0001)
|
||||||
|
{
|
||||||
|
return 1; // no shadow - empty area in shadow map
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pack UV and compare value for SAMPLE_TEXTURE2D_SHADOW
|
||||||
|
float4 selfShadowmapUV = float4(shadowMapUV, ndcZCompareValue, 0);
|
||||||
|
|
||||||
|
// Sample shadow map with depth comparison (hardware 1-tap bilinear filter)
|
||||||
|
half shadow = SAMPLE_TEXTURE2D_SHADOW(_NiloToonCharSelfShadowMapRT,
|
||||||
|
sampler_NiloToonCharSelfShadowMapRT_LinearClampCompare,
|
||||||
|
selfShadowmapUV.xyz);
|
||||||
|
|
||||||
|
// Fadeout shadow if reaching the end of shadow distance
|
||||||
|
float fadeTotalDistance = 1.0;
|
||||||
|
shadow = lerp(shadow, 1, saturate((1.0 / fadeTotalDistance) * (linearEyeDepth - (_NiloToonSelfShadowRange - fadeTotalDistance))));
|
||||||
|
|
||||||
|
// Use N dot L fix to hide shadow acne on surfaces facing away from light
|
||||||
|
if(_NiloToonSelfShadowUseNdotLFix > 0.5)
|
||||||
|
{
|
||||||
|
shadow *= smoothstep(0.1, 0.2, saturate(dot(normalWS, _NiloToonSelfShadowLightDirection)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return shadow;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
//==========================================================================================================================================================
|
//==========================================================================================================================================================
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
@ -521,6 +603,16 @@ void LitPassFragment(
|
|||||||
|
|
||||||
Light mainLight = GetMainLight(inputData.shadowCoord, inputData.positionWS, shadowMask);
|
Light mainLight = GetMainLight(inputData.shadowCoord, inputData.positionWS, shadowMask);
|
||||||
|
|
||||||
|
// NiloToon Character Self Shadow
|
||||||
|
#if defined(_RECEIVE_NILOTOON_CHAR_SHADOW) && defined(_NILOTOON_RECEIVE_SELF_SHADOW)
|
||||||
|
{
|
||||||
|
float linearEyeDepth = abs(mul(UNITY_MATRIX_V, float4(input.positionWS, 1)).z);
|
||||||
|
half charSelfShadow = SampleNiloToonCharSelfShadow(input.positionWS, inputData.normalWS, linearEyeDepth);
|
||||||
|
charSelfShadow = lerp(1, charSelfShadow, _NiloToonCharShadowStrength * _GlobalReceiveNiloToonSelfShadowMap);
|
||||||
|
color.rgb *= charSelfShadow;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// shadow border tint color
|
// shadow border tint color
|
||||||
float isShadowEdge = 1-abs(mainLight.shadowAttenuation-0.5)*2;
|
float isShadowEdge = 1-abs(mainLight.shadowAttenuation-0.5)*2;
|
||||||
color.rgb = lerp(color.rgb,color.rgb * _NiloToonGlobalEnviShadowBorderTintColor.rgb, isShadowEdge * _NiloToonGlobalEnviShadowBorderTintColor.a);
|
color.rgb = lerp(color.rgb,color.rgb * _NiloToonGlobalEnviShadowBorderTintColor.rgb, isShadowEdge * _NiloToonGlobalEnviShadowBorderTintColor.a);
|
||||||
|
|||||||
8
Assets/Resources/KindRetargeting.meta
Normal file
8
Assets/Resources/KindRetargeting.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 53a33bd699913a642832d9cefe527f21
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/Resources/KindRetargeting/retargeting_script.txt
(Stored with Git LFS)
Normal file
BIN
Assets/Resources/KindRetargeting/retargeting_script.txt
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 500a6ad5f33a60347b30b0ca73a3e650
|
||||||
|
TextScriptImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/Resources/KindRetargeting/retargeting_style.txt
(Stored with Git LFS)
Normal file
BIN
Assets/Resources/KindRetargeting/retargeting_style.txt
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f26ead3daa5f7de479c0c8547b3a792d
|
||||||
|
TextScriptImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/Resources/KindRetargeting/retargeting_template.txt
(Stored with Git LFS)
Normal file
BIN
Assets/Resources/KindRetargeting/retargeting_template.txt
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 227ed0897c5a66b47b6431f0c95fa98a
|
||||||
|
TextScriptImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/Resources/KindRetargeting/웹 리타겟팅.txt
(Stored with Git LFS)
Normal file
BIN
Assets/Resources/KindRetargeting/웹 리타겟팅.txt
(Stored with Git LFS)
Normal file
Binary file not shown.
7
Assets/Resources/KindRetargeting/웹 리타겟팅.txt.meta
Normal file
7
Assets/Resources/KindRetargeting/웹 리타겟팅.txt.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b9d33120f9b2266498b51080310c89e6
|
||||||
|
TextScriptImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/Resources/Settings/Streamingle Render Pipeline Asset_Renderer.asset
(Stored with Git LFS)
BIN
Assets/Resources/Settings/Streamingle Render Pipeline Asset_Renderer.asset
(Stored with Git LFS)
Binary file not shown.
@ -8,7 +8,7 @@ Material:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: Door__Door_C_jpg
|
m_Name: Door__Door_C_jpg
|
||||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
m_Shader: {fileID: 4800000, guid: 50e19b7c9fbe3324e978246ad9789e96, type: 3}
|
||||||
m_Parent: {fileID: 0}
|
m_Parent: {fileID: 0}
|
||||||
m_ModifiedSerializedProperties: 0
|
m_ModifiedSerializedProperties: 0
|
||||||
m_ValidKeywords: []
|
m_ValidKeywords: []
|
||||||
@ -19,8 +19,7 @@ Material:
|
|||||||
m_CustomRenderQueue: -1
|
m_CustomRenderQueue: -1
|
||||||
stringTagMap:
|
stringTagMap:
|
||||||
RenderType: Opaque
|
RenderType: Opaque
|
||||||
disabledShaderPasses:
|
disabledShaderPasses: []
|
||||||
- MOTIONVECTORS
|
|
||||||
m_LockedProperties:
|
m_LockedProperties:
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
@ -33,6 +32,10 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _ClearCoatMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- _DetailAlbedoMap:
|
- _DetailAlbedoMap:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -69,6 +72,58 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatMaskMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- unity_Lightmaps:
|
- unity_Lightmaps:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -88,7 +143,9 @@ Material:
|
|||||||
- _AlphaToMask: 0
|
- _AlphaToMask: 0
|
||||||
- _Blend: 0
|
- _Blend: 0
|
||||||
- _BlendModePreserveSpecular: 1
|
- _BlendModePreserveSpecular: 1
|
||||||
|
- _BlendOp: 0
|
||||||
- _BumpScale: 1
|
- _BumpScale: 1
|
||||||
|
- _ClearCoat: 0
|
||||||
- _ClearCoatMask: 0
|
- _ClearCoatMask: 0
|
||||||
- _ClearCoatSmoothness: 0
|
- _ClearCoatSmoothness: 0
|
||||||
- _Cull: 2
|
- _Cull: 2
|
||||||
@ -106,9 +163,29 @@ Material:
|
|||||||
- _Parallax: 0.005
|
- _Parallax: 0.005
|
||||||
- _QueueOffset: 0
|
- _QueueOffset: 0
|
||||||
- _ReceiveShadows: 1
|
- _ReceiveShadows: 1
|
||||||
|
- _ScreenSpaceOutlineIntensity: 1
|
||||||
|
- _ScreenSpaceOutlineWidth: 1
|
||||||
- _Smoothness: 0
|
- _Smoothness: 0
|
||||||
- _SmoothnessTextureChannel: 0
|
- _SmoothnessTextureChannel: 0
|
||||||
- _SpecularHighlights: 1
|
- _SpecularHighlights: 1
|
||||||
|
- _SplatAlbedoMapATiling: 1
|
||||||
|
- _SplatAlbedoMapBTiling: 1
|
||||||
|
- _SplatAlbedoMapGTiling: 1
|
||||||
|
- _SplatAlbedoMapRTiling: 1
|
||||||
|
- _SplatHeightMultiplierA: 1
|
||||||
|
- _SplatHeightMultiplierB: 1
|
||||||
|
- _SplatHeightMultiplierG: 1
|
||||||
|
- _SplatHeightMultiplierR: 1
|
||||||
|
- _SplatMapFeatureOnOff: 0
|
||||||
|
- _SplatMaskBlendingSoftness: 0.5
|
||||||
|
- _SplatNormalMapIntensityA: 1
|
||||||
|
- _SplatNormalMapIntensityB: 1
|
||||||
|
- _SplatNormalMapIntensityG: 1
|
||||||
|
- _SplatNormalMapIntensityR: 1
|
||||||
|
- _SplatSmoothnessMultiplierA: 1
|
||||||
|
- _SplatSmoothnessMultiplierB: 1
|
||||||
|
- _SplatSmoothnessMultiplierG: 1
|
||||||
|
- _SplatSmoothnessMultiplierR: 1
|
||||||
- _SrcBlend: 1
|
- _SrcBlend: 1
|
||||||
- _SrcBlendAlpha: 1
|
- _SrcBlendAlpha: 1
|
||||||
- _Surface: 0
|
- _Surface: 0
|
||||||
@ -119,7 +196,12 @@ Material:
|
|||||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _ScreenSpaceOutlineColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||||
|
- _SplatAlbedoMapATintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapBTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapGTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapRTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
m_BuildTextureStacks: []
|
m_BuildTextureStacks: []
|
||||||
m_AllowLocking: 1
|
m_AllowLocking: 1
|
||||||
--- !u!114 &1862183031488364992
|
--- !u!114 &1862183031488364992
|
||||||
|
|||||||
@ -8,7 +8,7 @@ Material:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: Glass
|
m_Name: Glass
|
||||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
m_Shader: {fileID: 4800000, guid: 50e19b7c9fbe3324e978246ad9789e96, type: 3}
|
||||||
m_Parent: {fileID: 0}
|
m_Parent: {fileID: 0}
|
||||||
m_ModifiedSerializedProperties: 0
|
m_ModifiedSerializedProperties: 0
|
||||||
m_ValidKeywords:
|
m_ValidKeywords:
|
||||||
@ -22,9 +22,8 @@ Material:
|
|||||||
stringTagMap:
|
stringTagMap:
|
||||||
RenderType: Transparent
|
RenderType: Transparent
|
||||||
disabledShaderPasses:
|
disabledShaderPasses:
|
||||||
- MOTIONVECTORS
|
|
||||||
- DepthOnly
|
|
||||||
- SHADOWCASTER
|
- SHADOWCASTER
|
||||||
|
- DepthOnly
|
||||||
m_LockedProperties:
|
m_LockedProperties:
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
@ -37,6 +36,10 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _ClearCoatMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- _DetailAlbedoMap:
|
- _DetailAlbedoMap:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -73,6 +76,58 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatMaskMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- unity_Lightmaps:
|
- unity_Lightmaps:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -92,7 +147,9 @@ Material:
|
|||||||
- _AlphaToMask: 0
|
- _AlphaToMask: 0
|
||||||
- _Blend: 0
|
- _Blend: 0
|
||||||
- _BlendModePreserveSpecular: 1
|
- _BlendModePreserveSpecular: 1
|
||||||
|
- _BlendOp: 0
|
||||||
- _BumpScale: 1
|
- _BumpScale: 1
|
||||||
|
- _ClearCoat: 0
|
||||||
- _ClearCoatMask: 0
|
- _ClearCoatMask: 0
|
||||||
- _ClearCoatSmoothness: 0
|
- _ClearCoatSmoothness: 0
|
||||||
- _Cull: 2
|
- _Cull: 2
|
||||||
@ -110,9 +167,29 @@ Material:
|
|||||||
- _Parallax: 0.005
|
- _Parallax: 0.005
|
||||||
- _QueueOffset: 0
|
- _QueueOffset: 0
|
||||||
- _ReceiveShadows: 1
|
- _ReceiveShadows: 1
|
||||||
|
- _ScreenSpaceOutlineIntensity: 1
|
||||||
|
- _ScreenSpaceOutlineWidth: 1
|
||||||
- _Smoothness: 1
|
- _Smoothness: 1
|
||||||
- _SmoothnessTextureChannel: 0
|
- _SmoothnessTextureChannel: 0
|
||||||
- _SpecularHighlights: 1
|
- _SpecularHighlights: 1
|
||||||
|
- _SplatAlbedoMapATiling: 1
|
||||||
|
- _SplatAlbedoMapBTiling: 1
|
||||||
|
- _SplatAlbedoMapGTiling: 1
|
||||||
|
- _SplatAlbedoMapRTiling: 1
|
||||||
|
- _SplatHeightMultiplierA: 1
|
||||||
|
- _SplatHeightMultiplierB: 1
|
||||||
|
- _SplatHeightMultiplierG: 1
|
||||||
|
- _SplatHeightMultiplierR: 1
|
||||||
|
- _SplatMapFeatureOnOff: 0
|
||||||
|
- _SplatMaskBlendingSoftness: 0.5
|
||||||
|
- _SplatNormalMapIntensityA: 1
|
||||||
|
- _SplatNormalMapIntensityB: 1
|
||||||
|
- _SplatNormalMapIntensityG: 1
|
||||||
|
- _SplatNormalMapIntensityR: 1
|
||||||
|
- _SplatSmoothnessMultiplierA: 1
|
||||||
|
- _SplatSmoothnessMultiplierB: 1
|
||||||
|
- _SplatSmoothnessMultiplierG: 1
|
||||||
|
- _SplatSmoothnessMultiplierR: 1
|
||||||
- _SrcBlend: 1
|
- _SrcBlend: 1
|
||||||
- _SrcBlendAlpha: 1
|
- _SrcBlendAlpha: 1
|
||||||
- _Surface: 1
|
- _Surface: 1
|
||||||
@ -123,7 +200,12 @@ Material:
|
|||||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 0.12941177}
|
- _BaseColor: {r: 1, g: 1, b: 1, a: 0.12941177}
|
||||||
- _Color: {r: 1, g: 1, b: 1, a: 0.12941177}
|
- _Color: {r: 1, g: 1, b: 1, a: 0.12941177}
|
||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _ScreenSpaceOutlineColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||||
|
- _SplatAlbedoMapATintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapBTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapGTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapRTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
m_BuildTextureStacks: []
|
m_BuildTextureStacks: []
|
||||||
m_AllowLocking: 1
|
m_AllowLocking: 1
|
||||||
--- !u!114 &5761234848443323032
|
--- !u!114 &5761234848443323032
|
||||||
|
|||||||
@ -8,7 +8,7 @@ Material:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: Glossy__Reflexion_jpg
|
m_Name: Glossy__Reflexion_jpg
|
||||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
m_Shader: {fileID: 4800000, guid: 50e19b7c9fbe3324e978246ad9789e96, type: 3}
|
||||||
m_Parent: {fileID: 0}
|
m_Parent: {fileID: 0}
|
||||||
m_ModifiedSerializedProperties: 0
|
m_ModifiedSerializedProperties: 0
|
||||||
m_ValidKeywords: []
|
m_ValidKeywords: []
|
||||||
@ -19,8 +19,7 @@ Material:
|
|||||||
m_CustomRenderQueue: -1
|
m_CustomRenderQueue: -1
|
||||||
stringTagMap:
|
stringTagMap:
|
||||||
RenderType: Opaque
|
RenderType: Opaque
|
||||||
disabledShaderPasses:
|
disabledShaderPasses: []
|
||||||
- MOTIONVECTORS
|
|
||||||
m_LockedProperties:
|
m_LockedProperties:
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
@ -33,6 +32,10 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _ClearCoatMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- _DetailAlbedoMap:
|
- _DetailAlbedoMap:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -69,6 +72,58 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatMaskMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- unity_Lightmaps:
|
- unity_Lightmaps:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -88,7 +143,9 @@ Material:
|
|||||||
- _AlphaToMask: 0
|
- _AlphaToMask: 0
|
||||||
- _Blend: 0
|
- _Blend: 0
|
||||||
- _BlendModePreserveSpecular: 1
|
- _BlendModePreserveSpecular: 1
|
||||||
|
- _BlendOp: 0
|
||||||
- _BumpScale: 1
|
- _BumpScale: 1
|
||||||
|
- _ClearCoat: 0
|
||||||
- _ClearCoatMask: 0
|
- _ClearCoatMask: 0
|
||||||
- _ClearCoatSmoothness: 0
|
- _ClearCoatSmoothness: 0
|
||||||
- _Cull: 2
|
- _Cull: 2
|
||||||
@ -106,9 +163,29 @@ Material:
|
|||||||
- _Parallax: 0.005
|
- _Parallax: 0.005
|
||||||
- _QueueOffset: 0
|
- _QueueOffset: 0
|
||||||
- _ReceiveShadows: 1
|
- _ReceiveShadows: 1
|
||||||
|
- _ScreenSpaceOutlineIntensity: 1
|
||||||
|
- _ScreenSpaceOutlineWidth: 1
|
||||||
- _Smoothness: 0
|
- _Smoothness: 0
|
||||||
- _SmoothnessTextureChannel: 0
|
- _SmoothnessTextureChannel: 0
|
||||||
- _SpecularHighlights: 1
|
- _SpecularHighlights: 1
|
||||||
|
- _SplatAlbedoMapATiling: 1
|
||||||
|
- _SplatAlbedoMapBTiling: 1
|
||||||
|
- _SplatAlbedoMapGTiling: 1
|
||||||
|
- _SplatAlbedoMapRTiling: 1
|
||||||
|
- _SplatHeightMultiplierA: 1
|
||||||
|
- _SplatHeightMultiplierB: 1
|
||||||
|
- _SplatHeightMultiplierG: 1
|
||||||
|
- _SplatHeightMultiplierR: 1
|
||||||
|
- _SplatMapFeatureOnOff: 0
|
||||||
|
- _SplatMaskBlendingSoftness: 0.5
|
||||||
|
- _SplatNormalMapIntensityA: 1
|
||||||
|
- _SplatNormalMapIntensityB: 1
|
||||||
|
- _SplatNormalMapIntensityG: 1
|
||||||
|
- _SplatNormalMapIntensityR: 1
|
||||||
|
- _SplatSmoothnessMultiplierA: 1
|
||||||
|
- _SplatSmoothnessMultiplierB: 1
|
||||||
|
- _SplatSmoothnessMultiplierG: 1
|
||||||
|
- _SplatSmoothnessMultiplierR: 1
|
||||||
- _SrcBlend: 1
|
- _SrcBlend: 1
|
||||||
- _SrcBlendAlpha: 1
|
- _SrcBlendAlpha: 1
|
||||||
- _Surface: 0
|
- _Surface: 0
|
||||||
@ -119,7 +196,12 @@ Material:
|
|||||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _ScreenSpaceOutlineColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||||
|
- _SplatAlbedoMapATintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapBTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapGTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapRTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
m_BuildTextureStacks: []
|
m_BuildTextureStacks: []
|
||||||
m_AllowLocking: 1
|
m_AllowLocking: 1
|
||||||
--- !u!114 &7470487251160043050
|
--- !u!114 &7470487251160043050
|
||||||
|
|||||||
@ -21,7 +21,7 @@ Material:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: Glossy__Reflexion_jpg_0
|
m_Name: Glossy__Reflexion_jpg_0
|
||||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
m_Shader: {fileID: 4800000, guid: 50e19b7c9fbe3324e978246ad9789e96, type: 3}
|
||||||
m_Parent: {fileID: 0}
|
m_Parent: {fileID: 0}
|
||||||
m_ModifiedSerializedProperties: 0
|
m_ModifiedSerializedProperties: 0
|
||||||
m_ValidKeywords: []
|
m_ValidKeywords: []
|
||||||
@ -32,8 +32,7 @@ Material:
|
|||||||
m_CustomRenderQueue: -1
|
m_CustomRenderQueue: -1
|
||||||
stringTagMap:
|
stringTagMap:
|
||||||
RenderType: Opaque
|
RenderType: Opaque
|
||||||
disabledShaderPasses:
|
disabledShaderPasses: []
|
||||||
- MOTIONVECTORS
|
|
||||||
m_LockedProperties:
|
m_LockedProperties:
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
@ -46,6 +45,10 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _ClearCoatMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- _DetailAlbedoMap:
|
- _DetailAlbedoMap:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -82,6 +85,58 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatMaskMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- unity_Lightmaps:
|
- unity_Lightmaps:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -101,7 +156,9 @@ Material:
|
|||||||
- _AlphaToMask: 0
|
- _AlphaToMask: 0
|
||||||
- _Blend: 0
|
- _Blend: 0
|
||||||
- _BlendModePreserveSpecular: 1
|
- _BlendModePreserveSpecular: 1
|
||||||
|
- _BlendOp: 0
|
||||||
- _BumpScale: 1
|
- _BumpScale: 1
|
||||||
|
- _ClearCoat: 0
|
||||||
- _ClearCoatMask: 0
|
- _ClearCoatMask: 0
|
||||||
- _ClearCoatSmoothness: 0
|
- _ClearCoatSmoothness: 0
|
||||||
- _Cull: 2
|
- _Cull: 2
|
||||||
@ -119,9 +176,29 @@ Material:
|
|||||||
- _Parallax: 0.005
|
- _Parallax: 0.005
|
||||||
- _QueueOffset: 0
|
- _QueueOffset: 0
|
||||||
- _ReceiveShadows: 1
|
- _ReceiveShadows: 1
|
||||||
|
- _ScreenSpaceOutlineIntensity: 1
|
||||||
|
- _ScreenSpaceOutlineWidth: 1
|
||||||
- _Smoothness: 0
|
- _Smoothness: 0
|
||||||
- _SmoothnessTextureChannel: 0
|
- _SmoothnessTextureChannel: 0
|
||||||
- _SpecularHighlights: 1
|
- _SpecularHighlights: 1
|
||||||
|
- _SplatAlbedoMapATiling: 1
|
||||||
|
- _SplatAlbedoMapBTiling: 1
|
||||||
|
- _SplatAlbedoMapGTiling: 1
|
||||||
|
- _SplatAlbedoMapRTiling: 1
|
||||||
|
- _SplatHeightMultiplierA: 1
|
||||||
|
- _SplatHeightMultiplierB: 1
|
||||||
|
- _SplatHeightMultiplierG: 1
|
||||||
|
- _SplatHeightMultiplierR: 1
|
||||||
|
- _SplatMapFeatureOnOff: 0
|
||||||
|
- _SplatMaskBlendingSoftness: 0.5
|
||||||
|
- _SplatNormalMapIntensityA: 1
|
||||||
|
- _SplatNormalMapIntensityB: 1
|
||||||
|
- _SplatNormalMapIntensityG: 1
|
||||||
|
- _SplatNormalMapIntensityR: 1
|
||||||
|
- _SplatSmoothnessMultiplierA: 1
|
||||||
|
- _SplatSmoothnessMultiplierB: 1
|
||||||
|
- _SplatSmoothnessMultiplierG: 1
|
||||||
|
- _SplatSmoothnessMultiplierR: 1
|
||||||
- _SrcBlend: 1
|
- _SrcBlend: 1
|
||||||
- _SrcBlendAlpha: 1
|
- _SrcBlendAlpha: 1
|
||||||
- _Surface: 0
|
- _Surface: 0
|
||||||
@ -132,6 +209,11 @@ Material:
|
|||||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _ScreenSpaceOutlineColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||||
|
- _SplatAlbedoMapATintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapBTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapGTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapRTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
m_BuildTextureStacks: []
|
m_BuildTextureStacks: []
|
||||||
m_AllowLocking: 1
|
m_AllowLocking: 1
|
||||||
|
|||||||
@ -8,7 +8,7 @@ Material:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: Glossy__Reflexion_jpg_1
|
m_Name: Glossy__Reflexion_jpg_1
|
||||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
m_Shader: {fileID: 4800000, guid: 50e19b7c9fbe3324e978246ad9789e96, type: 3}
|
||||||
m_Parent: {fileID: 0}
|
m_Parent: {fileID: 0}
|
||||||
m_ModifiedSerializedProperties: 0
|
m_ModifiedSerializedProperties: 0
|
||||||
m_ValidKeywords: []
|
m_ValidKeywords: []
|
||||||
@ -19,8 +19,7 @@ Material:
|
|||||||
m_CustomRenderQueue: -1
|
m_CustomRenderQueue: -1
|
||||||
stringTagMap:
|
stringTagMap:
|
||||||
RenderType: Opaque
|
RenderType: Opaque
|
||||||
disabledShaderPasses:
|
disabledShaderPasses: []
|
||||||
- MOTIONVECTORS
|
|
||||||
m_LockedProperties:
|
m_LockedProperties:
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
@ -33,6 +32,10 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _ClearCoatMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- _DetailAlbedoMap:
|
- _DetailAlbedoMap:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -69,6 +72,58 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatMaskMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- unity_Lightmaps:
|
- unity_Lightmaps:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -88,7 +143,9 @@ Material:
|
|||||||
- _AlphaToMask: 0
|
- _AlphaToMask: 0
|
||||||
- _Blend: 0
|
- _Blend: 0
|
||||||
- _BlendModePreserveSpecular: 1
|
- _BlendModePreserveSpecular: 1
|
||||||
|
- _BlendOp: 0
|
||||||
- _BumpScale: 1
|
- _BumpScale: 1
|
||||||
|
- _ClearCoat: 0
|
||||||
- _ClearCoatMask: 0
|
- _ClearCoatMask: 0
|
||||||
- _ClearCoatSmoothness: 0
|
- _ClearCoatSmoothness: 0
|
||||||
- _Cull: 2
|
- _Cull: 2
|
||||||
@ -106,9 +163,29 @@ Material:
|
|||||||
- _Parallax: 0.005
|
- _Parallax: 0.005
|
||||||
- _QueueOffset: 0
|
- _QueueOffset: 0
|
||||||
- _ReceiveShadows: 1
|
- _ReceiveShadows: 1
|
||||||
|
- _ScreenSpaceOutlineIntensity: 1
|
||||||
|
- _ScreenSpaceOutlineWidth: 1
|
||||||
- _Smoothness: 0
|
- _Smoothness: 0
|
||||||
- _SmoothnessTextureChannel: 0
|
- _SmoothnessTextureChannel: 0
|
||||||
- _SpecularHighlights: 1
|
- _SpecularHighlights: 1
|
||||||
|
- _SplatAlbedoMapATiling: 1
|
||||||
|
- _SplatAlbedoMapBTiling: 1
|
||||||
|
- _SplatAlbedoMapGTiling: 1
|
||||||
|
- _SplatAlbedoMapRTiling: 1
|
||||||
|
- _SplatHeightMultiplierA: 1
|
||||||
|
- _SplatHeightMultiplierB: 1
|
||||||
|
- _SplatHeightMultiplierG: 1
|
||||||
|
- _SplatHeightMultiplierR: 1
|
||||||
|
- _SplatMapFeatureOnOff: 0
|
||||||
|
- _SplatMaskBlendingSoftness: 0.5
|
||||||
|
- _SplatNormalMapIntensityA: 1
|
||||||
|
- _SplatNormalMapIntensityB: 1
|
||||||
|
- _SplatNormalMapIntensityG: 1
|
||||||
|
- _SplatNormalMapIntensityR: 1
|
||||||
|
- _SplatSmoothnessMultiplierA: 1
|
||||||
|
- _SplatSmoothnessMultiplierB: 1
|
||||||
|
- _SplatSmoothnessMultiplierG: 1
|
||||||
|
- _SplatSmoothnessMultiplierR: 1
|
||||||
- _SrcBlend: 1
|
- _SrcBlend: 1
|
||||||
- _SrcBlendAlpha: 1
|
- _SrcBlendAlpha: 1
|
||||||
- _Surface: 0
|
- _Surface: 0
|
||||||
@ -119,7 +196,12 @@ Material:
|
|||||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _ScreenSpaceOutlineColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||||
|
- _SplatAlbedoMapATintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapBTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapGTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapRTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
m_BuildTextureStacks: []
|
m_BuildTextureStacks: []
|
||||||
m_AllowLocking: 1
|
m_AllowLocking: 1
|
||||||
--- !u!114 &7269642324176022440
|
--- !u!114 &7269642324176022440
|
||||||
|
|||||||
@ -21,11 +21,12 @@ Material:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: Material.001
|
m_Name: Material.001
|
||||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
m_Shader: {fileID: 4800000, guid: 50e19b7c9fbe3324e978246ad9789e96, type: 3}
|
||||||
m_Parent: {fileID: 0}
|
m_Parent: {fileID: 0}
|
||||||
m_ModifiedSerializedProperties: 0
|
m_ModifiedSerializedProperties: 0
|
||||||
m_ValidKeywords:
|
m_ValidKeywords:
|
||||||
- _NORMALMAP
|
- _NORMALMAP
|
||||||
|
- _RECEIVE_NILOTOON_CHAR_SHADOW
|
||||||
m_InvalidKeywords: []
|
m_InvalidKeywords: []
|
||||||
m_LightmapFlags: 4
|
m_LightmapFlags: 4
|
||||||
m_EnableInstancingVariants: 0
|
m_EnableInstancingVariants: 0
|
||||||
@ -33,8 +34,7 @@ Material:
|
|||||||
m_CustomRenderQueue: -1
|
m_CustomRenderQueue: -1
|
||||||
stringTagMap:
|
stringTagMap:
|
||||||
RenderType: Opaque
|
RenderType: Opaque
|
||||||
disabledShaderPasses:
|
disabledShaderPasses: []
|
||||||
- MOTIONVECTORS
|
|
||||||
m_LockedProperties:
|
m_LockedProperties:
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
@ -47,6 +47,10 @@ Material:
|
|||||||
m_Texture: {fileID: 2800000, guid: 98d719629dbafc44aa8c71a15aa70ece, type: 3}
|
m_Texture: {fileID: 2800000, guid: 98d719629dbafc44aa8c71a15aa70ece, 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}
|
||||||
|
- _ClearCoatMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- _DetailAlbedoMap:
|
- _DetailAlbedoMap:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -83,6 +87,58 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatMaskMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- unity_Lightmaps:
|
- unity_Lightmaps:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -102,7 +158,9 @@ Material:
|
|||||||
- _AlphaToMask: 0
|
- _AlphaToMask: 0
|
||||||
- _Blend: 0
|
- _Blend: 0
|
||||||
- _BlendModePreserveSpecular: 1
|
- _BlendModePreserveSpecular: 1
|
||||||
|
- _BlendOp: 0
|
||||||
- _BumpScale: 1
|
- _BumpScale: 1
|
||||||
|
- _ClearCoat: 0
|
||||||
- _ClearCoatMask: 0
|
- _ClearCoatMask: 0
|
||||||
- _ClearCoatSmoothness: 0
|
- _ClearCoatSmoothness: 0
|
||||||
- _Cull: 2
|
- _Cull: 2
|
||||||
@ -116,13 +174,35 @@ Material:
|
|||||||
- _Glossiness: 0
|
- _Glossiness: 0
|
||||||
- _GlossyReflections: 0
|
- _GlossyReflections: 0
|
||||||
- _Metallic: 0.036
|
- _Metallic: 0.036
|
||||||
|
- _NiloToonCharShadowStrength: 0.436
|
||||||
- _OcclusionStrength: 1
|
- _OcclusionStrength: 1
|
||||||
- _Parallax: 0.005
|
- _Parallax: 0.005
|
||||||
- _QueueOffset: 0
|
- _QueueOffset: 0
|
||||||
|
- _ReceiveNiloToonCharShadow: 1
|
||||||
- _ReceiveShadows: 1
|
- _ReceiveShadows: 1
|
||||||
|
- _ScreenSpaceOutlineIntensity: 1
|
||||||
|
- _ScreenSpaceOutlineWidth: 1
|
||||||
- _Smoothness: 0.916
|
- _Smoothness: 0.916
|
||||||
- _SmoothnessTextureChannel: 0
|
- _SmoothnessTextureChannel: 0
|
||||||
- _SpecularHighlights: 1
|
- _SpecularHighlights: 1
|
||||||
|
- _SplatAlbedoMapATiling: 1
|
||||||
|
- _SplatAlbedoMapBTiling: 1
|
||||||
|
- _SplatAlbedoMapGTiling: 1
|
||||||
|
- _SplatAlbedoMapRTiling: 1
|
||||||
|
- _SplatHeightMultiplierA: 1
|
||||||
|
- _SplatHeightMultiplierB: 1
|
||||||
|
- _SplatHeightMultiplierG: 1
|
||||||
|
- _SplatHeightMultiplierR: 1
|
||||||
|
- _SplatMapFeatureOnOff: 0
|
||||||
|
- _SplatMaskBlendingSoftness: 0.5
|
||||||
|
- _SplatNormalMapIntensityA: 1
|
||||||
|
- _SplatNormalMapIntensityB: 1
|
||||||
|
- _SplatNormalMapIntensityG: 1
|
||||||
|
- _SplatNormalMapIntensityR: 1
|
||||||
|
- _SplatSmoothnessMultiplierA: 1
|
||||||
|
- _SplatSmoothnessMultiplierB: 1
|
||||||
|
- _SplatSmoothnessMultiplierG: 1
|
||||||
|
- _SplatSmoothnessMultiplierR: 1
|
||||||
- _SrcBlend: 1
|
- _SrcBlend: 1
|
||||||
- _SrcBlendAlpha: 1
|
- _SrcBlendAlpha: 1
|
||||||
- _Surface: 0
|
- _Surface: 0
|
||||||
@ -133,6 +213,11 @@ Material:
|
|||||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _ScreenSpaceOutlineColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||||
|
- _SplatAlbedoMapATintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapBTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapGTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapRTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
m_BuildTextureStacks: []
|
m_BuildTextureStacks: []
|
||||||
m_AllowLocking: 1
|
m_AllowLocking: 1
|
||||||
|
|||||||
@ -8,7 +8,7 @@ Material:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: Material.002
|
m_Name: Material.002
|
||||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
m_Shader: {fileID: 4800000, guid: 50e19b7c9fbe3324e978246ad9789e96, type: 3}
|
||||||
m_Parent: {fileID: 0}
|
m_Parent: {fileID: 0}
|
||||||
m_ModifiedSerializedProperties: 0
|
m_ModifiedSerializedProperties: 0
|
||||||
m_ValidKeywords: []
|
m_ValidKeywords: []
|
||||||
@ -19,8 +19,7 @@ Material:
|
|||||||
m_CustomRenderQueue: -1
|
m_CustomRenderQueue: -1
|
||||||
stringTagMap:
|
stringTagMap:
|
||||||
RenderType: Opaque
|
RenderType: Opaque
|
||||||
disabledShaderPasses:
|
disabledShaderPasses: []
|
||||||
- MOTIONVECTORS
|
|
||||||
m_LockedProperties:
|
m_LockedProperties:
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
@ -33,6 +32,10 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _ClearCoatMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- _DetailAlbedoMap:
|
- _DetailAlbedoMap:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -69,6 +72,58 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatMaskMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- unity_Lightmaps:
|
- unity_Lightmaps:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -88,7 +143,9 @@ Material:
|
|||||||
- _AlphaToMask: 0
|
- _AlphaToMask: 0
|
||||||
- _Blend: 0
|
- _Blend: 0
|
||||||
- _BlendModePreserveSpecular: 1
|
- _BlendModePreserveSpecular: 1
|
||||||
|
- _BlendOp: 0
|
||||||
- _BumpScale: 1
|
- _BumpScale: 1
|
||||||
|
- _ClearCoat: 0
|
||||||
- _ClearCoatMask: 0
|
- _ClearCoatMask: 0
|
||||||
- _ClearCoatSmoothness: 0
|
- _ClearCoatSmoothness: 0
|
||||||
- _Cull: 2
|
- _Cull: 2
|
||||||
@ -106,9 +163,29 @@ Material:
|
|||||||
- _Parallax: 0.005
|
- _Parallax: 0.005
|
||||||
- _QueueOffset: 0
|
- _QueueOffset: 0
|
||||||
- _ReceiveShadows: 1
|
- _ReceiveShadows: 1
|
||||||
|
- _ScreenSpaceOutlineIntensity: 1
|
||||||
|
- _ScreenSpaceOutlineWidth: 1
|
||||||
- _Smoothness: 0.5
|
- _Smoothness: 0.5
|
||||||
- _SmoothnessTextureChannel: 0
|
- _SmoothnessTextureChannel: 0
|
||||||
- _SpecularHighlights: 1
|
- _SpecularHighlights: 1
|
||||||
|
- _SplatAlbedoMapATiling: 1
|
||||||
|
- _SplatAlbedoMapBTiling: 1
|
||||||
|
- _SplatAlbedoMapGTiling: 1
|
||||||
|
- _SplatAlbedoMapRTiling: 1
|
||||||
|
- _SplatHeightMultiplierA: 1
|
||||||
|
- _SplatHeightMultiplierB: 1
|
||||||
|
- _SplatHeightMultiplierG: 1
|
||||||
|
- _SplatHeightMultiplierR: 1
|
||||||
|
- _SplatMapFeatureOnOff: 0
|
||||||
|
- _SplatMaskBlendingSoftness: 0.5
|
||||||
|
- _SplatNormalMapIntensityA: 1
|
||||||
|
- _SplatNormalMapIntensityB: 1
|
||||||
|
- _SplatNormalMapIntensityG: 1
|
||||||
|
- _SplatNormalMapIntensityR: 1
|
||||||
|
- _SplatSmoothnessMultiplierA: 1
|
||||||
|
- _SplatSmoothnessMultiplierB: 1
|
||||||
|
- _SplatSmoothnessMultiplierG: 1
|
||||||
|
- _SplatSmoothnessMultiplierR: 1
|
||||||
- _SrcBlend: 1
|
- _SrcBlend: 1
|
||||||
- _SrcBlendAlpha: 1
|
- _SrcBlendAlpha: 1
|
||||||
- _Surface: 0
|
- _Surface: 0
|
||||||
@ -119,7 +196,12 @@ Material:
|
|||||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _ScreenSpaceOutlineColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||||
|
- _SplatAlbedoMapATintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapBTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapGTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapRTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
m_BuildTextureStacks: []
|
m_BuildTextureStacks: []
|
||||||
m_AllowLocking: 1
|
m_AllowLocking: 1
|
||||||
--- !u!114 &2158766202383902538
|
--- !u!114 &2158766202383902538
|
||||||
|
|||||||
@ -21,7 +21,7 @@ Material:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: Material.003
|
m_Name: Material.003
|
||||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
m_Shader: {fileID: 4800000, guid: 50e19b7c9fbe3324e978246ad9789e96, type: 3}
|
||||||
m_Parent: {fileID: 0}
|
m_Parent: {fileID: 0}
|
||||||
m_ModifiedSerializedProperties: 0
|
m_ModifiedSerializedProperties: 0
|
||||||
m_ValidKeywords: []
|
m_ValidKeywords: []
|
||||||
@ -32,8 +32,7 @@ Material:
|
|||||||
m_CustomRenderQueue: -1
|
m_CustomRenderQueue: -1
|
||||||
stringTagMap:
|
stringTagMap:
|
||||||
RenderType: Opaque
|
RenderType: Opaque
|
||||||
disabledShaderPasses:
|
disabledShaderPasses: []
|
||||||
- MOTIONVECTORS
|
|
||||||
m_LockedProperties:
|
m_LockedProperties:
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
@ -46,6 +45,10 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _ClearCoatMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- _DetailAlbedoMap:
|
- _DetailAlbedoMap:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -82,6 +85,58 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatMaskMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- unity_Lightmaps:
|
- unity_Lightmaps:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -101,7 +156,9 @@ Material:
|
|||||||
- _AlphaToMask: 0
|
- _AlphaToMask: 0
|
||||||
- _Blend: 0
|
- _Blend: 0
|
||||||
- _BlendModePreserveSpecular: 1
|
- _BlendModePreserveSpecular: 1
|
||||||
|
- _BlendOp: 0
|
||||||
- _BumpScale: 1
|
- _BumpScale: 1
|
||||||
|
- _ClearCoat: 0
|
||||||
- _ClearCoatMask: 0
|
- _ClearCoatMask: 0
|
||||||
- _ClearCoatSmoothness: 0
|
- _ClearCoatSmoothness: 0
|
||||||
- _Cull: 2
|
- _Cull: 2
|
||||||
@ -115,13 +172,35 @@ Material:
|
|||||||
- _Glossiness: 0
|
- _Glossiness: 0
|
||||||
- _GlossyReflections: 0
|
- _GlossyReflections: 0
|
||||||
- _Metallic: 0
|
- _Metallic: 0
|
||||||
|
- _NiloToonCharShadowStrength: 1
|
||||||
- _OcclusionStrength: 1
|
- _OcclusionStrength: 1
|
||||||
- _Parallax: 0.005
|
- _Parallax: 0.005
|
||||||
- _QueueOffset: 0
|
- _QueueOffset: 0
|
||||||
|
- _ReceiveNiloToonCharShadow: 0
|
||||||
- _ReceiveShadows: 1
|
- _ReceiveShadows: 1
|
||||||
|
- _ScreenSpaceOutlineIntensity: 1
|
||||||
|
- _ScreenSpaceOutlineWidth: 1
|
||||||
- _Smoothness: 0.5
|
- _Smoothness: 0.5
|
||||||
- _SmoothnessTextureChannel: 0
|
- _SmoothnessTextureChannel: 0
|
||||||
- _SpecularHighlights: 1
|
- _SpecularHighlights: 1
|
||||||
|
- _SplatAlbedoMapATiling: 1
|
||||||
|
- _SplatAlbedoMapBTiling: 1
|
||||||
|
- _SplatAlbedoMapGTiling: 1
|
||||||
|
- _SplatAlbedoMapRTiling: 1
|
||||||
|
- _SplatHeightMultiplierA: 1
|
||||||
|
- _SplatHeightMultiplierB: 1
|
||||||
|
- _SplatHeightMultiplierG: 1
|
||||||
|
- _SplatHeightMultiplierR: 1
|
||||||
|
- _SplatMapFeatureOnOff: 0
|
||||||
|
- _SplatMaskBlendingSoftness: 0.5
|
||||||
|
- _SplatNormalMapIntensityA: 1
|
||||||
|
- _SplatNormalMapIntensityB: 1
|
||||||
|
- _SplatNormalMapIntensityG: 1
|
||||||
|
- _SplatNormalMapIntensityR: 1
|
||||||
|
- _SplatSmoothnessMultiplierA: 1
|
||||||
|
- _SplatSmoothnessMultiplierB: 1
|
||||||
|
- _SplatSmoothnessMultiplierG: 1
|
||||||
|
- _SplatSmoothnessMultiplierR: 1
|
||||||
- _SrcBlend: 1
|
- _SrcBlend: 1
|
||||||
- _SrcBlendAlpha: 1
|
- _SrcBlendAlpha: 1
|
||||||
- _Surface: 0
|
- _Surface: 0
|
||||||
@ -132,6 +211,11 @@ Material:
|
|||||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _ScreenSpaceOutlineColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||||
|
- _SplatAlbedoMapATintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapBTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapGTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapRTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
m_BuildTextureStacks: []
|
m_BuildTextureStacks: []
|
||||||
m_AllowLocking: 1
|
m_AllowLocking: 1
|
||||||
|
|||||||
@ -21,7 +21,7 @@ Material:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: T_hanging_lights_1001
|
m_Name: T_hanging_lights_1001
|
||||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
m_Shader: {fileID: 4800000, guid: 50e19b7c9fbe3324e978246ad9789e96, type: 3}
|
||||||
m_Parent: {fileID: 0}
|
m_Parent: {fileID: 0}
|
||||||
m_ModifiedSerializedProperties: 0
|
m_ModifiedSerializedProperties: 0
|
||||||
m_ValidKeywords:
|
m_ValidKeywords:
|
||||||
@ -34,8 +34,7 @@ Material:
|
|||||||
m_CustomRenderQueue: -1
|
m_CustomRenderQueue: -1
|
||||||
stringTagMap:
|
stringTagMap:
|
||||||
RenderType: Opaque
|
RenderType: Opaque
|
||||||
disabledShaderPasses:
|
disabledShaderPasses: []
|
||||||
- MOTIONVECTORS
|
|
||||||
m_LockedProperties:
|
m_LockedProperties:
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
@ -48,6 +47,10 @@ Material:
|
|||||||
m_Texture: {fileID: 2800000, guid: efb424378ae795b408086e2f6814fcbb, type: 3}
|
m_Texture: {fileID: 2800000, guid: efb424378ae795b408086e2f6814fcbb, 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}
|
||||||
|
- _ClearCoatMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- _DetailAlbedoMap:
|
- _DetailAlbedoMap:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -84,6 +87,58 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatMaskMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- unity_Lightmaps:
|
- unity_Lightmaps:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -103,7 +158,9 @@ Material:
|
|||||||
- _AlphaToMask: 0
|
- _AlphaToMask: 0
|
||||||
- _Blend: 0
|
- _Blend: 0
|
||||||
- _BlendModePreserveSpecular: 1
|
- _BlendModePreserveSpecular: 1
|
||||||
|
- _BlendOp: 0
|
||||||
- _BumpScale: 1
|
- _BumpScale: 1
|
||||||
|
- _ClearCoat: 0
|
||||||
- _ClearCoatMask: 0
|
- _ClearCoatMask: 0
|
||||||
- _ClearCoatSmoothness: 0
|
- _ClearCoatSmoothness: 0
|
||||||
- _Cull: 2
|
- _Cull: 2
|
||||||
@ -121,9 +178,29 @@ Material:
|
|||||||
- _Parallax: 0.005
|
- _Parallax: 0.005
|
||||||
- _QueueOffset: 0
|
- _QueueOffset: 0
|
||||||
- _ReceiveShadows: 1
|
- _ReceiveShadows: 1
|
||||||
|
- _ScreenSpaceOutlineIntensity: 1
|
||||||
|
- _ScreenSpaceOutlineWidth: 1
|
||||||
- _Smoothness: 0.735
|
- _Smoothness: 0.735
|
||||||
- _SmoothnessTextureChannel: 0
|
- _SmoothnessTextureChannel: 0
|
||||||
- _SpecularHighlights: 1
|
- _SpecularHighlights: 1
|
||||||
|
- _SplatAlbedoMapATiling: 1
|
||||||
|
- _SplatAlbedoMapBTiling: 1
|
||||||
|
- _SplatAlbedoMapGTiling: 1
|
||||||
|
- _SplatAlbedoMapRTiling: 1
|
||||||
|
- _SplatHeightMultiplierA: 1
|
||||||
|
- _SplatHeightMultiplierB: 1
|
||||||
|
- _SplatHeightMultiplierG: 1
|
||||||
|
- _SplatHeightMultiplierR: 1
|
||||||
|
- _SplatMapFeatureOnOff: 0
|
||||||
|
- _SplatMaskBlendingSoftness: 0.5
|
||||||
|
- _SplatNormalMapIntensityA: 1
|
||||||
|
- _SplatNormalMapIntensityB: 1
|
||||||
|
- _SplatNormalMapIntensityG: 1
|
||||||
|
- _SplatNormalMapIntensityR: 1
|
||||||
|
- _SplatSmoothnessMultiplierA: 1
|
||||||
|
- _SplatSmoothnessMultiplierB: 1
|
||||||
|
- _SplatSmoothnessMultiplierG: 1
|
||||||
|
- _SplatSmoothnessMultiplierR: 1
|
||||||
- _SrcBlend: 1
|
- _SrcBlend: 1
|
||||||
- _SrcBlendAlpha: 1
|
- _SrcBlendAlpha: 1
|
||||||
- _Surface: 0
|
- _Surface: 0
|
||||||
@ -134,6 +211,11 @@ Material:
|
|||||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _EmissionColor: {r: 2, g: 2, b: 2, a: 1}
|
- _EmissionColor: {r: 2, g: 2, b: 2, a: 1}
|
||||||
|
- _ScreenSpaceOutlineColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||||
|
- _SplatAlbedoMapATintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapBTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapGTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapRTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
m_BuildTextureStacks: []
|
m_BuildTextureStacks: []
|
||||||
m_AllowLocking: 1
|
m_AllowLocking: 1
|
||||||
|
|||||||
@ -8,7 +8,7 @@ Material:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: defaultMat_0
|
m_Name: defaultMat_0
|
||||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
m_Shader: {fileID: 4800000, guid: 50e19b7c9fbe3324e978246ad9789e96, type: 3}
|
||||||
m_Parent: {fileID: 0}
|
m_Parent: {fileID: 0}
|
||||||
m_ModifiedSerializedProperties: 0
|
m_ModifiedSerializedProperties: 0
|
||||||
m_ValidKeywords: []
|
m_ValidKeywords: []
|
||||||
@ -19,8 +19,7 @@ Material:
|
|||||||
m_CustomRenderQueue: -1
|
m_CustomRenderQueue: -1
|
||||||
stringTagMap:
|
stringTagMap:
|
||||||
RenderType: Opaque
|
RenderType: Opaque
|
||||||
disabledShaderPasses:
|
disabledShaderPasses: []
|
||||||
- MOTIONVECTORS
|
|
||||||
m_LockedProperties:
|
m_LockedProperties:
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
@ -33,6 +32,10 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _ClearCoatMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- _DetailAlbedoMap:
|
- _DetailAlbedoMap:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -69,6 +72,58 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatMaskMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- unity_Lightmaps:
|
- unity_Lightmaps:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -88,7 +143,9 @@ Material:
|
|||||||
- _AlphaToMask: 0
|
- _AlphaToMask: 0
|
||||||
- _Blend: 0
|
- _Blend: 0
|
||||||
- _BlendModePreserveSpecular: 1
|
- _BlendModePreserveSpecular: 1
|
||||||
|
- _BlendOp: 0
|
||||||
- _BumpScale: 1
|
- _BumpScale: 1
|
||||||
|
- _ClearCoat: 0
|
||||||
- _ClearCoatMask: 0
|
- _ClearCoatMask: 0
|
||||||
- _ClearCoatSmoothness: 0
|
- _ClearCoatSmoothness: 0
|
||||||
- _Cull: 2
|
- _Cull: 2
|
||||||
@ -106,9 +163,29 @@ Material:
|
|||||||
- _Parallax: 0.005
|
- _Parallax: 0.005
|
||||||
- _QueueOffset: 0
|
- _QueueOffset: 0
|
||||||
- _ReceiveShadows: 1
|
- _ReceiveShadows: 1
|
||||||
|
- _ScreenSpaceOutlineIntensity: 1
|
||||||
|
- _ScreenSpaceOutlineWidth: 1
|
||||||
- _Smoothness: 1
|
- _Smoothness: 1
|
||||||
- _SmoothnessTextureChannel: 0
|
- _SmoothnessTextureChannel: 0
|
||||||
- _SpecularHighlights: 1
|
- _SpecularHighlights: 1
|
||||||
|
- _SplatAlbedoMapATiling: 1
|
||||||
|
- _SplatAlbedoMapBTiling: 1
|
||||||
|
- _SplatAlbedoMapGTiling: 1
|
||||||
|
- _SplatAlbedoMapRTiling: 1
|
||||||
|
- _SplatHeightMultiplierA: 1
|
||||||
|
- _SplatHeightMultiplierB: 1
|
||||||
|
- _SplatHeightMultiplierG: 1
|
||||||
|
- _SplatHeightMultiplierR: 1
|
||||||
|
- _SplatMapFeatureOnOff: 0
|
||||||
|
- _SplatMaskBlendingSoftness: 0.5
|
||||||
|
- _SplatNormalMapIntensityA: 1
|
||||||
|
- _SplatNormalMapIntensityB: 1
|
||||||
|
- _SplatNormalMapIntensityG: 1
|
||||||
|
- _SplatNormalMapIntensityR: 1
|
||||||
|
- _SplatSmoothnessMultiplierA: 1
|
||||||
|
- _SplatSmoothnessMultiplierB: 1
|
||||||
|
- _SplatSmoothnessMultiplierG: 1
|
||||||
|
- _SplatSmoothnessMultiplierR: 1
|
||||||
- _SrcBlend: 1
|
- _SrcBlend: 1
|
||||||
- _SrcBlendAlpha: 1
|
- _SrcBlendAlpha: 1
|
||||||
- _Surface: 0
|
- _Surface: 0
|
||||||
@ -119,7 +196,12 @@ Material:
|
|||||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _ScreenSpaceOutlineColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||||
|
- _SplatAlbedoMapATintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapBTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapGTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapRTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
m_BuildTextureStacks: []
|
m_BuildTextureStacks: []
|
||||||
m_AllowLocking: 1
|
m_AllowLocking: 1
|
||||||
--- !u!114 &3317871890002257173
|
--- !u!114 &3317871890002257173
|
||||||
|
|||||||
@ -21,7 +21,7 @@ Material:
|
|||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_Name: embossed-plaster
|
m_Name: embossed-plaster
|
||||||
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
|
m_Shader: {fileID: 4800000, guid: 50e19b7c9fbe3324e978246ad9789e96, type: 3}
|
||||||
m_Parent: {fileID: 0}
|
m_Parent: {fileID: 0}
|
||||||
m_ModifiedSerializedProperties: 0
|
m_ModifiedSerializedProperties: 0
|
||||||
m_ValidKeywords:
|
m_ValidKeywords:
|
||||||
@ -33,8 +33,7 @@ Material:
|
|||||||
m_CustomRenderQueue: -1
|
m_CustomRenderQueue: -1
|
||||||
stringTagMap:
|
stringTagMap:
|
||||||
RenderType: Opaque
|
RenderType: Opaque
|
||||||
disabledShaderPasses:
|
disabledShaderPasses: []
|
||||||
- MOTIONVECTORS
|
|
||||||
m_LockedProperties:
|
m_LockedProperties:
|
||||||
m_SavedProperties:
|
m_SavedProperties:
|
||||||
serializedVersion: 3
|
serializedVersion: 3
|
||||||
@ -47,6 +46,10 @@ Material:
|
|||||||
m_Texture: {fileID: 2800000, guid: f6ff171e183018147b53c52d61cc5319, type: 3}
|
m_Texture: {fileID: 2800000, guid: f6ff171e183018147b53c52d61cc5319, 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}
|
||||||
|
- _ClearCoatMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- _DetailAlbedoMap:
|
- _DetailAlbedoMap:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -83,6 +86,58 @@ Material:
|
|||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
m_Offset: {x: 0, y: 0}
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatAlbedoMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatMaskMap:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatNormalMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _SplatPackedDataMapR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
- unity_Lightmaps:
|
- unity_Lightmaps:
|
||||||
m_Texture: {fileID: 0}
|
m_Texture: {fileID: 0}
|
||||||
m_Scale: {x: 1, y: 1}
|
m_Scale: {x: 1, y: 1}
|
||||||
@ -102,7 +157,9 @@ Material:
|
|||||||
- _AlphaToMask: 0
|
- _AlphaToMask: 0
|
||||||
- _Blend: 0
|
- _Blend: 0
|
||||||
- _BlendModePreserveSpecular: 1
|
- _BlendModePreserveSpecular: 1
|
||||||
|
- _BlendOp: 0
|
||||||
- _BumpScale: 1
|
- _BumpScale: 1
|
||||||
|
- _ClearCoat: 0
|
||||||
- _ClearCoatMask: 0
|
- _ClearCoatMask: 0
|
||||||
- _ClearCoatSmoothness: 0
|
- _ClearCoatSmoothness: 0
|
||||||
- _Cull: 2
|
- _Cull: 2
|
||||||
@ -120,9 +177,29 @@ Material:
|
|||||||
- _Parallax: 0.005
|
- _Parallax: 0.005
|
||||||
- _QueueOffset: 0
|
- _QueueOffset: 0
|
||||||
- _ReceiveShadows: 1
|
- _ReceiveShadows: 1
|
||||||
|
- _ScreenSpaceOutlineIntensity: 1
|
||||||
|
- _ScreenSpaceOutlineWidth: 1
|
||||||
- _Smoothness: 0.843
|
- _Smoothness: 0.843
|
||||||
- _SmoothnessTextureChannel: 0
|
- _SmoothnessTextureChannel: 0
|
||||||
- _SpecularHighlights: 1
|
- _SpecularHighlights: 1
|
||||||
|
- _SplatAlbedoMapATiling: 1
|
||||||
|
- _SplatAlbedoMapBTiling: 1
|
||||||
|
- _SplatAlbedoMapGTiling: 1
|
||||||
|
- _SplatAlbedoMapRTiling: 1
|
||||||
|
- _SplatHeightMultiplierA: 1
|
||||||
|
- _SplatHeightMultiplierB: 1
|
||||||
|
- _SplatHeightMultiplierG: 1
|
||||||
|
- _SplatHeightMultiplierR: 1
|
||||||
|
- _SplatMapFeatureOnOff: 0
|
||||||
|
- _SplatMaskBlendingSoftness: 0.5
|
||||||
|
- _SplatNormalMapIntensityA: 1
|
||||||
|
- _SplatNormalMapIntensityB: 1
|
||||||
|
- _SplatNormalMapIntensityG: 1
|
||||||
|
- _SplatNormalMapIntensityR: 1
|
||||||
|
- _SplatSmoothnessMultiplierA: 1
|
||||||
|
- _SplatSmoothnessMultiplierB: 1
|
||||||
|
- _SplatSmoothnessMultiplierG: 1
|
||||||
|
- _SplatSmoothnessMultiplierR: 1
|
||||||
- _SrcBlend: 1
|
- _SrcBlend: 1
|
||||||
- _SrcBlendAlpha: 1
|
- _SrcBlendAlpha: 1
|
||||||
- _Surface: 0
|
- _Surface: 0
|
||||||
@ -133,6 +210,11 @@ Material:
|
|||||||
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||||
|
- _ScreenSpaceOutlineColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
|
||||||
|
- _SplatAlbedoMapATintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapBTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapGTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
- _SplatAlbedoMapRTintColor: {r: 1, g: 1, b: 1, a: 1}
|
||||||
m_BuildTextureStacks: []
|
m_BuildTextureStacks: []
|
||||||
m_AllowLocking: 1
|
m_AllowLocking: 1
|
||||||
|
|||||||
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실.unity
(Stored with Git LFS)
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실.unity
(Stored with Git LFS)
Binary file not shown.
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/LightingData.asset
(Stored with Git LFS)
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/LightingData.asset
(Stored with Git LFS)
Binary file not shown.
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-0_comp_dir.png
(Stored with Git LFS)
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-0_comp_dir.png
(Stored with Git LFS)
Binary file not shown.
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-0_comp_light.exr
(Stored with Git LFS)
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-0_comp_light.exr
(Stored with Git LFS)
Binary file not shown.
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-1_comp_dir.png
(Stored with Git LFS)
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-1_comp_dir.png
(Stored with Git LFS)
Binary file not shown.
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-1_comp_light.exr
(Stored with Git LFS)
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-1_comp_light.exr
(Stored with Git LFS)
Binary file not shown.
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-2_comp_dir.png
(Stored with Git LFS)
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-2_comp_dir.png
(Stored with Git LFS)
Binary file not shown.
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-2_comp_light.exr
(Stored with Git LFS)
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-2_comp_light.exr
(Stored with Git LFS)
Binary file not shown.
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-3_comp_dir.png
(Stored with Git LFS)
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-3_comp_dir.png
(Stored with Git LFS)
Binary file not shown.
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-3_comp_light.exr
(Stored with Git LFS)
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-3_comp_light.exr
(Stored with Git LFS)
Binary file not shown.
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-4_comp_dir.png
(Stored with Git LFS)
Normal file
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-4_comp_dir.png
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -0,0 +1,117 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 66686f1b558d9424f9264a116e0f3f8a
|
||||||
|
TextureImporter:
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 13
|
||||||
|
mipmaps:
|
||||||
|
mipMapMode: 0
|
||||||
|
enableMipMap: 1
|
||||||
|
sRGBTexture: 0
|
||||||
|
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: 1
|
||||||
|
streamingMipmapsPriority: 0
|
||||||
|
vTOnly: 0
|
||||||
|
ignoreMipmapLimit: 0
|
||||||
|
grayScaleToAlpha: 0
|
||||||
|
generateCubemap: 6
|
||||||
|
cubemapConvolution: 0
|
||||||
|
seamlessCubemap: 0
|
||||||
|
textureFormat: 1
|
||||||
|
maxTextureSize: 2048
|
||||||
|
textureSettings:
|
||||||
|
serializedVersion: 2
|
||||||
|
filterMode: 1
|
||||||
|
aniso: 3
|
||||||
|
mipBias: 0
|
||||||
|
wrapU: 1
|
||||||
|
wrapV: 1
|
||||||
|
wrapW: 1
|
||||||
|
nPOTScale: 1
|
||||||
|
lightmap: 0
|
||||||
|
compressionQuality: 50
|
||||||
|
spriteMode: 0
|
||||||
|
spriteExtrude: 1
|
||||||
|
spriteMeshType: 1
|
||||||
|
alignment: 0
|
||||||
|
spritePivot: {x: 0.5, y: 0.5}
|
||||||
|
spritePixelsToUnits: 100
|
||||||
|
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
spriteGenerateFallbackPhysicsShape: 1
|
||||||
|
alphaUsage: 1
|
||||||
|
alphaIsTransparency: 0
|
||||||
|
spriteTessellationDetail: -1
|
||||||
|
textureType: 12
|
||||||
|
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: 2
|
||||||
|
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:
|
||||||
|
internalID: 0
|
||||||
|
vertices: []
|
||||||
|
indices:
|
||||||
|
edges: []
|
||||||
|
weights: []
|
||||||
|
secondaryTextures: []
|
||||||
|
spriteCustomMetadata:
|
||||||
|
entries: []
|
||||||
|
nameFileIdTable: {}
|
||||||
|
mipmapLimitGroupName:
|
||||||
|
pSDRemoveMatte: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-4_comp_light.exr
(Stored with Git LFS)
Normal file
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-4_comp_light.exr
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -0,0 +1,117 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 76510edb63367774cbb6604bf1af9e8e
|
||||||
|
TextureImporter:
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 13
|
||||||
|
mipmaps:
|
||||||
|
mipMapMode: 0
|
||||||
|
enableMipMap: 1
|
||||||
|
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: 1
|
||||||
|
streamingMipmapsPriority: 0
|
||||||
|
vTOnly: 0
|
||||||
|
ignoreMipmapLimit: 0
|
||||||
|
grayScaleToAlpha: 0
|
||||||
|
generateCubemap: 6
|
||||||
|
cubemapConvolution: 0
|
||||||
|
seamlessCubemap: 0
|
||||||
|
textureFormat: 1
|
||||||
|
maxTextureSize: 2048
|
||||||
|
textureSettings:
|
||||||
|
serializedVersion: 2
|
||||||
|
filterMode: 1
|
||||||
|
aniso: 3
|
||||||
|
mipBias: 0
|
||||||
|
wrapU: 1
|
||||||
|
wrapV: 1
|
||||||
|
wrapW: 1
|
||||||
|
nPOTScale: 1
|
||||||
|
lightmap: 0
|
||||||
|
compressionQuality: 50
|
||||||
|
spriteMode: 0
|
||||||
|
spriteExtrude: 1
|
||||||
|
spriteMeshType: 1
|
||||||
|
alignment: 0
|
||||||
|
spritePivot: {x: 0.5, y: 0.5}
|
||||||
|
spritePixelsToUnits: 100
|
||||||
|
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
spriteGenerateFallbackPhysicsShape: 1
|
||||||
|
alphaUsage: 0
|
||||||
|
alphaIsTransparency: 0
|
||||||
|
spriteTessellationDetail: -1
|
||||||
|
textureType: 6
|
||||||
|
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: 2
|
||||||
|
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:
|
||||||
|
internalID: 0
|
||||||
|
vertices: []
|
||||||
|
indices:
|
||||||
|
edges: []
|
||||||
|
weights: []
|
||||||
|
secondaryTextures: []
|
||||||
|
spriteCustomMetadata:
|
||||||
|
entries: []
|
||||||
|
nameFileIdTable: {}
|
||||||
|
mipmapLimitGroupName:
|
||||||
|
pSDRemoveMatte: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-5_comp_dir.png
(Stored with Git LFS)
Normal file
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-5_comp_dir.png
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -0,0 +1,117 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 66b19b6e2a88a2740a03850e901c1f84
|
||||||
|
TextureImporter:
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 13
|
||||||
|
mipmaps:
|
||||||
|
mipMapMode: 0
|
||||||
|
enableMipMap: 1
|
||||||
|
sRGBTexture: 0
|
||||||
|
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: 1
|
||||||
|
streamingMipmapsPriority: 0
|
||||||
|
vTOnly: 0
|
||||||
|
ignoreMipmapLimit: 0
|
||||||
|
grayScaleToAlpha: 0
|
||||||
|
generateCubemap: 6
|
||||||
|
cubemapConvolution: 0
|
||||||
|
seamlessCubemap: 0
|
||||||
|
textureFormat: 1
|
||||||
|
maxTextureSize: 2048
|
||||||
|
textureSettings:
|
||||||
|
serializedVersion: 2
|
||||||
|
filterMode: 1
|
||||||
|
aniso: 3
|
||||||
|
mipBias: 0
|
||||||
|
wrapU: 1
|
||||||
|
wrapV: 1
|
||||||
|
wrapW: 1
|
||||||
|
nPOTScale: 1
|
||||||
|
lightmap: 0
|
||||||
|
compressionQuality: 50
|
||||||
|
spriteMode: 0
|
||||||
|
spriteExtrude: 1
|
||||||
|
spriteMeshType: 1
|
||||||
|
alignment: 0
|
||||||
|
spritePivot: {x: 0.5, y: 0.5}
|
||||||
|
spritePixelsToUnits: 100
|
||||||
|
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
spriteGenerateFallbackPhysicsShape: 1
|
||||||
|
alphaUsage: 1
|
||||||
|
alphaIsTransparency: 0
|
||||||
|
spriteTessellationDetail: -1
|
||||||
|
textureType: 12
|
||||||
|
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: 2
|
||||||
|
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:
|
||||||
|
internalID: 0
|
||||||
|
vertices: []
|
||||||
|
indices:
|
||||||
|
edges: []
|
||||||
|
weights: []
|
||||||
|
secondaryTextures: []
|
||||||
|
spriteCustomMetadata:
|
||||||
|
entries: []
|
||||||
|
nameFileIdTable: {}
|
||||||
|
mipmapLimitGroupName:
|
||||||
|
pSDRemoveMatte: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-5_comp_light.exr
(Stored with Git LFS)
Normal file
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-5_comp_light.exr
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -0,0 +1,117 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0edb763249ebda742bbe6bd5e606afec
|
||||||
|
TextureImporter:
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 13
|
||||||
|
mipmaps:
|
||||||
|
mipMapMode: 0
|
||||||
|
enableMipMap: 1
|
||||||
|
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: 1
|
||||||
|
streamingMipmapsPriority: 0
|
||||||
|
vTOnly: 0
|
||||||
|
ignoreMipmapLimit: 0
|
||||||
|
grayScaleToAlpha: 0
|
||||||
|
generateCubemap: 6
|
||||||
|
cubemapConvolution: 0
|
||||||
|
seamlessCubemap: 0
|
||||||
|
textureFormat: 1
|
||||||
|
maxTextureSize: 2048
|
||||||
|
textureSettings:
|
||||||
|
serializedVersion: 2
|
||||||
|
filterMode: 1
|
||||||
|
aniso: 3
|
||||||
|
mipBias: 0
|
||||||
|
wrapU: 1
|
||||||
|
wrapV: 1
|
||||||
|
wrapW: 1
|
||||||
|
nPOTScale: 1
|
||||||
|
lightmap: 0
|
||||||
|
compressionQuality: 50
|
||||||
|
spriteMode: 0
|
||||||
|
spriteExtrude: 1
|
||||||
|
spriteMeshType: 1
|
||||||
|
alignment: 0
|
||||||
|
spritePivot: {x: 0.5, y: 0.5}
|
||||||
|
spritePixelsToUnits: 100
|
||||||
|
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
spriteGenerateFallbackPhysicsShape: 1
|
||||||
|
alphaUsage: 0
|
||||||
|
alphaIsTransparency: 0
|
||||||
|
spriteTessellationDetail: -1
|
||||||
|
textureType: 6
|
||||||
|
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: 2
|
||||||
|
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:
|
||||||
|
internalID: 0
|
||||||
|
vertices: []
|
||||||
|
indices:
|
||||||
|
edges: []
|
||||||
|
weights: []
|
||||||
|
secondaryTextures: []
|
||||||
|
spriteCustomMetadata:
|
||||||
|
entries: []
|
||||||
|
nameFileIdTable: {}
|
||||||
|
mipmapLimitGroupName:
|
||||||
|
pSDRemoveMatte: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-6_comp_dir.png
(Stored with Git LFS)
Normal file
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-6_comp_dir.png
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -0,0 +1,117 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e6199872890fe8f47a509897a435a289
|
||||||
|
TextureImporter:
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 13
|
||||||
|
mipmaps:
|
||||||
|
mipMapMode: 0
|
||||||
|
enableMipMap: 1
|
||||||
|
sRGBTexture: 0
|
||||||
|
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: 1
|
||||||
|
streamingMipmapsPriority: 0
|
||||||
|
vTOnly: 0
|
||||||
|
ignoreMipmapLimit: 0
|
||||||
|
grayScaleToAlpha: 0
|
||||||
|
generateCubemap: 6
|
||||||
|
cubemapConvolution: 0
|
||||||
|
seamlessCubemap: 0
|
||||||
|
textureFormat: 1
|
||||||
|
maxTextureSize: 2048
|
||||||
|
textureSettings:
|
||||||
|
serializedVersion: 2
|
||||||
|
filterMode: 1
|
||||||
|
aniso: 3
|
||||||
|
mipBias: 0
|
||||||
|
wrapU: 1
|
||||||
|
wrapV: 1
|
||||||
|
wrapW: 1
|
||||||
|
nPOTScale: 1
|
||||||
|
lightmap: 0
|
||||||
|
compressionQuality: 50
|
||||||
|
spriteMode: 0
|
||||||
|
spriteExtrude: 1
|
||||||
|
spriteMeshType: 1
|
||||||
|
alignment: 0
|
||||||
|
spritePivot: {x: 0.5, y: 0.5}
|
||||||
|
spritePixelsToUnits: 100
|
||||||
|
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
spriteGenerateFallbackPhysicsShape: 1
|
||||||
|
alphaUsage: 1
|
||||||
|
alphaIsTransparency: 0
|
||||||
|
spriteTessellationDetail: -1
|
||||||
|
textureType: 12
|
||||||
|
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: 2
|
||||||
|
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:
|
||||||
|
internalID: 0
|
||||||
|
vertices: []
|
||||||
|
indices:
|
||||||
|
edges: []
|
||||||
|
weights: []
|
||||||
|
secondaryTextures: []
|
||||||
|
spriteCustomMetadata:
|
||||||
|
entries: []
|
||||||
|
nameFileIdTable: {}
|
||||||
|
mipmapLimitGroupName:
|
||||||
|
pSDRemoveMatte: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-6_comp_light.exr
(Stored with Git LFS)
Normal file
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/Lightmap-6_comp_light.exr
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -0,0 +1,117 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 7655ae17f8945294f8a7b30fbae09ffe
|
||||||
|
TextureImporter:
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 13
|
||||||
|
mipmaps:
|
||||||
|
mipMapMode: 0
|
||||||
|
enableMipMap: 1
|
||||||
|
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: 1
|
||||||
|
streamingMipmapsPriority: 0
|
||||||
|
vTOnly: 0
|
||||||
|
ignoreMipmapLimit: 0
|
||||||
|
grayScaleToAlpha: 0
|
||||||
|
generateCubemap: 6
|
||||||
|
cubemapConvolution: 0
|
||||||
|
seamlessCubemap: 0
|
||||||
|
textureFormat: 1
|
||||||
|
maxTextureSize: 2048
|
||||||
|
textureSettings:
|
||||||
|
serializedVersion: 2
|
||||||
|
filterMode: 1
|
||||||
|
aniso: 3
|
||||||
|
mipBias: 0
|
||||||
|
wrapU: 1
|
||||||
|
wrapV: 1
|
||||||
|
wrapW: 1
|
||||||
|
nPOTScale: 1
|
||||||
|
lightmap: 0
|
||||||
|
compressionQuality: 50
|
||||||
|
spriteMode: 0
|
||||||
|
spriteExtrude: 1
|
||||||
|
spriteMeshType: 1
|
||||||
|
alignment: 0
|
||||||
|
spritePivot: {x: 0.5, y: 0.5}
|
||||||
|
spritePixelsToUnits: 100
|
||||||
|
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
spriteGenerateFallbackPhysicsShape: 1
|
||||||
|
alphaUsage: 0
|
||||||
|
alphaIsTransparency: 0
|
||||||
|
spriteTessellationDetail: -1
|
||||||
|
textureType: 6
|
||||||
|
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: 2
|
||||||
|
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:
|
||||||
|
internalID: 0
|
||||||
|
vertices: []
|
||||||
|
indices:
|
||||||
|
edges: []
|
||||||
|
weights: []
|
||||||
|
secondaryTextures: []
|
||||||
|
spriteCustomMetadata:
|
||||||
|
entries: []
|
||||||
|
nameFileIdTable: {}
|
||||||
|
mipmapLimitGroupName:
|
||||||
|
pSDRemoveMatte: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/ReflectionProbe-0.exr
(Stored with Git LFS)
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/ReflectionProbe-0.exr
(Stored with Git LFS)
Binary file not shown.
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/[공용]댄스 연습실 Baking Set-Default.CellData.bytes
(Stored with Git LFS)
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/[공용]댄스 연습실 Baking Set-Default.CellData.bytes
(Stored with Git LFS)
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/[공용]댄스 연습실 Baking Set.CellBricksData.bytes
(Stored with Git LFS)
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/[공용]댄스 연습실 Baking Set.CellBricksData.bytes
(Stored with Git LFS)
Binary file not shown.
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/[공용]댄스 연습실 Baking Set.CellSharedData.bytes
(Stored with Git LFS)
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/[공용]댄스 연습실 Baking Set.CellSharedData.bytes
(Stored with Git LFS)
Binary file not shown.
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/[공용]댄스 연습실 Baking Set.CellSupportData.bytes
(Stored with Git LFS)
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/[공용]댄스 연습실 Baking Set.CellSupportData.bytes
(Stored with Git LFS)
Binary file not shown.
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/[공용]댄스 연습실 Baking Set.asset
(Stored with Git LFS)
BIN
Assets/ResourcesData/Background/[공용]댄스 연습실/Scene/[공용]댄스 연습실/[공용]댄스 연습실 Baking Set.asset
(Stored with Git LFS)
Binary file not shown.
@ -118,11 +118,20 @@ namespace KindRetargeting
|
|||||||
|
|
||||||
private float initialHipsHeight; // 초기 힙 높이
|
private float initialHipsHeight; // 초기 힙 높이
|
||||||
|
|
||||||
|
// T-포즈에서의 머리 정면 방향 (캘리브레이션용)
|
||||||
|
[HideInInspector] public Vector3 tPoseHeadForward = Vector3.forward;
|
||||||
|
[HideInInspector] public Vector3 tPoseHeadUp = Vector3.up;
|
||||||
|
|
||||||
[Header("아바타 크기 조정")]
|
[Header("아바타 크기 조정")]
|
||||||
[SerializeField, Range(0.1f, 3f)] private float avatarScale = 1f;
|
[SerializeField, Range(0.1f, 3f)] private float avatarScale = 1f;
|
||||||
private float previousScale = 1f;
|
private float previousScale = 1f;
|
||||||
private List<Transform> scalableObjects = new List<Transform>();
|
private List<Transform> scalableObjects = new List<Transform>();
|
||||||
|
|
||||||
|
[Header("머리 크기 조정")]
|
||||||
|
[SerializeField, Range(0.1f, 3f)] private float headScale = 1f;
|
||||||
|
private Transform headBone;
|
||||||
|
private Vector3 originalHeadScale = Vector3.one;
|
||||||
|
|
||||||
// 필드 추가
|
// 필드 추가
|
||||||
private Dictionary<Transform, Vector3> originalScales = new Dictionary<Transform, Vector3>();
|
private Dictionary<Transform, Vector3> originalScales = new Dictionary<Transform, Vector3>();
|
||||||
private Dictionary<Transform, Vector3> originalPositions = new Dictionary<Transform, Vector3>();
|
private Dictionary<Transform, Vector3> originalPositions = new Dictionary<Transform, Vector3>();
|
||||||
@ -180,6 +189,8 @@ namespace KindRetargeting
|
|||||||
public float headRotationOffsetX;
|
public float headRotationOffsetX;
|
||||||
public float headRotationOffsetY;
|
public float headRotationOffsetY;
|
||||||
public float headRotationOffsetZ;
|
public float headRotationOffsetZ;
|
||||||
|
// 머리 크기
|
||||||
|
public float headScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
[System.Serializable]
|
[System.Serializable]
|
||||||
@ -355,6 +366,9 @@ namespace KindRetargeting
|
|||||||
SetTPose(sourceAnimator);
|
SetTPose(sourceAnimator);
|
||||||
SetTPose(targetAnimator);
|
SetTPose(targetAnimator);
|
||||||
|
|
||||||
|
// T-포즈에서의 머리 정면 방향 캐싱 (캘리브레이션용)
|
||||||
|
CacheTPoseHeadDirection();
|
||||||
|
|
||||||
// HumanPoseHandler 초기화
|
// HumanPoseHandler 초기화
|
||||||
InitializeHumanPoseHandlers();
|
InitializeHumanPoseHandlers();
|
||||||
|
|
||||||
@ -385,6 +399,21 @@ namespace KindRetargeting
|
|||||||
previousScale = avatarScale;
|
previousScale = avatarScale;
|
||||||
|
|
||||||
ApplyScale();
|
ApplyScale();
|
||||||
|
|
||||||
|
// 머리 본 초기화
|
||||||
|
if (targetAnimator != null)
|
||||||
|
{
|
||||||
|
headBone = targetAnimator.GetBoneTransform(HumanBodyBones.Head);
|
||||||
|
if (headBone != null)
|
||||||
|
{
|
||||||
|
originalHeadScale = headBone.localScale;
|
||||||
|
Debug.Log($"[CustomRetargetingScript] 머리 본 초기화 완료: {headBone.name}, 원본 스케일: {originalHeadScale}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.LogWarning("[CustomRetargetingScript] 머리 본을 찾을 수 없습니다!");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -697,6 +726,7 @@ namespace KindRetargeting
|
|||||||
headRotationOffsetX = headRotationOffsetX,
|
headRotationOffsetX = headRotationOffsetX,
|
||||||
headRotationOffsetY = headRotationOffsetY,
|
headRotationOffsetY = headRotationOffsetY,
|
||||||
headRotationOffsetZ = headRotationOffsetZ,
|
headRotationOffsetZ = headRotationOffsetZ,
|
||||||
|
headScale = headScale,
|
||||||
};
|
};
|
||||||
|
|
||||||
string json = JsonUtility.ToJson(settings, true);
|
string json = JsonUtility.ToJson(settings, true);
|
||||||
@ -757,6 +787,7 @@ namespace KindRetargeting
|
|||||||
initialHipsHeight = settings.initialHipsHeight;
|
initialHipsHeight = settings.initialHipsHeight;
|
||||||
avatarScale = settings.avatarScale;
|
avatarScale = settings.avatarScale;
|
||||||
previousScale = avatarScale;
|
previousScale = avatarScale;
|
||||||
|
headScale = settings.headScale;
|
||||||
|
|
||||||
// Mingle 캘리브레이션 데이터 로드
|
// Mingle 캘리브레이션 데이터 로드
|
||||||
if (settings.fingerOpenRotationsCache != null && settings.fingerOpenRotationsCache.Count > 0)
|
if (settings.fingerOpenRotationsCache != null && settings.fingerOpenRotationsCache.Count > 0)
|
||||||
@ -1375,11 +1406,37 @@ namespace KindRetargeting
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// LateUpdate에서 머리 회전 오프셋을 적용합니다 (IK 이후 실행).
|
/// LateUpdate에서 머리 회전 오프셋과 머리 크기를 적용합니다 (IK 이후 실행).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void LateUpdate()
|
void LateUpdate()
|
||||||
{
|
{
|
||||||
ApplyHeadRotationOffset();
|
ApplyHeadRotationOffset();
|
||||||
|
ApplyHeadScale();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 머리 크기를 적용합니다.
|
||||||
|
/// 애니메이션이 매 프레임 스케일을 리셋할 수 있으므로 매 프레임 적용합니다.
|
||||||
|
/// </summary>
|
||||||
|
private void ApplyHeadScale()
|
||||||
|
{
|
||||||
|
if (headBone == null)
|
||||||
|
{
|
||||||
|
// headBone이 없으면 다시 찾기 시도
|
||||||
|
if (targetAnimator != null)
|
||||||
|
{
|
||||||
|
headBone = targetAnimator.GetBoneTransform(HumanBodyBones.Head);
|
||||||
|
if (headBone != null)
|
||||||
|
{
|
||||||
|
originalHeadScale = headBone.localScale;
|
||||||
|
Debug.Log($"[HeadScale] 머리 본 재초기화: {headBone.name}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (headBone == null) return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 매 프레임 스케일 적용 (애니메이션이 리셋할 수 있음)
|
||||||
|
headBone.localScale = originalHeadScale * headScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -1403,6 +1460,91 @@ namespace KindRetargeting
|
|||||||
Quaternion offsetRotation = Quaternion.Euler(headRotationOffsetX, headRotationOffsetY, headRotationOffsetZ);
|
Quaternion offsetRotation = Quaternion.Euler(headRotationOffsetX, headRotationOffsetY, headRotationOffsetZ);
|
||||||
headBone.localRotation *= offsetRotation;
|
headBone.localRotation *= offsetRotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// T-포즈 상태에서 머리의 정면 방향을 캐싱합니다.
|
||||||
|
/// 이 값은 정면 캘리브레이션에서 기준점으로 사용됩니다.
|
||||||
|
/// </summary>
|
||||||
|
private void CacheTPoseHeadDirection()
|
||||||
|
{
|
||||||
|
if (targetAnimator == null) return;
|
||||||
|
|
||||||
|
Transform headBone = targetAnimator.GetBoneTransform(HumanBodyBones.Head);
|
||||||
|
if (headBone == null) return;
|
||||||
|
|
||||||
|
// T-포즈 상태에서의 머리 월드 방향 저장
|
||||||
|
tPoseHeadForward = headBone.forward;
|
||||||
|
tPoseHeadUp = headBone.up;
|
||||||
|
|
||||||
|
Debug.Log($"[{gameObject.name}] T-포즈 머리 방향 캐싱 완료 - Forward: {tPoseHeadForward}, Up: {tPoseHeadUp}");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 정면 캘리브레이션을 실행합니다. (웹 리모컨에서 호출)
|
||||||
|
/// </summary>
|
||||||
|
public void CalibrateHeadToForward()
|
||||||
|
{
|
||||||
|
if (targetAnimator == null) return;
|
||||||
|
|
||||||
|
Transform targetHead = targetAnimator.GetBoneTransform(HumanBodyBones.Head);
|
||||||
|
if (targetHead == null) return;
|
||||||
|
|
||||||
|
if (tPoseHeadForward.sqrMagnitude < 0.001f)
|
||||||
|
{
|
||||||
|
Debug.LogWarning("T-포즈 머리 방향이 캐싱되지 않았습니다.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1. 기존 오프셋 제거하여 원본 로컬 회전 계산
|
||||||
|
Quaternion currentLocalRot = targetHead.localRotation;
|
||||||
|
Quaternion prevOffset = Quaternion.Euler(headRotationOffsetX, headRotationOffsetY, headRotationOffsetZ);
|
||||||
|
Quaternion baseLocalRot = currentLocalRot * Quaternion.Inverse(prevOffset);
|
||||||
|
|
||||||
|
// 2. 부모 월드 회전
|
||||||
|
Transform headParent = targetHead.parent;
|
||||||
|
Quaternion parentWorldRot = headParent != null ? headParent.rotation : Quaternion.identity;
|
||||||
|
|
||||||
|
// 3. 오프셋 제거된 원본 상태의 월드 회전
|
||||||
|
Quaternion baseWorldRot = parentWorldRot * baseLocalRot;
|
||||||
|
|
||||||
|
// 4. 오프셋 제거된 원본 상태에서의 머리 forward/up 방향 계산
|
||||||
|
Vector3 currentHeadForward = baseWorldRot * Vector3.forward;
|
||||||
|
Vector3 currentHeadUp = baseWorldRot * Vector3.up;
|
||||||
|
|
||||||
|
// 5. 현재 머리 forward → T-포즈 forward로의 회전 계산
|
||||||
|
Quaternion forwardCorrection = Quaternion.FromToRotation(currentHeadForward, tPoseHeadForward);
|
||||||
|
|
||||||
|
// 6. forward 보정 후 up 방향도 맞춰야 함
|
||||||
|
Vector3 correctedUp = forwardCorrection * currentHeadUp;
|
||||||
|
float rollAngle = Vector3.SignedAngle(correctedUp, tPoseHeadUp, tPoseHeadForward);
|
||||||
|
Quaternion rollCorrection = Quaternion.AngleAxis(rollAngle, tPoseHeadForward);
|
||||||
|
|
||||||
|
// 7. 전체 월드 보정 회전
|
||||||
|
Quaternion worldCorrection = rollCorrection * forwardCorrection;
|
||||||
|
|
||||||
|
// 8. 보정된 월드 회전
|
||||||
|
Quaternion correctedWorldRot = worldCorrection * baseWorldRot;
|
||||||
|
|
||||||
|
// 9. 보정된 로컬 회전
|
||||||
|
Quaternion correctedLocalRot = Quaternion.Inverse(parentWorldRot) * correctedWorldRot;
|
||||||
|
|
||||||
|
// 10. 오프셋 계산
|
||||||
|
Quaternion offsetQuat = Quaternion.Inverse(baseLocalRot) * correctedLocalRot;
|
||||||
|
|
||||||
|
// 11. 오일러로 변환
|
||||||
|
Vector3 euler = offsetQuat.eulerAngles;
|
||||||
|
if (euler.x > 180f) euler.x -= 360f;
|
||||||
|
if (euler.y > 180f) euler.y -= 360f;
|
||||||
|
if (euler.z > 180f) euler.z -= 360f;
|
||||||
|
|
||||||
|
// 12. 적용
|
||||||
|
headRotationOffsetX = Mathf.Clamp(euler.x, -180f, 180f);
|
||||||
|
headRotationOffsetY = Mathf.Clamp(euler.y, -180f, 180f);
|
||||||
|
headRotationOffsetZ = Mathf.Clamp(euler.z, -180f, 180f);
|
||||||
|
|
||||||
|
Debug.Log($"[{gameObject.name}] 정면 캘리브레이션 완료 - Offset X: {euler.x:F1}°, Y: {euler.y:F1}°, Z: {euler.z:F1}°");
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 머슬 데이터를 사용하여 손가락 포즈를 복제합니다.
|
/// 머슬 데이터를 사용하여 손가락 포즈를 복제합니다.
|
||||||
/// SetHumanPose가 모든 본에 영향을 미치므로, 손가락을 제외한 모든 본의 Transform을 저장하고 복원합니다.
|
/// SetHumanPose가 모든 본에 영향을 미치므로, 손가락을 제외한 모든 본의 Transform을 저장하고 복원합니다.
|
||||||
@ -2183,6 +2325,46 @@ namespace KindRetargeting
|
|||||||
{
|
{
|
||||||
return avatarScale;
|
return avatarScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 외부에서 머리 크기를 설정할 수 있는 public 메서드
|
||||||
|
public void SetHeadScale(float scale)
|
||||||
|
{
|
||||||
|
headScale = Mathf.Clamp(scale, 0.1f, 3f);
|
||||||
|
ApplyHeadScaleImmediate();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 현재 머리 크기를 가져오는 메서드
|
||||||
|
public float GetHeadScale()
|
||||||
|
{
|
||||||
|
return headScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 머리 크기 리셋
|
||||||
|
public void ResetHeadScale()
|
||||||
|
{
|
||||||
|
headScale = 1f;
|
||||||
|
ApplyHeadScaleImmediate();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 머리 크기 즉시 적용 (headBone이 없으면 찾아서 적용)
|
||||||
|
private void ApplyHeadScaleImmediate()
|
||||||
|
{
|
||||||
|
// headBone이 없으면 찾기
|
||||||
|
if (headBone == null && targetAnimator != null)
|
||||||
|
{
|
||||||
|
headBone = targetAnimator.GetBoneTransform(HumanBodyBones.Head);
|
||||||
|
if (headBone != null)
|
||||||
|
{
|
||||||
|
originalHeadScale = headBone.localScale;
|
||||||
|
Debug.Log($"[HeadScale] 머리 본 찾음: {headBone.name}, 원본 스케일: {originalHeadScale}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (headBone != null)
|
||||||
|
{
|
||||||
|
headBone.localScale = originalHeadScale * headScale;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1119,6 +1119,9 @@ public class RetargetingControlWindow : EditorWindow
|
|||||||
var avatarScaleProp = serializedObject.FindProperty("avatarScale");
|
var avatarScaleProp = serializedObject.FindProperty("avatarScale");
|
||||||
EditorGUILayout.PropertyField(avatarScaleProp, new GUIContent("아바타 크기"));
|
EditorGUILayout.PropertyField(avatarScaleProp, new GUIContent("아바타 크기"));
|
||||||
|
|
||||||
|
var headScaleProp = serializedObject.FindProperty("headScale");
|
||||||
|
EditorGUILayout.PropertyField(headScaleProp, new GUIContent("머리 크기"));
|
||||||
|
|
||||||
if (EditorGUI.EndChangeCheck())
|
if (EditorGUI.EndChangeCheck())
|
||||||
{
|
{
|
||||||
serializedObject.ApplyModifiedProperties();
|
serializedObject.ApplyModifiedProperties();
|
||||||
@ -1141,8 +1144,10 @@ public class RetargetingControlWindow : EditorWindow
|
|||||||
EditorGUILayout.Slider(headRotationZProp, -180f, 180f,
|
EditorGUILayout.Slider(headRotationZProp, -180f, 180f,
|
||||||
new GUIContent("Z (Pitch) - 상하 회전", "머리를 상하로 회전합니다"));
|
new GUIContent("Z (Pitch) - 상하 회전", "머리를 상하로 회전합니다"));
|
||||||
|
|
||||||
// 초기화 버튼
|
// 초기화 버튼과 정면 캘리브레이션 버튼을 가로로 배치
|
||||||
EditorGUILayout.Space(5);
|
EditorGUILayout.Space(5);
|
||||||
|
EditorGUILayout.BeginHorizontal();
|
||||||
|
|
||||||
if (GUILayout.Button("회전 초기화", GUILayout.Height(25)))
|
if (GUILayout.Button("회전 초기화", GUILayout.Height(25)))
|
||||||
{
|
{
|
||||||
headRotationXProp.floatValue = 0f;
|
headRotationXProp.floatValue = 0f;
|
||||||
@ -1152,6 +1157,21 @@ public class RetargetingControlWindow : EditorWindow
|
|||||||
EditorUtility.SetDirty(serializedObject.targetObject);
|
EditorUtility.SetDirty(serializedObject.targetObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 정면 캘리브레이션 버튼
|
||||||
|
GUI.enabled = Application.isPlaying;
|
||||||
|
if (GUILayout.Button("정면 캘리브레이션", GUILayout.Height(25)))
|
||||||
|
{
|
||||||
|
CalibrateHeadToForward(serializedObject, headRotationXProp, headRotationYProp, headRotationZProp);
|
||||||
|
}
|
||||||
|
GUI.enabled = true;
|
||||||
|
|
||||||
|
EditorGUILayout.EndHorizontal();
|
||||||
|
|
||||||
|
if (!Application.isPlaying)
|
||||||
|
{
|
||||||
|
EditorGUILayout.HelpBox("정면 캘리브레이션은 플레이 모드에서만 사용 가능합니다.", MessageType.Info);
|
||||||
|
}
|
||||||
|
|
||||||
if (EditorGUI.EndChangeCheck())
|
if (EditorGUI.EndChangeCheck())
|
||||||
{
|
{
|
||||||
serializedObject.ApplyModifiedProperties();
|
serializedObject.ApplyModifiedProperties();
|
||||||
@ -1343,6 +1363,104 @@ public class RetargetingControlWindow : EditorWindow
|
|||||||
EditorGUILayout.LabelField("부착된 프랍 없음");
|
EditorGUILayout.LabelField("부착된 프랍 없음");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// T-포즈에서 캐싱한 머리 정면 방향과 현재 머리 방향을 비교하여 오프셋을 계산합니다.
|
||||||
|
/// 사용법: 모캡 배우가 정면을 바라볼 때 버튼을 누르세요.
|
||||||
|
/// </summary>
|
||||||
|
private void CalibrateHeadToForward(SerializedObject serializedObject,
|
||||||
|
SerializedProperty headRotationXProp,
|
||||||
|
SerializedProperty headRotationYProp,
|
||||||
|
SerializedProperty headRotationZProp)
|
||||||
|
{
|
||||||
|
CustomRetargetingScript script = serializedObject.targetObject as CustomRetargetingScript;
|
||||||
|
if (script == null)
|
||||||
|
{
|
||||||
|
Debug.LogWarning("CustomRetargetingScript가 없습니다.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Animator targetAnimator = script.GetComponent<Animator>();
|
||||||
|
if (targetAnimator == null)
|
||||||
|
{
|
||||||
|
Debug.LogWarning("타겟 Animator가 없습니다.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Transform targetHead = targetAnimator.GetBoneTransform(HumanBodyBones.Head);
|
||||||
|
if (targetHead == null)
|
||||||
|
{
|
||||||
|
Debug.LogWarning("타겟 아바타의 Head 본을 찾을 수 없습니다.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// T-포즈 머리 방향이 캐싱되어 있는지 확인
|
||||||
|
Vector3 tPoseForward = script.tPoseHeadForward;
|
||||||
|
Vector3 tPoseUp = script.tPoseHeadUp;
|
||||||
|
if (tPoseForward.sqrMagnitude < 0.001f)
|
||||||
|
{
|
||||||
|
Debug.LogWarning("T-포즈 머리 방향이 캐싱되지 않았습니다. 게임을 재시작해주세요.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1. 기존 오프셋 제거하여 원본 로컬 회전 계산
|
||||||
|
float prevX = headRotationXProp.floatValue;
|
||||||
|
float prevY = headRotationYProp.floatValue;
|
||||||
|
float prevZ = headRotationZProp.floatValue;
|
||||||
|
|
||||||
|
Quaternion currentLocalRot = targetHead.localRotation;
|
||||||
|
Quaternion prevOffset = Quaternion.Euler(prevX, prevY, prevZ);
|
||||||
|
Quaternion baseLocalRot = currentLocalRot * Quaternion.Inverse(prevOffset);
|
||||||
|
|
||||||
|
// 2. 부모 월드 회전
|
||||||
|
Transform headParent = targetHead.parent;
|
||||||
|
Quaternion parentWorldRot = headParent != null ? headParent.rotation : Quaternion.identity;
|
||||||
|
|
||||||
|
// 3. 오프셋 제거된 원본 상태의 월드 회전
|
||||||
|
Quaternion baseWorldRot = parentWorldRot * baseLocalRot;
|
||||||
|
|
||||||
|
// 4. 오프셋 제거된 원본 상태에서의 머리 forward/up 방향 계산
|
||||||
|
Vector3 currentHeadForward = baseWorldRot * Vector3.forward;
|
||||||
|
Vector3 currentHeadUp = baseWorldRot * Vector3.up;
|
||||||
|
|
||||||
|
// 5. 현재 머리 forward → T-포즈 forward로의 회전 계산
|
||||||
|
Quaternion forwardCorrection = Quaternion.FromToRotation(currentHeadForward, tPoseForward);
|
||||||
|
|
||||||
|
// 6. forward 보정 후 up 방향도 맞춰야 함
|
||||||
|
Vector3 correctedUp = forwardCorrection * currentHeadUp;
|
||||||
|
|
||||||
|
// T-포즈 up과의 차이 (roll)
|
||||||
|
float rollAngle = Vector3.SignedAngle(correctedUp, tPoseUp, tPoseForward);
|
||||||
|
Quaternion rollCorrection = Quaternion.AngleAxis(rollAngle, tPoseForward);
|
||||||
|
|
||||||
|
// 7. 전체 월드 보정 회전
|
||||||
|
Quaternion worldCorrection = rollCorrection * forwardCorrection;
|
||||||
|
|
||||||
|
// 8. 보정된 월드 회전
|
||||||
|
Quaternion correctedWorldRot = worldCorrection * baseWorldRot;
|
||||||
|
|
||||||
|
// 9. 보정된 로컬 회전
|
||||||
|
Quaternion correctedLocalRot = Quaternion.Inverse(parentWorldRot) * correctedWorldRot;
|
||||||
|
|
||||||
|
// 10. 오프셋 계산: baseLocalRot * offset = correctedLocalRot
|
||||||
|
Quaternion offsetQuat = Quaternion.Inverse(baseLocalRot) * correctedLocalRot;
|
||||||
|
|
||||||
|
// 11. 오일러로 변환
|
||||||
|
Vector3 euler = offsetQuat.eulerAngles;
|
||||||
|
if (euler.x > 180f) euler.x -= 360f;
|
||||||
|
if (euler.y > 180f) euler.y -= 360f;
|
||||||
|
if (euler.z > 180f) euler.z -= 360f;
|
||||||
|
|
||||||
|
// 12. 적용
|
||||||
|
headRotationXProp.floatValue = Mathf.Clamp(euler.x, -180f, 180f);
|
||||||
|
headRotationYProp.floatValue = Mathf.Clamp(euler.y, -180f, 180f);
|
||||||
|
headRotationZProp.floatValue = Mathf.Clamp(euler.z, -180f, 180f);
|
||||||
|
serializedObject.ApplyModifiedProperties();
|
||||||
|
EditorUtility.SetDirty(serializedObject.targetObject);
|
||||||
|
|
||||||
|
Debug.Log($"정면 캘리브레이션 완료 - T-Pose Forward: {tPoseForward}, Current Forward: {currentHeadForward}\n" +
|
||||||
|
$" → Offset X: {euler.x:F1}°, Y: {euler.y:F1}°, Z: {euler.z:F1}°");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[System.Serializable]
|
[System.Serializable]
|
||||||
|
|||||||
@ -0,0 +1,184 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using UnityEditor;
|
||||||
|
using KindRetargeting.Remote;
|
||||||
|
|
||||||
|
namespace KindRetargeting.Editor
|
||||||
|
{
|
||||||
|
[CustomEditor(typeof(RetargetingRemoteController))]
|
||||||
|
public class RetargetingRemoteControllerEditor : UnityEditor.Editor
|
||||||
|
{
|
||||||
|
private SerializedProperty httpPortProp;
|
||||||
|
private SerializedProperty wsPortProp;
|
||||||
|
private SerializedProperty autoStartProp;
|
||||||
|
private SerializedProperty registeredCharactersProp;
|
||||||
|
|
||||||
|
private void OnEnable()
|
||||||
|
{
|
||||||
|
httpPortProp = serializedObject.FindProperty("httpPort");
|
||||||
|
wsPortProp = serializedObject.FindProperty("wsPort");
|
||||||
|
autoStartProp = serializedObject.FindProperty("autoStart");
|
||||||
|
registeredCharactersProp = serializedObject.FindProperty("registeredCharacters");
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnInspectorGUI()
|
||||||
|
{
|
||||||
|
serializedObject.Update();
|
||||||
|
|
||||||
|
RetargetingRemoteController controller = (RetargetingRemoteController)target;
|
||||||
|
|
||||||
|
// 헤더
|
||||||
|
EditorGUILayout.Space(5);
|
||||||
|
EditorGUILayout.LabelField("리타게팅 웹 리모컨", EditorStyles.boldLabel);
|
||||||
|
EditorGUILayout.Space(5);
|
||||||
|
|
||||||
|
// 상태 표시
|
||||||
|
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||||||
|
EditorGUILayout.BeginHorizontal();
|
||||||
|
EditorGUILayout.LabelField("상태:", GUILayout.Width(40));
|
||||||
|
|
||||||
|
if (Application.isPlaying)
|
||||||
|
{
|
||||||
|
if (controller.IsRunning)
|
||||||
|
{
|
||||||
|
GUI.color = Color.green;
|
||||||
|
EditorGUILayout.LabelField("실행 중", EditorStyles.boldLabel);
|
||||||
|
GUI.color = Color.white;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GUI.color = Color.yellow;
|
||||||
|
EditorGUILayout.LabelField("중지됨", EditorStyles.boldLabel);
|
||||||
|
GUI.color = Color.white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GUI.color = Color.gray;
|
||||||
|
EditorGUILayout.LabelField("대기 중 (플레이 모드 필요)", EditorStyles.boldLabel);
|
||||||
|
GUI.color = Color.white;
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorGUILayout.EndHorizontal();
|
||||||
|
EditorGUILayout.EndVertical();
|
||||||
|
|
||||||
|
EditorGUILayout.Space(10);
|
||||||
|
|
||||||
|
// 서버 설정
|
||||||
|
EditorGUILayout.LabelField("서버 설정", EditorStyles.boldLabel);
|
||||||
|
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||||||
|
|
||||||
|
EditorGUILayout.PropertyField(httpPortProp, new GUIContent("HTTP 포트"));
|
||||||
|
EditorGUILayout.PropertyField(wsPortProp, new GUIContent("WebSocket 포트"));
|
||||||
|
EditorGUILayout.PropertyField(autoStartProp, new GUIContent("자동 시작"));
|
||||||
|
|
||||||
|
EditorGUILayout.EndVertical();
|
||||||
|
|
||||||
|
EditorGUILayout.Space(10);
|
||||||
|
|
||||||
|
// 접속 URL
|
||||||
|
if (Application.isPlaying && controller.IsRunning)
|
||||||
|
{
|
||||||
|
EditorGUILayout.LabelField("접속 URL", EditorStyles.boldLabel);
|
||||||
|
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
|
||||||
|
|
||||||
|
string localUrl = $"http://localhost:{httpPortProp.intValue}";
|
||||||
|
EditorGUILayout.BeginHorizontal();
|
||||||
|
EditorGUILayout.TextField("로컬", localUrl);
|
||||||
|
if (GUILayout.Button("복사", GUILayout.Width(40)))
|
||||||
|
{
|
||||||
|
EditorGUIUtility.systemCopyBuffer = localUrl;
|
||||||
|
}
|
||||||
|
EditorGUILayout.EndHorizontal();
|
||||||
|
|
||||||
|
string localIP = GetLocalIPAddress();
|
||||||
|
if (!string.IsNullOrEmpty(localIP))
|
||||||
|
{
|
||||||
|
string networkUrl = $"http://{localIP}:{httpPortProp.intValue}";
|
||||||
|
EditorGUILayout.BeginHorizontal();
|
||||||
|
EditorGUILayout.TextField("네트워크", networkUrl);
|
||||||
|
if (GUILayout.Button("복사", GUILayout.Width(40)))
|
||||||
|
{
|
||||||
|
EditorGUIUtility.systemCopyBuffer = networkUrl;
|
||||||
|
}
|
||||||
|
EditorGUILayout.EndHorizontal();
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorGUILayout.EndVertical();
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorGUILayout.Space(10);
|
||||||
|
|
||||||
|
// 캐릭터 등록
|
||||||
|
EditorGUILayout.LabelField("등록된 캐릭터", EditorStyles.boldLabel);
|
||||||
|
EditorGUILayout.PropertyField(registeredCharactersProp, GUIContent.none);
|
||||||
|
|
||||||
|
// 자동 등록 버튼
|
||||||
|
EditorGUILayout.Space(5);
|
||||||
|
if (GUILayout.Button("씬에서 캐릭터 자동 찾기"))
|
||||||
|
{
|
||||||
|
AutoFindCharacters();
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorGUILayout.Space(10);
|
||||||
|
|
||||||
|
// 서버 제어 버튼 (플레이 모드에서만)
|
||||||
|
if (Application.isPlaying)
|
||||||
|
{
|
||||||
|
EditorGUILayout.LabelField("서버 제어", EditorStyles.boldLabel);
|
||||||
|
EditorGUILayout.BeginHorizontal();
|
||||||
|
|
||||||
|
if (controller.IsRunning)
|
||||||
|
{
|
||||||
|
if (GUILayout.Button("서버 중지", GUILayout.Height(30)))
|
||||||
|
{
|
||||||
|
controller.StopServer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (GUILayout.Button("서버 시작", GUILayout.Height(30)))
|
||||||
|
{
|
||||||
|
controller.StartServer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorGUILayout.EndHorizontal();
|
||||||
|
}
|
||||||
|
|
||||||
|
serializedObject.ApplyModifiedProperties();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AutoFindCharacters()
|
||||||
|
{
|
||||||
|
var characters = FindObjectsByType<CustomRetargetingScript>(FindObjectsSortMode.None);
|
||||||
|
registeredCharactersProp.ClearArray();
|
||||||
|
|
||||||
|
foreach (var character in characters)
|
||||||
|
{
|
||||||
|
int index = registeredCharactersProp.arraySize;
|
||||||
|
registeredCharactersProp.InsertArrayElementAtIndex(index);
|
||||||
|
registeredCharactersProp.GetArrayElementAtIndex(index).objectReferenceValue = character;
|
||||||
|
}
|
||||||
|
|
||||||
|
serializedObject.ApplyModifiedProperties();
|
||||||
|
Debug.Log($"[RetargetingRemote] {characters.Length}개의 캐릭터를 찾았습니다.");
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetLocalIPAddress()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var host = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());
|
||||||
|
foreach (var ip in host.AddressList)
|
||||||
|
{
|
||||||
|
if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
|
||||||
|
{
|
||||||
|
return ip.ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: eccd6d5782992bd45913dd1589224b88
|
||||||
8
Assets/Scripts/KindRetargeting/Remote.meta
Normal file
8
Assets/Scripts/KindRetargeting/Remote.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0bcd317210d39fe4f8105a09742be66a
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
246
Assets/Scripts/KindRetargeting/Remote/RetargetingHTTPServer.cs
Normal file
246
Assets/Scripts/KindRetargeting/Remote/RetargetingHTTPServer.cs
Normal file
@ -0,0 +1,246 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Net;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace KindRetargeting.Remote
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// HTTP 서버 - 웹 리모컨 UI 페이지를 제공합니다.
|
||||||
|
/// Resources 폴더에서 CSS, HTML 템플릿, JavaScript를 로드합니다.
|
||||||
|
/// </summary>
|
||||||
|
public class RetargetingHTTPServer
|
||||||
|
{
|
||||||
|
private HttpListener listener;
|
||||||
|
private Thread listenerThread;
|
||||||
|
private bool isRunning = false;
|
||||||
|
|
||||||
|
private int httpPort;
|
||||||
|
private int wsPort;
|
||||||
|
|
||||||
|
private string cachedCSS = "";
|
||||||
|
private string cachedTemplate = "";
|
||||||
|
private string cachedJS = "";
|
||||||
|
|
||||||
|
private List<string> boundAddresses = new List<string>();
|
||||||
|
|
||||||
|
public bool IsRunning => isRunning;
|
||||||
|
public IReadOnlyList<string> BoundAddresses => boundAddresses;
|
||||||
|
|
||||||
|
public RetargetingHTTPServer(int httpPort, int wsPort)
|
||||||
|
{
|
||||||
|
this.httpPort = httpPort;
|
||||||
|
this.wsPort = wsPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Start()
|
||||||
|
{
|
||||||
|
if (isRunning) return;
|
||||||
|
|
||||||
|
LoadResources();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
listener = new HttpListener();
|
||||||
|
boundAddresses.Clear();
|
||||||
|
|
||||||
|
// 로컬 접속 지원
|
||||||
|
listener.Prefixes.Add($"http://localhost:{httpPort}/");
|
||||||
|
boundAddresses.Add($"http://localhost:{httpPort}");
|
||||||
|
|
||||||
|
listener.Prefixes.Add($"http://127.0.0.1:{httpPort}/");
|
||||||
|
boundAddresses.Add($"http://127.0.0.1:{httpPort}");
|
||||||
|
|
||||||
|
// 외부 접속도 시도
|
||||||
|
try
|
||||||
|
{
|
||||||
|
listener.Prefixes.Add($"http://+:{httpPort}/");
|
||||||
|
string localIP = GetLocalIPAddress();
|
||||||
|
if (!string.IsNullOrEmpty(localIP))
|
||||||
|
{
|
||||||
|
boundAddresses.Add($"http://{localIP}:{httpPort}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
Debug.LogWarning("[RetargetingHTTP] 외부 접속 바인딩 실패. localhost만 사용 가능합니다.");
|
||||||
|
}
|
||||||
|
|
||||||
|
listener.Start();
|
||||||
|
isRunning = true;
|
||||||
|
|
||||||
|
listenerThread = new Thread(HandleRequests);
|
||||||
|
listenerThread.IsBackground = true;
|
||||||
|
listenerThread.Start();
|
||||||
|
|
||||||
|
Debug.Log("[RetargetingHTTP] HTTP 서버 시작됨");
|
||||||
|
foreach (var addr in boundAddresses)
|
||||||
|
{
|
||||||
|
Debug.Log($"[RetargetingHTTP] 접속: {addr}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.LogError($"[RetargetingHTTP] 서버 시작 실패: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Stop()
|
||||||
|
{
|
||||||
|
if (!isRunning) return;
|
||||||
|
|
||||||
|
isRunning = false;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
listener?.Stop();
|
||||||
|
listener?.Close();
|
||||||
|
}
|
||||||
|
catch (Exception) { }
|
||||||
|
|
||||||
|
Debug.Log("[RetargetingHTTP] HTTP 서버 중지됨");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LoadResources()
|
||||||
|
{
|
||||||
|
TextAsset cssAsset = Resources.Load<TextAsset>("KindRetargeting/retargeting_style");
|
||||||
|
TextAsset templateAsset = Resources.Load<TextAsset>("KindRetargeting/retargeting_template");
|
||||||
|
TextAsset jsAsset = Resources.Load<TextAsset>("KindRetargeting/retargeting_script");
|
||||||
|
|
||||||
|
cachedCSS = cssAsset != null ? cssAsset.text : GetFallbackCSS();
|
||||||
|
cachedTemplate = templateAsset != null ? templateAsset.text : GetFallbackTemplate();
|
||||||
|
cachedJS = jsAsset != null ? jsAsset.text : GetFallbackJS();
|
||||||
|
|
||||||
|
if (cssAsset == null || templateAsset == null || jsAsset == null)
|
||||||
|
{
|
||||||
|
Debug.LogWarning("[RetargetingHTTP] 일부 리소스를 로드할 수 없습니다. Fallback 사용 중.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void HandleRequests()
|
||||||
|
{
|
||||||
|
while (isRunning)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
HttpListenerContext context = listener.GetContext();
|
||||||
|
ProcessRequest(context);
|
||||||
|
}
|
||||||
|
catch (HttpListenerException)
|
||||||
|
{
|
||||||
|
// 서버 종료 시 발생
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
if (isRunning)
|
||||||
|
{
|
||||||
|
Debug.LogError($"[RetargetingHTTP] 요청 처리 오류: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ProcessRequest(HttpListenerContext context)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string path = context.Request.Url.AbsolutePath;
|
||||||
|
|
||||||
|
string responseContent;
|
||||||
|
string contentType;
|
||||||
|
|
||||||
|
if (path == "/" || path == "/index.html")
|
||||||
|
{
|
||||||
|
responseContent = GenerateHTML();
|
||||||
|
contentType = "text/html; charset=utf-8";
|
||||||
|
}
|
||||||
|
else if (path == "/style.css")
|
||||||
|
{
|
||||||
|
responseContent = cachedCSS;
|
||||||
|
contentType = "text/css; charset=utf-8";
|
||||||
|
}
|
||||||
|
else if (path == "/script.js")
|
||||||
|
{
|
||||||
|
responseContent = cachedJS.Replace("{{WS_PORT}}", wsPort.ToString());
|
||||||
|
contentType = "application/javascript; charset=utf-8";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
context.Response.StatusCode = 404;
|
||||||
|
responseContent = "Not Found";
|
||||||
|
contentType = "text/plain";
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] buffer = Encoding.UTF8.GetBytes(responseContent);
|
||||||
|
context.Response.ContentType = contentType;
|
||||||
|
context.Response.ContentLength64 = buffer.Length;
|
||||||
|
context.Response.AddHeader("Cache-Control", "no-cache");
|
||||||
|
context.Response.OutputStream.Write(buffer, 0, buffer.Length);
|
||||||
|
context.Response.Close();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.LogError($"[RetargetingHTTP] 응답 처리 오류: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GenerateHTML()
|
||||||
|
{
|
||||||
|
string html = cachedTemplate;
|
||||||
|
html = html.Replace("{{CSS}}", cachedCSS);
|
||||||
|
html = html.Replace("{{JS}}", cachedJS.Replace("{{WS_PORT}}", wsPort.ToString()));
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetLocalIPAddress()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var host = Dns.GetHostEntry(Dns.GetHostName());
|
||||||
|
foreach (var ip in host.AddressList)
|
||||||
|
{
|
||||||
|
if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
|
||||||
|
{
|
||||||
|
return ip.ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception) { }
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetFallbackCSS()
|
||||||
|
{
|
||||||
|
return @"
|
||||||
|
body { font-family: sans-serif; background: #1a1a2e; color: #fff; padding: 20px; }
|
||||||
|
.error { color: #ff6b6b; padding: 20px; text-align: center; }
|
||||||
|
";
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetFallbackTemplate()
|
||||||
|
{
|
||||||
|
return @"
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset=""UTF-8"">
|
||||||
|
<title>리타게팅 리모컨</title>
|
||||||
|
<style>{{CSS}}</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class=""error"">
|
||||||
|
리소스 파일을 찾을 수 없습니다.<br>
|
||||||
|
Assets/Resources/KindRetargeting/ 폴더에 파일이 있는지 확인해주세요.
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>";
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetFallbackJS()
|
||||||
|
{
|
||||||
|
return "console.error('JavaScript resource not found');";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: aefa700f1b9823544bf33043b01244b2
|
||||||
@ -0,0 +1,670 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Reflection;
|
||||||
|
using UnityEngine;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
namespace KindRetargeting.Remote
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 리타게팅 원격 제어 컨트롤러
|
||||||
|
/// HTTP 서버와 WebSocket 서버를 관리하고 메시지를 처리합니다.
|
||||||
|
/// </summary>
|
||||||
|
public class RetargetingRemoteController : MonoBehaviour
|
||||||
|
{
|
||||||
|
[Header("서버 설정")]
|
||||||
|
[SerializeField] private int httpPort = 8080;
|
||||||
|
[SerializeField] private int wsPort = 8081;
|
||||||
|
[SerializeField] private bool autoStart = true;
|
||||||
|
|
||||||
|
[Header("캐릭터 등록")]
|
||||||
|
[SerializeField] private List<CustomRetargetingScript> registeredCharacters = new List<CustomRetargetingScript>();
|
||||||
|
|
||||||
|
private RetargetingHTTPServer httpServer;
|
||||||
|
private RetargetingWebSocketServer wsServer;
|
||||||
|
|
||||||
|
private Queue<Action> mainThreadActions = new Queue<Action>();
|
||||||
|
|
||||||
|
public bool IsRunning => httpServer?.IsRunning == true && wsServer?.IsRunning == true;
|
||||||
|
public int HttpPort { get => httpPort; set => httpPort = value; }
|
||||||
|
public int WsPort { get => wsPort; set => wsPort = value; }
|
||||||
|
public bool AutoStart { get => autoStart; set => autoStart = value; }
|
||||||
|
|
||||||
|
// 손 포즈 프리셋 목록
|
||||||
|
private static readonly string[] handPosePresets = new string[]
|
||||||
|
{
|
||||||
|
"가위", "바위", "보", "브이", "검지", "초기화"
|
||||||
|
};
|
||||||
|
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
if (autoStart)
|
||||||
|
{
|
||||||
|
StartServer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDestroy()
|
||||||
|
{
|
||||||
|
StopServer();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Update()
|
||||||
|
{
|
||||||
|
// 메인 스레드 액션 처리
|
||||||
|
lock (mainThreadActions)
|
||||||
|
{
|
||||||
|
while (mainThreadActions.Count > 0)
|
||||||
|
{
|
||||||
|
var action = mainThreadActions.Dequeue();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
action?.Invoke();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.LogError($"[RetargetingRemote] 메인 스레드 액션 오류: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StartServer()
|
||||||
|
{
|
||||||
|
if (IsRunning) return;
|
||||||
|
|
||||||
|
httpServer = new RetargetingHTTPServer(httpPort, wsPort);
|
||||||
|
wsServer = new RetargetingWebSocketServer(wsPort);
|
||||||
|
|
||||||
|
wsServer.OnMessageReceived += OnWebSocketMessage;
|
||||||
|
|
||||||
|
httpServer.Start();
|
||||||
|
wsServer.Start();
|
||||||
|
|
||||||
|
Debug.Log($"[RetargetingRemote] 서버 시작됨 - HTTP: {httpPort}, WS: {wsPort}");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StopServer()
|
||||||
|
{
|
||||||
|
wsServer?.Stop();
|
||||||
|
httpServer?.Stop();
|
||||||
|
|
||||||
|
if (wsServer != null)
|
||||||
|
{
|
||||||
|
wsServer.OnMessageReceived -= OnWebSocketMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Log("[RetargetingRemote] 서버 중지됨");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnWebSocketMessage(string message)
|
||||||
|
{
|
||||||
|
EnqueueMainThread(() => ProcessMessage(message));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void EnqueueMainThread(Action action)
|
||||||
|
{
|
||||||
|
lock (mainThreadActions)
|
||||||
|
{
|
||||||
|
mainThreadActions.Enqueue(action);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ProcessMessage(string message)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var json = JObject.Parse(message);
|
||||||
|
string action = json["action"]?.ToString();
|
||||||
|
|
||||||
|
switch (action)
|
||||||
|
{
|
||||||
|
case "refresh":
|
||||||
|
SendCharacterList();
|
||||||
|
SendHandPosePresets();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "getCharacterData":
|
||||||
|
{
|
||||||
|
string charId = json["characterId"]?.ToString();
|
||||||
|
SendCharacterData(charId);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "updateValueRealtime":
|
||||||
|
{
|
||||||
|
string charId = json["characterId"]?.ToString();
|
||||||
|
string property = json["property"]?.ToString();
|
||||||
|
float value = json["value"]?.Value<float>() ?? 0f;
|
||||||
|
UpdateValue(charId, property, value);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "setHandPosePreset":
|
||||||
|
{
|
||||||
|
string charId = json["characterId"]?.ToString();
|
||||||
|
string property = json["property"]?.ToString();
|
||||||
|
string presetName = json["stringValue"]?.ToString();
|
||||||
|
ApplyHandPosePreset(charId, property, presetName);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "calibrateIPose":
|
||||||
|
{
|
||||||
|
string charId = json["characterId"]?.ToString();
|
||||||
|
CalibrateIPose(charId);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "resetCalibration":
|
||||||
|
{
|
||||||
|
string charId = json["characterId"]?.ToString();
|
||||||
|
ResetCalibration(charId);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "calibrateMingleOpen":
|
||||||
|
{
|
||||||
|
string charId = json["characterId"]?.ToString();
|
||||||
|
CalibrateMingleOpen(charId);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "calibrateMingleClose":
|
||||||
|
{
|
||||||
|
string charId = json["characterId"]?.ToString();
|
||||||
|
CalibrateMingleClose(charId);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "calibrateHeadForward":
|
||||||
|
{
|
||||||
|
string charId = json["characterId"]?.ToString();
|
||||||
|
CalibrateHeadForward(charId);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Debug.LogWarning($"[RetargetingRemote] 알 수 없는 액션: {action}");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.LogError($"[RetargetingRemote] 메시지 처리 오류: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SendCharacterList()
|
||||||
|
{
|
||||||
|
var charIds = new List<string>();
|
||||||
|
foreach (var script in registeredCharacters)
|
||||||
|
{
|
||||||
|
if (script != null)
|
||||||
|
{
|
||||||
|
charIds.Add(script.gameObject.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var response = new
|
||||||
|
{
|
||||||
|
type = "characterList",
|
||||||
|
characters = charIds
|
||||||
|
};
|
||||||
|
|
||||||
|
wsServer?.Broadcast(JsonConvert.SerializeObject(response));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SendHandPosePresets()
|
||||||
|
{
|
||||||
|
var response = new
|
||||||
|
{
|
||||||
|
type = "handPosePresets",
|
||||||
|
presets = handPosePresets
|
||||||
|
};
|
||||||
|
|
||||||
|
wsServer?.Broadcast(JsonConvert.SerializeObject(response));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SendCharacterData(string characterId)
|
||||||
|
{
|
||||||
|
var script = FindCharacter(characterId);
|
||||||
|
if (script == null)
|
||||||
|
{
|
||||||
|
SendStatus(false, $"캐릭터를 찾을 수 없습니다: {characterId}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var limbWeight = script.GetComponent<LimbWeightController>();
|
||||||
|
var handPose = script.GetComponent<FingerShapedController>();
|
||||||
|
|
||||||
|
var data = new Dictionary<string, object>
|
||||||
|
{
|
||||||
|
// 힙 위치 보정 (로컬)
|
||||||
|
{ "hipsVertical", GetPrivateField<float>(script, "hipsOffsetY") },
|
||||||
|
{ "hipsForward", GetPrivateField<float>(script, "hipsOffsetZ") },
|
||||||
|
{ "hipsHorizontal", GetPrivateField<float>(script, "hipsOffsetX") },
|
||||||
|
|
||||||
|
// 무릎 위치 조정
|
||||||
|
{ "kneeFrontBackWeight", GetPrivateField<float>(script, "kneeFrontBackWeight") },
|
||||||
|
{ "kneeInOutWeight", GetPrivateField<float>(script, "kneeInOutWeight") },
|
||||||
|
|
||||||
|
// 발 IK 위치 조정
|
||||||
|
{ "feetForwardBackward", GetPrivateField<float>(script, "footFrontBackOffset") },
|
||||||
|
{ "feetNarrow", GetPrivateField<float>(script, "footInOutOffset") },
|
||||||
|
|
||||||
|
// 바닥 높이
|
||||||
|
{ "floorHeight", script.floorHeight },
|
||||||
|
|
||||||
|
// 아바타 크기
|
||||||
|
{ "avatarScale", GetPrivateField<float>(script, "avatarScale") },
|
||||||
|
|
||||||
|
// 머리 크기
|
||||||
|
{ "headScale", script.GetHeadScale() },
|
||||||
|
|
||||||
|
// 머리 회전 오프셋
|
||||||
|
{ "headRotationOffsetX", script.headRotationOffsetX },
|
||||||
|
{ "headRotationOffsetY", script.headRotationOffsetY },
|
||||||
|
{ "headRotationOffsetZ", script.headRotationOffsetZ },
|
||||||
|
|
||||||
|
// 손가락 복제 모드
|
||||||
|
{ "fingerCopyMode", (int)GetPrivateField<EnumsList.FingerCopyMode>(script, "fingerCopyMode") },
|
||||||
|
|
||||||
|
// 모션 설정
|
||||||
|
{ "useMotionFilter", GetPrivateField<bool>(script, "useMotionFilter") },
|
||||||
|
{ "filterBufferSize", GetPrivateField<int>(script, "filterBufferSize") },
|
||||||
|
{ "useBodyRoughMotion", GetPrivateField<bool>(script, "useBodyRoughMotion") },
|
||||||
|
{ "bodyRoughness", GetPrivateField<float>(script, "bodyRoughness") },
|
||||||
|
|
||||||
|
// 캘리브레이션 상태
|
||||||
|
{ "hasCalibrationData", script.HasCachedSettings() }
|
||||||
|
};
|
||||||
|
|
||||||
|
// LimbWeightController 데이터
|
||||||
|
if (limbWeight != null)
|
||||||
|
{
|
||||||
|
data["limbMinDistance"] = limbWeight.minDistance;
|
||||||
|
data["limbMaxDistance"] = limbWeight.maxDistance;
|
||||||
|
data["weightSmoothSpeed"] = limbWeight.weightSmoothSpeed;
|
||||||
|
data["hipsMinDistance"] = limbWeight.hipsMinDistance;
|
||||||
|
data["hipsMaxDistance"] = limbWeight.hipsMaxDistance;
|
||||||
|
data["groundHipsMinHeight"] = limbWeight.groundHipsMinHeight;
|
||||||
|
data["groundHipsMaxHeight"] = limbWeight.groundHipsMaxHeight;
|
||||||
|
data["footHeightMinThreshold"] = limbWeight.footHeightMinThreshold;
|
||||||
|
data["footHeightMaxThreshold"] = limbWeight.footHeightMaxThreshold;
|
||||||
|
data["chairSeatHeightOffset"] = limbWeight.chairSeatHeightOffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FingerShapedController 데이터
|
||||||
|
if (handPose != null)
|
||||||
|
{
|
||||||
|
data["handPoseEnabled"] = handPose.enabled;
|
||||||
|
data["leftHandEnabled"] = handPose.leftHandEnabled;
|
||||||
|
data["rightHandEnabled"] = handPose.rightHandEnabled;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
data["handPoseEnabled"] = false;
|
||||||
|
data["leftHandEnabled"] = false;
|
||||||
|
data["rightHandEnabled"] = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var response = new
|
||||||
|
{
|
||||||
|
type = "characterData",
|
||||||
|
characterId = characterId,
|
||||||
|
data = data
|
||||||
|
};
|
||||||
|
|
||||||
|
wsServer?.Broadcast(JsonConvert.SerializeObject(response));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateValue(string characterId, string property, float value)
|
||||||
|
{
|
||||||
|
var script = FindCharacter(characterId);
|
||||||
|
if (script == null) return;
|
||||||
|
|
||||||
|
var limbWeight = script.GetComponent<LimbWeightController>();
|
||||||
|
var handPose = script.GetComponent<FingerShapedController>();
|
||||||
|
|
||||||
|
switch (property)
|
||||||
|
{
|
||||||
|
// 힙 위치 보정
|
||||||
|
case "hipsVertical":
|
||||||
|
SetPrivateField(script, "hipsOffsetY", value);
|
||||||
|
break;
|
||||||
|
case "hipsForward":
|
||||||
|
SetPrivateField(script, "hipsOffsetZ", value);
|
||||||
|
break;
|
||||||
|
case "hipsHorizontal":
|
||||||
|
SetPrivateField(script, "hipsOffsetX", value);
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 무릎 위치 조정
|
||||||
|
case "kneeFrontBackWeight":
|
||||||
|
SetPrivateField(script, "kneeFrontBackWeight", value);
|
||||||
|
break;
|
||||||
|
case "kneeInOutWeight":
|
||||||
|
SetPrivateField(script, "kneeInOutWeight", value);
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 발 IK 위치 조정
|
||||||
|
case "feetForwardBackward":
|
||||||
|
SetPrivateField(script, "footFrontBackOffset", value);
|
||||||
|
break;
|
||||||
|
case "feetNarrow":
|
||||||
|
SetPrivateField(script, "footInOutOffset", value);
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 바닥 높이
|
||||||
|
case "floorHeight":
|
||||||
|
script.floorHeight = value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 아바타 크기
|
||||||
|
case "avatarScale":
|
||||||
|
SetPrivateField(script, "avatarScale", value);
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 머리 크기
|
||||||
|
case "headScale":
|
||||||
|
script.SetHeadScale(value);
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 머리 회전 오프셋
|
||||||
|
case "headRotationOffsetX":
|
||||||
|
script.headRotationOffsetX = value;
|
||||||
|
break;
|
||||||
|
case "headRotationOffsetY":
|
||||||
|
script.headRotationOffsetY = value;
|
||||||
|
break;
|
||||||
|
case "headRotationOffsetZ":
|
||||||
|
script.headRotationOffsetZ = value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 손가락 복제 모드
|
||||||
|
case "fingerCopyMode":
|
||||||
|
SetPrivateField(script, "fingerCopyMode", (EnumsList.FingerCopyMode)(int)value);
|
||||||
|
break;
|
||||||
|
|
||||||
|
// 모션 설정
|
||||||
|
case "useMotionFilter":
|
||||||
|
SetPrivateField(script, "useMotionFilter", value > 0.5f);
|
||||||
|
break;
|
||||||
|
case "filterBufferSize":
|
||||||
|
SetPrivateField(script, "filterBufferSize", (int)value);
|
||||||
|
break;
|
||||||
|
case "useBodyRoughMotion":
|
||||||
|
SetPrivateField(script, "useBodyRoughMotion", value > 0.5f);
|
||||||
|
break;
|
||||||
|
case "bodyRoughness":
|
||||||
|
SetPrivateField(script, "bodyRoughness", value);
|
||||||
|
break;
|
||||||
|
|
||||||
|
// LimbWeightController 속성
|
||||||
|
case "limbMinDistance":
|
||||||
|
if (limbWeight != null) limbWeight.minDistance = value;
|
||||||
|
break;
|
||||||
|
case "limbMaxDistance":
|
||||||
|
if (limbWeight != null) limbWeight.maxDistance = value;
|
||||||
|
break;
|
||||||
|
case "weightSmoothSpeed":
|
||||||
|
if (limbWeight != null) limbWeight.weightSmoothSpeed = value;
|
||||||
|
break;
|
||||||
|
case "hipsMinDistance":
|
||||||
|
if (limbWeight != null) limbWeight.hipsMinDistance = value;
|
||||||
|
break;
|
||||||
|
case "hipsMaxDistance":
|
||||||
|
if (limbWeight != null) limbWeight.hipsMaxDistance = value;
|
||||||
|
break;
|
||||||
|
case "groundHipsMinHeight":
|
||||||
|
if (limbWeight != null) limbWeight.groundHipsMinHeight = value;
|
||||||
|
break;
|
||||||
|
case "groundHipsMaxHeight":
|
||||||
|
if (limbWeight != null) limbWeight.groundHipsMaxHeight = value;
|
||||||
|
break;
|
||||||
|
case "footHeightMinThreshold":
|
||||||
|
if (limbWeight != null) limbWeight.footHeightMinThreshold = value;
|
||||||
|
break;
|
||||||
|
case "footHeightMaxThreshold":
|
||||||
|
if (limbWeight != null) limbWeight.footHeightMaxThreshold = value;
|
||||||
|
break;
|
||||||
|
case "chairSeatHeightOffset":
|
||||||
|
if (limbWeight != null) limbWeight.chairSeatHeightOffset = value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// FingerShapedController 속성
|
||||||
|
case "handPoseEnabled":
|
||||||
|
if (handPose != null)
|
||||||
|
handPose.enabled = value > 0.5f;
|
||||||
|
break;
|
||||||
|
case "leftHandEnabled":
|
||||||
|
if (handPose != null)
|
||||||
|
{
|
||||||
|
handPose.leftHandEnabled = value > 0.5f;
|
||||||
|
if (handPose.leftHandEnabled)
|
||||||
|
handPose.enabled = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "rightHandEnabled":
|
||||||
|
if (handPose != null)
|
||||||
|
{
|
||||||
|
handPose.rightHandEnabled = value > 0.5f;
|
||||||
|
if (handPose.rightHandEnabled)
|
||||||
|
handPose.enabled = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
Debug.LogWarning($"[RetargetingRemote] 알 수 없는 속성: {property}");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ApplyHandPosePreset(string characterId, string property, string presetName)
|
||||||
|
{
|
||||||
|
var script = FindCharacter(characterId);
|
||||||
|
if (script == null) return;
|
||||||
|
|
||||||
|
var handPose = script.GetComponent<FingerShapedController>();
|
||||||
|
if (handPose == null) return;
|
||||||
|
|
||||||
|
// 스크립트 자동 활성화
|
||||||
|
handPose.enabled = true;
|
||||||
|
|
||||||
|
// 해당 손 활성화
|
||||||
|
if (property == "leftHandPreset")
|
||||||
|
handPose.leftHandEnabled = true;
|
||||||
|
else if (property == "rightHandPreset")
|
||||||
|
handPose.rightHandEnabled = true;
|
||||||
|
|
||||||
|
// 프리셋 적용
|
||||||
|
float thumb = 0, index = 0, middle = 0, ring = 0, pinky = 0, spread = 0;
|
||||||
|
|
||||||
|
switch (presetName)
|
||||||
|
{
|
||||||
|
case "가위":
|
||||||
|
thumb = 1f; index = 1f; middle = -1f; ring = -1f; pinky = -1f; spread = 0.3f;
|
||||||
|
break;
|
||||||
|
case "바위":
|
||||||
|
thumb = -1f; index = -1f; middle = -1f; ring = -1f; pinky = -1f; spread = 0f;
|
||||||
|
break;
|
||||||
|
case "보":
|
||||||
|
thumb = 1f; index = 1f; middle = 1f; ring = 1f; pinky = 1f; spread = 1f;
|
||||||
|
break;
|
||||||
|
case "브이":
|
||||||
|
thumb = -1f; index = 1f; middle = 1f; ring = -1f; pinky = -1f; spread = 1f;
|
||||||
|
break;
|
||||||
|
case "검지":
|
||||||
|
thumb = -1f; index = 1f; middle = -1f; ring = -1f; pinky = -1f; spread = 0f;
|
||||||
|
break;
|
||||||
|
case "초기화":
|
||||||
|
thumb = 0.8f; index = 0.8f; middle = 0.8f; ring = 0.8f; pinky = 0.8f; spread = 0.8f;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property == "leftHandPreset" && handPose.leftHandEnabled)
|
||||||
|
{
|
||||||
|
handPose.leftThumbCurl = thumb;
|
||||||
|
handPose.leftIndexCurl = index;
|
||||||
|
handPose.leftMiddleCurl = middle;
|
||||||
|
handPose.leftRingCurl = ring;
|
||||||
|
handPose.leftPinkyCurl = pinky;
|
||||||
|
handPose.leftSpreadFingers = spread;
|
||||||
|
}
|
||||||
|
else if (property == "rightHandPreset" && handPose.rightHandEnabled)
|
||||||
|
{
|
||||||
|
handPose.rightThumbCurl = thumb;
|
||||||
|
handPose.rightIndexCurl = index;
|
||||||
|
handPose.rightMiddleCurl = middle;
|
||||||
|
handPose.rightRingCurl = ring;
|
||||||
|
handPose.rightPinkyCurl = pinky;
|
||||||
|
handPose.rightSpreadFingers = spread;
|
||||||
|
}
|
||||||
|
|
||||||
|
SendStatus(true, $"{presetName} 프리셋 적용됨");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CalibrateIPose(string characterId)
|
||||||
|
{
|
||||||
|
var script = FindCharacter(characterId);
|
||||||
|
if (script == null) return;
|
||||||
|
|
||||||
|
script.I_PoseCalibration();
|
||||||
|
script.SaveSettings(); // 캘리브레이션 후 설정 저장
|
||||||
|
|
||||||
|
SendCharacterData(characterId);
|
||||||
|
SendStatus(true, "I-포즈 캘리브레이션 완료");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ResetCalibration(string characterId)
|
||||||
|
{
|
||||||
|
var script = FindCharacter(characterId);
|
||||||
|
if (script == null) return;
|
||||||
|
|
||||||
|
script.ResetPoseAndCache();
|
||||||
|
|
||||||
|
SendCharacterData(characterId);
|
||||||
|
SendStatus(true, "캘리브레이션 초기화됨");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CalibrateMingleOpen(string characterId)
|
||||||
|
{
|
||||||
|
var script = FindCharacter(characterId);
|
||||||
|
if (script == null) return;
|
||||||
|
|
||||||
|
script.CalibrateMingleOpen();
|
||||||
|
script.SaveSettings();
|
||||||
|
|
||||||
|
SendCharacterData(characterId);
|
||||||
|
SendStatus(true, "Mingle 펼침 캘리브레이션 완료");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CalibrateMingleClose(string characterId)
|
||||||
|
{
|
||||||
|
var script = FindCharacter(characterId);
|
||||||
|
if (script == null) return;
|
||||||
|
|
||||||
|
script.CalibrateMingleClose();
|
||||||
|
script.SaveSettings();
|
||||||
|
|
||||||
|
SendCharacterData(characterId);
|
||||||
|
SendStatus(true, "Mingle 모음 캘리브레이션 완료");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CalibrateHeadForward(string characterId)
|
||||||
|
{
|
||||||
|
var script = FindCharacter(characterId);
|
||||||
|
if (script == null) return;
|
||||||
|
|
||||||
|
script.CalibrateHeadToForward();
|
||||||
|
script.SaveSettings();
|
||||||
|
|
||||||
|
SendCharacterData(characterId);
|
||||||
|
SendStatus(true, "정면 캘리브레이션 완료");
|
||||||
|
}
|
||||||
|
|
||||||
|
private CustomRetargetingScript FindCharacter(string characterId)
|
||||||
|
{
|
||||||
|
foreach (var script in registeredCharacters)
|
||||||
|
{
|
||||||
|
if (script != null && script.gameObject.name == characterId)
|
||||||
|
{
|
||||||
|
return script;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SendStatus(bool success, string message)
|
||||||
|
{
|
||||||
|
var response = new
|
||||||
|
{
|
||||||
|
type = "status",
|
||||||
|
success = success,
|
||||||
|
message = message
|
||||||
|
};
|
||||||
|
|
||||||
|
wsServer?.Broadcast(JsonConvert.SerializeObject(response));
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Reflection Helpers
|
||||||
|
|
||||||
|
private T GetPrivateField<T>(object obj, string fieldName)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var field = obj.GetType().GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
|
||||||
|
if (field != null)
|
||||||
|
{
|
||||||
|
return (T)field.GetValue(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception) { }
|
||||||
|
|
||||||
|
return default(T);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetPrivateField<T>(object obj, string fieldName, T value)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var field = obj.GetType().GetField(fieldName, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
|
||||||
|
if (field != null)
|
||||||
|
{
|
||||||
|
field.SetValue(obj, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.LogError($"[RetargetingRemote] 필드 설정 오류 ({fieldName}): {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Public API
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 캐릭터 등록
|
||||||
|
/// </summary>
|
||||||
|
public void RegisterCharacter(CustomRetargetingScript character)
|
||||||
|
{
|
||||||
|
if (!registeredCharacters.Contains(character))
|
||||||
|
{
|
||||||
|
registeredCharacters.Add(character);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 캐릭터 등록 해제
|
||||||
|
/// </summary>
|
||||||
|
public void UnregisterCharacter(CustomRetargetingScript character)
|
||||||
|
{
|
||||||
|
registeredCharacters.Remove(character);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6318df208b6a254409cc1af28be31e28
|
||||||
@ -0,0 +1,107 @@
|
|||||||
|
using System;
|
||||||
|
using WebSocketSharp;
|
||||||
|
using WebSocketSharp.Server;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace KindRetargeting.Remote
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// WebSocket 서버 - 실시간 양방향 통신을 담당합니다.
|
||||||
|
/// </summary>
|
||||||
|
public class RetargetingWebSocketServer
|
||||||
|
{
|
||||||
|
private WebSocketServer wss;
|
||||||
|
private int port;
|
||||||
|
private bool isRunning = false;
|
||||||
|
|
||||||
|
public bool IsRunning => isRunning;
|
||||||
|
public int Port => port;
|
||||||
|
|
||||||
|
public event Action<string> OnMessageReceived;
|
||||||
|
|
||||||
|
public RetargetingWebSocketServer(int port)
|
||||||
|
{
|
||||||
|
this.port = port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Start()
|
||||||
|
{
|
||||||
|
if (isRunning) return;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
wss = new WebSocketServer(port);
|
||||||
|
wss.AddWebSocketService<RetargetingBehavior>("/retargeting", behavior =>
|
||||||
|
{
|
||||||
|
behavior.OnMessageReceivedCallback = (msg) => OnMessageReceived?.Invoke(msg);
|
||||||
|
});
|
||||||
|
|
||||||
|
wss.Start();
|
||||||
|
isRunning = true;
|
||||||
|
|
||||||
|
Debug.Log($"[RetargetingWS] WebSocket 서버 시작됨 (포트: {port})");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.LogError($"[RetargetingWS] 서버 시작 실패: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Stop()
|
||||||
|
{
|
||||||
|
if (!isRunning) return;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
wss?.Stop();
|
||||||
|
}
|
||||||
|
catch (Exception) { }
|
||||||
|
|
||||||
|
isRunning = false;
|
||||||
|
Debug.Log("[RetargetingWS] WebSocket 서버 중지됨");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Broadcast(string message)
|
||||||
|
{
|
||||||
|
if (!isRunning || wss == null) return;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
wss.WebSocketServices["/retargeting"].Sessions.Broadcast(message);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.LogError($"[RetargetingWS] 브로드캐스트 실패: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// WebSocket 동작 핸들러
|
||||||
|
/// </summary>
|
||||||
|
private class RetargetingBehavior : WebSocketBehavior
|
||||||
|
{
|
||||||
|
public Action<string> OnMessageReceivedCallback;
|
||||||
|
|
||||||
|
protected override void OnOpen()
|
||||||
|
{
|
||||||
|
// 연결 시 로그 제거 (문서 요청에 따름)
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnClose(CloseEventArgs e)
|
||||||
|
{
|
||||||
|
// 연결 종료 시 로그 제거
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnMessage(MessageEventArgs e)
|
||||||
|
{
|
||||||
|
// 로그 제거 (문서 요청에 따름)
|
||||||
|
OnMessageReceivedCallback?.Invoke(e.Data);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnError(ErrorEventArgs e)
|
||||||
|
{
|
||||||
|
Debug.LogError($"[RetargetingWS] 오류: {e.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 103c4e3f462b1c44bb2bee945fa2cbe7
|
||||||
@ -1,4 +1,5 @@
|
|||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using KindRetargeting;
|
||||||
|
|
||||||
[DefaultExecutionOrder(16001)]
|
[DefaultExecutionOrder(16001)]
|
||||||
public class SimplePoseTransfer : MonoBehaviour
|
public class SimplePoseTransfer : MonoBehaviour
|
||||||
@ -7,6 +8,10 @@ public class SimplePoseTransfer : MonoBehaviour
|
|||||||
public Animator sourceBone;
|
public Animator sourceBone;
|
||||||
public Animator[] targetBones;
|
public Animator[] targetBones;
|
||||||
|
|
||||||
|
[Header("Scale Transfer")]
|
||||||
|
[Tooltip("소스의 머리 스케일을 타겟에도 적용")]
|
||||||
|
public bool transferHeadScale = true;
|
||||||
|
|
||||||
// 캐싱된 Transform들
|
// 캐싱된 Transform들
|
||||||
private Transform[] cachedSourceBones;
|
private Transform[] cachedSourceBones;
|
||||||
private Transform[,] cachedTargetBones;
|
private Transform[,] cachedTargetBones;
|
||||||
@ -14,6 +19,10 @@ public class SimplePoseTransfer : MonoBehaviour
|
|||||||
// 각 targetBone의 초기 회전 차이를 저장
|
// 각 targetBone의 초기 회전 차이를 저장
|
||||||
private Quaternion[,] boneRotationDifferences;
|
private Quaternion[,] boneRotationDifferences;
|
||||||
|
|
||||||
|
// 머리 스케일 관련
|
||||||
|
private CustomRetargetingScript sourceRetargetingScript;
|
||||||
|
private Vector3[] originalTargetHeadScales;
|
||||||
|
|
||||||
private void Start()
|
private void Start()
|
||||||
{
|
{
|
||||||
Init();
|
Init();
|
||||||
@ -35,10 +44,35 @@ public class SimplePoseTransfer : MonoBehaviour
|
|||||||
|
|
||||||
InitializeTargetBones();
|
InitializeTargetBones();
|
||||||
CacheAllBoneTransforms();
|
CacheAllBoneTransforms();
|
||||||
|
CacheHeadScales();
|
||||||
|
|
||||||
Debug.Log($"SimplePoseTransfer initialized with {targetBones.Length} targets");
|
Debug.Log($"SimplePoseTransfer initialized with {targetBones.Length} targets");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void CacheHeadScales()
|
||||||
|
{
|
||||||
|
// 소스에서 CustomRetargetingScript 찾기
|
||||||
|
sourceRetargetingScript = sourceBone.GetComponent<CustomRetargetingScript>();
|
||||||
|
|
||||||
|
// 타겟들의 원본 머리 스케일 저장
|
||||||
|
originalTargetHeadScales = new Vector3[targetBones.Length];
|
||||||
|
for (int i = 0; i < targetBones.Length; i++)
|
||||||
|
{
|
||||||
|
if (targetBones[i] != null)
|
||||||
|
{
|
||||||
|
Transform headBone = targetBones[i].GetBoneTransform(HumanBodyBones.Head);
|
||||||
|
if (headBone != null)
|
||||||
|
{
|
||||||
|
originalTargetHeadScales[i] = headBone.localScale;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
originalTargetHeadScales[i] = Vector3.one;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void InitializeTargetBones()
|
private void InitializeTargetBones()
|
||||||
{
|
{
|
||||||
boneRotationDifferences = new Quaternion[targetBones.Length, 55];
|
boneRotationDifferences = new Quaternion[targetBones.Length, 55];
|
||||||
@ -109,7 +143,7 @@ public class SimplePoseTransfer : MonoBehaviour
|
|||||||
private void TransferPoseToTarget(int targetIndex)
|
private void TransferPoseToTarget(int targetIndex)
|
||||||
{
|
{
|
||||||
Animator targetBone = targetBones[targetIndex];
|
Animator targetBone = targetBones[targetIndex];
|
||||||
|
|
||||||
// 루트 회전 동기화
|
// 루트 회전 동기화
|
||||||
targetBone.transform.rotation = sourceBone.transform.rotation;
|
targetBone.transform.rotation = sourceBone.transform.rotation;
|
||||||
|
|
||||||
@ -129,6 +163,30 @@ public class SimplePoseTransfer : MonoBehaviour
|
|||||||
{
|
{
|
||||||
targetBoneTransform.position = sourceBoneTransform.position;
|
targetBoneTransform.position = sourceBoneTransform.position;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 머리 스케일 적용 (HumanBodyBones.Head = 10)
|
||||||
|
if (transferHeadScale && i == 10)
|
||||||
|
{
|
||||||
|
ApplyHeadScale(targetIndex, targetBoneTransform);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ApplyHeadScale(int targetIndex, Transform targetHeadBone)
|
||||||
|
{
|
||||||
|
if (sourceRetargetingScript != null)
|
||||||
|
{
|
||||||
|
float headScale = sourceRetargetingScript.GetHeadScale();
|
||||||
|
targetHeadBone.localScale = originalTargetHeadScales[targetIndex] * headScale;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// CustomRetargetingScript가 없으면 소스 머리 스케일 직접 복사
|
||||||
|
Transform sourceHead = cachedSourceBones[10]; // HumanBodyBones.Head
|
||||||
|
if (sourceHead != null)
|
||||||
|
{
|
||||||
|
targetHeadBone.localScale = sourceHead.localScale;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,6 +4,8 @@ using System.Linq;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System;
|
using System;
|
||||||
using Entum;
|
using Entum;
|
||||||
|
using KindRetargeting;
|
||||||
|
using KindRetargeting.Remote;
|
||||||
#if MAGICACLOTH2
|
#if MAGICACLOTH2
|
||||||
using MagicaCloth2;
|
using MagicaCloth2;
|
||||||
#endif
|
#endif
|
||||||
@ -17,6 +19,12 @@ public class SystemController : MonoBehaviour
|
|||||||
[Header("OptiTrack 참조")]
|
[Header("OptiTrack 참조")]
|
||||||
public OptitrackStreamingClient optitrackClient;
|
public OptitrackStreamingClient optitrackClient;
|
||||||
|
|
||||||
|
[Tooltip("OptiTrack 클라이언트가 없을 때 자동으로 프리펩에서 생성할지 여부")]
|
||||||
|
public bool autoSpawnOptitrackClient = true;
|
||||||
|
|
||||||
|
[Tooltip("OptiTrack 클라이언트 프리펩 경로 (Resources 폴더 기준이 아닌 경우 직접 할당 필요)")]
|
||||||
|
public GameObject optitrackClientPrefab;
|
||||||
|
|
||||||
[Header("모션 녹화 설정")]
|
[Header("모션 녹화 설정")]
|
||||||
[Tooltip("모션 녹화 시 OptiTrack Motive도 함께 녹화할지 여부")]
|
[Tooltip("모션 녹화 시 OptiTrack Motive도 함께 녹화할지 여부")]
|
||||||
public bool recordOptiTrackWithMotion = true;
|
public bool recordOptiTrackWithMotion = true;
|
||||||
@ -61,6 +69,19 @@ public class SystemController : MonoBehaviour
|
|||||||
[Range(0f, 3f)]
|
[Range(0f, 3f)]
|
||||||
public float alphaBlurRadius = 1.0f;
|
public float alphaBlurRadius = 1.0f;
|
||||||
|
|
||||||
|
[Header("리타게팅 웹 리모컨")]
|
||||||
|
[Tooltip("리타게팅 웹 리모컨 컨트롤러 (없으면 자동 생성)")]
|
||||||
|
public RetargetingRemoteController retargetingRemote;
|
||||||
|
|
||||||
|
[Tooltip("리타게팅 웹 리모컨 HTTP 포트")]
|
||||||
|
public int retargetingHttpPort = 8080;
|
||||||
|
|
||||||
|
[Tooltip("리타게팅 웹 리모컨 WebSocket 포트")]
|
||||||
|
public int retargetingWsPort = 8081;
|
||||||
|
|
||||||
|
[Tooltip("시작 시 리타게팅 웹 리모컨 자동 시작")]
|
||||||
|
public bool autoStartRetargetingRemote = true;
|
||||||
|
|
||||||
[Header("디버그")]
|
[Header("디버그")]
|
||||||
public bool enableDebugLog = true;
|
public bool enableDebugLog = true;
|
||||||
|
|
||||||
@ -84,11 +105,8 @@ public class SystemController : MonoBehaviour
|
|||||||
|
|
||||||
private void Start()
|
private void Start()
|
||||||
{
|
{
|
||||||
// OptiTrack 클라이언트 자동 찾기
|
// OptiTrack 클라이언트 자동 찾기 및 생성
|
||||||
if (optitrackClient == null)
|
InitializeOptitrackClient();
|
||||||
{
|
|
||||||
optitrackClient = FindObjectOfType<OptitrackStreamingClient>();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Motion Recorder 자동 찾기
|
// Motion Recorder 자동 찾기
|
||||||
if (autoFindRecorders)
|
if (autoFindRecorders)
|
||||||
@ -129,7 +147,11 @@ public class SystemController : MonoBehaviour
|
|||||||
Log($"Screenshots 폴더 생성됨: {screenshotSavePath}");
|
Log($"Screenshots 폴더 생성됨: {screenshotSavePath}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 리타게팅 웹 리모컨 초기화
|
||||||
|
InitializeRetargetingRemote();
|
||||||
|
|
||||||
Log("SystemController 초기화 완료");
|
Log("SystemController 초기화 완료");
|
||||||
|
Log($"OptiTrack 클라이언트: {(optitrackClient != null ? "설정됨" : "없음")}");
|
||||||
Log($"Motion Recorder 개수: {motionRecorders.Count}");
|
Log($"Motion Recorder 개수: {motionRecorders.Count}");
|
||||||
Log($"Facial Motion 클라이언트 개수: {facialMotionClients.Count}");
|
Log($"Facial Motion 클라이언트 개수: {facialMotionClients.Count}");
|
||||||
Log($"Screenshot 카메라: {(screenshotCamera != null ? "설정됨" : "없음")}");
|
Log($"Screenshot 카메라: {(screenshotCamera != null ? "설정됨" : "없음")}");
|
||||||
@ -145,6 +167,99 @@ public class SystemController : MonoBehaviour
|
|||||||
Log($"Motion Recorder {motionRecorders.Count}개 발견");
|
Log($"Motion Recorder {motionRecorders.Count}개 발견");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region OptiTrack 클라이언트 초기화
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// OptiTrack 클라이언트 초기화 (씬에서 찾거나 프리펩에서 생성)
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeOptitrackClient()
|
||||||
|
{
|
||||||
|
// 이미 할당되어 있으면 사용
|
||||||
|
if (optitrackClient != null)
|
||||||
|
{
|
||||||
|
Log("OptiTrack 클라이언트가 이미 할당되어 있습니다.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 씬에서 찾기
|
||||||
|
optitrackClient = FindObjectOfType<OptitrackStreamingClient>();
|
||||||
|
|
||||||
|
if (optitrackClient != null)
|
||||||
|
{
|
||||||
|
Log("씬에서 OptiTrack 클라이언트를 찾았습니다.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 씬에 없고 자동 생성 옵션이 켜져 있으면 프리펩에서 생성
|
||||||
|
if (autoSpawnOptitrackClient)
|
||||||
|
{
|
||||||
|
SpawnOptitrackClientFromPrefab();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log("OptiTrack 클라이언트가 없습니다. 자동 생성 옵션이 꺼져 있습니다.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// OptiTrack 클라이언트 프리펩을 씬에 생성합니다
|
||||||
|
/// </summary>
|
||||||
|
public void SpawnOptitrackClientFromPrefab()
|
||||||
|
{
|
||||||
|
// 이미 씬에 있는지 확인
|
||||||
|
var existingClient = FindObjectOfType<OptitrackStreamingClient>();
|
||||||
|
if (existingClient != null)
|
||||||
|
{
|
||||||
|
optitrackClient = existingClient;
|
||||||
|
Log("씬에 이미 OptiTrack 클라이언트가 있습니다.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GameObject clientInstance = null;
|
||||||
|
|
||||||
|
// 직접 할당된 프리펩이 있으면 사용
|
||||||
|
if (optitrackClientPrefab != null)
|
||||||
|
{
|
||||||
|
clientInstance = Instantiate(optitrackClientPrefab);
|
||||||
|
clientInstance.name = "Client - OptiTrack";
|
||||||
|
Log("할당된 프리펩에서 OptiTrack 클라이언트 생성됨");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
// 에디터에서는 AssetDatabase를 통해 프리펩 로드
|
||||||
|
string prefabPath = "Assets/External/OptiTrack Unity Plugin/OptiTrack/Prefabs/Client - OptiTrack.prefab";
|
||||||
|
var prefab = UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath);
|
||||||
|
if (prefab != null)
|
||||||
|
{
|
||||||
|
clientInstance = Instantiate(prefab);
|
||||||
|
clientInstance.name = "Client - OptiTrack";
|
||||||
|
Log($"프리펩에서 OptiTrack 클라이언트 생성됨: {prefabPath}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LogError($"OptiTrack 클라이언트 프리펩을 찾을 수 없습니다: {prefabPath}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
LogError("OptiTrack 클라이언트 프리펩이 할당되지 않았습니다. Inspector에서 프리펩을 할당해주세요.");
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clientInstance != null)
|
||||||
|
{
|
||||||
|
optitrackClient = clientInstance.GetComponent<OptitrackStreamingClient>();
|
||||||
|
if (optitrackClient == null)
|
||||||
|
{
|
||||||
|
LogError("생성된 프리펩에 OptitrackStreamingClient 컴포넌트가 없습니다!");
|
||||||
|
Destroy(clientInstance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region OptiTrack 마커 기능
|
#region OptiTrack 마커 기능
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -755,6 +870,135 @@ public class SystemController : MonoBehaviour
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region 리타게팅 웹 리모컨 기능
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 리타게팅 웹 리모컨 초기화
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeRetargetingRemote()
|
||||||
|
{
|
||||||
|
// 이미 할당되어 있으면 사용
|
||||||
|
if (retargetingRemote == null)
|
||||||
|
{
|
||||||
|
// 씬에서 찾기
|
||||||
|
retargetingRemote = FindObjectOfType<RetargetingRemoteController>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 없으면 자동 생성
|
||||||
|
if (retargetingRemote == null && autoStartRetargetingRemote)
|
||||||
|
{
|
||||||
|
GameObject remoteObj = new GameObject("RetargetingRemoteController");
|
||||||
|
retargetingRemote = remoteObj.AddComponent<RetargetingRemoteController>();
|
||||||
|
retargetingRemote.AutoStart = false; // SystemController가 관리
|
||||||
|
Log("리타게팅 웹 리모컨 컨트롤러 자동 생성됨");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 포트 설정 적용
|
||||||
|
if (retargetingRemote != null)
|
||||||
|
{
|
||||||
|
retargetingRemote.HttpPort = retargetingHttpPort;
|
||||||
|
retargetingRemote.WsPort = retargetingWsPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 캐릭터 자동 등록
|
||||||
|
if (retargetingRemote != null)
|
||||||
|
{
|
||||||
|
AutoRegisterRetargetingCharacters();
|
||||||
|
|
||||||
|
if (autoStartRetargetingRemote && !retargetingRemote.IsRunning)
|
||||||
|
{
|
||||||
|
retargetingRemote.StartServer();
|
||||||
|
Log($"리타게팅 웹 리모컨 시작됨 - http://localhost:{retargetingHttpPort}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 씬의 모든 CustomRetargetingScript를 자동으로 등록합니다
|
||||||
|
/// </summary>
|
||||||
|
public void AutoRegisterRetargetingCharacters()
|
||||||
|
{
|
||||||
|
if (retargetingRemote == null)
|
||||||
|
{
|
||||||
|
LogError("리타게팅 웹 리모컨 컨트롤러가 없습니다!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var characters = FindObjectsByType<CustomRetargetingScript>(FindObjectsSortMode.None);
|
||||||
|
foreach (var character in characters)
|
||||||
|
{
|
||||||
|
retargetingRemote.RegisterCharacter(character);
|
||||||
|
}
|
||||||
|
|
||||||
|
Log($"리타게팅 캐릭터 {characters.Length}개 등록됨");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 리타게팅 웹 리모컨 시작
|
||||||
|
/// </summary>
|
||||||
|
public void StartRetargetingRemote()
|
||||||
|
{
|
||||||
|
if (retargetingRemote == null)
|
||||||
|
{
|
||||||
|
InitializeRetargetingRemote();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (retargetingRemote != null && !retargetingRemote.IsRunning)
|
||||||
|
{
|
||||||
|
retargetingRemote.StartServer();
|
||||||
|
Log($"리타게팅 웹 리모컨 시작됨 - http://localhost:{retargetingHttpPort}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 리타게팅 웹 리모컨 중지
|
||||||
|
/// </summary>
|
||||||
|
public void StopRetargetingRemote()
|
||||||
|
{
|
||||||
|
if (retargetingRemote != null && retargetingRemote.IsRunning)
|
||||||
|
{
|
||||||
|
retargetingRemote.StopServer();
|
||||||
|
Log("리타게팅 웹 리모컨 중지됨");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 리타게팅 웹 리모컨 토글 (시작/중지)
|
||||||
|
/// </summary>
|
||||||
|
public void ToggleRetargetingRemote()
|
||||||
|
{
|
||||||
|
if (retargetingRemote == null || !retargetingRemote.IsRunning)
|
||||||
|
{
|
||||||
|
StartRetargetingRemote();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
StopRetargetingRemote();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 리타게팅 웹 리모컨 실행 중인지 여부 반환
|
||||||
|
/// </summary>
|
||||||
|
public bool IsRetargetingRemoteRunning()
|
||||||
|
{
|
||||||
|
return retargetingRemote != null && retargetingRemote.IsRunning;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 리타게팅 웹 리모컨 URL 반환
|
||||||
|
/// </summary>
|
||||||
|
public string GetRetargetingRemoteUrl()
|
||||||
|
{
|
||||||
|
if (retargetingRemote != null && retargetingRemote.IsRunning)
|
||||||
|
{
|
||||||
|
return $"http://localhost:{retargetingHttpPort}";
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 명령어 실행 - WebSocket에서 받은 명령을 처리
|
/// 명령어 실행 - WebSocket에서 받은 명령을 처리
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -782,6 +1026,11 @@ public class SystemController : MonoBehaviour
|
|||||||
ReconnectOptitrack();
|
ReconnectOptitrack();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// OptiTrack 클라이언트 생성
|
||||||
|
case "spawn_optitrack_client":
|
||||||
|
SpawnOptitrackClientFromPrefab();
|
||||||
|
break;
|
||||||
|
|
||||||
// Facial Motion 재접속
|
// Facial Motion 재접속
|
||||||
case "reconnect_facial_motion":
|
case "reconnect_facial_motion":
|
||||||
ReconnectFacialMotion();
|
ReconnectFacialMotion();
|
||||||
@ -831,6 +1080,23 @@ public class SystemController : MonoBehaviour
|
|||||||
ResetAllMagicaClothKeepPose();
|
ResetAllMagicaClothKeepPose();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// 리타게팅 웹 리모컨
|
||||||
|
case "start_retargeting_remote":
|
||||||
|
StartRetargetingRemote();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "stop_retargeting_remote":
|
||||||
|
StopRetargetingRemote();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "toggle_retargeting_remote":
|
||||||
|
ToggleRetargetingRemote();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "refresh_retargeting_characters":
|
||||||
|
AutoRegisterRetargetingCharacters();
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
LogError($"알 수 없는 명령어: {command}");
|
LogError($"알 수 없는 명령어: {command}");
|
||||||
break;
|
break;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user