From 218279b3de20e50265cd09876942ab0588ee12ce Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 11:03:40 +0900 Subject: [PATCH 001/290] add 2d --- .../Assets/RP_Assets/Renderer2D.asset | 69 +++ .../Assets/RP_Assets/Renderer2D.asset.meta | 8 + .../Assets/ScenesDev/test.unity | 441 ++++++++++++++++++ .../Assets/ScenesDev/test.unity.meta | 7 + 4 files changed, 525 insertions(+) create mode 100644 Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset create mode 100644 Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset.meta create mode 100644 Toonshader_ProjectURP/Assets/ScenesDev/test.unity create mode 100644 Toonshader_ProjectURP/Assets/ScenesDev/test.unity.meta diff --git a/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset b/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset new file mode 100644 index 000000000..aca5e7059 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset @@ -0,0 +1,69 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11145981673336645838492a2d98e247, type: 3} + m_Name: Renderer2D + m_EditorClassIdentifier: + debugShaders: + debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, type: 3} + hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} + probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, type: 3} + probeVolumeResources: + probeVolumeDebugShader: {fileID: 4800000, guid: e5c6678ed2aaa91408dd3df699057aae, type: 3} + probeVolumeFragmentationDebugShader: {fileID: 4800000, guid: 03cfc4915c15d504a9ed85ecc404e607, type: 3} + probeVolumeOffsetDebugShader: {fileID: 4800000, guid: 53a11f4ebaebf4049b3638ef78dc9664, type: 3} + probeVolumeSamplingDebugShader: {fileID: 4800000, guid: 8f96cd657dc40064aa21efcc7e50a2e7, type: 3} + probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 57d7c4c16e2765b47a4d2069b311bffe, type: 3} + probeSamplingDebugTexture: {fileID: 2800000, guid: 24ec0e140fb444a44ab96ee80844e18e, type: 3} + m_RendererFeatures: [] + m_RendererFeatureMap: + m_UseNativeRenderPass: 0 + m_TransparencySortMode: 0 + m_TransparencySortAxis: {x: 0, y: 1, z: 0} + m_HDREmulationScale: 1 + m_LightRenderTextureScale: 0.5 + m_LightBlendStyles: + - name: Multiply + maskTextureChannel: 0 + blendMode: 1 + - name: Additive + maskTextureChannel: 0 + blendMode: 0 + - name: Multiply with Mask + maskTextureChannel: 1 + blendMode: 1 + - name: Additive with Mask + maskTextureChannel: 1 + blendMode: 0 + m_UseDepthStencilBuffer: 1 + m_UseCameraSortingLayersTexture: 0 + m_CameraSortingLayersTextureBound: -1 + m_CameraSortingLayerDownsamplingMethod: 0 + m_MaxLightRenderTextureCount: 16 + m_MaxShadowRenderTextureCount: 1 + m_LightShader: {fileID: 4800000, guid: 3f6c848ca3d7bca4bbe846546ac701a1, type: 3} + m_CoreBlitShader: {fileID: 4800000, guid: 93446b5c5339d4f00b85c159e1159b7c, type: 3} + m_CoreBlitColorAndDepthPS: {fileID: 4800000, guid: d104b2fc1ca6445babb8e90b0758136b, type: 3} + m_BlitHDROverlay: {fileID: 4800000, guid: a89bee29cffa951418fc1e2da94d1959, type: 3} + m_SamplingShader: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3} + m_ProjectedShadowShader: {fileID: 4800000, guid: ce09d4a80b88c5a4eb9768fab4f1ee00, type: 3} + m_SpriteShadowShader: {fileID: 4800000, guid: 44fc62292b65ab04eabcf310e799ccf6, type: 3} + m_SpriteUnshadowShader: {fileID: 4800000, guid: de02b375720b5c445afe83cd483bedf3, type: 3} + m_GeometryShadowShader: {fileID: 4800000, guid: 19349a0f9a7ed4c48a27445bcf92e5e1, type: 3} + m_GeometryUnshadowShader: {fileID: 4800000, guid: 77774d9009bb81447b048c907d4c6273, type: 3} + m_FallbackErrorShader: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3} + m_PostProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} + m_FallOffLookup: {fileID: 2800000, guid: 5688ab254e4c0634f8d6c8e0792331ca, type: 3} + m_DefaultMaterialType: 0 + m_DefaultCustomMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_DefaultLitMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_DefaultUnlitMaterial: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2} + m_DefaultMaskMaterial: {fileID: 2100000, guid: 15d0c3709176029428a0da2f8cecf0b5, type: 2} diff --git a/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset.meta b/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset.meta new file mode 100644 index 000000000..a5c42b240 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aec34135564b84745baffe07fc9f7d4c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity new file mode 100644 index 000000000..cc505907b --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -0,0 +1,441 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 2 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &391645602 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 391645606} + - component: {fileID: 391645605} + - component: {fileID: 391645604} + - component: {fileID: 391645603} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &391645603 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 391645602} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: 1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 + m_Version: 2 +--- !u!81 &391645604 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 391645602} + m_Enabled: 1 +--- !u!20 &391645605 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 391645602} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &391645606 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 391645602} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1873556968 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1873556970} + - component: {fileID: 1873556969} + m_Layer: 0 + m_Name: Spot Light 2D + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1873556969 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1873556968} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.2D.Runtime::UnityEngine.Rendering.Universal.Light2D + m_ComponentVersion: 2 + m_LightType: 3 + m_BlendStyleIndex: 0 + m_FalloffIntensity: 0.5 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_LightVolumeIntensity: 1 + m_LightVolumeEnabled: 0 + m_ApplyToSortingLayers: 00000000 + m_LightCookieSprite: {fileID: 0} + m_DeprecatedPointLightCookieSprite: {fileID: 0} + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 + m_OverlapOperation: 0 + m_NormalMapDistance: 3 + m_NormalMapQuality: 2 + m_UseNormalMap: 0 + m_ShadowsEnabled: 1 + m_ShadowIntensity: 0.75 + m_ShadowSoftness: 0.3 + m_ShadowSoftnessFalloffIntensity: 0.5 + m_ShadowVolumeIntensityEnabled: 0 + m_ShadowVolumeIntensity: 0.75 + m_LocalBounds: + m_Center: {x: 0, y: -0.00000011920929, z: 0} + m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} + m_PointLightInnerAngle: 360 + m_PointLightOuterAngle: 360 + m_PointLightInnerRadius: 0 + m_PointLightOuterRadius: 1 + m_ShapeLightParametricSides: 5 + m_ShapeLightParametricAngleOffset: 0 + m_ShapeLightParametricRadius: 1 + m_ShapeLightFalloffSize: 0.5 + m_ShapeLightFalloffOffset: {x: 0, y: 0} + m_ShapePath: + - {x: -0.5, y: -0.5, z: 0} + - {x: 0.5, y: -0.5, z: 0} + - {x: 0.5, y: 0.5, z: 0} + - {x: -0.5, y: 0.5, z: 0} +--- !u!4 &1873556970 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1873556968} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2080296072 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2080296074} + - component: {fileID: 2080296073} + m_Layer: 0 + m_Name: Square + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &2080296073 +SpriteRenderer: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2080296072} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, + type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_SpriteSortPoint: 0 +--- !u!4 &2080296074 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2080296072} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: -0} + m_LocalScale: {x: 10, y: 10, z: 10} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 391645606} + - {fileID: 2080296074} + - {fileID: 1873556970} diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity.meta b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity.meta new file mode 100644 index 000000000..ba7fcc491 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2681cb91f570ac5449f6d70798606c2e +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From fa04013e9c53ca5f958ce3dd6a2fc2396959880b Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 16:19:40 +0900 Subject: [PATCH 002/290] save scene --- .../Assets/ScenesDev/test.unity | 568 +++++++++++++++++- 1 file changed, 550 insertions(+), 18 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index cc505907b..8c207a294 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -119,6 +119,118 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &116300322 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 116300326} + - component: {fileID: 116300325} + - component: {fileID: 116300324} + - component: {fileID: 116300323} + m_Layer: 7 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!135 &116300323 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 116300322} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &116300324 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 116300322} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &116300325 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 116300322} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &116300326 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 116300322} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -3.7} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &391645602 GameObject: m_ObjectHideFlags: 0 @@ -129,10 +241,9 @@ GameObject: m_Component: - component: {fileID: 391645606} - component: {fileID: 391645605} - - component: {fileID: 391645604} - component: {fileID: 391645603} - m_Layer: 0 - m_Name: Main Camera + m_Layer: 7 + m_Name: 3D Camera m_TagString: MainCamera m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -155,7 +266,7 @@ MonoBehaviour: m_RequiresOpaqueTextureOption: 2 m_CameraType: 0 m_Cameras: [] - m_RendererIndex: 1 + m_RendererIndex: 0 m_VolumeLayerMask: serializedVersion: 2 m_Bits: 1 @@ -182,24 +293,186 @@ MonoBehaviour: m_VarianceClampScale: 0.9 m_ContrastAdaptiveSharpening: 0 m_Version: 2 ---- !u!81 &391645604 -AudioListener: +--- !u!20 &391645605 +Camera: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 391645602} m_Enabled: 1 ---- !u!20 &391645605 -Camera: + serializedVersion: 2 + m_ClearFlags: 4 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 128 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &391645606 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 391645602} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 534897190} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &534897189 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 534897190} + m_Layer: 0 + m_Name: Cameras + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &534897190 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 534897189} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1733474742} + - {fileID: 391645606} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &648398109 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 648398113} + - component: {fileID: 648398112} + - component: {fileID: 648398111} + - component: {fileID: 648398110} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!114 &648398110 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648398109} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 + m_Version: 2 +--- !u!81 &648398111 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648398109} + m_Enabled: 1 +--- !u!20 &648398112 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648398109} m_Enabled: 1 serializedVersion: 2 - m_ClearFlags: 2 + m_ClearFlags: 1 m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} m_projectionMatrixMode: 1 m_GateFitMode: 2 @@ -224,9 +497,9 @@ Camera: near clip plane: 0.3 far clip plane: 1000 field of view: 60 - orthographic: 1 + orthographic: 0 orthographic size: 5 - m_Depth: -1 + m_Depth: 0 m_CullingMask: serializedVersion: 2 m_Bits: 4294967295 @@ -241,21 +514,150 @@ Camera: m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 ---- !u!4 &391645606 +--- !u!4 &648398113 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 391645602} + m_GameObject: {fileID: 648398109} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalRotation: {x: -0.24242356, y: 0.44294274, z: -0.12574561, w: -0.8539442} + m_LocalPosition: {x: 45.20628, y: 42.024525, z: -34.08668} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1733474739 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1733474742} + - component: {fileID: 1733474741} + - component: {fileID: 1733474740} + m_Layer: 6 + m_Name: 2D Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1733474740 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733474739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 1 + m_Cameras: + - {fileID: 391645605} + m_RendererIndex: 1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 + m_Version: 2 +--- !u!20 &1733474741 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733474739} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 4 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 64 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1733474742 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733474739} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -10.13, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 534897190} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1873556968 GameObject: m_ObjectHideFlags: 0 @@ -266,7 +668,7 @@ GameObject: m_Component: - component: {fileID: 1873556970} - component: {fileID: 1873556969} - m_Layer: 0 + m_Layer: 6 m_Name: Spot Light 2D m_TagString: Untagged m_Icon: {fileID: 0} @@ -340,6 +742,133 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1896131351 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1896131354} + - component: {fileID: 1896131353} + - component: {fileID: 1896131352} + m_Layer: 7 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1896131352 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1896131351} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_CustomShadowLayers: 0 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 0 + m_RenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_ShadowRenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_Version: 4 + m_LightLayerMask: 1 + m_ShadowLayerMask: 1 + m_RenderingLayers: 1 + m_ShadowRenderingLayers: 1 +--- !u!108 &1896131353 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1896131351} + m_Enabled: 1 + serializedVersion: 12 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize2D: {x: 10, y: 10} + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 128 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &1896131354 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1896131351} + serializedVersion: 2 + m_LocalRotation: {x: 0.6262405, y: -0.25520658, z: 0.043091897, w: 0.7354153} + m_LocalPosition: {x: 3.7, y: 0, z: -11.11} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 70.577, y: -75.122, z: -50.409} --- !u!1 &2080296072 GameObject: m_ObjectHideFlags: 0 @@ -350,7 +879,7 @@ GameObject: m_Component: - component: {fileID: 2080296074} - component: {fileID: 2080296073} - m_Layer: 0 + m_Layer: 6 m_Name: Square m_TagString: Untagged m_Icon: {fileID: 0} @@ -436,6 +965,9 @@ Transform: SceneRoots: m_ObjectHideFlags: 0 m_Roots: - - {fileID: 391645606} - {fileID: 2080296074} - {fileID: 1873556970} + - {fileID: 116300326} + - {fileID: 534897190} + - {fileID: 1896131354} + - {fileID: 648398113} From 5c8066c9b03dc1ce1e8915091610e1121be7b4a4 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 16:20:51 +0900 Subject: [PATCH 003/290] save --- .../Assets/ScenesDev/test.unity | 153 +----------------- 1 file changed, 7 insertions(+), 146 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index 8c207a294..ec663ddba 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -248,7 +248,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!114 &391645603 MonoBehaviour: m_ObjectHideFlags: 0 @@ -392,143 +392,6 @@ Transform: - {fileID: 391645606} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &648398109 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 648398113} - - component: {fileID: 648398112} - - component: {fileID: 648398111} - - component: {fileID: 648398110} - m_Layer: 0 - m_Name: Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!114 &648398110 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 648398109} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData - m_RenderShadows: 1 - m_RequiresDepthTextureOption: 2 - m_RequiresOpaqueTextureOption: 2 - m_CameraType: 0 - m_Cameras: [] - m_RendererIndex: -1 - m_VolumeLayerMask: - serializedVersion: 2 - m_Bits: 1 - m_VolumeTrigger: {fileID: 0} - m_VolumeFrameworkUpdateModeOption: 2 - m_RenderPostProcessing: 0 - m_Antialiasing: 0 - m_AntialiasingQuality: 2 - m_StopNaN: 0 - m_Dithering: 0 - m_ClearDepth: 1 - m_AllowXRRendering: 1 - m_AllowHDROutput: 1 - m_UseScreenCoordOverride: 0 - m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} - m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} - m_RequiresDepthTexture: 0 - m_RequiresColorTexture: 0 - m_TaaSettings: - m_Quality: 3 - m_FrameInfluence: 0.1 - m_JitterScale: 1 - m_MipBias: 0 - m_VarianceClampScale: 0.9 - m_ContrastAdaptiveSharpening: 0 - m_Version: 2 ---- !u!81 &648398111 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 648398109} - m_Enabled: 1 ---- !u!20 &648398112 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 648398109} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &648398113 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 648398109} - serializedVersion: 2 - m_LocalRotation: {x: -0.24242356, y: 0.44294274, z: -0.12574561, w: -0.8539442} - m_LocalPosition: {x: 45.20628, y: 42.024525, z: -34.08668} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1733474739 GameObject: m_ObjectHideFlags: 0 @@ -562,9 +425,8 @@ MonoBehaviour: m_RenderShadows: 1 m_RequiresDepthTextureOption: 2 m_RequiresOpaqueTextureOption: 2 - m_CameraType: 1 - m_Cameras: - - {fileID: 391645605} + m_CameraType: 0 + m_Cameras: [] m_RendererIndex: 1 m_VolumeLayerMask: serializedVersion: 2 @@ -601,8 +463,8 @@ Camera: m_GameObject: {fileID: 1733474739} m_Enabled: 1 serializedVersion: 2 - m_ClearFlags: 4 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.5622641, g: 0.5622641, b: 0.5622641, a: 0} m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 @@ -736,7 +598,7 @@ Transform: m_GameObject: {fileID: 1873556968} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalPosition: {x: -16.09, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -955,7 +817,7 @@ Transform: m_GameObject: {fileID: 2080296072} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0, y: 0, z: -0} + m_LocalPosition: {x: -16.09, y: 0, z: -0} m_LocalScale: {x: 10, y: 10, z: 10} m_ConstrainProportionsScale: 0 m_Children: [] @@ -970,4 +832,3 @@ SceneRoots: - {fileID: 116300326} - {fileID: 534897190} - {fileID: 1896131354} - - {fileID: 648398113} From 738d6e1a9d9e80790970555453dcbc0d0104a8aa Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 16:25:30 +0900 Subject: [PATCH 004/290] save --- .../Assets/ScenesDev/test.unity | 151 +++++++++++++++++- 1 file changed, 148 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index ec663ddba..65a99497b 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -231,6 +231,150 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &360142871 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 360142872} + - component: {fileID: 360142875} + - component: {fileID: 360142874} + - component: {fileID: 360142873} + m_Layer: 6 + m_Name: Sphere2D + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &360142872 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 360142871} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -8.49, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 372493292} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &360142873 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 360142871} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &360142874 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 360142871} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 047f5b08b2bbb7b418d714b143050655, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &360142875 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 360142871} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &372493291 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 372493292} + m_Layer: 6 + m_Name: 2D Objects + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &372493292 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 372493291} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 360142872} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &391645602 GameObject: m_ObjectHideFlags: 0 @@ -578,7 +722,7 @@ MonoBehaviour: m_PointLightInnerAngle: 360 m_PointLightOuterAngle: 360 m_PointLightInnerRadius: 0 - m_PointLightOuterRadius: 1 + m_PointLightOuterRadius: 8.81 m_ShapeLightParametricSides: 5 m_ShapeLightParametricAngleOffset: 0 m_ShapeLightParametricRadius: 1 @@ -598,7 +742,7 @@ Transform: m_GameObject: {fileID: 1873556968} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -16.09, y: 0, z: 0} + m_LocalPosition: {x: -14.84, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -817,7 +961,7 @@ Transform: m_GameObject: {fileID: 2080296072} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -16.09, y: 0, z: -0} + m_LocalPosition: {x: -18.3, y: 0, z: -0} m_LocalScale: {x: 10, y: 10, z: 10} m_ConstrainProportionsScale: 0 m_Children: [] @@ -832,3 +976,4 @@ SceneRoots: - {fileID: 116300326} - {fileID: 534897190} - {fileID: 1896131354} + - {fileID: 372493292} From 004c765bec2b822ab0c8a2e118e21c9e6a8ac850 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 16:40:16 +0900 Subject: [PATCH 005/290] setup Toon --- .../Assets/Materials/Toon2D.mat | 145 ++++++++++++++++++ .../Assets/Materials/Toon2D.mat.meta | 8 + .../Assets/Shaders/Toon2D.shader | 143 +++++++++++++++++ .../Assets/Shaders/Toon2D.shader.meta | 9 ++ 4 files changed, 305 insertions(+) create mode 100644 Toonshader_ProjectURP/Assets/Materials/Toon2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/Toon2D.mat.meta create mode 100644 Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader create mode 100644 Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader.meta diff --git a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat new file mode 100644 index 000000000..190f3b4df --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat @@ -0,0 +1,145 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Toon2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {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} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &5791580664690647399 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 diff --git a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat.meta new file mode 100644 index 000000000..9fd219211 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2bcd5ea8a27e2684b83133920ea644e5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader new file mode 100644 index 000000000..b64fb6dbb --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -0,0 +1,143 @@ +Shader "Toon2D" { + Properties { + _MainTex("Diffuse", 2D) = "white" {} + _MaskTex("Mask", 2D) = "white" {} + _NormalMap("Normal Map", 2D) = "bump" {} + [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching + } + + SubShader + { + Tags {"Queue" = "Transparent" "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" } + + Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha + Cull Back + ZWrite On + + Stencil { + Ref 128 // Put this in the last bit of our stencil value for maximum compatibility with sprite mask + Comp always + Pass replace + } + + Pass + { + Tags { "LightMode" = "Universal2D" } + + HLSLPROGRAM + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" + + #pragma vertex LitVertex + #pragma fragment LitFragment + + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" + + // GPU Instancing + #pragma multi_compile_instancing + #pragma multi_compile _ DEBUG_DISPLAY + + struct Attributes + { + COMMON_2D_INPUTS + }; + + struct Varyings + { + COMMON_2D_LIT_OUTPUTS + }; + + float4 _White; + + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Lit2DCommon.hlsl" + + Varyings LitVertex(Attributes input) + { + return CommonLitVertex(input); + } + + half4 LitFragment(Varyings input) : SV_Target + { + return CommonLitFragment(input, _White); + } + ENDHLSL + } + + Pass + { + Tags { "LightMode" = "NormalsRendering"} + + HLSLPROGRAM + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" + + #pragma vertex NormalsRenderingVertex + #pragma fragment NormalsRenderingFragment + + // GPU Instancing + #pragma multi_compile_instancing + + struct Attributes + { + COMMON_2D_NORMALS_INPUTS + }; + + struct Varyings + { + COMMON_2D_NORMALS_OUTPUTS + }; + + float4 _White; + + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Normals2DCommon.hlsl" + + Varyings NormalsRenderingVertex(Attributes input) + { + return CommonNormalsVertex(input); + } + + half4 NormalsRenderingFragment(Varyings input) : SV_Target + { + return CommonNormalsFragment(input, _White); + } + ENDHLSL + } + + Pass + { + Tags { "LightMode" = "UniversalForward" "Queue"="Transparent" "RenderType"="Transparent"} + + HLSLPROGRAM + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" + + #pragma vertex UnlitVertex + #pragma fragment UnlitFragment + + // GPU Instancing + #pragma multi_compile_instancing + + struct Attributes + { + COMMON_2D_INPUTS + }; + + struct Varyings + { + COMMON_2D_OUTPUTS + }; + + float4 _White; + + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/2DCommon.hlsl" + + Varyings UnlitVertex(Attributes input) + { + return CommonUnlitVertex(input); + } + + half4 UnlitFragment(Varyings input) : SV_Target + { + return CommonUnlitFragment(input, _White); + } + ENDHLSL + } + } +} diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader.meta b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader.meta new file mode 100644 index 000000000..dca3b76c9 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 60d646244f75ab84f8eb12819a6d87ff +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: From 0f4daa71990532bf8609ee6f74e40a9e74263524 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 16:48:28 +0900 Subject: [PATCH 006/290] comment --- .../Assets/Shaders/Toon2D.shader | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index b64fb6dbb..4bf10d44c 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -57,6 +57,31 @@ Shader "Toon2D" { half4 LitFragment(Varyings input) : SV_Target { + + // float3 Set_LightColor = lightColor.rgb; + // float3 Set_BaseColor = lerp( (_BaseColor.rgb*_MainTex_var.rgb), ((_BaseColor.rgb*_MainTex_var.rgb)*Set_LightColor), _Is_LightColor_Base ); + // //v.2.0.5 + // float4 _1st_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_1st_ShadeMap,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_MainTex_var,_Use_BaseAs1st); + // float3 Set_1st_ShadeColor = lerp( (_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb), ((_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_1st_Shade ); + // //v.2.0.5 + // float4 _2nd_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_1st_ShadeMap_var,_Use_1stAs2nd); + // float3 Set_2nd_ShadeColor = lerp( (_2nd_ShadeColor.rgb*_2nd_ShadeMap_var.rgb), ((_2nd_ShadeColor.rgb*_2nd_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_2nd_Shade ); + // float _HalfLambert_var = 0.5*dot(lerp( i.normalDir, normalDirection, _Is_NormalMapToBase ),lightDirection)+0.5; + // + // float4 _Set_2nd_ShadePosition_var = tex2D(_Set_2nd_ShadePosition, TRANSFORM_TEX(Set_UV0, _Set_2nd_ShadePosition)); + // float4 _Set_1st_ShadePosition_var = tex2D(_Set_1st_ShadePosition, TRANSFORM_TEX(Set_UV0, _Set_1st_ShadePosition)); + // //v.2.0.6 + // //Minmimum value is same as the Minimum Feather's value with the Minimum Step's value as threshold. + // float _SystemShadowsLevel_var = (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel > 0.001 ? (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel : 0.0001; + // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var*saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); + // // + // //Composition: 3 Basic Colors as Set_FinalBaseColor + // float3 Set_FinalBaseColor = lerp(Set_BaseColor,lerp(Set_1st_ShadeColor,Set_2nd_ShadeColor,saturate((1.0 + ( (_HalfLambert_var - (_ShadeColor_Step-_1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0) ) / (_ShadeColor_Step - (_ShadeColor_Step-_1st2nd_Shades_Feather))))),Set_FinalShadowMask); // Final Color + + + return float4(1,0,0,1); + + return CommonLitFragment(input, _White); } ENDHLSL From b3cd10cc1bbf9399de9d653517d68606d61d85aa Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 17:27:57 +0900 Subject: [PATCH 007/290] 1st --- .../Assets/Shaders/Toon2D.shader | 101 +++++++++++++++++- 1 file changed, 97 insertions(+), 4 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 4bf10d44c..8fb40c1fa 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -1,8 +1,14 @@ Shader "Toon2D" { Properties { - _MainTex("Diffuse", 2D) = "white" {} + _BaseColor ("BaseColor", Color) = (1,1,1,1) + _MainTex ("BaseMap", 2D) = "white" {} _MaskTex("Mask", 2D) = "white" {} _NormalMap("Normal Map", 2D) = "bump" {} + _Unlit_Intensity ("Unlit_Intensity", Range(0, 4)) = 0 + + [Toggle(_)] _Is_Filter_LightColor ("VRChat : SceneLights HiCut_Filter", Float ) = 1 + [Toggle(_)] _Is_LightColor_Base ("Is_LightColor_Base", Float ) = 1 + [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching } @@ -14,6 +20,8 @@ Shader "Toon2D" { Cull Back ZWrite On + + Stencil { Ref 128 // Put this in the last bit of our stencil value for maximum compatibility with sprite mask Comp always @@ -50,16 +58,101 @@ Shader "Toon2D" { #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Lit2DCommon.hlsl" + CBUFFER_START(UnityPerMaterial) + half4 _BaseColor; + float _Unlit_Intensity; + float _Is_Filter_LightColor; + float _Is_LightColor_Base; + + + + CBUFFER_END + +//---------------------------------------------------------------------------------------------------------------------- + float4 _MainTex_ST; + + //TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex); + + Varyings LitVertex(Attributes input) { return CommonLitVertex(input); } +//---------------------------------------------------------------------------------------------------------------------- + +// normal should be normalized, w=1.0 +half3 SHEvalLinearL0L1(half4 normal) +{ + half3 x; + + // Linear (L1) + constant (L0) polynomial terms + x.r = dot(unity_SHAr, normal); + x.g = dot(unity_SHAg, normal); + x.b = dot(unity_SHAb, normal); + + return x; +} + +// normal should be normalized, w=1.0 +half3 SHEvalLinearL2(half4 normal) +{ + half3 x1, x2; + // 4 of the quadratic (L2) polynomials + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(unity_SHBr, vB); + x1.g = dot(unity_SHBg, vB); + x1.b = dot(unity_SHBb, vB); + + // Final (5th) quadratic (L2) polynomial + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = unity_SHC.rgb * vC; + + return x1 + x2; +} + + +// normal should be normalized, w=1.0 +// output in active color space +half3 ShadeSH9(half4 normal) +{ + // Linear + constant polynomial terms + half3 res = SHEvalLinearL0L1(normal); + + // Quadratic polynomials + res += SHEvalLinearL2(normal); + +# ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); +# endif + + return res; +} + +//---------------------------------------------------------------------------------------------------------------------- half4 LitFragment(Varyings input) : SV_Target { - // float3 Set_LightColor = lightColor.rgb; - // float3 Set_BaseColor = lerp( (_BaseColor.rgb*_MainTex_var.rgb), ((_BaseColor.rgb*_MainTex_var.rgb)*Set_LightColor), _Is_LightColor_Base ); + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float2 Set_UV0 = input.uv; + float3 mainLightColor = float3(1,1,1); + + + // //v.2.0.5 + float3 defaultLightColor = saturate(max(half3(0.05,0.05,0.05)*_Unlit_Intensity,max(ShadeSH9(half4(0.0, 0.0, 0.0, 1.0)),ShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb)*_Unlit_Intensity)); + // float3 customLightDirection = normalize(mul( GetObjectToWorldMatrix(), float4(((float3(1.0,0.0,0.0)*_Offset_X_Axis_BLD*10)+(float3(0.0,1.0,0.0)*_Offset_Y_Axis_BLD*10)+(float3(0.0,0.0,-1.0)*lerp(-1.0,1.0,_Inverse_Z_Axis_BLD))),0)).xyz); + // float3 lightDirection = normalize(lerp(defaultLightDirection, mainLight.direction.xyz,any(mainLight.direction.xyz))); + // lightDirection = lerp(lightDirection, customLightDirection, _Is_BLD); + // //v.2.0.5: + // + half3 originalLightColor = mainLightColor.rgb; + float3 lightColor = lerp(max(defaultLightColor, originalLightColor), max(defaultLightColor, saturate(originalLightColor)), _Is_Filter_LightColor); + float3 Set_LightColor = lightColor.rgb; + + float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); + float3 Set_BaseColor = lerp( (_BaseColor.rgb*_MainTex_var.rgb), ((_BaseColor.rgb*_MainTex_var.rgb)*Set_LightColor), _Is_LightColor_Base ); + + // //v.2.0.5 // float4 _1st_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_1st_ShadeMap,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_MainTex_var,_Use_BaseAs1st); // float3 Set_1st_ShadeColor = lerp( (_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb), ((_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_1st_Shade ); @@ -79,7 +172,7 @@ Shader "Toon2D" { // float3 Set_FinalBaseColor = lerp(Set_BaseColor,lerp(Set_1st_ShadeColor,Set_2nd_ShadeColor,saturate((1.0 + ( (_HalfLambert_var - (_ShadeColor_Step-_1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0) ) / (_ShadeColor_Step - (_ShadeColor_Step-_1st2nd_Shades_Feather))))),Set_FinalShadowMask); // Final Color - return float4(1,0,0,1); + return float4(Set_BaseColor,1); return CommonLitFragment(input, _White); From 899ef6d250db181c889054d36709a471c93312de Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 17:51:01 +0900 Subject: [PATCH 008/290] add the default shader --- .../Assets/Shaders/Toon2D.shader | 125 +++++++++++++++++- 1 file changed, 123 insertions(+), 2 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 8fb40c1fa..0a79505b0 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -129,6 +129,127 @@ half3 ShadeSH9(half4 normal) return res; } + +//---------------------------------------------------------------------------------------------------------------------- + +half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData) +{ + #if defined(DEBUG_DISPLAY) + half4 debugColor = 0; + + if (CanDebugOverrideOutputColor(surfaceData, inputData, debugColor)) + { + return debugColor; + } + #endif + + half alpha = surfaceData.alpha; + half4 color = half4(surfaceData.albedo, alpha); + const half4 mask = surfaceData.mask; + const half2 lightingUV = inputData.lightingUV; + + if (alpha == 0.0) + discard; + +#if USE_SHAPE_LIGHT_TYPE_0 + half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); + + if (any(_ShapeLightMaskFilter0)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter0) * mask + _ShapeLightInvertedFilter0 * (1 - mask); + shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); + } + + half4 shapeLight0Modulate = shapeLight0 * _ShapeLightBlendFactors0.x; + half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; +#else + half4 shapeLight0Modulate = 0; + half4 shapeLight0Additive = 0; +#endif + +#if USE_SHAPE_LIGHT_TYPE_1 + half4 shapeLight1 = SAMPLE_TEXTURE2D(_ShapeLightTexture1, sampler_ShapeLightTexture1, lightingUV); + + if (any(_ShapeLightMaskFilter1)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter1) * mask + _ShapeLightInvertedFilter1 * (1 - mask); + shapeLight1 *= dot(processedMask, _ShapeLightMaskFilter1); + } + + half4 shapeLight1Modulate = shapeLight1 * _ShapeLightBlendFactors1.x; + half4 shapeLight1Additive = shapeLight1 * _ShapeLightBlendFactors1.y; +#else + half4 shapeLight1Modulate = 0; + half4 shapeLight1Additive = 0; +#endif + +#if USE_SHAPE_LIGHT_TYPE_2 + half4 shapeLight2 = SAMPLE_TEXTURE2D(_ShapeLightTexture2, sampler_ShapeLightTexture2, lightingUV); + + if (any(_ShapeLightMaskFilter2)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter2) * mask + _ShapeLightInvertedFilter2 * (1 - mask); + shapeLight2 *= dot(processedMask, _ShapeLightMaskFilter2); + } + + half4 shapeLight2Modulate = shapeLight2 * _ShapeLightBlendFactors2.x; + half4 shapeLight2Additive = shapeLight2 * _ShapeLightBlendFactors2.y; +#else + half4 shapeLight2Modulate = 0; + half4 shapeLight2Additive = 0; +#endif + +#if USE_SHAPE_LIGHT_TYPE_3 + half4 shapeLight3 = SAMPLE_TEXTURE2D(_ShapeLightTexture3, sampler_ShapeLightTexture3, lightingUV); + + if (any(_ShapeLightMaskFilter3)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter3) * mask + _ShapeLightInvertedFilter3 * (1 - mask); + shapeLight3 *= dot(processedMask, _ShapeLightMaskFilter3); + } + + half4 shapeLight3Modulate = shapeLight3 * _ShapeLightBlendFactors3.x; + half4 shapeLight3Additive = shapeLight3 * _ShapeLightBlendFactors3.y; +#else + half4 shapeLight3Modulate = 0; + half4 shapeLight3Additive = 0; +#endif + + half4 finalOutput; +#if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 + finalOutput = color; +#else + half4 finalModulate = shapeLight0Modulate + shapeLight1Modulate + shapeLight2Modulate + shapeLight3Modulate; + half4 finalAdditve = shapeLight0Additive + shapeLight1Additive + shapeLight2Additive + shapeLight3Additive; + finalOutput = _HDREmulationScale * (color * finalModulate + finalAdditve); +#endif + + finalOutput.a = alpha; + + return max(0, finalOutput); +} + +half4 CommonLitFragment2(Varyings input, half4 color) +{ + const half4 main = color * SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv); + const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.uv); + const half3 normalTS = UnpackNormal(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.uv)); + + SurfaceData2D surfaceData; + InputData2D inputData; + + InitializeSurfaceData(main.rgb, main.a, mask, normalTS, surfaceData); + InitializeInputData(input.uv, input.lightingUV, inputData); + +#if defined(DEBUG_DISPLAY) + SETUP_DEBUG_TEXTURE_DATA_2D_NO_TS(inputData, input.positionWS, input.positionCS, _MainTex); + surfaceData.normalWS = input.normalWS; +#endif + + return CombinedShapeLightShared2(surfaceData, inputData); +} + + //---------------------------------------------------------------------------------------------------------------------- half4 LitFragment(Varyings input) : SV_Target { @@ -172,10 +293,10 @@ half3 ShadeSH9(half4 normal) // float3 Set_FinalBaseColor = lerp(Set_BaseColor,lerp(Set_1st_ShadeColor,Set_2nd_ShadeColor,saturate((1.0 + ( (_HalfLambert_var - (_ShadeColor_Step-_1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0) ) / (_ShadeColor_Step - (_ShadeColor_Step-_1st2nd_Shades_Feather))))),Set_FinalShadowMask); // Final Color - return float4(Set_BaseColor,1); + //return float4(Set_BaseColor,1); - return CommonLitFragment(input, _White); + return CommonLitFragment2(input, _White); } ENDHLSL } From bc497749660e75ae0b11b3fb12d53492d044d61f Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 21:04:20 +0900 Subject: [PATCH 009/290] save scene --- .../Assets/ScenesDev/test.unity | 119 +++++++++++++++++- 1 file changed, 116 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index 65a99497b..fadb3f7d4 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -343,6 +343,118 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 360142871} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &361997359 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 361997360} + - component: {fileID: 361997363} + - component: {fileID: 361997362} + - component: {fileID: 361997361} + m_Layer: 6 + m_Name: SphereToon2D + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &361997360 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 361997359} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -8.49, y: 1.38, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 372493292} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &361997361 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 361997359} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &361997362 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 361997359} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 2bcd5ea8a27e2684b83133920ea644e5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &361997363 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 361997359} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &372493291 GameObject: m_ObjectHideFlags: 0 @@ -373,6 +485,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 360142872} + - {fileID: 361997360} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &391645602 @@ -446,8 +559,8 @@ Camera: m_GameObject: {fileID: 391645602} m_Enabled: 1 serializedVersion: 2 - m_ClearFlags: 4 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.5471698, g: 0.18892841, b: 0.22273886, a: 0} m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 @@ -742,7 +855,7 @@ Transform: m_GameObject: {fileID: 1873556968} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -14.84, y: 0, z: 0} + m_LocalPosition: {x: -15.5, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] From 27d012c69765c17f01432dd8b727c77d3893a024 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 21:04:32 +0900 Subject: [PATCH 010/290] save mat --- Toonshader_ProjectURP/Assets/Materials/Toon2D.mat | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat index 190f3b4df..52bd75e7b 100644 --- a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat @@ -49,7 +49,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MainTex: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MaskTex: @@ -108,6 +108,8 @@ Material: - _GlossMapScale: 0 - _Glossiness: 0 - _GlossyReflections: 0 + - _Is_Filter_LightColor: 1 + - _Is_LightColor_Base: 1 - _Metallic: 0 - _OcclusionStrength: 1 - _Parallax: 0.005 @@ -119,6 +121,7 @@ Material: - _SrcBlend: 1 - _SrcBlendAlpha: 1 - _Surface: 0 + - _Unlit_Intensity: 0 - _WorkflowMode: 1 - _XRMotionVectorsPass: 1 - _ZWrite: 1 From 1307b45f86cdf1bf358d5b914acea263168d296d Mon Sep 17 00:00:00 2001 From: sin Date: Tue, 21 Oct 2025 10:58:33 +0900 Subject: [PATCH 011/290] works. needs cleanup --- .../Assets/RP_Assets/Renderer2D.asset | 67 +++++---- Toonshader_ProjectURP/Assets/Samples.meta | 8 ++ .../Assets/ScenesDev/test.unity | 24 ++-- .../ScenesDev/test3DOutput.renderTexture | 39 ++++++ .../ScenesDev/test3DOutput.renderTexture.meta | 8 ++ .../ScriptsDev/BackgroundBlitFeature.cs | 118 ++++++++++++++++ .../ScriptsDev/BackgroundBlitFeature.cs.meta | 2 + .../Assets/ScriptsDev/Blit.cs | 70 ++++++++++ .../Assets/ScriptsDev/Blit.cs.meta | 2 + .../ScriptsDev/BlitFromExternalTexture.cs | 128 ++++++++++++++++++ .../BlitFromExternalTexture.cs.meta | 2 + 11 files changed, 430 insertions(+), 38 deletions(-) create mode 100644 Toonshader_ProjectURP/Assets/Samples.meta create mode 100644 Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture create mode 100644 Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture.meta create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs.meta create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs.meta create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs.meta diff --git a/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset b/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset index aca5e7059..637de30ef 100644 --- a/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset +++ b/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset @@ -13,19 +13,32 @@ MonoBehaviour: m_Name: Renderer2D m_EditorClassIdentifier: debugShaders: - debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, type: 3} + debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, + type: 3} hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} - probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, type: 3} + probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, + type: 3} probeVolumeResources: - probeVolumeDebugShader: {fileID: 4800000, guid: e5c6678ed2aaa91408dd3df699057aae, type: 3} - probeVolumeFragmentationDebugShader: {fileID: 4800000, guid: 03cfc4915c15d504a9ed85ecc404e607, type: 3} - probeVolumeOffsetDebugShader: {fileID: 4800000, guid: 53a11f4ebaebf4049b3638ef78dc9664, type: 3} - probeVolumeSamplingDebugShader: {fileID: 4800000, guid: 8f96cd657dc40064aa21efcc7e50a2e7, type: 3} - probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 57d7c4c16e2765b47a4d2069b311bffe, type: 3} - probeSamplingDebugTexture: {fileID: 2800000, guid: 24ec0e140fb444a44ab96ee80844e18e, type: 3} - m_RendererFeatures: [] - m_RendererFeatureMap: + probeVolumeDebugShader: {fileID: 4800000, guid: e5c6678ed2aaa91408dd3df699057aae, + type: 3} + probeVolumeFragmentationDebugShader: {fileID: 4800000, guid: 03cfc4915c15d504a9ed85ecc404e607, + type: 3} + probeVolumeOffsetDebugShader: {fileID: 4800000, guid: 53a11f4ebaebf4049b3638ef78dc9664, + type: 3} + probeVolumeSamplingDebugShader: {fileID: 4800000, guid: 8f96cd657dc40064aa21efcc7e50a2e7, + type: 3} + probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 57d7c4c16e2765b47a4d2069b311bffe, + type: 3} + probeSamplingDebugTexture: {fileID: 2800000, guid: 24ec0e140fb444a44ab96ee80844e18e, + type: 3} + probeVolumeBlendStatesCS: {fileID: 0} + m_RendererFeatures: + - {fileID: 90138282318566881} + m_RendererFeatureMap: e115434a4a3c4001 m_UseNativeRenderPass: 0 + m_LayerMask: + serializedVersion: 2 + m_Bits: 4294967295 m_TransparencySortMode: 0 m_TransparencySortAxis: {x: 0, y: 1, z: 0} m_HDREmulationScale: 1 @@ -49,21 +62,23 @@ MonoBehaviour: m_CameraSortingLayerDownsamplingMethod: 0 m_MaxLightRenderTextureCount: 16 m_MaxShadowRenderTextureCount: 1 - m_LightShader: {fileID: 4800000, guid: 3f6c848ca3d7bca4bbe846546ac701a1, type: 3} - m_CoreBlitShader: {fileID: 4800000, guid: 93446b5c5339d4f00b85c159e1159b7c, type: 3} - m_CoreBlitColorAndDepthPS: {fileID: 4800000, guid: d104b2fc1ca6445babb8e90b0758136b, type: 3} - m_BlitHDROverlay: {fileID: 4800000, guid: a89bee29cffa951418fc1e2da94d1959, type: 3} - m_SamplingShader: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3} - m_ProjectedShadowShader: {fileID: 4800000, guid: ce09d4a80b88c5a4eb9768fab4f1ee00, type: 3} - m_SpriteShadowShader: {fileID: 4800000, guid: 44fc62292b65ab04eabcf310e799ccf6, type: 3} - m_SpriteUnshadowShader: {fileID: 4800000, guid: de02b375720b5c445afe83cd483bedf3, type: 3} - m_GeometryShadowShader: {fileID: 4800000, guid: 19349a0f9a7ed4c48a27445bcf92e5e1, type: 3} - m_GeometryUnshadowShader: {fileID: 4800000, guid: 77774d9009bb81447b048c907d4c6273, type: 3} - m_FallbackErrorShader: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3} m_PostProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} - m_FallOffLookup: {fileID: 2800000, guid: 5688ab254e4c0634f8d6c8e0792331ca, type: 3} m_DefaultMaterialType: 0 - m_DefaultCustomMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} - m_DefaultLitMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} - m_DefaultUnlitMaterial: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2} - m_DefaultMaskMaterial: {fileID: 2100000, guid: 15d0c3709176029428a0da2f8cecf0b5, type: 2} + m_DefaultCustomMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, + type: 2} +--- !u!114 &90138282318566881 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 60eefc24acbf4f3448929f044cdd8ae8, type: 3} + m_Name: BlitFromExternalTexture + m_EditorClassIdentifier: Assembly-CSharp::BlitFromExternalTexture + m_Active: 1 + textureToUse: {fileID: 8400000, guid: 67ad705e569ea6c4492980f61418d902, type: 2} + texture2DToUse: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + renderPassEvent: 210 diff --git a/Toonshader_ProjectURP/Assets/Samples.meta b/Toonshader_ProjectURP/Assets/Samples.meta new file mode 100644 index 000000000..34bd6165f --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Samples.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7fd12dfadcd915441a5df9453615a65d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index fadb3f7d4..749ca01e2 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -470,7 +470,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!4 &372493292 Transform: m_ObjectHideFlags: 0 @@ -486,6 +486,8 @@ Transform: m_Children: - {fileID: 360142872} - {fileID: 361997360} + - {fileID: 2080296074} + - {fileID: 1873556970} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &391645602 @@ -505,7 +507,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!114 &391645603 MonoBehaviour: m_ObjectHideFlags: 0 @@ -591,7 +593,7 @@ Camera: serializedVersion: 2 m_Bits: 128 m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} + m_TargetTexture: {fileID: 8400000, guid: 67ad705e569ea6c4492980f61418d902, type: 2} m_TargetDisplay: 0 m_TargetEye: 3 m_HDR: 1 @@ -720,7 +722,7 @@ Camera: m_GameObject: {fileID: 1733474739} m_Enabled: 1 serializedVersion: 2 - m_ClearFlags: 2 + m_ClearFlags: 4 m_BackGroundColor: {r: 0.5622641, g: 0.5622641, b: 0.5622641, a: 0} m_projectionMatrixMode: 1 m_GateFitMode: 2 @@ -747,7 +749,7 @@ Camera: field of view: 60 orthographic: 1 orthographic size: 5 - m_Depth: -1 + m_Depth: 10 m_CullingMask: serializedVersion: 2 m_Bits: 64 @@ -854,12 +856,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1873556968} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -15.5, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 372493292} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1896131351 GameObject: @@ -1073,19 +1075,17 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2080296072} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -18.3, y: 0, z: -0} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -18.3, y: 0, z: 0} m_LocalScale: {x: 10, y: 10, z: 10} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 372493292} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 m_Roots: - - {fileID: 2080296074} - - {fileID: 1873556970} - {fileID: 116300326} - {fileID: 534897190} - {fileID: 1896131354} diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture b/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture new file mode 100644 index 000000000..457daac7d --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture @@ -0,0 +1,39 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: test3DOutput + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_IsAlphaChannelOptional: 0 + serializedVersion: 6 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthStencilFormat: 94 + m_ColorFormat: 8 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_UseDynamicScaleExplicit: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_EnableRandomWrite: 0 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 + m_ShadowSamplingMode: 2 diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture.meta b/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture.meta new file mode 100644 index 000000000..c61915547 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 395bbc419b3737341b46a8a4c1c96f86 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs new file mode 100644 index 000000000..b066142ca --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs @@ -0,0 +1,118 @@ +// using System; +// using UnityEditor; +// using UnityEngine; +// using UnityEngine.Rendering.Universal; +// using UnityEngine.Rendering; +// +// public class BlurRenderPass : ScriptableRenderPass +// { +// private static readonly int horizontalBlurId = Shader.PropertyToID("_HorizontalBlur"); +// private static readonly int verticalBlurId = Shader.PropertyToID("_VerticalBlur"); +// +// private BlurSettings defaultSettings; +// private Material material; +// +// private RenderTexture m_rt; +// +// public BlurRenderPass(RenderTexture rt) { +// m_rt = rt; +// } +// +// public override void Configure(CommandBuffer cmd, +// RenderTextureDescriptor cameraTextureDescriptor) +// { +// } +// +// +// public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) +// { +// +// CommandBuffer cmd = CommandBufferPool.Get(); +// +// RTHandle cameraTargetHandle = renderingData.cameraData.renderer.cameraColorTargetHandle; +// +// +// // Blit from the camera target to the temporary render texture, +// // using the first shader pass. +// Blit(cmd, m_rt, cameraTargetHandle, material, 0); +// +// //Execute the command buffer and release it back to the pool. +// context.ExecuteCommandBuffer(cmd); +// CommandBufferPool.Release(cmd); +// } +// +// public void Dispose() +// { +// #if UNITY_EDITOR +// if (EditorApplication.isPlaying) +// { +// Object.Destroy(material); +// } +// else +// { +// Object.DestroyImmediate(material); +// } +// #else +// Object.Destroy(material); +// #endif +// +// if (blurTextureHandle != null) blurTextureHandle.Release(); +// } +// } +// +// //-------------------------------------------------------------------------------------------------------------------------------------------------------------- +// +// +// public class BlurRendererFeature : ScriptableRendererFeature +// { +// [SerializeField] private BlurSettings settings; +// private BlurRenderPass blurRenderPass; +// +// +// [SerializeField] private RenderTexture m_renderTexture; +// +// +// public override void Create() +// { +// if (m_renderTexture == null) +// { +// return; +// } +// blurRenderPass = new BlurRenderPass(m_renderTexture); +// +// blurRenderPass.renderPassEvent = RenderPassEvent.AfterRenderingSkybox; +// } +// +// public override void AddRenderPasses(ScriptableRenderer renderer, +// ref RenderingData renderingData) +// { +// if (renderingData.cameraData.cameraType == CameraType.Game) +// { +// renderer.EnqueuePass(blurRenderPass); +// } +// } +// +// protected override void Dispose(bool disposing) +// { +// blurRenderPass.Dispose(); +// #if UNITY_EDITOR +// if (EditorApplication.isPlaying) +// { +// Destroy(material); +// } +// else +// { +// DestroyImmediate(material); +// } +// #else +// Destroy(material); +// #endif +// } +// } +// +// [Serializable] +// public class BlurSettings +// { +// [Range(0, 0.4f)] public float horizontalBlur; +// [Range(0, 0.4f)] public float verticalBlur; +// } \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs.meta new file mode 100644 index 000000000..1e57b9d56 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 03319a84511cc694e89b2e8b6d940726 \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs new file mode 100644 index 000000000..6c7056e0b --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; + +[RequireComponent(typeof(Camera))] +[ExecuteAlways] +public class Blit : MonoBehaviour +{ + // Start is called once before the first execution of Update after the MonoBehaviour is created + void OnEnable() { + //RenderPipelineManager.beginContextRendering += OnBeginContextRendering; + RenderPipelineManager.beginCameraRendering += OnBeginCameraRendering; + + } + + void OnDisable() { + //RenderPipelineManager.beginContextRendering -= OnBeginContextRendering; + RenderPipelineManager.beginCameraRendering -= OnBeginCameraRendering; + } + + + private void OnBeginContextRendering(ScriptableRenderContext context, List cams) { + foreach (Camera cam in cams) { + if (cam == m_camera) { + Debug.Log("Doing Blit"); + Graphics.Blit(m_tex, cam.targetTexture); + return; + } + } + } + + void OnBeginCameraRendering(ScriptableRenderContext context, Camera camera) + { + + if (camera.cameraType != CameraType.Game) + return; + + // Filter which cameras should receive the background + if (camera!= m_camera) + return; + + if (m_tex == null) + return; + + // For URP, the current camera target is an internal RT. We can blit to it at the start + // to "prime" the background, then URP will draw opaque/transparent on top (depending on clear flags). + // Ensure the camera Clear Flags are set to Don't Clear or Depth Only if you want to keep the background. + var cmd = CommandBufferPool.Get("Blit Background"); + + // Try to ensure we're drawing into the camera's current color target. + CoreUtils.SetRenderTarget(cmd, BuiltinRenderTextureType.CameraTarget); + cmd.Blit(m_tex, BuiltinRenderTextureType.CameraTarget); + + context.ExecuteCommandBuffer(cmd); + CommandBufferPool.Release(cmd); + } + + private void OnValidate() { + m_camera = GetComponent(); + } + +//-------------------------------------------------------------------------------------------------------------------------------------------------------------- + + + + [SerializeField] private RenderTexture m_tex; + [SerializeField] Camera m_camera = null; + +} diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs.meta new file mode 100644 index 000000000..a961de407 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 37b5ca99ee37d9c4dbccfaeb63fe78f9 \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs new file mode 100644 index 000000000..1f68da9a4 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs @@ -0,0 +1,128 @@ +using UnityEngine; +using UnityEngine.Experimental.Rendering; +using UnityEngine.Rendering.Universal; +using UnityEngine.Rendering.RenderGraphModule; +using UnityEngine.Rendering; + +public class BlitFromExternalTexture : ScriptableRendererFeature +{ + // The texture to use as input + public RenderTexture textureToUse; + public Texture2D texture2DToUse; + + BlitFromTexture customPass; + public RenderPassEvent renderPassEvent = RenderPassEvent.BeforeRendering; + + + public override void Create() + { + // Create an instance of the render pass, and pass in the input texture + customPass = new BlitFromTexture(textureToUse, texture2DToUse); + + customPass.renderPassEvent = renderPassEvent; + } + + public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) + { + renderer.EnqueuePass(customPass); + } + + class BlitFromTexture : ScriptableRenderPass + { + class PassData + { + internal TextureHandle textureToRead; + internal RenderTexture tempColorTexture; + } + + private RenderTexture texturePassedIn; + private Texture2D texture2D; + + public BlitFromTexture(RenderTexture textureIn, Texture2D tex2d) + { + // In the render pass's constructor, set the input texture + texturePassedIn = textureIn; + texture2D = tex2d; + } + + public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameContext) + { + + Debug.Log("RecordRenderGraph"); + + using (var builder = renderGraph.AddRasterRenderPass("Blit from external textures", out var passData)) + { + // Create a temporary texture and set it as the render target + RenderTextureDescriptor textureProperties = new RenderTextureDescriptor(Screen.width, Screen.height, RenderTextureFormat.Default, 0); + textureProperties.graphicsFormat = GraphicsFormat.R8G8B8A8_UNorm; + textureProperties.depthStencilFormat = GraphicsFormat.None; + + // TextureHandle texture = UniversalRenderer.CreateRenderGraphTexture(renderGraph, textureProperties, "My texture", false); + // Import the camera's color target + + UniversalResourceData resourceData = frameContext.Get(); + //UniversalCameraData cameraData = frameContext.Get(); + + TextureHandle cameraColor = resourceData.activeColorTexture; + builder.SetRenderAttachment(cameraColor, 0, AccessFlags.Write); + + // Create a render texture from the input texture + // RTHandle rtHandle = RTHandles.Alloc(texture2D); + // TextureHandle textureToRead = renderGraph.ImportTexture(rtHandle); + + // Import with explicit RenderTargetInfo to override any depth/stencil format + RenderTargetInfo rtInfo = new RenderTargetInfo(); + rtInfo.width = texturePassedIn.width; + rtInfo.height = texturePassedIn.height; + rtInfo.volumeDepth = 1; + rtInfo.msaaSamples = 1; + rtInfo.format = GraphicsFormat.R8G8B8A8_UNorm; + + // Create a temporary RenderTexture with only color format + RenderTextureDescriptor colorOnlyDesc = new RenderTextureDescriptor( + texturePassedIn.width, + texturePassedIn.height + ); + colorOnlyDesc.graphicsFormat = texturePassedIn.graphicsFormat; + colorOnlyDesc.depthStencilFormat = GraphicsFormat.None; + colorOnlyDesc.msaaSamples = texturePassedIn.antiAliasing; + + passData.tempColorTexture = RenderTexture.GetTemporary(colorOnlyDesc); + Graphics.Blit(texturePassedIn, passData.tempColorTexture); + + //RTHandle rtHandle = RTHandles.Alloc(width:texturePassedIn.width, height: texturePassedIn.height, format: GraphicsFormat.R8G8B8A8_UNorm); + RTHandle rtHandle = RTHandles.Alloc(passData.tempColorTexture); + TextureHandle textureToRead = renderGraph.ImportTexture(rtHandle); + + //public static RTHandle Alloc(int width, int height, int slices = 1, DepthBits depthBufferBits = DepthBits.None, GraphicsFormat colorFormat = GraphicsFormat.R8G8B8A8_SRGB, FilterMode filterMode = FilterMode.Point, TextureWrapMode wrapMode = TextureWrapMode.Repeat, TextureDimension dimension = TextureDimension.Tex2D, bool enableRandomWrite = false, bool useMipMap = false, bool autoGenerateMips = true, bool isShadowMap = false, int anisoLevel = 1, float mipMapBias = 0, MSAASamples msaaSamples = MSAASamples.None, bool bindTextureMS = false, bool useDynamicScale = false, bool useDynamicScaleExplicit = false, RenderTextureMemoryless memoryless = RenderTextureMemoryless.None, VRTextureUsage vrUsage = VRTextureUsage.None, string name = "") + //Alloc(int, int, GraphicsFormat, int, FilterMode, TextureWrapMode, TextureDimension, bool, bool, bool, bool, int, float, MSAASamples, bool, bool, bool, RenderTextureMemoryless, VRTextureUsage, string) + //Alloc(int, int, TextureWrapMode, TextureWrapMode, TextureWrapMode, int, DepthBits, GraphicsFormat, FilterMode, TextureDimension, bool, bool, bool, bool, int, float, MSAASamples, bool, bool, bool, RenderTextureMemoryless, VRTextureUsage, string) + + + + // Add the texture to the pass data + + passData.textureToRead = textureToRead; + + // Set the texture as readable + builder.UseTexture(passData.textureToRead, AccessFlags.Read); + + builder.AllowPassCulling(false); + + builder.SetRenderFunc((PassData data, RasterGraphContext context) => ExecutePass(data, context)); + } + } + + static void ExecutePass(PassData data, RasterGraphContext context) + { + // Copy the imported texture to the render target + Blitter.BlitTexture(context.cmd, data.textureToRead, new Vector4(1.0f,1.0f,0,0), 0, false); + + Debug.Log("a"); + + // Dispose of the texture + RTHandles.Release(data.textureToRead); + RenderTexture.ReleaseTemporary(data.tempColorTexture); + } + } +} diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs.meta new file mode 100644 index 000000000..72df1b659 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 60eefc24acbf4f3448929f044cdd8ae8 From b647d5d1b89841fb123639caee8fd0904caf1945 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 22 Oct 2025 13:51:25 +0900 Subject: [PATCH 012/290] Cleanup --- .../ScriptsDev/BackgroundBlitFeature.cs | 118 ---------------- .../ScriptsDev/BackgroundBlitFeature.cs.meta | 2 - .../Assets/ScriptsDev/Blit.cs | 70 ---------- .../Assets/ScriptsDev/Blit.cs.meta | 2 - .../ScriptsDev/BlitFromExternalTexture.cs | 128 ------------------ .../BlitFromExternalTexture.cs.meta | 2 - 6 files changed, 322 deletions(-) delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs.meta diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs deleted file mode 100644 index b066142ca..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs +++ /dev/null @@ -1,118 +0,0 @@ -// using System; -// using UnityEditor; -// using UnityEngine; -// using UnityEngine.Rendering.Universal; -// using UnityEngine.Rendering; -// -// public class BlurRenderPass : ScriptableRenderPass -// { -// private static readonly int horizontalBlurId = Shader.PropertyToID("_HorizontalBlur"); -// private static readonly int verticalBlurId = Shader.PropertyToID("_VerticalBlur"); -// -// private BlurSettings defaultSettings; -// private Material material; -// -// private RenderTexture m_rt; -// -// public BlurRenderPass(RenderTexture rt) { -// m_rt = rt; -// } -// -// public override void Configure(CommandBuffer cmd, -// RenderTextureDescriptor cameraTextureDescriptor) -// { -// } -// -// -// public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) -// { -// -// CommandBuffer cmd = CommandBufferPool.Get(); -// -// RTHandle cameraTargetHandle = renderingData.cameraData.renderer.cameraColorTargetHandle; -// -// -// // Blit from the camera target to the temporary render texture, -// // using the first shader pass. -// Blit(cmd, m_rt, cameraTargetHandle, material, 0); -// -// //Execute the command buffer and release it back to the pool. -// context.ExecuteCommandBuffer(cmd); -// CommandBufferPool.Release(cmd); -// } -// -// public void Dispose() -// { -// #if UNITY_EDITOR -// if (EditorApplication.isPlaying) -// { -// Object.Destroy(material); -// } -// else -// { -// Object.DestroyImmediate(material); -// } -// #else -// Object.Destroy(material); -// #endif -// -// if (blurTextureHandle != null) blurTextureHandle.Release(); -// } -// } -// -// //-------------------------------------------------------------------------------------------------------------------------------------------------------------- -// -// -// public class BlurRendererFeature : ScriptableRendererFeature -// { -// [SerializeField] private BlurSettings settings; -// private BlurRenderPass blurRenderPass; -// -// -// [SerializeField] private RenderTexture m_renderTexture; -// -// -// public override void Create() -// { -// if (m_renderTexture == null) -// { -// return; -// } -// blurRenderPass = new BlurRenderPass(m_renderTexture); -// -// blurRenderPass.renderPassEvent = RenderPassEvent.AfterRenderingSkybox; -// } -// -// public override void AddRenderPasses(ScriptableRenderer renderer, -// ref RenderingData renderingData) -// { -// if (renderingData.cameraData.cameraType == CameraType.Game) -// { -// renderer.EnqueuePass(blurRenderPass); -// } -// } -// -// protected override void Dispose(bool disposing) -// { -// blurRenderPass.Dispose(); -// #if UNITY_EDITOR -// if (EditorApplication.isPlaying) -// { -// Destroy(material); -// } -// else -// { -// DestroyImmediate(material); -// } -// #else -// Destroy(material); -// #endif -// } -// } -// -// [Serializable] -// public class BlurSettings -// { -// [Range(0, 0.4f)] public float horizontalBlur; -// [Range(0, 0.4f)] public float verticalBlur; -// } \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs.meta deleted file mode 100644 index 1e57b9d56..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 03319a84511cc694e89b2e8b6d940726 \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs deleted file mode 100644 index 6c7056e0b..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Rendering; - -[RequireComponent(typeof(Camera))] -[ExecuteAlways] -public class Blit : MonoBehaviour -{ - // Start is called once before the first execution of Update after the MonoBehaviour is created - void OnEnable() { - //RenderPipelineManager.beginContextRendering += OnBeginContextRendering; - RenderPipelineManager.beginCameraRendering += OnBeginCameraRendering; - - } - - void OnDisable() { - //RenderPipelineManager.beginContextRendering -= OnBeginContextRendering; - RenderPipelineManager.beginCameraRendering -= OnBeginCameraRendering; - } - - - private void OnBeginContextRendering(ScriptableRenderContext context, List cams) { - foreach (Camera cam in cams) { - if (cam == m_camera) { - Debug.Log("Doing Blit"); - Graphics.Blit(m_tex, cam.targetTexture); - return; - } - } - } - - void OnBeginCameraRendering(ScriptableRenderContext context, Camera camera) - { - - if (camera.cameraType != CameraType.Game) - return; - - // Filter which cameras should receive the background - if (camera!= m_camera) - return; - - if (m_tex == null) - return; - - // For URP, the current camera target is an internal RT. We can blit to it at the start - // to "prime" the background, then URP will draw opaque/transparent on top (depending on clear flags). - // Ensure the camera Clear Flags are set to Don't Clear or Depth Only if you want to keep the background. - var cmd = CommandBufferPool.Get("Blit Background"); - - // Try to ensure we're drawing into the camera's current color target. - CoreUtils.SetRenderTarget(cmd, BuiltinRenderTextureType.CameraTarget); - cmd.Blit(m_tex, BuiltinRenderTextureType.CameraTarget); - - context.ExecuteCommandBuffer(cmd); - CommandBufferPool.Release(cmd); - } - - private void OnValidate() { - m_camera = GetComponent(); - } - -//-------------------------------------------------------------------------------------------------------------------------------------------------------------- - - - - [SerializeField] private RenderTexture m_tex; - [SerializeField] Camera m_camera = null; - -} diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs.meta deleted file mode 100644 index a961de407..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 37b5ca99ee37d9c4dbccfaeb63fe78f9 \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs deleted file mode 100644 index 1f68da9a4..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs +++ /dev/null @@ -1,128 +0,0 @@ -using UnityEngine; -using UnityEngine.Experimental.Rendering; -using UnityEngine.Rendering.Universal; -using UnityEngine.Rendering.RenderGraphModule; -using UnityEngine.Rendering; - -public class BlitFromExternalTexture : ScriptableRendererFeature -{ - // The texture to use as input - public RenderTexture textureToUse; - public Texture2D texture2DToUse; - - BlitFromTexture customPass; - public RenderPassEvent renderPassEvent = RenderPassEvent.BeforeRendering; - - - public override void Create() - { - // Create an instance of the render pass, and pass in the input texture - customPass = new BlitFromTexture(textureToUse, texture2DToUse); - - customPass.renderPassEvent = renderPassEvent; - } - - public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) - { - renderer.EnqueuePass(customPass); - } - - class BlitFromTexture : ScriptableRenderPass - { - class PassData - { - internal TextureHandle textureToRead; - internal RenderTexture tempColorTexture; - } - - private RenderTexture texturePassedIn; - private Texture2D texture2D; - - public BlitFromTexture(RenderTexture textureIn, Texture2D tex2d) - { - // In the render pass's constructor, set the input texture - texturePassedIn = textureIn; - texture2D = tex2d; - } - - public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameContext) - { - - Debug.Log("RecordRenderGraph"); - - using (var builder = renderGraph.AddRasterRenderPass("Blit from external textures", out var passData)) - { - // Create a temporary texture and set it as the render target - RenderTextureDescriptor textureProperties = new RenderTextureDescriptor(Screen.width, Screen.height, RenderTextureFormat.Default, 0); - textureProperties.graphicsFormat = GraphicsFormat.R8G8B8A8_UNorm; - textureProperties.depthStencilFormat = GraphicsFormat.None; - - // TextureHandle texture = UniversalRenderer.CreateRenderGraphTexture(renderGraph, textureProperties, "My texture", false); - // Import the camera's color target - - UniversalResourceData resourceData = frameContext.Get(); - //UniversalCameraData cameraData = frameContext.Get(); - - TextureHandle cameraColor = resourceData.activeColorTexture; - builder.SetRenderAttachment(cameraColor, 0, AccessFlags.Write); - - // Create a render texture from the input texture - // RTHandle rtHandle = RTHandles.Alloc(texture2D); - // TextureHandle textureToRead = renderGraph.ImportTexture(rtHandle); - - // Import with explicit RenderTargetInfo to override any depth/stencil format - RenderTargetInfo rtInfo = new RenderTargetInfo(); - rtInfo.width = texturePassedIn.width; - rtInfo.height = texturePassedIn.height; - rtInfo.volumeDepth = 1; - rtInfo.msaaSamples = 1; - rtInfo.format = GraphicsFormat.R8G8B8A8_UNorm; - - // Create a temporary RenderTexture with only color format - RenderTextureDescriptor colorOnlyDesc = new RenderTextureDescriptor( - texturePassedIn.width, - texturePassedIn.height - ); - colorOnlyDesc.graphicsFormat = texturePassedIn.graphicsFormat; - colorOnlyDesc.depthStencilFormat = GraphicsFormat.None; - colorOnlyDesc.msaaSamples = texturePassedIn.antiAliasing; - - passData.tempColorTexture = RenderTexture.GetTemporary(colorOnlyDesc); - Graphics.Blit(texturePassedIn, passData.tempColorTexture); - - //RTHandle rtHandle = RTHandles.Alloc(width:texturePassedIn.width, height: texturePassedIn.height, format: GraphicsFormat.R8G8B8A8_UNorm); - RTHandle rtHandle = RTHandles.Alloc(passData.tempColorTexture); - TextureHandle textureToRead = renderGraph.ImportTexture(rtHandle); - - //public static RTHandle Alloc(int width, int height, int slices = 1, DepthBits depthBufferBits = DepthBits.None, GraphicsFormat colorFormat = GraphicsFormat.R8G8B8A8_SRGB, FilterMode filterMode = FilterMode.Point, TextureWrapMode wrapMode = TextureWrapMode.Repeat, TextureDimension dimension = TextureDimension.Tex2D, bool enableRandomWrite = false, bool useMipMap = false, bool autoGenerateMips = true, bool isShadowMap = false, int anisoLevel = 1, float mipMapBias = 0, MSAASamples msaaSamples = MSAASamples.None, bool bindTextureMS = false, bool useDynamicScale = false, bool useDynamicScaleExplicit = false, RenderTextureMemoryless memoryless = RenderTextureMemoryless.None, VRTextureUsage vrUsage = VRTextureUsage.None, string name = "") - //Alloc(int, int, GraphicsFormat, int, FilterMode, TextureWrapMode, TextureDimension, bool, bool, bool, bool, int, float, MSAASamples, bool, bool, bool, RenderTextureMemoryless, VRTextureUsage, string) - //Alloc(int, int, TextureWrapMode, TextureWrapMode, TextureWrapMode, int, DepthBits, GraphicsFormat, FilterMode, TextureDimension, bool, bool, bool, bool, int, float, MSAASamples, bool, bool, bool, RenderTextureMemoryless, VRTextureUsage, string) - - - - // Add the texture to the pass data - - passData.textureToRead = textureToRead; - - // Set the texture as readable - builder.UseTexture(passData.textureToRead, AccessFlags.Read); - - builder.AllowPassCulling(false); - - builder.SetRenderFunc((PassData data, RasterGraphContext context) => ExecutePass(data, context)); - } - } - - static void ExecutePass(PassData data, RasterGraphContext context) - { - // Copy the imported texture to the render target - Blitter.BlitTexture(context.cmd, data.textureToRead, new Vector4(1.0f,1.0f,0,0), 0, false); - - Debug.Log("a"); - - // Dispose of the texture - RTHandles.Release(data.textureToRead); - RenderTexture.ReleaseTemporary(data.tempColorTexture); - } - } -} diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs.meta deleted file mode 100644 index 72df1b659..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 60eefc24acbf4f3448929f044cdd8ae8 From 270e99fc0f1752d11c8aa6276577811a0a832e37 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 22 Oct 2025 15:11:31 +0900 Subject: [PATCH 013/290] remove unused RT --- .../ScenesDev/test3DOutput.renderTexture | 39 ------------------- .../ScenesDev/test3DOutput.renderTexture.meta | 8 ---- 2 files changed, 47 deletions(-) delete mode 100644 Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture delete mode 100644 Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture.meta diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture b/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture deleted file mode 100644 index 457daac7d..000000000 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture +++ /dev/null @@ -1,39 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!84 &8400000 -RenderTexture: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: test3DOutput - m_ImageContentsHash: - serializedVersion: 2 - Hash: 00000000000000000000000000000000 - m_IsAlphaChannelOptional: 0 - serializedVersion: 6 - m_Width: 256 - m_Height: 256 - m_AntiAliasing: 1 - m_MipCount: -1 - m_DepthStencilFormat: 94 - m_ColorFormat: 8 - m_MipMap: 0 - m_GenerateMips: 1 - m_SRGB: 0 - m_UseDynamicScale: 0 - m_UseDynamicScaleExplicit: 0 - m_BindMS: 0 - m_EnableCompatibleFormat: 1 - m_EnableRandomWrite: 0 - m_TextureSettings: - serializedVersion: 2 - m_FilterMode: 1 - m_Aniso: 0 - m_MipBias: 0 - m_WrapU: 1 - m_WrapV: 1 - m_WrapW: 1 - m_Dimension: 2 - m_VolumeDepth: 1 - m_ShadowSamplingMode: 2 diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture.meta b/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture.meta deleted file mode 100644 index c61915547..000000000 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 395bbc419b3737341b46a8a4c1c96f86 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 8400000 - userData: - assetBundleName: - assetBundleVariant: From 0a85a7f098c87f3f03a0a34a831ff012df05b33b Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 22 Oct 2025 15:11:42 +0900 Subject: [PATCH 014/290] rename 2D Renderer --- .../Assets/RP_Assets/Renderer2D.asset | 84 ------------------- .../Assets/RP_Assets/Renderer2D.asset.meta | 8 -- 2 files changed, 92 deletions(-) delete mode 100644 Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset delete mode 100644 Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset.meta diff --git a/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset b/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset deleted file mode 100644 index 637de30ef..000000000 --- a/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset +++ /dev/null @@ -1,84 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11145981673336645838492a2d98e247, type: 3} - m_Name: Renderer2D - m_EditorClassIdentifier: - debugShaders: - debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, - type: 3} - hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} - probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, - type: 3} - probeVolumeResources: - probeVolumeDebugShader: {fileID: 4800000, guid: e5c6678ed2aaa91408dd3df699057aae, - type: 3} - probeVolumeFragmentationDebugShader: {fileID: 4800000, guid: 03cfc4915c15d504a9ed85ecc404e607, - type: 3} - probeVolumeOffsetDebugShader: {fileID: 4800000, guid: 53a11f4ebaebf4049b3638ef78dc9664, - type: 3} - probeVolumeSamplingDebugShader: {fileID: 4800000, guid: 8f96cd657dc40064aa21efcc7e50a2e7, - type: 3} - probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 57d7c4c16e2765b47a4d2069b311bffe, - type: 3} - probeSamplingDebugTexture: {fileID: 2800000, guid: 24ec0e140fb444a44ab96ee80844e18e, - type: 3} - probeVolumeBlendStatesCS: {fileID: 0} - m_RendererFeatures: - - {fileID: 90138282318566881} - m_RendererFeatureMap: e115434a4a3c4001 - m_UseNativeRenderPass: 0 - m_LayerMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_TransparencySortMode: 0 - m_TransparencySortAxis: {x: 0, y: 1, z: 0} - m_HDREmulationScale: 1 - m_LightRenderTextureScale: 0.5 - m_LightBlendStyles: - - name: Multiply - maskTextureChannel: 0 - blendMode: 1 - - name: Additive - maskTextureChannel: 0 - blendMode: 0 - - name: Multiply with Mask - maskTextureChannel: 1 - blendMode: 1 - - name: Additive with Mask - maskTextureChannel: 1 - blendMode: 0 - m_UseDepthStencilBuffer: 1 - m_UseCameraSortingLayersTexture: 0 - m_CameraSortingLayersTextureBound: -1 - m_CameraSortingLayerDownsamplingMethod: 0 - m_MaxLightRenderTextureCount: 16 - m_MaxShadowRenderTextureCount: 1 - m_PostProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} - m_DefaultMaterialType: 0 - m_DefaultCustomMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, - type: 2} ---- !u!114 &90138282318566881 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 60eefc24acbf4f3448929f044cdd8ae8, type: 3} - m_Name: BlitFromExternalTexture - m_EditorClassIdentifier: Assembly-CSharp::BlitFromExternalTexture - m_Active: 1 - textureToUse: {fileID: 8400000, guid: 67ad705e569ea6c4492980f61418d902, type: 2} - texture2DToUse: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} - renderPassEvent: 210 diff --git a/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset.meta b/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset.meta deleted file mode 100644 index a5c42b240..000000000 --- a/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: aec34135564b84745baffe07fc9f7d4c -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: From 636fe7090fc6f24dd2f99b8054c524864032391c Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 22 Oct 2025 15:19:19 +0900 Subject: [PATCH 015/290] save scene --- .../Assets/ScenesDev/test.unity | 216 +++++++++++++++--- 1 file changed, 188 insertions(+), 28 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index 749ca01e2..e637ddd99 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -132,7 +132,7 @@ GameObject: - component: {fileID: 116300324} - component: {fileID: 116300323} m_Layer: 7 - m_Name: Sphere + m_Name: SphereToon3D m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -184,7 +184,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + - {fileID: 2100000, guid: c51bf9755171c064f84a96b73079c4c9, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -224,12 +224,13 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 116300322} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -3.7} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 3.57, y: 1.23, z: -3.7} + m_LocalScale: {x: 3, y: 3, z: 3} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 397058299} + m_Father: {fileID: 1390602298} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &360142871 GameObject: @@ -371,10 +372,11 @@ Transform: m_GameObject: {fileID: 361997359} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -8.49, y: 1.38, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalPosition: {x: -10.38, y: 1.38, z: 0} + m_LocalScale: {x: 3, y: 3, z: 3} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 1873556970} m_Father: {fileID: 372493292} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!135 &361997361 @@ -470,7 +472,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!4 &372493292 Transform: m_ObjectHideFlags: 0 @@ -487,7 +489,6 @@ Transform: - {fileID: 360142872} - {fileID: 361997360} - {fileID: 2080296074} - - {fileID: 1873556970} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &391645602 @@ -586,14 +587,14 @@ Camera: near clip plane: 0.3 far clip plane: 1000 field of view: 60 - orthographic: 0 + orthographic: 1 orthographic size: 5 m_Depth: -1 m_CullingMask: serializedVersion: 2 m_Bits: 128 m_RenderingPath: -1 - m_TargetTexture: {fileID: 8400000, guid: 67ad705e569ea6c4492980f61418d902, type: 2} + m_TargetTexture: {fileID: 8400000, guid: 05daaa774e709ff4cae5d7b4d4c8e9be, type: 2} m_TargetDisplay: 0 m_TargetEye: 3 m_HDR: 1 @@ -618,6 +619,133 @@ Transform: m_Children: [] m_Father: {fileID: 534897190} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &397058298 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 397058299} + - component: {fileID: 397058301} + - component: {fileID: 397058300} + m_Layer: 0 + m_Name: Spot Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &397058299 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 397058298} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.029999971, y: 1.5433334, z: 0} + m_LocalScale: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 116300326} + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!114 &397058300 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 397058298} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_CustomShadowLayers: 0 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 0 + m_RenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_ShadowRenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_Version: 4 + m_LightLayerMask: 1 + m_ShadowLayerMask: 1 + m_RenderingLayers: 1 + m_ShadowRenderingLayers: 1 +--- !u!108 &397058301 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 397058298} + m_Enabled: 1 + serializedVersion: 12 + m_Type: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 8.05 + m_Range: 10.42 + m_SpotAngle: 47.9236 + m_InnerSpotAngle: 39.725677 + m_CookieSize2D: {x: 10, y: 10} + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!1 &534897189 GameObject: m_ObjectHideFlags: 0 @@ -651,6 +779,38 @@ Transform: - {fileID: 391645606} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1390602297 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1390602298} + m_Layer: 0 + m_Name: 3D Objects + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1390602298 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1390602297} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 116300326} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1733474739 GameObject: m_ObjectHideFlags: 0 @@ -686,7 +846,7 @@ MonoBehaviour: m_RequiresOpaqueTextureOption: 2 m_CameraType: 0 m_Cameras: [] - m_RendererIndex: 1 + m_RendererIndex: 2 m_VolumeLayerMask: serializedVersion: 2 m_Bits: 1 @@ -811,7 +971,7 @@ MonoBehaviour: m_ComponentVersion: 2 m_LightType: 3 m_BlendStyleIndex: 0 - m_FalloffIntensity: 0.5 + m_FalloffIntensity: 0.573 m_Color: {r: 1, g: 1, b: 1, a: 1} m_Intensity: 1 m_LightVolumeIntensity: 1 @@ -834,10 +994,10 @@ MonoBehaviour: m_LocalBounds: m_Center: {x: 0, y: -0.00000011920929, z: 0} m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} - m_PointLightInnerAngle: 360 - m_PointLightOuterAngle: 360 + m_PointLightInnerAngle: 38.718567 + m_PointLightOuterAngle: 112.86046 m_PointLightInnerRadius: 0 - m_PointLightOuterRadius: 8.81 + m_PointLightOuterRadius: 6.85 m_ShapeLightParametricSides: 5 m_ShapeLightParametricAngleOffset: 0 m_ShapeLightParametricRadius: 1 @@ -856,13 +1016,13 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1873556968} serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -15.5, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} + m_LocalPosition: {x: 0.04, y: 0.896, z: 0} + m_LocalScale: {x: 0.33333334, y: 0.33333334, z: 0.33333334} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 372493292} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Father: {fileID: 361997360} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} --- !u!1 &1896131351 GameObject: m_ObjectHideFlags: 0 @@ -880,7 +1040,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!114 &1896131352 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1006,7 +1166,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!212 &2080296073 SpriteRenderer: serializedVersion: 2 @@ -1086,7 +1246,7 @@ Transform: SceneRoots: m_ObjectHideFlags: 0 m_Roots: - - {fileID: 116300326} + - {fileID: 1390602298} - {fileID: 534897190} - {fileID: 1896131354} - {fileID: 372493292} From 7d81786aae2c74406cc197db6e6462b73a3e5689 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 29 Oct 2025 20:29:17 +0900 Subject: [PATCH 016/290] keep only light_0 in the toon2d shader --- .../Assets/Shaders/Toon2D.shader | 54 ------------------- 1 file changed, 54 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 0a79505b0..8c72c5ba8 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -167,62 +167,8 @@ half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inp half4 shapeLight0Additive = 0; #endif -#if USE_SHAPE_LIGHT_TYPE_1 - half4 shapeLight1 = SAMPLE_TEXTURE2D(_ShapeLightTexture1, sampler_ShapeLightTexture1, lightingUV); - - if (any(_ShapeLightMaskFilter1)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter1) * mask + _ShapeLightInvertedFilter1 * (1 - mask); - shapeLight1 *= dot(processedMask, _ShapeLightMaskFilter1); - } - - half4 shapeLight1Modulate = shapeLight1 * _ShapeLightBlendFactors1.x; - half4 shapeLight1Additive = shapeLight1 * _ShapeLightBlendFactors1.y; -#else - half4 shapeLight1Modulate = 0; - half4 shapeLight1Additive = 0; -#endif - -#if USE_SHAPE_LIGHT_TYPE_2 - half4 shapeLight2 = SAMPLE_TEXTURE2D(_ShapeLightTexture2, sampler_ShapeLightTexture2, lightingUV); - - if (any(_ShapeLightMaskFilter2)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter2) * mask + _ShapeLightInvertedFilter2 * (1 - mask); - shapeLight2 *= dot(processedMask, _ShapeLightMaskFilter2); - } - - half4 shapeLight2Modulate = shapeLight2 * _ShapeLightBlendFactors2.x; - half4 shapeLight2Additive = shapeLight2 * _ShapeLightBlendFactors2.y; -#else - half4 shapeLight2Modulate = 0; - half4 shapeLight2Additive = 0; -#endif - -#if USE_SHAPE_LIGHT_TYPE_3 - half4 shapeLight3 = SAMPLE_TEXTURE2D(_ShapeLightTexture3, sampler_ShapeLightTexture3, lightingUV); - - if (any(_ShapeLightMaskFilter3)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter3) * mask + _ShapeLightInvertedFilter3 * (1 - mask); - shapeLight3 *= dot(processedMask, _ShapeLightMaskFilter3); - } - - half4 shapeLight3Modulate = shapeLight3 * _ShapeLightBlendFactors3.x; - half4 shapeLight3Additive = shapeLight3 * _ShapeLightBlendFactors3.y; -#else - half4 shapeLight3Modulate = 0; - half4 shapeLight3Additive = 0; -#endif half4 finalOutput; -#if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 - finalOutput = color; -#else - half4 finalModulate = shapeLight0Modulate + shapeLight1Modulate + shapeLight2Modulate + shapeLight3Modulate; - half4 finalAdditve = shapeLight0Additive + shapeLight1Additive + shapeLight2Additive + shapeLight3Additive; - finalOutput = _HDREmulationScale * (color * finalModulate + finalAdditve); -#endif finalOutput.a = alpha; From 474f17ffea8c802303c8f361646ff470460d4027 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 29 Oct 2025 20:42:20 +0900 Subject: [PATCH 017/290] Revert "keep only light_0 in the toon2d shader" This reverts commit 91c31c235749c76089cbc561a0421bf75035bf2e. --- .../Assets/Shaders/Toon2D.shader | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 8c72c5ba8..0a79505b0 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -167,8 +167,62 @@ half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inp half4 shapeLight0Additive = 0; #endif +#if USE_SHAPE_LIGHT_TYPE_1 + half4 shapeLight1 = SAMPLE_TEXTURE2D(_ShapeLightTexture1, sampler_ShapeLightTexture1, lightingUV); + + if (any(_ShapeLightMaskFilter1)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter1) * mask + _ShapeLightInvertedFilter1 * (1 - mask); + shapeLight1 *= dot(processedMask, _ShapeLightMaskFilter1); + } + + half4 shapeLight1Modulate = shapeLight1 * _ShapeLightBlendFactors1.x; + half4 shapeLight1Additive = shapeLight1 * _ShapeLightBlendFactors1.y; +#else + half4 shapeLight1Modulate = 0; + half4 shapeLight1Additive = 0; +#endif + +#if USE_SHAPE_LIGHT_TYPE_2 + half4 shapeLight2 = SAMPLE_TEXTURE2D(_ShapeLightTexture2, sampler_ShapeLightTexture2, lightingUV); + + if (any(_ShapeLightMaskFilter2)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter2) * mask + _ShapeLightInvertedFilter2 * (1 - mask); + shapeLight2 *= dot(processedMask, _ShapeLightMaskFilter2); + } + + half4 shapeLight2Modulate = shapeLight2 * _ShapeLightBlendFactors2.x; + half4 shapeLight2Additive = shapeLight2 * _ShapeLightBlendFactors2.y; +#else + half4 shapeLight2Modulate = 0; + half4 shapeLight2Additive = 0; +#endif + +#if USE_SHAPE_LIGHT_TYPE_3 + half4 shapeLight3 = SAMPLE_TEXTURE2D(_ShapeLightTexture3, sampler_ShapeLightTexture3, lightingUV); + + if (any(_ShapeLightMaskFilter3)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter3) * mask + _ShapeLightInvertedFilter3 * (1 - mask); + shapeLight3 *= dot(processedMask, _ShapeLightMaskFilter3); + } + + half4 shapeLight3Modulate = shapeLight3 * _ShapeLightBlendFactors3.x; + half4 shapeLight3Additive = shapeLight3 * _ShapeLightBlendFactors3.y; +#else + half4 shapeLight3Modulate = 0; + half4 shapeLight3Additive = 0; +#endif half4 finalOutput; +#if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 + finalOutput = color; +#else + half4 finalModulate = shapeLight0Modulate + shapeLight1Modulate + shapeLight2Modulate + shapeLight3Modulate; + half4 finalAdditve = shapeLight0Additive + shapeLight1Additive + shapeLight2Additive + shapeLight3Additive; + finalOutput = _HDREmulationScale * (color * finalModulate + finalAdditve); +#endif finalOutput.a = alpha; From e917e89d40ffa1c82ff31046df387a086f8f70c5 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 29 Oct 2025 20:42:46 +0900 Subject: [PATCH 018/290] remove light 1,2,3 --- .../Assets/Shaders/Toon2D.shader | 48 ------------------- 1 file changed, 48 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 0a79505b0..89e6a783a 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -167,54 +167,6 @@ half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inp half4 shapeLight0Additive = 0; #endif -#if USE_SHAPE_LIGHT_TYPE_1 - half4 shapeLight1 = SAMPLE_TEXTURE2D(_ShapeLightTexture1, sampler_ShapeLightTexture1, lightingUV); - - if (any(_ShapeLightMaskFilter1)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter1) * mask + _ShapeLightInvertedFilter1 * (1 - mask); - shapeLight1 *= dot(processedMask, _ShapeLightMaskFilter1); - } - - half4 shapeLight1Modulate = shapeLight1 * _ShapeLightBlendFactors1.x; - half4 shapeLight1Additive = shapeLight1 * _ShapeLightBlendFactors1.y; -#else - half4 shapeLight1Modulate = 0; - half4 shapeLight1Additive = 0; -#endif - -#if USE_SHAPE_LIGHT_TYPE_2 - half4 shapeLight2 = SAMPLE_TEXTURE2D(_ShapeLightTexture2, sampler_ShapeLightTexture2, lightingUV); - - if (any(_ShapeLightMaskFilter2)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter2) * mask + _ShapeLightInvertedFilter2 * (1 - mask); - shapeLight2 *= dot(processedMask, _ShapeLightMaskFilter2); - } - - half4 shapeLight2Modulate = shapeLight2 * _ShapeLightBlendFactors2.x; - half4 shapeLight2Additive = shapeLight2 * _ShapeLightBlendFactors2.y; -#else - half4 shapeLight2Modulate = 0; - half4 shapeLight2Additive = 0; -#endif - -#if USE_SHAPE_LIGHT_TYPE_3 - half4 shapeLight3 = SAMPLE_TEXTURE2D(_ShapeLightTexture3, sampler_ShapeLightTexture3, lightingUV); - - if (any(_ShapeLightMaskFilter3)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter3) * mask + _ShapeLightInvertedFilter3 * (1 - mask); - shapeLight3 *= dot(processedMask, _ShapeLightMaskFilter3); - } - - half4 shapeLight3Modulate = shapeLight3 * _ShapeLightBlendFactors3.x; - half4 shapeLight3Additive = shapeLight3 * _ShapeLightBlendFactors3.y; -#else - half4 shapeLight3Modulate = 0; - half4 shapeLight3Additive = 0; -#endif - half4 finalOutput; #if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 finalOutput = color; From 42600a863ca2011ddc17e517407aefc9e61c00d8 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 29 Oct 2025 20:47:17 +0900 Subject: [PATCH 019/290] base color --- .../Assets/Shaders/Toon2D.shader | 43 ++++++++++++++++--- 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 89e6a783a..7d2f9b05b 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -132,7 +132,7 @@ half3 ShadeSH9(half4 normal) //---------------------------------------------------------------------------------------------------------------------- -half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData) +half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv) { #if defined(DEBUG_DISPLAY) half4 debugColor = 0; @@ -151,6 +151,31 @@ half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inp if (alpha == 0.0) discard; + + + + // //v.2.0.5 + // float4 _1st_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_1st_ShadeMap,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_MainTex_var,_Use_BaseAs1st); + // float3 Set_1st_ShadeColor = lerp( (_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb), ((_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_1st_Shade ); + // //v.2.0.5 + // float4 _2nd_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_1st_ShadeMap_var,_Use_1stAs2nd); + // float3 Set_2nd_ShadeColor = lerp( (_2nd_ShadeColor.rgb*_2nd_ShadeMap_var.rgb), ((_2nd_ShadeColor.rgb*_2nd_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_2nd_Shade ); + // float _HalfLambert_var = 0.5*dot(lerp( i.normalDir, normalDirection, _Is_NormalMapToBase ),lightDirection)+0.5; + // + // float4 _Set_2nd_ShadePosition_var = tex2D(_Set_2nd_ShadePosition, TRANSFORM_TEX(Set_UV0, _Set_2nd_ShadePosition)); + // float4 _Set_1st_ShadePosition_var = tex2D(_Set_1st_ShadePosition, TRANSFORM_TEX(Set_UV0, _Set_1st_ShadePosition)); + // //v.2.0.6 + // //Minmimum value is same as the Minimum Feather's value with the Minimum Step's value as threshold. + // float _SystemShadowsLevel_var = (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel > 0.001 ? (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel : 0.0001; + // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var*saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); + // // + // //Composition: 3 Basic Colors as Set_FinalBaseColor + // float3 Set_FinalBaseColor = lerp(Set_BaseColor,lerp(Set_1st_ShadeColor,Set_2nd_ShadeColor,saturate((1.0 + ( (_HalfLambert_var - (_ShadeColor_Step-_1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0) ) / (_ShadeColor_Step - (_ShadeColor_Step-_1st2nd_Shades_Feather))))),Set_FinalShadowMask); // Final Color + + + //return float4(Set_BaseColor,1); + + #if USE_SHAPE_LIGHT_TYPE_0 half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); @@ -160,8 +185,14 @@ half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inp shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); } - half4 shapeLight0Modulate = shapeLight0 * _ShapeLightBlendFactors0.x; + + + float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); + float3 baseColor = surfaceData.albedo.rgb * shapeLight0 * _ShapeLightBlendFactors0.x; + + half4 shapeLight0Modulate = half4(baseColor, alpha); half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; + #else half4 shapeLight0Modulate = 0; half4 shapeLight0Additive = 0; @@ -171,9 +202,9 @@ half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inp #if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 finalOutput = color; #else - half4 finalModulate = shapeLight0Modulate + shapeLight1Modulate + shapeLight2Modulate + shapeLight3Modulate; - half4 finalAdditve = shapeLight0Additive + shapeLight1Additive + shapeLight2Additive + shapeLight3Additive; - finalOutput = _HDREmulationScale * (color * finalModulate + finalAdditve); + half4 finalModulate = shapeLight0Modulate; + half4 finalAdditve = shapeLight0Additive; + finalOutput = _HDREmulationScale * ( finalModulate + finalAdditve); #endif finalOutput.a = alpha; @@ -198,7 +229,7 @@ half4 CommonLitFragment2(Varyings input, half4 color) surfaceData.normalWS = input.normalWS; #endif - return CombinedShapeLightShared2(surfaceData, inputData); + return CombinedShapeLightShared2(surfaceData, inputData, input.uv); } From 26b7c1556aa643fbda1e0259ae54a3c5a938fd85 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 29 Oct 2025 21:13:30 +0900 Subject: [PATCH 020/290] all colors --- .../Assets/Shaders/Toon2D.shader | 396 ++++++++++-------- 1 file changed, 225 insertions(+), 171 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 7d2f9b05b..72b823605 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -1,20 +1,36 @@ -Shader "Toon2D" { - Properties { +Shader "Toon2D" +{ + Properties + { _BaseColor ("BaseColor", Color) = (1,1,1,1) _MainTex ("BaseMap", 2D) = "white" {} + + _1st_ShadeMap ("1st_ShadeMap", 2D) = "white" {} + [Toggle(_)] _Use_BaseAs1st ("Use BaseMap as 1st_ShadeMap", Float ) = 0 + _1st_ShadeColor ("1st_ShadeColor", Color) = (1,1,1,1) + [Toggle(_)] _Is_LightColor_1st_Shade ("Is_LightColor_1st_Shade", Float ) = 1 + _2nd_ShadeMap ("2nd_ShadeMap", 2D) = "white" {} + [Toggle(_)] _Use_1stAs2nd ("Use 1st_ShadeMap as 2nd_ShadeMap", Float ) = 0 + _2nd_ShadeColor ("2nd_ShadeColor", Color) = (1,1,1,1) + + + _MaskTex("Mask", 2D) = "white" {} _NormalMap("Normal Map", 2D) = "bump" {} _Unlit_Intensity ("Unlit_Intensity", Range(0, 4)) = 0 - + [Toggle(_)] _Is_Filter_LightColor ("VRChat : SceneLights HiCut_Filter", Float ) = 1 [Toggle(_)] _Is_LightColor_Base ("Is_LightColor_Base", Float ) = 1 - - [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching + + [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching } SubShader { - Tags {"Queue" = "Transparent" "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" } + Tags + { + "Queue" = "Transparent" "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" + } Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha Cull Back @@ -22,7 +38,8 @@ Shader "Toon2D" { - Stencil { + Stencil + { Ref 128 // Put this in the last bit of our stencil value for maximum compatibility with sprite mask Comp always Pass replace @@ -30,7 +47,10 @@ Shader "Toon2D" { Pass { - Tags { "LightMode" = "Universal2D" } + Tags + { + "LightMode" = "Universal2D" + } HLSLPROGRAM #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" @@ -59,204 +79,232 @@ Shader "Toon2D" { #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Lit2DCommon.hlsl" CBUFFER_START(UnityPerMaterial) - half4 _BaseColor; - float _Unlit_Intensity; - float _Is_Filter_LightColor; - float _Is_LightColor_Base; + half4 _BaseColor; + float _Unlit_Intensity; + float _Is_Filter_LightColor; + float _Is_LightColor_Base; + + float _Use_BaseAs1st; + float _Use_1stAs2nd; + + float4 _1st_ShadeColor; + float4 _2nd_ShadeColor; + + float _ShadeColor_Step; + float _1st2nd_Shades_Feather; - CBUFFER_END -//---------------------------------------------------------------------------------------------------------------------- + //---------------------------------------------------------------------------------------------------------------------- float4 _MainTex_ST; //TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex); + TEXTURE2D(_1st_ShadeMap); + TEXTURE2D(_2nd_ShadeMap); + - Varyings LitVertex(Attributes input) { return CommonLitVertex(input); } -//---------------------------------------------------------------------------------------------------------------------- - -// normal should be normalized, w=1.0 -half3 SHEvalLinearL0L1(half4 normal) -{ - half3 x; + //---------------------------------------------------------------------------------------------------------------------- - // Linear (L1) + constant (L0) polynomial terms - x.r = dot(unity_SHAr, normal); - x.g = dot(unity_SHAg, normal); - x.b = dot(unity_SHAb, normal); + // normal should be normalized, w=1.0 + half3 SHEvalLinearL0L1(half4 normal) + { + half3 x; - return x; -} + // Linear (L1) + constant (L0) polynomial terms + x.r = dot(unity_SHAr, normal); + x.g = dot(unity_SHAg, normal); + x.b = dot(unity_SHAb, normal); -// normal should be normalized, w=1.0 -half3 SHEvalLinearL2(half4 normal) -{ - half3 x1, x2; - // 4 of the quadratic (L2) polynomials - half4 vB = normal.xyzz * normal.yzzx; - x1.r = dot(unity_SHBr, vB); - x1.g = dot(unity_SHBg, vB); - x1.b = dot(unity_SHBb, vB); - - // Final (5th) quadratic (L2) polynomial - half vC = normal.x*normal.x - normal.y*normal.y; - x2 = unity_SHC.rgb * vC; - - return x1 + x2; -} - - -// normal should be normalized, w=1.0 -// output in active color space -half3 ShadeSH9(half4 normal) -{ - // Linear + constant polynomial terms - half3 res = SHEvalLinearL0L1(normal); + return x; + } - // Quadratic polynomials - res += SHEvalLinearL2(normal); + // normal should be normalized, w=1.0 + half3 SHEvalLinearL2(half4 normal) + { + half3 x1, x2; + // 4 of the quadratic (L2) polynomials + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(unity_SHBr, vB); + x1.g = dot(unity_SHBg, vB); + x1.b = dot(unity_SHBb, vB); + + // Final (5th) quadratic (L2) polynomial + half vC = normal.x * normal.x - normal.y * normal.y; + x2 = unity_SHC.rgb * vC; + + return x1 + x2; + } -# ifdef UNITY_COLORSPACE_GAMMA - res = LinearToGammaSpace(res); -# endif - return res; -} + // normal should be normalized, w=1.0 + // output in active color space + half3 ShadeSH9(half4 normal) + { + // Linear + constant polynomial terms + half3 res = SHEvalLinearL0L1(normal); + // Quadratic polynomials + res += SHEvalLinearL2(normal); -//---------------------------------------------------------------------------------------------------------------------- + # ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + # endif -half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv) -{ - #if defined(DEBUG_DISPLAY) - half4 debugColor = 0; + return res; + } - if (CanDebugOverrideOutputColor(surfaceData, inputData, debugColor)) - { - return debugColor; - } - #endif - - half alpha = surfaceData.alpha; - half4 color = half4(surfaceData.albedo, alpha); - const half4 mask = surfaceData.mask; - const half2 lightingUV = inputData.lightingUV; - - if (alpha == 0.0) - discard; - - - - - // //v.2.0.5 - // float4 _1st_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_1st_ShadeMap,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_MainTex_var,_Use_BaseAs1st); - // float3 Set_1st_ShadeColor = lerp( (_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb), ((_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_1st_Shade ); - // //v.2.0.5 - // float4 _2nd_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_1st_ShadeMap_var,_Use_1stAs2nd); - // float3 Set_2nd_ShadeColor = lerp( (_2nd_ShadeColor.rgb*_2nd_ShadeMap_var.rgb), ((_2nd_ShadeColor.rgb*_2nd_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_2nd_Shade ); - // float _HalfLambert_var = 0.5*dot(lerp( i.normalDir, normalDirection, _Is_NormalMapToBase ),lightDirection)+0.5; - // - // float4 _Set_2nd_ShadePosition_var = tex2D(_Set_2nd_ShadePosition, TRANSFORM_TEX(Set_UV0, _Set_2nd_ShadePosition)); - // float4 _Set_1st_ShadePosition_var = tex2D(_Set_1st_ShadePosition, TRANSFORM_TEX(Set_UV0, _Set_1st_ShadePosition)); - // //v.2.0.6 - // //Minmimum value is same as the Minimum Feather's value with the Minimum Step's value as threshold. - // float _SystemShadowsLevel_var = (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel > 0.001 ? (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel : 0.0001; - // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var*saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); - // // - // //Composition: 3 Basic Colors as Set_FinalBaseColor - // float3 Set_FinalBaseColor = lerp(Set_BaseColor,lerp(Set_1st_ShadeColor,Set_2nd_ShadeColor,saturate((1.0 + ( (_HalfLambert_var - (_ShadeColor_Step-_1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0) ) / (_ShadeColor_Step - (_ShadeColor_Step-_1st2nd_Shades_Feather))))),Set_FinalShadowMask); // Final Color - - - //return float4(Set_BaseColor,1); - - -#if USE_SHAPE_LIGHT_TYPE_0 - half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); - - if (any(_ShapeLightMaskFilter0)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter0) * mask + _ShapeLightInvertedFilter0 * (1 - mask); - shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); - } + //---------------------------------------------------------------------------------------------------------------------- - - float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); - float3 baseColor = surfaceData.albedo.rgb * shapeLight0 * _ShapeLightBlendFactors0.x; - - half4 shapeLight0Modulate = half4(baseColor, alpha); - half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; - -#else - half4 shapeLight0Modulate = 0; - half4 shapeLight0Additive = 0; -#endif - - half4 finalOutput; -#if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 - finalOutput = color; -#else - half4 finalModulate = shapeLight0Modulate; - half4 finalAdditve = shapeLight0Additive; - finalOutput = _HDREmulationScale * ( finalModulate + finalAdditve); -#endif - - finalOutput.a = alpha; - - return max(0, finalOutput); -} - -half4 CommonLitFragment2(Varyings input, half4 color) -{ - const half4 main = color * SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv); - const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.uv); - const half3 normalTS = UnpackNormal(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.uv)); - - SurfaceData2D surfaceData; - InputData2D inputData; - - InitializeSurfaceData(main.rgb, main.a, mask, normalTS, surfaceData); - InitializeInputData(input.uv, input.lightingUV, inputData); - -#if defined(DEBUG_DISPLAY) - SETUP_DEBUG_TEXTURE_DATA_2D_NO_TS(inputData, input.positionWS, input.positionCS, _MainTex); - surfaceData.normalWS = input.normalWS; -#endif - - return CombinedShapeLightShared2(surfaceData, inputData, input.uv); -} - - -//---------------------------------------------------------------------------------------------------------------------- - half4 LitFragment(Varyings input) : SV_Target + half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv) { + #if defined(DEBUG_DISPLAY) + half4 debugColor = 0; + + if (CanDebugOverrideOutputColor(surfaceData, inputData, debugColor)) + { + return debugColor; + } + #endif + + half alpha = surfaceData.alpha; + half4 color = half4(surfaceData.albedo, alpha); + const half4 mask = surfaceData.mask; + const half2 lightingUV = inputData.lightingUV; + + if (alpha == 0.0) + discard; + + + //return float4(Set_BaseColor,1); + + + #if USE_SHAPE_LIGHT_TYPE_0 + half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); + + if (any(_ShapeLightMaskFilter0)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter0) * mask + _ShapeLightInvertedFilter0 * (1 - + mask); + shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); + } + + float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); + float3 baseColor = surfaceData.albedo.rgb * shapeLight0 * _ShapeLightBlendFactors0.x; + + // //v.2.0.5 + float4 _1st_ShadeMap_var = lerp( + SAMPLE_TEXTURE2D(_1st_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _MainTex_var, + _Use_BaseAs1st); + float3 firstShadeColor = _1st_ShadeColor.rgb * _1st_ShadeMap_var.rgb; + + float4 _2nd_ShadeMap_var = lerp( + SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _1st_ShadeMap_var, + _Use_1stAs2nd); + float3 secondShadeColor = _2nd_ShadeColor.rgb * _2nd_ShadeMap_var.rgb; + + float _HalfLambert_var = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + + //float _HalfLambert_var = 0.5*dot(lerp( i.normalDir, normalDirection, _Is_NormalMapToBase ),lightDirection)+0.5; + // + // float4 _Set_2nd_ShadePosition_var = tex2D(_Set_2nd_ShadePosition, TRANSFORM_TEX(uv, _Set_2nd_ShadePosition)); + // float4 _Set_1st_ShadePosition_var = tex2D(_Set_1st_ShadePosition, TRANSFORM_TEX(uv, _Set_1st_ShadePosition)); + // //v.2.0.6 + // //Minmimum value is same as the Minimum Feather's value with the Minimum Step's value as threshold. + // float _SystemShadowsLevel_var = (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel > 0.001 ? (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel : 0.0001; + // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var*saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); + // // + // //Composition: 3 Basic Colors as Set_FinalBaseColor + + float4 _Set_2nd_ShadePosition_var = float4(1, 1, 1, 1); + float Set_FinalShadowMask = 1; + + float3 Set_FinalBaseColor = lerp(baseColor, lerp(firstShadeColor, secondShadeColor, + saturate( + (1.0 + ((_HalfLambert_var - (_ShadeColor_Step - _1st2nd_Shades_Feather)) * ((1.0 + - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / (_ShadeColor_Step - ( + _ShadeColor_Step - _1st2nd_Shades_Feather))))), Set_FinalShadowMask); + + + half4 shapeLight0Modulate = half4(Set_FinalBaseColor, alpha); + half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; + + #else + half4 shapeLight0Modulate = 0; + half4 shapeLight0Additive = 0; + #endif + + half4 finalOutput; + #if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 + finalOutput = color; + #else + half4 finalModulate = shapeLight0Modulate; + half4 finalAdditve = shapeLight0Additive; + finalOutput = _HDREmulationScale * (finalModulate + finalAdditve); + #endif + + finalOutput.a = alpha; + + return max(0, finalOutput); + } + + half4 CommonLitFragment2(Varyings input, half4 color) + { + const half4 main = color * SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv); + const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.uv); + const half3 normalTS = UnpackNormal(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.uv)); + + SurfaceData2D surfaceData; + InputData2D inputData; + + InitializeSurfaceData(main.rgb, main.a, mask, normalTS, surfaceData); + InitializeInputData(input.uv, input.lightingUV, inputData); + + #if defined(DEBUG_DISPLAY) + SETUP_DEBUG_TEXTURE_DATA_2D_NO_TS(inputData, input.positionWS, input.positionCS, _MainTex); + surfaceData.normalWS = input.normalWS; + #endif + + return CombinedShapeLightShared2(surfaceData, inputData, input.uv); + } + + + //---------------------------------------------------------------------------------------------------------------------- + half4 LitFragment(Varyings input) : SV_Target + { float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); float2 Set_UV0 = input.uv; - float3 mainLightColor = float3(1,1,1); + float3 mainLightColor = float3(1, 1, 1); + - // //v.2.0.5 - float3 defaultLightColor = saturate(max(half3(0.05,0.05,0.05)*_Unlit_Intensity,max(ShadeSH9(half4(0.0, 0.0, 0.0, 1.0)),ShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb)*_Unlit_Intensity)); + float3 defaultLightColor = saturate(max(half3(0.05, 0.05, 0.05) * _Unlit_Intensity, + max(ShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), + ShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * + _Unlit_Intensity)); // float3 customLightDirection = normalize(mul( GetObjectToWorldMatrix(), float4(((float3(1.0,0.0,0.0)*_Offset_X_Axis_BLD*10)+(float3(0.0,1.0,0.0)*_Offset_Y_Axis_BLD*10)+(float3(0.0,0.0,-1.0)*lerp(-1.0,1.0,_Inverse_Z_Axis_BLD))),0)).xyz); // float3 lightDirection = normalize(lerp(defaultLightDirection, mainLight.direction.xyz,any(mainLight.direction.xyz))); // lightDirection = lerp(lightDirection, customLightDirection, _Is_BLD); // //v.2.0.5: // half3 originalLightColor = mainLightColor.rgb; - float3 lightColor = lerp(max(defaultLightColor, originalLightColor), max(defaultLightColor, saturate(originalLightColor)), _Is_Filter_LightColor); + float3 lightColor = lerp(max(defaultLightColor, originalLightColor), + max(defaultLightColor, saturate(originalLightColor)), + _Is_Filter_LightColor); float3 Set_LightColor = lightColor.rgb; - + float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); - float3 Set_BaseColor = lerp( (_BaseColor.rgb*_MainTex_var.rgb), ((_BaseColor.rgb*_MainTex_var.rgb)*Set_LightColor), _Is_LightColor_Base ); + float3 Set_BaseColor = lerp((_BaseColor.rgb * _MainTex_var.rgb), + ((_BaseColor.rgb * _MainTex_var.rgb) * Set_LightColor), _Is_LightColor_Base); + - // //v.2.0.5 // float4 _1st_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_1st_ShadeMap,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_MainTex_var,_Use_BaseAs1st); // float3 Set_1st_ShadeColor = lerp( (_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb), ((_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_1st_Shade ); @@ -278,7 +326,7 @@ half4 CommonLitFragment2(Varyings input, half4 color) //return float4(Set_BaseColor,1); - + return CommonLitFragment2(input, _White); } ENDHLSL @@ -286,7 +334,10 @@ half4 CommonLitFragment2(Varyings input, half4 color) Pass { - Tags { "LightMode" = "NormalsRendering"} + Tags + { + "LightMode" = "NormalsRendering" + } HLSLPROGRAM #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" @@ -313,7 +364,7 @@ half4 CommonLitFragment2(Varyings input, half4 color) Varyings NormalsRenderingVertex(Attributes input) { - return CommonNormalsVertex(input); + return CommonNormalsVertex(input); } half4 NormalsRenderingFragment(Varyings input) : SV_Target @@ -325,7 +376,10 @@ half4 CommonLitFragment2(Varyings input, half4 color) Pass { - Tags { "LightMode" = "UniversalForward" "Queue"="Transparent" "RenderType"="Transparent"} + Tags + { + "LightMode" = "UniversalForward" "Queue"="Transparent" "RenderType"="Transparent" + } HLSLPROGRAM #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" @@ -362,4 +416,4 @@ half4 CommonLitFragment2(Varyings input, half4 color) ENDHLSL } } -} +} \ No newline at end of file From 69ce8cfa16461d22c36a8bf413d389deef29abf1 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 29 Oct 2025 21:14:11 +0900 Subject: [PATCH 021/290] reformat code --- .../Assets/Shaders/Toon2D.shader | 58 +++++++++---------- 1 file changed, 26 insertions(+), 32 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 72b823605..ef5fbcada 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -1,7 +1,5 @@ -Shader "Toon2D" -{ - Properties - { +Shader "Toon2D"{ + Properties{ _BaseColor ("BaseColor", Color) = (1,1,1,1) _MainTex ("BaseMap", 2D) = "white" {} @@ -25,10 +23,8 @@ Shader "Toon2D" [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching } - SubShader - { - Tags - { + SubShader{ + Tags{ "Queue" = "Transparent" "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" } @@ -38,17 +34,14 @@ Shader "Toon2D" - Stencil - { + Stencil{ Ref 128 // Put this in the last bit of our stencil value for maximum compatibility with sprite mask Comp always Pass replace } - Pass - { - Tags - { + Pass{ + Tags{ "LightMode" = "Universal2D" } @@ -227,10 +220,14 @@ Shader "Toon2D" float Set_FinalShadowMask = 1; float3 Set_FinalBaseColor = lerp(baseColor, lerp(firstShadeColor, secondShadeColor, - saturate( - (1.0 + ((_HalfLambert_var - (_ShadeColor_Step - _1st2nd_Shades_Feather)) * ((1.0 - - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / (_ShadeColor_Step - ( - _ShadeColor_Step - _1st2nd_Shades_Feather))))), Set_FinalShadowMask); + saturate( + (1.0 + ((_HalfLambert_var - (_ShadeColor_Step - + _1st2nd_Shades_Feather)) * ((1.0 + - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / ( + _ShadeColor_Step - ( + _ShadeColor_Step - + _1st2nd_Shades_Feather))))), + Set_FinalShadowMask); half4 shapeLight0Modulate = half4(Set_FinalBaseColor, alpha); @@ -286,9 +283,9 @@ Shader "Toon2D" // //v.2.0.5 float3 defaultLightColor = saturate(max(half3(0.05, 0.05, 0.05) * _Unlit_Intensity, - max(ShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), - ShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * - _Unlit_Intensity)); + max(ShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), + ShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * + _Unlit_Intensity)); // float3 customLightDirection = normalize(mul( GetObjectToWorldMatrix(), float4(((float3(1.0,0.0,0.0)*_Offset_X_Axis_BLD*10)+(float3(0.0,1.0,0.0)*_Offset_Y_Axis_BLD*10)+(float3(0.0,0.0,-1.0)*lerp(-1.0,1.0,_Inverse_Z_Axis_BLD))),0)).xyz); // float3 lightDirection = normalize(lerp(defaultLightDirection, mainLight.direction.xyz,any(mainLight.direction.xyz))); // lightDirection = lerp(lightDirection, customLightDirection, _Is_BLD); @@ -296,13 +293,14 @@ Shader "Toon2D" // half3 originalLightColor = mainLightColor.rgb; float3 lightColor = lerp(max(defaultLightColor, originalLightColor), - max(defaultLightColor, saturate(originalLightColor)), - _Is_Filter_LightColor); + max(defaultLightColor, saturate(originalLightColor)), + _Is_Filter_LightColor); float3 Set_LightColor = lightColor.rgb; float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); float3 Set_BaseColor = lerp((_BaseColor.rgb * _MainTex_var.rgb), - ((_BaseColor.rgb * _MainTex_var.rgb) * Set_LightColor), _Is_LightColor_Base); + ((_BaseColor.rgb * _MainTex_var.rgb) * Set_LightColor), + _Is_LightColor_Base); // //v.2.0.5 @@ -332,10 +330,8 @@ Shader "Toon2D" ENDHLSL } - Pass - { - Tags - { + Pass{ + Tags{ "LightMode" = "NormalsRendering" } @@ -374,10 +370,8 @@ Shader "Toon2D" ENDHLSL } - Pass - { - Tags - { + Pass{ + Tags{ "LightMode" = "UniversalForward" "Queue"="Transparent" "RenderType"="Transparent" } From b729deb81337d2aa68b47fd47abd5aea8abcd8ed Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 29 Oct 2025 21:18:47 +0900 Subject: [PATCH 022/290] cleanup --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index ef5fbcada..7bd2573e4 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -219,17 +219,12 @@ Shader "Toon2D"{ float4 _Set_2nd_ShadePosition_var = float4(1, 1, 1, 1); float Set_FinalShadowMask = 1; + float innerLerpOp = saturate((1.0 + ((_HalfLambert_var - (_ShadeColor_Step - _1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / ( _ShadeColor_Step - ( _ShadeColor_Step - _1st2nd_Shades_Feather)))); + float3 Set_FinalBaseColor = lerp(baseColor, lerp(firstShadeColor, secondShadeColor, - saturate( - (1.0 + ((_HalfLambert_var - (_ShadeColor_Step - - _1st2nd_Shades_Feather)) * ((1.0 - - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / ( - _ShadeColor_Step - ( - _ShadeColor_Step - - _1st2nd_Shades_Feather))))), + innerLerpOp), Set_FinalShadowMask); - half4 shapeLight0Modulate = half4(Set_FinalBaseColor, alpha); half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; From 89c1ecc6b4b7d11d028e455751cdd3327651673e Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 29 Oct 2025 21:33:09 +0900 Subject: [PATCH 023/290] 3 colors --- .../Assets/Shaders/Toon2D.shader | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 7bd2573e4..397e53ff4 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -2,24 +2,25 @@ Shader "Toon2D"{ Properties{ _BaseColor ("BaseColor", Color) = (1,1,1,1) _MainTex ("BaseMap", 2D) = "white" {} + _BaseColor_Step ("BaseColor_Step", Range(0, 1)) = 0.5 + _BaseShade_Feather ("Base/Shade_Feather", Range(0.0001, 1)) = 0.0001 _1st_ShadeMap ("1st_ShadeMap", 2D) = "white" {} [Toggle(_)] _Use_BaseAs1st ("Use BaseMap as 1st_ShadeMap", Float ) = 0 _1st_ShadeColor ("1st_ShadeColor", Color) = (1,1,1,1) - [Toggle(_)] _Is_LightColor_1st_Shade ("Is_LightColor_1st_Shade", Float ) = 1 + _2nd_ShadeMap ("2nd_ShadeMap", 2D) = "white" {} [Toggle(_)] _Use_1stAs2nd ("Use 1st_ShadeMap as 2nd_ShadeMap", Float ) = 0 _2nd_ShadeColor ("2nd_ShadeColor", Color) = (1,1,1,1) + _ShadeColor_Step ("ShadeColor_Step", Range(0, 1)) = 0 + _1st2nd_Shades_Feather ("1st/2nd_Shades_Feather", Range(0.0001, 1)) = 0.0001 _MaskTex("Mask", 2D) = "white" {} _NormalMap("Normal Map", 2D) = "bump" {} _Unlit_Intensity ("Unlit_Intensity", Range(0, 4)) = 0 - - [Toggle(_)] _Is_Filter_LightColor ("VRChat : SceneLights HiCut_Filter", Float ) = 1 - [Toggle(_)] _Is_LightColor_Base ("Is_LightColor_Base", Float ) = 1 - + [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching } @@ -74,8 +75,6 @@ Shader "Toon2D"{ CBUFFER_START(UnityPerMaterial) half4 _BaseColor; float _Unlit_Intensity; - float _Is_Filter_LightColor; - float _Is_LightColor_Base; float _Use_BaseAs1st; float _Use_1stAs2nd; @@ -83,6 +82,9 @@ Shader "Toon2D"{ float4 _1st_ShadeColor; float4 _2nd_ShadeColor; + float _BaseColor_Step; + float _BaseShade_Feather; + float _ShadeColor_Step; float _1st2nd_Shades_Feather; @@ -190,7 +192,7 @@ Shader "Toon2D"{ float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); - float3 baseColor = surfaceData.albedo.rgb * shapeLight0 * _ShapeLightBlendFactors0.x; + float3 baseColor = surfaceData.albedo.rgb; // //v.2.0.5 float4 _1st_ShadeMap_var = lerp( @@ -216,8 +218,14 @@ Shader "Toon2D"{ // // // //Composition: 3 Basic Colors as Set_FinalBaseColor + float4 _Set_1st_ShadePosition_var = float4(1, 1, 1, 1); float4 _Set_2nd_ShadePosition_var = float4(1, 1, 1, 1); - float Set_FinalShadowMask = 1; + + + float _SystemShadowsLevel_var = 0.5f; + float _Set_SystemShadowsToBase = 1.0f; + float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var*saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); + float innerLerpOp = saturate((1.0 + ((_HalfLambert_var - (_ShadeColor_Step - _1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / ( _ShadeColor_Step - ( _ShadeColor_Step - _1st2nd_Shades_Feather)))); @@ -225,6 +233,10 @@ Shader "Toon2D"{ innerLerpOp), Set_FinalShadowMask); + //test + //Set_FinalBaseColor = firstShadeColor; + + Set_FinalBaseColor = Set_FinalBaseColor * shapeLight0 * _ShapeLightBlendFactors0.x; half4 shapeLight0Modulate = half4(Set_FinalBaseColor, alpha); half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; @@ -287,15 +299,11 @@ Shader "Toon2D"{ // //v.2.0.5: // half3 originalLightColor = mainLightColor.rgb; - float3 lightColor = lerp(max(defaultLightColor, originalLightColor), - max(defaultLightColor, saturate(originalLightColor)), - _Is_Filter_LightColor); + float3 lightColor = max(defaultLightColor, saturate(originalLightColor)); float3 Set_LightColor = lightColor.rgb; float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); - float3 Set_BaseColor = lerp((_BaseColor.rgb * _MainTex_var.rgb), - ((_BaseColor.rgb * _MainTex_var.rgb) * Set_LightColor), - _Is_LightColor_Base); + float3 Set_BaseColor = ((_BaseColor.rgb * _MainTex_var.rgb) * Set_LightColor); // //v.2.0.5 From 6b487f9cd8cc5748cac9dbf7ab43740eabc0d033 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 29 Oct 2025 21:33:20 +0900 Subject: [PATCH 024/290] update material --- .../Assets/Materials/Toon2D.mat | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat index 52bd75e7b..5f079f708 100644 --- a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat @@ -12,7 +12,8 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: [] - m_InvalidKeywords: [] + m_InvalidKeywords: + - _ m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -24,6 +25,14 @@ Material: m_SavedProperties: serializedVersion: 3 m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _BaseMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -90,9 +99,12 @@ Material: m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: + - _1st2nd_Shades_Feather: 0.0001 - _AddPrecomputedVelocity: 0 - _AlphaClip: 0 - _AlphaToMask: 0 + - _BaseColor_Step: 0.161 + - _BaseShade_Feather: 0.0001 - _Blend: 0 - _BlendModePreserveSpecular: 1 - _BumpScale: 1 @@ -109,12 +121,14 @@ Material: - _Glossiness: 0 - _GlossyReflections: 0 - _Is_Filter_LightColor: 1 + - _Is_LightColor_1st_Shade: 1 - _Is_LightColor_Base: 1 - _Metallic: 0 - _OcclusionStrength: 1 - _Parallax: 0.005 - _QueueOffset: 0 - _ReceiveShadows: 1 + - _ShadeColor_Step: 0.256 - _Smoothness: 0.5 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 @@ -122,10 +136,14 @@ Material: - _SrcBlendAlpha: 1 - _Surface: 0 - _Unlit_Intensity: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 - _WorkflowMode: 1 - _XRMotionVectorsPass: 1 - _ZWrite: 1 m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeColor: {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} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} From f4f5584862bfbf1e4113dd2303d34fea378953db Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 30 Oct 2025 22:55:52 +0900 Subject: [PATCH 025/290] update scene --- Toonshader_ProjectURP/Assets/ScenesDev/test.unity | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index e637ddd99..8a98168aa 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -973,7 +973,7 @@ MonoBehaviour: m_BlendStyleIndex: 0 m_FalloffIntensity: 0.573 m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1 + m_Intensity: 1.05 m_LightVolumeIntensity: 1 m_LightVolumeEnabled: 0 m_ApplyToSortingLayers: 00000000 @@ -995,7 +995,7 @@ MonoBehaviour: m_Center: {x: 0, y: -0.00000011920929, z: 0} m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} m_PointLightInnerAngle: 38.718567 - m_PointLightOuterAngle: 112.86046 + m_PointLightOuterAngle: 112.86043 m_PointLightInnerRadius: 0 m_PointLightOuterRadius: 6.85 m_ShapeLightParametricSides: 5 @@ -1017,7 +1017,7 @@ Transform: m_GameObject: {fileID: 1873556968} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} - m_LocalPosition: {x: 0.04, y: 0.896, z: 0} + m_LocalPosition: {x: 0.04, y: 0.5, z: 0} m_LocalScale: {x: 0.33333334, y: 0.33333334, z: 0.33333334} m_ConstrainProportionsScale: 0 m_Children: [] From 5c3eb1423983e531f4a32f4b9c84f3962c5ce6fe Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 7 Nov 2025 15:04:44 +0900 Subject: [PATCH 026/290] save scene --- .../Assets/ScenesDev/test.unity | 1675 +++++++++++++++-- 1 file changed, 1544 insertions(+), 131 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index 8a98168aa..b1ae74ca8 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -225,7 +225,7 @@ Transform: m_GameObject: {fileID: 116300322} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 3.57, y: 1.23, z: -3.7} + m_LocalPosition: {x: 3.57, y: -2.13, z: 0} m_LocalScale: {x: 3, y: 3, z: 3} m_ConstrainProportionsScale: 1 m_Children: @@ -260,7 +260,7 @@ Transform: m_GameObject: {fileID: 360142871} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -8.49, y: 0, z: 0} + m_LocalPosition: {x: -17.54, y: -2.64, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -372,7 +372,7 @@ Transform: m_GameObject: {fileID: 361997359} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -10.38, y: 1.38, z: 0} + m_LocalPosition: {x: -12.9, y: -2.08, z: 0} m_LocalScale: {x: 3, y: 3, z: 3} m_ConstrainProportionsScale: 0 m_Children: @@ -489,6 +489,8 @@ Transform: - {fileID: 360142872} - {fileID: 361997360} - {fileID: 2080296074} + - {fileID: 1604474281} + - {fileID: 698815737} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &391645602 @@ -746,6 +748,161 @@ Light: m_LightUnit: 1 m_LuxAtDistance: 1 m_EnableSpotReflector: 1 +--- !u!1 &443363985 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 443363986} + - component: {fileID: 443363989} + - component: {fileID: 443363988} + - component: {fileID: 443363987} + m_Layer: 7 + m_Name: SD_unitychan_SpotLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &443363986 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443363985} + serializedVersion: 2 + m_LocalRotation: {x: 0.70693415, y: -0, z: -0, w: 0.70727944} + m_LocalPosition: {x: 3.42, y: 5.94, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1390602298} + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!1773428102 &443363987 +ParentConstraint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443363985} + m_Enabled: 1 + serializedVersion: 2 + m_Weight: 1 + m_TranslationAtRest: {x: 4.01, y: 5.94, z: 0} + m_RotationAtRest: {x: 90, y: 0, z: 0} + m_TranslationOffsets: + - {x: 0, y: 5.94, z: 0} + m_RotationOffsets: + - {x: 89.96574, y: 0, z: 0} + m_AffectTranslationX: 1 + m_AffectTranslationY: 1 + m_AffectTranslationZ: 1 + m_AffectRotationX: 1 + m_AffectRotationY: 1 + m_AffectRotationZ: 1 + m_Active: 1 + m_IsLocked: 1 + m_Sources: + - sourceTransform: {fileID: 1244320234} + weight: 1 +--- !u!114 &443363988 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443363985} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_CustomShadowLayers: 0 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 0 + m_RenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_ShadowRenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_Version: 4 + m_LightLayerMask: 1 + m_ShadowLayerMask: 1 + m_RenderingLayers: 1 + m_ShadowRenderingLayers: 1 +--- !u!108 &443363989 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443363985} + m_Enabled: 1 + serializedVersion: 12 + m_Type: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize2D: {x: 10, y: 10} + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!1 &534897189 GameObject: m_ObjectHideFlags: 0 @@ -779,6 +936,1276 @@ Transform: - {fileID: 391645606} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &698815736 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 372493292} + m_Modifications: + - target: {fileID: 1025244651238594, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1031049429299390, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1038304654105518, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1038751768196858, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1040044800356794, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1063701416513114, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1063868608222774, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1065498295618508, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1069576648996808, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1078084150985738, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1091797832412850, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1098024166760060, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1102047112770606, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1105159104447082, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1125603392952280, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1125860869633868, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1128491059852054, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1130474008640776, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1140630574250782, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1162146222940456, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1170746558143010, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1194107140697288, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1197966203967084, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1198934625214546, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1206067171589070, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1208213621900506, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1214969600266656, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1217124357004236, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1219800904870850, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1223358658578486, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1223374721408506, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1236300484350226, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1271787047284964, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1278049638797196, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1280046579228956, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1281537742100296, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1286448014453930, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1287173137530738, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1292768973908290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1292833104906710, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1307116819125582, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1307489971821996, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1321412499244326, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1323434032099006, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1326036900243284, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1328744177047542, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1329268915565002, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1350238526883678, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1350408333047334, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1359038283206806, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1369177650637978, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1376117059700300, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1388057785280880, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1406556487093126, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1407909072411612, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1408667435323488, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1415184850193686, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1419367928666846, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1436358261692382, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1443099190161700, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1462098738833496, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1466530220579554, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1474489502322402, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1484012554352254, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1503663994606306, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1505748638266464, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1505896528405314, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Name + value: SD_unitychan_humanoid_Illust_2D + objectReference: {fileID: 0} + - target: {fileID: 1505896528405314, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1513887399499058, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1522912269294054, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1525555943385534, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1535358548011682, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1549057578213852, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1565494773210628, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1573907217323908, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1580058542510638, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1584797461545012, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1585078752082954, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1588659492380392, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1602163089907470, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1602230138126072, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1615675350333256, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1617001605247478, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1618529994812702, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1621715937626580, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1630560272439572, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1630843500434854, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1640698100262648, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1646063310124850, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1659733529702970, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1661606833523374, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1665699328775098, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1673344980180398, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1675247041364914, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1682835125172212, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1694886804508302, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1706584965393338, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1720079496016812, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1720341513809680, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1722507114898672, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1722901517778440, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1723427313739648, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1726610371288012, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1737643744773396, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1740772994473930, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1740934017469314, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1746143250394490, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1757387616596722, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1765851627911212, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1767403594436446, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1771238959578864, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1779208853477212, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1802377718743004, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1804382221510298, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1806923141207916, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1814872513669390, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1821099166111286, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1821550471586244, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1821661077023726, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1833386117034816, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1847597482086218, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1848465628881516, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1849902694912136, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1871769496186142, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1873069944514380, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1873671209204896, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1876290136638650, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1879520269350040, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1894165532265948, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1921414032322446, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1934828991224172, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1944247079471848, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1945409927541026, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1949782900329542, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1952355653899426, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1960222167546662, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1968392348425146, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1972134292196834, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1975382071937512, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1985982371203012, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalScale.x + value: 3.96 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalScale.y + value: 3.96 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalScale.z + value: 3.96 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalPosition.x + value: -12.32 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_ConstrainProportionsScale + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} +--- !u!4 &698815737 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + m_PrefabInstance: {fileID: 698815736} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1244320233 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1390602298} + m_Modifications: + - target: {fileID: 1025244651238594, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1031049429299390, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1038304654105518, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1038751768196858, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1040044800356794, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1063701416513114, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1063868608222774, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1065498295618508, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1069576648996808, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1078084150985738, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1091797832412850, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1098024166760060, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1102047112770606, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1105159104447082, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1125603392952280, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1125860869633868, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1128491059852054, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1130474008640776, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1140630574250782, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1162146222940456, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1170746558143010, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1194107140697288, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1197966203967084, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1198934625214546, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1206067171589070, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1208213621900506, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1214969600266656, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1217124357004236, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1219800904870850, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1223358658578486, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1223374721408506, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1236300484350226, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1271787047284964, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1278049638797196, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1280046579228956, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1281537742100296, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1286448014453930, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1287173137530738, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1292768973908290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1292833104906710, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1307116819125582, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1307489971821996, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1321412499244326, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1323434032099006, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1326036900243284, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1328744177047542, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1329268915565002, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1350238526883678, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1350408333047334, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1359038283206806, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1369177650637978, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1376117059700300, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1388057785280880, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1406556487093126, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1407909072411612, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1408667435323488, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1415184850193686, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1419367928666846, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1436358261692382, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1443099190161700, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1462098738833496, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1466530220579554, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1474489502322402, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1484012554352254, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1503663994606306, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1505748638266464, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1505896528405314, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Name + value: SD_unitychan_humanoid_Illust + objectReference: {fileID: 0} + - target: {fileID: 1505896528405314, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1513887399499058, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1522912269294054, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1525555943385534, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1535358548011682, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1549057578213852, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1565494773210628, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1573907217323908, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1580058542510638, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1584797461545012, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1585078752082954, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1588659492380392, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1602163089907470, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1602230138126072, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1615675350333256, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1617001605247478, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1618529994812702, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1621715937626580, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1630560272439572, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1630843500434854, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1640698100262648, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1646063310124850, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1659733529702970, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1661606833523374, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1665699328775098, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1673344980180398, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1675247041364914, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1682835125172212, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1694886804508302, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1706584965393338, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1720079496016812, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1720341513809680, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1722507114898672, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1722901517778440, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1723427313739648, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1726610371288012, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1737643744773396, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1740772994473930, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1740934017469314, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1746143250394490, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1757387616596722, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1765851627911212, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1767403594436446, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1771238959578864, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1779208853477212, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1802377718743004, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1804382221510298, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1806923141207916, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1814872513669390, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1821099166111286, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1821550471586244, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1821661077023726, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1833386117034816, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1847597482086218, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1848465628881516, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1849902694912136, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1871769496186142, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1873069944514380, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1873671209204896, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1876290136638650, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1879520269350040, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1894165532265948, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1921414032322446, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1934828991224172, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1944247079471848, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1945409927541026, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1949782900329542, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1952355653899426, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1960222167546662, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1968392348425146, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1972134292196834, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1975382071937512, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1985982371203012, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalScale.x + value: 3.96 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalScale.y + value: 3.96 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalScale.z + value: 3.96 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalPosition.x + value: 3.42 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_ConstrainProportionsScale + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} +--- !u!4 &1244320234 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + m_PrefabInstance: {fileID: 1244320233} + m_PrefabAsset: {fileID: 0} --- !u!1 &1390602297 GameObject: m_ObjectHideFlags: 0 @@ -809,8 +2236,122 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 116300326} + - {fileID: 443363986} + - {fileID: 1244320234} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1604474280 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1604474281} + - component: {fileID: 1604474283} + - component: {fileID: 1604474282} + m_Layer: 6 + m_Name: SD_unitychan_2D_SpotLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1604474281 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1604474280} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 1, w: 0} + m_LocalPosition: {x: -12.32, y: 5.26, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 372493292} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} +--- !u!1773428102 &1604474282 +ParentConstraint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1604474280} + m_Enabled: 1 + serializedVersion: 2 + m_Weight: 1 + m_TranslationAtRest: {x: -12.32, y: 5.26, z: 0} + m_RotationAtRest: {x: 0, y: 0, z: 180} + m_TranslationOffsets: + - {x: 0, y: 5.26, z: 0} + m_RotationOffsets: + - {x: 0, y: 0, z: 180} + m_AffectTranslationX: 1 + m_AffectTranslationY: 1 + m_AffectTranslationZ: 1 + m_AffectRotationX: 1 + m_AffectRotationY: 1 + m_AffectRotationZ: 1 + m_Active: 1 + m_IsLocked: 1 + m_Sources: + - sourceTransform: {fileID: 698815737} + weight: 1 +--- !u!114 &1604474283 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1604474280} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.2D.Runtime::UnityEngine.Rendering.Universal.Light2D + m_ComponentVersion: 2 + m_LightType: 3 + m_BlendStyleIndex: 0 + m_FalloffIntensity: 0.573 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1.05 + m_LightVolumeIntensity: 1 + m_LightVolumeEnabled: 0 + m_ApplyToSortingLayers: 00000000 + m_LightCookieSprite: {fileID: 0} + m_DeprecatedPointLightCookieSprite: {fileID: 0} + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 + m_OverlapOperation: 0 + m_NormalMapDistance: 3 + m_NormalMapQuality: 2 + m_UseNormalMap: 0 + m_ShadowsEnabled: 1 + m_ShadowIntensity: 0.75 + m_ShadowSoftness: 0.3 + m_ShadowSoftnessFalloffIntensity: 0.5 + m_ShadowVolumeIntensityEnabled: 0 + m_ShadowVolumeIntensity: 0.75 + m_LocalBounds: + m_Center: {x: 0, y: -0.00000011920929, z: 0} + m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} + m_PointLightInnerAngle: 38.718567 + m_PointLightOuterAngle: 112.86043 + m_PointLightInnerRadius: 0 + m_PointLightOuterRadius: 6.85 + m_ShapeLightParametricSides: 5 + m_ShapeLightParametricAngleOffset: 0 + m_ShapeLightParametricRadius: 1 + m_ShapeLightFalloffSize: 0.5 + m_ShapeLightFalloffOffset: {x: 0, y: 0} + m_ShapePath: + - {x: -0.5, y: -0.5, z: 0} + - {x: 0.5, y: -0.5, z: 0} + - {x: 0.5, y: 0.5, z: 0} + - {x: -0.5, y: 0.5, z: 0} --- !u!1 &1733474739 GameObject: m_ObjectHideFlags: 0 @@ -1023,133 +2564,6 @@ Transform: m_Children: [] m_Father: {fileID: 361997360} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} ---- !u!1 &1896131351 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1896131354} - - component: {fileID: 1896131353} - - component: {fileID: 1896131352} - m_Layer: 7 - m_Name: Directional Light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!114 &1896131352 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1896131351} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData - m_UsePipelineSettings: 1 - m_AdditionalLightsShadowResolutionTier: 2 - m_CustomShadowLayers: 0 - m_LightCookieSize: {x: 1, y: 1} - m_LightCookieOffset: {x: 0, y: 0} - m_SoftShadowQuality: 0 - m_RenderingLayersMask: - serializedVersion: 0 - m_Bits: 1 - m_ShadowRenderingLayersMask: - serializedVersion: 0 - m_Bits: 1 - m_Version: 4 - m_LightLayerMask: 1 - m_ShadowLayerMask: 1 - m_RenderingLayers: 1 - m_ShadowRenderingLayers: 1 ---- !u!108 &1896131353 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1896131351} - m_Enabled: 1 - serializedVersion: 12 - m_Type: 1 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.80208 - m_CookieSize2D: {x: 10, y: 10} - m_Shadows: - m_Type: 0 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 128 - m_RenderingLayerMask: 1 - m_Lightmapping: 4 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 - m_ForceVisible: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 0 - m_LightUnit: 1 - m_LuxAtDistance: 1 - m_EnableSpotReflector: 1 ---- !u!4 &1896131354 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1896131351} - serializedVersion: 2 - m_LocalRotation: {x: 0.6262405, y: -0.25520658, z: 0.043091897, w: 0.7354153} - m_LocalPosition: {x: 3.7, y: 0, z: -11.11} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 70.577, y: -75.122, z: -50.409} --- !u!1 &2080296072 GameObject: m_ObjectHideFlags: 0 @@ -1248,5 +2662,4 @@ SceneRoots: m_Roots: - {fileID: 1390602298} - {fileID: 534897190} - - {fileID: 1896131354} - {fileID: 372493292} From 384106e1d2848527df903f6fe55f3c94b767b7fe Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 7 Nov 2025 19:33:31 +0900 Subject: [PATCH 027/290] two passes --- .../Assets/Shaders/Toon2D.shader | 98 ++++++++++++++++++- 1 file changed, 95 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 397e53ff4..c01aff5e7 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -22,6 +22,9 @@ Shader "Toon2D"{ _Unlit_Intensity ("Unlit_Intensity", Range(0, 4)) = 0 [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching + + _OutlineExtrusion("Outline Extrusion", float) = 0.02 + } SubShader{ @@ -91,7 +94,7 @@ Shader "Toon2D"{ CBUFFER_END - //---------------------------------------------------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- float4 _MainTex_ST; //TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex); @@ -104,7 +107,7 @@ Shader "Toon2D"{ return CommonLitVertex(input); } - //---------------------------------------------------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- // normal should be normalized, w=1.0 half3 SHEvalLinearL0L1(half4 normal) @@ -280,7 +283,7 @@ Shader "Toon2D"{ } - //---------------------------------------------------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- half4 LitFragment(Varyings input) : SV_Target { float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); @@ -333,6 +336,94 @@ Shader "Toon2D"{ ENDHLSL } +//---------------------------------------------------------------------------------------------------------------------- + Pass { + Name "Outline" + Tags { +// "LightMode" = "Universal2D" + } +// Cull [_SRPDefaultUnlitColMode] +// ColorMask [_SPRDefaultUnlitColorMask] +// Blend SrcAlpha OneMinusSrcAlpha +// Stencil +// { +// Ref[_StencilNo] +// Comp[_StencilComp] +// Pass[_StencilOpPass] +// Fail[_StencilOpFail] +// +// } +// + HLSLPROGRAM + #pragma target 2.0 + #pragma vertex OutlineVertex + #pragma fragment OutlineFragment + + + #pragma multi_compile _IS_OUTLINE_CLIPPING_NO _IS_OUTLINE_CLIPPING_YES + #pragma multi_compile _OUTLINE_NML _OUTLINE_POS + // Outline is implemented in UniversalToonOutline.hlsl. + // #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + // #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" + + struct Attributes + { + COMMON_2D_INPUTS + }; + + struct Varyings + { + COMMON_2D_LIT_OUTPUTS + }; + + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + float _OutlineExtrusion; + +// #ifdef UNIVERSAL_PIPELINE_CORE_INCLUDED +// #include "../../UniversalRP/Shaders/UniversalToonInput.hlsl" +// #include "../../UniversalRP/Shaders/UniversalToonHead.hlsl" +// #include "../../UniversalRP/Shaders/UniversalToonOutline.hlsl" +// #endif + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Lit2DCommon.hlsl" + + Varyings CommonLitVertex2(Attributes input) + { + Varyings o = (Varyings) 0; + UNITY_SETUP_INSTANCE_ID(input); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + + float3 newPos = input.positionOS; + + // normal extrusion technique + float3 normal = normalize(input.normal); + newPos += float3(normal) * _OutlineExtrusion; + + + o.positionCS = TransformObjectToHClip(newPos); + o.uv = input.uv; + o.lightingUV = half2(ComputeScreenPos(o.positionCS / o.positionCS.w).xy); + return o; + } + + + Varyings OutlineVertex(Attributes input) + { + + return CommonLitVertex2(input); + } + + half4 OutlineFragment(Varyings input) : SV_Target { + return float4(1,0,1,1); + } + + + ENDHLSL + } + + +//---------------------------------------------------------------------------------------------------------------------- Pass{ Tags{ "LightMode" = "NormalsRendering" @@ -412,5 +503,6 @@ Shader "Toon2D"{ } ENDHLSL } + } } \ No newline at end of file From 99a147b33d4631f67bb3427eff662224b1ade5de Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 7 Nov 2025 21:40:37 +0900 Subject: [PATCH 028/290] update toon shader --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index c01aff5e7..52b6a160b 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -415,7 +415,7 @@ Shader "Toon2D"{ } half4 OutlineFragment(Varyings input) : SV_Target { - return float4(1,0,1,1); + return float4(0,0,1,1); } From 75ea81d893e3b2f0d28fdb3e7a1fade67c7bd790 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 14 Nov 2025 20:22:49 +0900 Subject: [PATCH 029/290] add GUI --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 125 ++++++++++++++++++ .../Editor/Scripts/UnityToon3Das2DGUI.cs.meta | 2 + 2 files changed, 127 insertions(+) create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs.meta diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs new file mode 100644 index 000000000..929628978 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -0,0 +1,125 @@ +using UnityEditor; +using UnityEngine; + +class UnityToon3Das2DGUI : UnityEditor.ShaderGUI { + + + public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] props) { + + Material material = materialEditor.target as Material; + if (material == null) + return; + + FindProperties(props); + EditorGUI.BeginChangeCheck(); + GUI_BasicThreeColors(materialEditor, material); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.PropertiesChanged(); + } + } + +//---------------------------------------------------------------------------------------------------------------------- + + void GUI_BasicThreeColors(MaterialEditor materialEditor, Material material) { + materialEditor.TexturePropertySingleLine(Styles.baseColorText, mainTex, baseColor); + + if (material.HasProperty("_Color")) { + material.SetColor("_Color", material.GetColor("_BaseColor")); + } + + EditorGUI.indentLevel += 2; + bool applyTo1st = GUI_Toggle(materialEditor, material, Styles.applyTo1stShademapText, ShaderPropUse_BaseAs1st, + MaterialGetInt(material, ShaderPropUse_BaseAs1st) != 0); + EditorGUI.indentLevel -= 2; + + + if (applyTo1st) { + EditorGUI.indentLevel += 2; + materialEditor.ColorProperty(firstShadeColor, Styles.firstShadeColorText.text); + EditorGUI.indentLevel -= 2; + } + else { + materialEditor.TexturePropertySingleLine(Styles.firstShadeColorText, firstShadeMap, firstShadeColor); + } + + EditorGUI.indentLevel += 2; + bool applyTo2nd = GUI_Toggle(materialEditor, material, Styles.applyTo2ndShademapText, ShaderPropUse_1stAs2nd, MaterialGetInt(material, ShaderPropUse_1stAs2nd) != 0); + EditorGUI.indentLevel -= 2; + + + if (applyTo2nd) { + EditorGUI.indentLevel += 2; + materialEditor.ColorProperty(secondShadeColor, Styles.secondShadeColorText.text); + EditorGUI.indentLevel -= 2; + } + else { + materialEditor.TexturePropertySingleLine(Styles.secondShadeColorText, secondShadeMap, secondShadeColor); + } + } + + void FindProperties(MaterialProperty[] props) { + + mainTex = FindProperty(ShaderPropMainTex, props); + baseColor = FindProperty("_BaseColor", props); + firstShadeMap = FindProperty("_1st_ShadeMap", props); + firstShadeColor = FindProperty("_1st_ShadeColor", props); + secondShadeMap = FindProperty("_2nd_ShadeMap", props); + secondShadeColor = FindProperty("_2nd_ShadeColor", props); + + + } + + +//---------------------------------------------------------------------------------------------------------------------- + bool GUI_Toggle(MaterialEditor materialEditor, Material material, GUIContent guiContent, string prop, bool value) { + EditorGUI.BeginChangeCheck(); + bool ret = EditorGUILayout.Toggle(guiContent, value); + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(guiContent.text); + MaterialSetInt(material, prop, ret ? 1 : 0); + } + + return ret; + } + + internal static int MaterialGetInt(Material material, string prop) { + return (int)material.GetFloat(prop); + } + + internal static void MaterialSetInt(Material material, string prop, int value) { + material.SetFloat(prop, value); + } + + +//---------------------------------------------------------------------------------------------------------------------- + + + //Common constants + private static class Styles { + public static readonly GUIContent baseColorText = new GUIContent("Base Map", "Base Color : Texture(sRGB) × Color(RGB) Default:White"); + public static readonly GUIContent firstShadeColorText = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."); + public static readonly GUIContent secondShadeColorText = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."); + public static readonly GUIContent applyTo1stShademapText = new GUIContent("Apply to 1st shading map", "Apply Base map to the 1st shading map."); + + public static readonly GUIContent applyTo2ndShademapText = + new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."); + } + + internal const string ShaderPropMainTex = "_MainTex"; + internal const string ShaderPropUse_BaseAs1st = "_Use_BaseAs1st"; + internal const string ShaderPropUse_1stAs2nd = "_Use_1stAs2nd"; + + //Common properties + protected MaterialProperty mainTex = null; + protected MaterialProperty baseColor = null; + protected MaterialProperty firstShadeMap = null; + protected MaterialProperty firstShadeColor = null; + protected MaterialProperty secondShadeMap = null; + protected MaterialProperty secondShadeColor = null; + + //materialEditor.TexturePropertySingleLine(Styles.secondShadeColorText, secondShadeMap, secondShadeColor); + + +} + diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs.meta new file mode 100644 index 000000000..ce543e820 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 90970b66b10259d49ba803d27ee33afc From 1a94d4675657bad769332df5979fa788cbfc165e Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 14 Nov 2025 21:58:52 +0900 Subject: [PATCH 030/290] refactor GUI --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 181 ++++++++++++------ 1 file changed, 124 insertions(+), 57 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 929628978..5b0407791 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using UnityEditor; using UnityEngine; @@ -9,8 +10,9 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro Material material = materialEditor.target as Material; if (material == null) return; - - FindProperties(props); + + something2(props); + EditorGUI.BeginChangeCheck(); GUI_BasicThreeColors(materialEditor, material); @@ -22,104 +24,169 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro //---------------------------------------------------------------------------------------------------------------------- void GUI_BasicThreeColors(MaterialEditor materialEditor, Material material) { - materialEditor.TexturePropertySingleLine(Styles.baseColorText, mainTex, baseColor); - - if (material.HasProperty("_Color")) { - material.SetColor("_Color", material.GetColor("_BaseColor")); - } + + DrawTexturePropertySingleLineGUI(materialEditor, propertyInfos[ShaderPropMainTex]); EditorGUI.indentLevel += 2; - bool applyTo1st = GUI_Toggle(materialEditor, material, Styles.applyTo1stShademapText, ShaderPropUse_BaseAs1st, - MaterialGetInt(material, ShaderPropUse_BaseAs1st) != 0); + bool applyTo1st = DrawToggleGUI(materialEditor, material, propertyInfos[ShaderPropUse_BaseAs1st]); EditorGUI.indentLevel -= 2; - if (applyTo1st) { EditorGUI.indentLevel += 2; - materialEditor.ColorProperty(firstShadeColor, Styles.firstShadeColorText.text); + DrawColorPropertyGUI(materialEditor, propertyInfos[ShaderProp_1st_ShadeColor]); EditorGUI.indentLevel -= 2; } else { - materialEditor.TexturePropertySingleLine(Styles.firstShadeColorText, firstShadeMap, firstShadeColor); + DrawTexturePropertySingleLineGUI(materialEditor, propertyInfos[ShaderProp_1st_ShadeMap]); } EditorGUI.indentLevel += 2; - bool applyTo2nd = GUI_Toggle(materialEditor, material, Styles.applyTo2ndShademapText, ShaderPropUse_1stAs2nd, MaterialGetInt(material, ShaderPropUse_1stAs2nd) != 0); + bool applyTo2nd = DrawToggleGUI(materialEditor, material, propertyInfos[ShaderPropUse_1stAs2nd]); EditorGUI.indentLevel -= 2; if (applyTo2nd) { EditorGUI.indentLevel += 2; - materialEditor.ColorProperty(secondShadeColor, Styles.secondShadeColorText.text); + DrawColorPropertyGUI(materialEditor, propertyInfos[ShaderProp_2nd_ShadeColor]); EditorGUI.indentLevel -= 2; } else { - materialEditor.TexturePropertySingleLine(Styles.secondShadeColorText, secondShadeMap, secondShadeColor); + DrawTexturePropertySingleLineGUI(materialEditor, propertyInfos[ShaderProp_2nd_ShadeMap]); } } + + void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, something element) { + if (null!= element.extraProperty2) + materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop, element.extraProperty2.prop); + else if (null!= element.extraProperty1) + materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop); + else + materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop); + } - void FindProperties(MaterialProperty[] props) { - - mainTex = FindProperty(ShaderPropMainTex, props); - baseColor = FindProperty("_BaseColor", props); - firstShadeMap = FindProperty("_1st_ShadeMap", props); - firstShadeColor = FindProperty("_1st_ShadeColor", props); - secondShadeMap = FindProperty("_2nd_ShadeMap", props); - secondShadeColor = FindProperty("_2nd_ShadeColor", props); - + void DrawColorPropertyGUI(MaterialEditor materialEditor, something element) { + materialEditor.ColorProperty(element.mainProperty.prop, element.label.text); } - - -//---------------------------------------------------------------------------------------------------------------------- - bool GUI_Toggle(MaterialEditor materialEditor, Material material, GUIContent guiContent, string prop, bool value) { + + bool DrawToggleGUI(MaterialEditor materialEditor, Material material, something element) { EditorGUI.BeginChangeCheck(); - bool ret = EditorGUILayout.Toggle(guiContent, value); + bool ret = EditorGUILayout.Toggle(element.label, material.GetInteger(element.mainProperty.id) !=0); if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(guiContent.text); - MaterialSetInt(material, prop, ret ? 1 : 0); + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetInteger(element.mainProperty.id, ret ? 1 : 0); } return ret; } - internal static int MaterialGetInt(Material material, string prop) { - return (int)material.GetFloat(prop); + +//---------------------------------------------------------------------------------------------------------------------- + + void something2(MaterialProperty[] allProps) { + int numProperties = propertyList.Count; + for (int i = 0; i < numProperties; ++i) { + haha propInfo = propertyList[i]; + + MaterialPropertyWithID mainProp = new MaterialPropertyWithID(propInfo.mainPropertyName, allProps); + MaterialPropertyWithID extraProperty1 = null!= propInfo.extraPropertyName1 ? + new MaterialPropertyWithID(propInfo.extraPropertyName1, allProps) : null; + + MaterialPropertyWithID extraProperty2 = null!= propInfo.extraPropertyName2 ? + new MaterialPropertyWithID(propInfo.extraPropertyName2, allProps) : null; + + + something newElement10 = new something { + label = propInfo.label, + mainProperty = mainProp, + extraProperty1 = extraProperty1, + extraProperty2 = extraProperty2, + }; + + propertyInfos[propInfo.mainPropertyName.name] = newElement10; + } + + } + +//---------------------------------------------------------------------------------------------------------------------- + + class MaterialPropertyWithID { + public MaterialProperty prop; + public int id; + + public MaterialPropertyWithID(MaterialNameWithID m, MaterialProperty[] allProps) { + prop = FindProperty(m.name, allProps); id = m.id; + } } + + class something { + public GUIContent label; + public MaterialPropertyWithID mainProperty; + public MaterialPropertyWithID extraProperty1; + public MaterialPropertyWithID extraProperty2; + } + + class MaterialNameWithID { + public string name; + public int id; + public MaterialNameWithID(string s) { name = s; id = Shader.PropertyToID(s); } + } + - internal static void MaterialSetInt(Material material, string prop, int value) { - material.SetFloat(prop, value); + struct haha { + public MaterialNameWithID mainPropertyName; + + public GUIContent label; + public MaterialNameWithID extraPropertyName1; + public MaterialNameWithID extraPropertyName2; } + Dictionary propertyInfos = new Dictionary(); -//---------------------------------------------------------------------------------------------------------------------- + static List propertyList = new List() { + new haha { + mainPropertyName = new MaterialNameWithID(ShaderPropMainTex), + label = new GUIContent("Base Map", "Base Color : Texture(sRGB) × Color(RGB) Default:White"), + extraPropertyName1 = new MaterialNameWithID(ShaderProp_BaseColor), + }, + new haha { + mainPropertyName = new MaterialNameWithID(ShaderProp_1st_ShadeMap), + label = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."), + extraPropertyName1 = new MaterialNameWithID(ShaderProp_1st_ShadeColor), + }, + new haha { + mainPropertyName = new MaterialNameWithID(ShaderProp_2nd_ShadeMap), + label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), + extraPropertyName1 = new MaterialNameWithID(ShaderProp_2nd_ShadeColor) + }, + new haha { + mainPropertyName = new MaterialNameWithID(ShaderPropUse_BaseAs1st), + label = new GUIContent("Apply to 1st shading map", "Apply Base map to the 1st shading map."), + }, + new haha { + mainPropertyName = new MaterialNameWithID(ShaderPropUse_1stAs2nd), + label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), + }, + new haha { + mainPropertyName = new MaterialNameWithID(ShaderPropUse_1stAs2nd), + label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), + }, + new haha { + mainPropertyName = new MaterialNameWithID(ShaderPropUse_1stAs2nd), + label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), + }, + }; //Common constants - private static class Styles { - public static readonly GUIContent baseColorText = new GUIContent("Base Map", "Base Color : Texture(sRGB) × Color(RGB) Default:White"); - public static readonly GUIContent firstShadeColorText = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."); - public static readonly GUIContent secondShadeColorText = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."); - public static readonly GUIContent applyTo1stShademapText = new GUIContent("Apply to 1st shading map", "Apply Base map to the 1st shading map."); - - public static readonly GUIContent applyTo2ndShademapText = - new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."); - } - internal const string ShaderPropMainTex = "_MainTex"; internal const string ShaderPropUse_BaseAs1st = "_Use_BaseAs1st"; internal const string ShaderPropUse_1stAs2nd = "_Use_1stAs2nd"; - - //Common properties - protected MaterialProperty mainTex = null; - protected MaterialProperty baseColor = null; - protected MaterialProperty firstShadeMap = null; - protected MaterialProperty firstShadeColor = null; - protected MaterialProperty secondShadeMap = null; - protected MaterialProperty secondShadeColor = null; - - //materialEditor.TexturePropertySingleLine(Styles.secondShadeColorText, secondShadeMap, secondShadeColor); - + internal const string ShaderProp_BaseColor = "_BaseColor"; + internal const string ShaderProp_1st_ShadeMap = "_1st_ShadeMap"; + internal const string ShaderProp_1st_ShadeColor = "_1st_ShadeColor"; + internal const string ShaderProp_2nd_ShadeMap = "_2nd_ShadeMap"; + internal const string ShaderProp_2nd_ShadeColor = "_2nd_ShadeColor"; } From f38589dbfc71c492d5e7da940de8dda3a4dc1bef Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 14 Nov 2025 22:13:48 +0900 Subject: [PATCH 031/290] clean up code --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 126 +++++++++--------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 5b0407791..23b52c96a 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -11,10 +11,10 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro if (material == null) return; - something2(props); + InitMaterialPropertyUIElements(props); EditorGUI.BeginChangeCheck(); - GUI_BasicThreeColors(materialEditor, material); + GUI_BasicThreeColors(materialEditor, material, m_materialPropertyUIElements); if (EditorGUI.EndChangeCheck()) { materialEditor.PropertiesChanged(); @@ -23,39 +23,40 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro //---------------------------------------------------------------------------------------------------------------------- - void GUI_BasicThreeColors(MaterialEditor materialEditor, Material material) { - - DrawTexturePropertySingleLineGUI(materialEditor, propertyInfos[ShaderPropMainTex]); + static void GUI_BasicThreeColors(MaterialEditor materialEditor, Material material, + Dictionary uiElements) + { + DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderPropMainTex]); EditorGUI.indentLevel += 2; - bool applyTo1st = DrawToggleGUI(materialEditor, material, propertyInfos[ShaderPropUse_BaseAs1st]); + bool applyTo1st = DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_BaseAs1st]); EditorGUI.indentLevel -= 2; if (applyTo1st) { EditorGUI.indentLevel += 2; - DrawColorPropertyGUI(materialEditor, propertyInfos[ShaderProp_1st_ShadeColor]); + DrawColorPropertyGUI(materialEditor, uiElements[ShaderProp_1st_ShadeColor]); EditorGUI.indentLevel -= 2; } else { - DrawTexturePropertySingleLineGUI(materialEditor, propertyInfos[ShaderProp_1st_ShadeMap]); + DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_1st_ShadeMap]); } EditorGUI.indentLevel += 2; - bool applyTo2nd = DrawToggleGUI(materialEditor, material, propertyInfos[ShaderPropUse_1stAs2nd]); + bool applyTo2nd = DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_1stAs2nd]); EditorGUI.indentLevel -= 2; if (applyTo2nd) { EditorGUI.indentLevel += 2; - DrawColorPropertyGUI(materialEditor, propertyInfos[ShaderProp_2nd_ShadeColor]); + DrawColorPropertyGUI(materialEditor, uiElements[ShaderProp_2nd_ShadeColor]); EditorGUI.indentLevel -= 2; } else { - DrawTexturePropertySingleLineGUI(materialEditor, propertyInfos[ShaderProp_2nd_ShadeMap]); + DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_2nd_ShadeMap]); } } - void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, something element) { + static void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { if (null!= element.extraProperty2) materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop, element.extraProperty2.prop); else if (null!= element.extraProperty1) @@ -64,12 +65,12 @@ void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, something e materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop); } - void DrawColorPropertyGUI(MaterialEditor materialEditor, something element) { + static void DrawColorPropertyGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { materialEditor.ColorProperty(element.mainProperty.prop, element.label.text); } - bool DrawToggleGUI(MaterialEditor materialEditor, Material material, something element) { + static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { EditorGUI.BeginChangeCheck(); bool ret = EditorGUILayout.Toggle(element.label, material.GetInteger(element.mainProperty.id) !=0); if (EditorGUI.EndChangeCheck()) { @@ -83,96 +84,95 @@ bool DrawToggleGUI(MaterialEditor materialEditor, Material material, something e //---------------------------------------------------------------------------------------------------------------------- - void something2(MaterialProperty[] allProps) { - int numProperties = propertyList.Count; + void InitMaterialPropertyUIElements(MaterialProperty[] allProps) { + int numProperties = m_materialUIElements.Count; for (int i = 0; i < numProperties; ++i) { - haha propInfo = propertyList[i]; + MaterialUIElement propInfo = m_materialUIElements[i]; - MaterialPropertyWithID mainProp = new MaterialPropertyWithID(propInfo.mainPropertyName, allProps); - MaterialPropertyWithID extraProperty1 = null!= propInfo.extraPropertyName1 ? - new MaterialPropertyWithID(propInfo.extraPropertyName1, allProps) : null; + MaterialPropertyInfo mainProp = new MaterialPropertyInfo(propInfo.mainPropertyName, allProps); + MaterialPropertyInfo extraProperty1 = null!= propInfo.extraPropertyName1 ? + new MaterialPropertyInfo(propInfo.extraPropertyName1, allProps) : null; - MaterialPropertyWithID extraProperty2 = null!= propInfo.extraPropertyName2 ? - new MaterialPropertyWithID(propInfo.extraPropertyName2, allProps) : null; + MaterialPropertyInfo extraProperty2 = null!= propInfo.extraPropertyName2 ? + new MaterialPropertyInfo(propInfo.extraPropertyName2, allProps) : null; - something newElement10 = new something { + MaterialPropertyUIElement newElement10 = new MaterialPropertyUIElement { label = propInfo.label, mainProperty = mainProp, extraProperty1 = extraProperty1, extraProperty2 = extraProperty2, }; - propertyInfos[propInfo.mainPropertyName.name] = newElement10; + m_materialPropertyUIElements[propInfo.mainPropertyName.name] = newElement10; } } //---------------------------------------------------------------------------------------------------------------------- - class MaterialPropertyWithID { - public MaterialProperty prop; - public int id; + class MaterialPropertyInfo { + public readonly MaterialProperty prop; + public readonly int id; - public MaterialPropertyWithID(MaterialNameWithID m, MaterialProperty[] allProps) { - prop = FindProperty(m.name, allProps); id = m.id; + public MaterialPropertyInfo(MaterialName m, MaterialProperty[] allProps) { + prop = FindProperty(m.name, allProps); id = m.nameID; } } - class something { + class MaterialPropertyUIElement { public GUIContent label; - public MaterialPropertyWithID mainProperty; - public MaterialPropertyWithID extraProperty1; - public MaterialPropertyWithID extraProperty2; + public MaterialPropertyInfo mainProperty; + public MaterialPropertyInfo extraProperty1; + public MaterialPropertyInfo extraProperty2; } - class MaterialNameWithID { - public string name; - public int id; - public MaterialNameWithID(string s) { name = s; id = Shader.PropertyToID(s); } + class MaterialName { + public readonly string name; + public readonly int nameID; + public MaterialName(string s) { name = s; nameID = Shader.PropertyToID(s); } } - struct haha { - public MaterialNameWithID mainPropertyName; - + struct MaterialUIElement { public GUIContent label; - public MaterialNameWithID extraPropertyName1; - public MaterialNameWithID extraPropertyName2; + public MaterialName mainPropertyName; + public MaterialName extraPropertyName1; + public MaterialName extraPropertyName2; } - - Dictionary propertyInfos = new Dictionary(); - - static List propertyList = new List() { - new haha { - mainPropertyName = new MaterialNameWithID(ShaderPropMainTex), + + private readonly Dictionary m_materialPropertyUIElements = new Dictionary(); + + private static readonly List m_materialUIElements = new List() { + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropMainTex), label = new GUIContent("Base Map", "Base Color : Texture(sRGB) × Color(RGB) Default:White"), - extraPropertyName1 = new MaterialNameWithID(ShaderProp_BaseColor), + extraPropertyName1 = new MaterialName(ShaderProp_BaseColor), }, - new haha { - mainPropertyName = new MaterialNameWithID(ShaderProp_1st_ShadeMap), + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_1st_ShadeMap), label = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."), - extraPropertyName1 = new MaterialNameWithID(ShaderProp_1st_ShadeColor), + extraPropertyName1 = new MaterialName(ShaderProp_1st_ShadeColor), }, - new haha { - mainPropertyName = new MaterialNameWithID(ShaderProp_2nd_ShadeMap), + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_2nd_ShadeMap), label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), - extraPropertyName1 = new MaterialNameWithID(ShaderProp_2nd_ShadeColor) + extraPropertyName1 = new MaterialName(ShaderProp_2nd_ShadeColor) }, - new haha { - mainPropertyName = new MaterialNameWithID(ShaderPropUse_BaseAs1st), + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUse_BaseAs1st), label = new GUIContent("Apply to 1st shading map", "Apply Base map to the 1st shading map."), }, - new haha { - mainPropertyName = new MaterialNameWithID(ShaderPropUse_1stAs2nd), + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUse_1stAs2nd), label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), }, - new haha { - mainPropertyName = new MaterialNameWithID(ShaderPropUse_1stAs2nd), + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUse_1stAs2nd), label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), }, - new haha { - mainPropertyName = new MaterialNameWithID(ShaderPropUse_1stAs2nd), + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUse_1stAs2nd), label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), }, }; From 384e5939e3c23497a8ba048360960a86a4acff4e Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 14 Nov 2025 22:24:09 +0900 Subject: [PATCH 032/290] separate classes --- .../Assets/Editor/Scripts/MaterialName.cs | 8 ++++ .../Editor/Scripts/MaterialName.cs.meta | 2 + .../Editor/Scripts/MaterialPropertyInfo.cs | 7 ++++ .../Scripts/MaterialPropertyInfo.cs.meta | 2 + .../Scripts/MaterialPropertyUIElement.cs | 10 +++++ .../Scripts/MaterialPropertyUIElement.cs.meta | 2 + .../Editor/Scripts/MaterialUIElement.cs | 9 +++++ .../Editor/Scripts/MaterialUIElement.cs.meta | 2 + .../Editor/Scripts/UnityToon3Das2DGUI.cs | 39 +++++-------------- 9 files changed, 51 insertions(+), 30 deletions(-) create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs.meta create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs.meta create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs.meta create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs.meta diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs new file mode 100644 index 000000000..1e94c2866 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +internal class MaterialName { + internal readonly string name; + internal readonly int nameID; + internal MaterialName(string s) { name = s; nameID = Shader.PropertyToID(s); } +} + diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs.meta new file mode 100644 index 000000000..30a5deef4 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0428cf2e3aaf4c54ba04d9e9949d9cc7 diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs new file mode 100644 index 000000000..953cbd63c --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs @@ -0,0 +1,7 @@ +using UnityEditor; + +internal class MaterialPropertyInfo { + internal MaterialProperty prop; + internal int id; +} + diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs.meta new file mode 100644 index 000000000..a7c43105c --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a233b827442dc9d4fada0418da91533a diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs new file mode 100644 index 000000000..c4973aaea --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs @@ -0,0 +1,10 @@ + +using UnityEngine; + +internal class MaterialPropertyUIElement { + internal GUIContent label; + internal MaterialPropertyInfo mainProperty; + internal MaterialPropertyInfo extraProperty1; + internal MaterialPropertyInfo extraProperty2; +} + diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs.meta new file mode 100644 index 000000000..516a4595b --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0926110c81ecaf64a877cafc3ae63176 diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs new file mode 100644 index 000000000..336294798 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs @@ -0,0 +1,9 @@ +using UnityEngine; + +internal class MaterialUIElement { + internal GUIContent label; + internal MaterialName mainPropertyName; + internal MaterialName extraPropertyName1; + internal MaterialName extraPropertyName2; +} + diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs.meta new file mode 100644 index 000000000..e76c14724 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 66ff40605a2055e4cab580db1e179d1b diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 23b52c96a..e35924a75 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -89,12 +89,12 @@ void InitMaterialPropertyUIElements(MaterialProperty[] allProps) { for (int i = 0; i < numProperties; ++i) { MaterialUIElement propInfo = m_materialUIElements[i]; - MaterialPropertyInfo mainProp = new MaterialPropertyInfo(propInfo.mainPropertyName, allProps); + MaterialPropertyInfo mainProp = MaterialNameToPropertyInfo(propInfo.mainPropertyName, allProps); MaterialPropertyInfo extraProperty1 = null!= propInfo.extraPropertyName1 ? - new MaterialPropertyInfo(propInfo.extraPropertyName1, allProps) : null; + MaterialNameToPropertyInfo(propInfo.extraPropertyName1, allProps) : null; MaterialPropertyInfo extraProperty2 = null!= propInfo.extraPropertyName2 ? - new MaterialPropertyInfo(propInfo.extraPropertyName2, allProps) : null; + MaterialNameToPropertyInfo(propInfo.extraPropertyName2, allProps) : null; MaterialPropertyUIElement newElement10 = new MaterialPropertyUIElement { @@ -111,35 +111,14 @@ void InitMaterialPropertyUIElements(MaterialProperty[] allProps) { //---------------------------------------------------------------------------------------------------------------------- - class MaterialPropertyInfo { - public readonly MaterialProperty prop; - public readonly int id; - - public MaterialPropertyInfo(MaterialName m, MaterialProperty[] allProps) { - prop = FindProperty(m.name, allProps); id = m.nameID; - } + MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty[] allProps) { + MaterialPropertyInfo info = new MaterialPropertyInfo(); + info.prop = FindProperty(m.name, allProps); + info.id = m.nameID; + return info; } - class MaterialPropertyUIElement { - public GUIContent label; - public MaterialPropertyInfo mainProperty; - public MaterialPropertyInfo extraProperty1; - public MaterialPropertyInfo extraProperty2; - } - - class MaterialName { - public readonly string name; - public readonly int nameID; - public MaterialName(string s) { name = s; nameID = Shader.PropertyToID(s); } - } - - - struct MaterialUIElement { - public GUIContent label; - public MaterialName mainPropertyName; - public MaterialName extraPropertyName1; - public MaterialName extraPropertyName2; - } +//---------------------------------------------------------------------------------------------------------------------- private readonly Dictionary m_materialPropertyUIElements = new Dictionary(); From b58d687801e6e1d9e6e9bdb74da344822e88664b Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 14 Nov 2025 22:30:31 +0900 Subject: [PATCH 033/290] add code to enable/disable outline --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 12 ++++++++++++ .../Assets/Shaders/Toon2D.shader | 17 ++++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index e35924a75..56fcf5c88 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -15,6 +15,18 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro EditorGUI.BeginChangeCheck(); GUI_BasicThreeColors(materialEditor, material, m_materialPropertyUIElements); + + //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. + string lightModeName = "SRPDefaultUnlit"; + bool enabled = material.GetShaderPassEnabled(lightModeName); + EditorGUI.BeginChangeCheck(); + bool newEnabled = EditorGUILayout.Toggle("Outline", enabled); + if (EditorGUI.EndChangeCheck()) + { + material.SetShaderPassEnabled(lightModeName, newEnabled); + EditorUtility.SetDirty(material); + } + if (EditorGUI.EndChangeCheck()) { materialEditor.PropertiesChanged(); diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 52b6a160b..21b80cef9 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -6,11 +6,11 @@ Shader "Toon2D"{ _BaseShade_Feather ("Base/Shade_Feather", Range(0.0001, 1)) = 0.0001 _1st_ShadeMap ("1st_ShadeMap", 2D) = "white" {} - [Toggle(_)] _Use_BaseAs1st ("Use BaseMap as 1st_ShadeMap", Float ) = 0 + [Toggle(_)] _Use_BaseAs1st ("Use BaseMap as 1st_ShadeMap", Integer ) = 0 _1st_ShadeColor ("1st_ShadeColor", Color) = (1,1,1,1) _2nd_ShadeMap ("2nd_ShadeMap", 2D) = "white" {} - [Toggle(_)] _Use_1stAs2nd ("Use 1st_ShadeMap as 2nd_ShadeMap", Float ) = 0 + [Toggle(_)] _Use_1stAs2nd ("Use 1st_ShadeMap as 2nd_ShadeMap", Integer ) = 0 _2nd_ShadeColor ("2nd_ShadeColor", Color) = (1,1,1,1) _ShadeColor_Step ("ShadeColor_Step", Range(0, 1)) = 0 @@ -79,8 +79,8 @@ Shader "Toon2D"{ half4 _BaseColor; float _Unlit_Intensity; - float _Use_BaseAs1st; - float _Use_1stAs2nd; + int _Use_BaseAs1st; + int _Use_1stAs2nd; float4 _1st_ShadeColor; float4 _2nd_ShadeColor; @@ -340,7 +340,7 @@ Shader "Toon2D"{ Pass { Name "Outline" Tags { -// "LightMode" = "Universal2D" + "LightMode" = "SRPDefaultUnlit" } // Cull [_SRPDefaultUnlitColMode] // ColorMask [_SPRDefaultUnlitColorMask] @@ -353,7 +353,7 @@ Shader "Toon2D"{ // Fail[_StencilOpFail] // // } -// + HLSLPROGRAM #pragma target 2.0 #pragma vertex OutlineVertex @@ -395,7 +395,7 @@ Shader "Toon2D"{ float3 newPos = input.positionOS; - + newPos.x += 0.1; // normal extrusion technique float3 normal = normalize(input.normal); newPos += float3(normal) * _OutlineExtrusion; @@ -505,4 +505,7 @@ Shader "Toon2D"{ } } + + CustomEditor "UnityToon3Das2DGUI" + } \ No newline at end of file From 42a7d66f01f6b4cd4ec472ea0fc7b960a8828cb7 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 14 Nov 2025 22:30:47 +0900 Subject: [PATCH 034/290] update materials --- .../Assets/Materials/SphereAs2D.mat | 168 ++++++++++++++++++ .../Assets/Materials/SphereAs2D.mat.meta | 8 + .../Assets/Materials/Toon2D.mat | 12 +- 3 files changed, 183 insertions(+), 5 deletions(-) create mode 100644 Toonshader_ProjectURP/Assets/Materials/SphereAs2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/SphereAs2D.mat.meta diff --git a/Toonshader_ProjectURP/Assets/Materials/SphereAs2D.mat b/Toonshader_ProjectURP/Assets/Materials/SphereAs2D.mat new file mode 100644 index 000000000..4c7b98f16 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/SphereAs2D.mat @@ -0,0 +1,168 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SphereAs2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + m_Floats: + - _1st2nd_Shades_Feather: 0.0001 + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _BaseColor_Step: 0.161 + - _BaseShade_Feather: 0.0001 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Is_Filter_LightColor: 1 + - _Is_LightColor_1st_Shade: 1 + - _Is_LightColor_Base: 1 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _OutlineExtrusion: 0.02 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _ShadeColor_Step: 0.256 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _Unlit_Intensity: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _1st_ShadeColor: {r: 0.8490566, g: 0.120149404, b: 0.120149404, a: 1} + - _2nd_ShadeColor: {r: 0, g: 0, b: 0, a: 1} + - _BaseColor: {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} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &5791580664690647399 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 diff --git a/Toonshader_ProjectURP/Assets/Materials/SphereAs2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/SphereAs2D.mat.meta new file mode 100644 index 000000000..0dee3e071 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/SphereAs2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d76793af01b01074ca9aa1a0f51d3875 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat index 5f079f708..214010db1 100644 --- a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat @@ -12,8 +12,7 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: [] - m_InvalidKeywords: - - _ + m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -97,7 +96,9 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - m_Ints: [] + m_Ints: + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.0001 - _AddPrecomputedVelocity: 0 @@ -125,6 +126,7 @@ Material: - _Is_LightColor_Base: 1 - _Metallic: 0 - _OcclusionStrength: 1 + - _OutlineExtrusion: 0.02 - _Parallax: 0.005 - _QueueOffset: 0 - _ReceiveShadows: 1 @@ -142,8 +144,8 @@ Material: - _XRMotionVectorsPass: 1 - _ZWrite: 1 m_Colors: - - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _1st_ShadeColor: {r: 0.8490566, g: 0.120149404, b: 0.120149404, a: 1} + - _2nd_ShadeColor: {r: 0, g: 0, b: 0, a: 1} - _BaseColor: {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} From 5969798d8033042e88b6035c54d39f33537b5023 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 14 Nov 2025 22:30:55 +0900 Subject: [PATCH 035/290] add scene --- .../Assets/ScenesDev/Test2D.unity | 504 ++++++++++++++++++ .../Assets/ScenesDev/Test2D.unity.meta | 7 + 2 files changed, 511 insertions(+) create mode 100644 Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity create mode 100644 Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity.meta diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity b/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity new file mode 100644 index 000000000..7e1f7ec2b --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity @@ -0,0 +1,504 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &203844586 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 203844589} + - component: {fileID: 203844588} + - component: {fileID: 203844587} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &203844587 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203844586} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_CustomShadowLayers: 0 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 0 + m_RenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_ShadowRenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_Version: 4 + m_LightLayerMask: 1 + m_ShadowLayerMask: 1 + m_RenderingLayers: 1 + m_ShadowRenderingLayers: 1 +--- !u!108 &203844588 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203844586} + m_Enabled: 1 + serializedVersion: 12 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize2D: {x: 10, y: 10} + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &203844589 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203844586} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &961739749 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 961739753} + - component: {fileID: 961739752} + - component: {fileID: 961739751} + - component: {fileID: 961739750} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &961739750 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 961739749} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 + m_Version: 2 +--- !u!81 &961739751 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 961739749} + m_Enabled: 1 +--- !u!20 &961739752 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 961739749} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &961739753 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 961739749} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1043487611 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1043487615} + - component: {fileID: 1043487614} + - component: {fileID: 1043487613} + - component: {fileID: 1043487612} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!135 &1043487612 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043487611} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1043487613 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043487611} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 793b4e578451ec94bb365b36ac119c22, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1043487614 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043487611} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1043487615 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043487611} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.52189, y: 0, z: 11.20516} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 961739753} + - {fileID: 203844589} + - {fileID: 1043487615} diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity.meta b/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity.meta new file mode 100644 index 000000000..497bef513 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0e2d7af2fdb9c364c9b2d5750cefc433 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From f98146d769fab7ab6601651ee5177addaa05571f Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 14 Nov 2025 22:36:45 +0900 Subject: [PATCH 036/290] update scene --- Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity b/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity index 7e1f7ec2b..eece1ae19 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity @@ -448,7 +448,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: 793b4e578451ec94bb365b36ac119c22, type: 2} + - {fileID: 2100000, guid: d76793af01b01074ca9aa1a0f51d3875, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 From aded13fd39a0f9805a3ec6a54a1992b5ecfa2a49 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 17 Nov 2025 14:57:21 +0900 Subject: [PATCH 037/290] add EnumUtility --- .../Assets/ScriptsDev/EnumUtility.cs | 22 +++++++++++++++++++ .../Assets/ScriptsDev/EnumUtility.cs.meta | 2 ++ 2 files changed, 24 insertions(+) create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs.meta diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs new file mode 100644 index 000000000..5a1e9ab09 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs @@ -0,0 +1,22 @@ + +using System; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; + +internal static class EnumUtility { + internal static List ToInspectorNames(Type t) { + List ret = new List(); + foreach (MemberInfo mi in t.GetMembers( BindingFlags.Static | BindingFlags.Public)) { + InspectorNameAttribute inspectorNameAttribute = (InspectorNameAttribute) Attribute.GetCustomAttribute(mi, typeof(InspectorNameAttribute)); + if (null == inspectorNameAttribute) { + ret.Add(new GUIContent(mi.Name)); + continue; + } + + ret.Add(new GUIContent(inspectorNameAttribute.displayName)); + } + + return ret; + } +} diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs.meta new file mode 100644 index 000000000..cb73a5ca9 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 05528202f03325348a70db7be3aa1271 From 4805208f149dc94e5bdd979a5bb492fa959d99a1 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 17 Nov 2025 15:08:57 +0900 Subject: [PATCH 038/290] move and improve EnumEtility --- .../Assets/Editor/Scripts/Utilities.meta | 8 ++++ .../Editor/Scripts/Utilities/EnumUtility.cs | 37 +++++++++++++++++++ .../Scripts/Utilities}/EnumUtility.cs.meta | 0 .../Assets/ScriptsDev/EnumUtility.cs | 22 ----------- 4 files changed, 45 insertions(+), 22 deletions(-) create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities.meta create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs rename Toonshader_ProjectURP/Assets/{ScriptsDev => Editor/Scripts/Utilities}/EnumUtility.cs.meta (100%) delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities.meta new file mode 100644 index 000000000..c05e4929b --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 090af0a94f53c7a4fb6cdf6254373deb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs new file mode 100644 index 000000000..49a7018da --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs @@ -0,0 +1,37 @@ + +using System; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; + +internal static class EnumUtility { + internal static GUIContent[] ToInspectorNamesAsGUIContent(Type t) { + MemberInfo[] members = t.GetMembers(BindingFlags.Static | BindingFlags.Public); + + int numMembers = members.Length; + GUIContent[] ret = new GUIContent[numMembers]; + for (int i = 0; i < numMembers; i++) { + InspectorNameAttribute inspectorNameAttribute = (InspectorNameAttribute) Attribute.GetCustomAttribute( + members[i], typeof(InspectorNameAttribute)); + if (inspectorNameAttribute == null) { + ret[i] = new GUIContent(members[i].Name); + } else { + ret[i] = new GUIContent(inspectorNameAttribute.displayName); + } + } + return ret; + } + + internal static int[] ToIndices(Type t) { + + MemberInfo[] members = t.GetMembers(BindingFlags.Static | BindingFlags.Public); + int numMembers = members.Length; + int[] indices = new int[numMembers]; + for (int i = 0; i < numMembers; ++i) { + indices[i] = i; + } + return indices; + + } + +} diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs.meta similarity index 100% rename from Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs.meta rename to Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs.meta diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs deleted file mode 100644 index 5a1e9ab09..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs +++ /dev/null @@ -1,22 +0,0 @@ - -using System; -using System.Collections.Generic; -using System.Reflection; -using UnityEngine; - -internal static class EnumUtility { - internal static List ToInspectorNames(Type t) { - List ret = new List(); - foreach (MemberInfo mi in t.GetMembers( BindingFlags.Static | BindingFlags.Public)) { - InspectorNameAttribute inspectorNameAttribute = (InspectorNameAttribute) Attribute.GetCustomAttribute(mi, typeof(InspectorNameAttribute)); - if (null == inspectorNameAttribute) { - ret.Add(new GUIContent(mi.Name)); - continue; - } - - ret.Add(new GUIContent(inspectorNameAttribute.displayName)); - } - - return ret; - } -} From 08fe2161e20337bb8c83bff3daf23a5080ff899b Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 17 Nov 2025 15:59:27 +0900 Subject: [PATCH 039/290] add static helper functions --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 56fcf5c88..036587a37 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -92,8 +92,50 @@ static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, Mate return ret; } - + static float DrawFloatFieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + + float ret = material.GetFloat(element.mainProperty.id); + EditorGUI.BeginChangeCheck(); + ret = EditorGUILayout.FloatField(element.label, ret); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetFloat(element.mainProperty.id, ret); + } + return ret; + } + + static Color DrawColorFieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + + Color ret = material.GetColor(element.mainProperty.id); + EditorGUI.BeginChangeCheck(); + ret = EditorGUILayout.ColorField(element.label, ret); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetColor(element.mainProperty.id, ret); + } + return ret; + } + + //Return the index + static int DrawIntPopupGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element, + GUIContent[] displayedOptions, int[] optionValues) + { + int propValue = material.GetInteger(element.mainProperty.id); + + EditorGUI.BeginChangeCheck(); + int ret = EditorGUILayout.IntPopup(element.label, propValue, displayedOptions, optionValues); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetInteger(element.mainProperty.id, ret); + } + + return ret; + } + //---------------------------------------------------------------------------------------------------------------------- void InitMaterialPropertyUIElements(MaterialProperty[] allProps) { From dbba8482597a45999ab0bc198555c01314ace865 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 17 Nov 2025 16:00:12 +0900 Subject: [PATCH 040/290] register uiElements --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 81 +++++++++++++++++-- 1 file changed, 75 insertions(+), 6 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 036587a37..e97d1d85c 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -200,17 +200,63 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty mainPropertyName = new MaterialName(ShaderPropUse_1stAs2nd), label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), }, + + //Outline Start new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUse_1stAs2nd), - label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), + mainPropertyName = new MaterialName(ShaderProp_OutlineWidth), + label = new GUIContent("Outline Width", + "The width of the outline."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUse_1stAs2nd), - label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), + mainPropertyName = new MaterialName(ShaderProp_OutlineWidthMap), + label = new GUIContent("Outline Width Map", + "Outline Width Map (grayscale, linear): White = full width, Black = 0 width."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_OutlineColor), + label = new GUIContent("Outline Color", + "The color of outline."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_Outline_BlendBaseColor), + label = new GUIContent("Blend Base Color to Outline", + "Blend base color to outline color."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_OutlineOffsetZ), + label = new GUIContent("Z Offset", + "Offsets the outline in the depth (Z) direction of the camera."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_OutlineNear), + label = new GUIContent("Near", + "Nearest distance for maximum outline width."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_OutlineFar), + label = new GUIContent("Far", + "Furthest distance where outline fades to zero width."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_OutlineMode), + label = new GUIContent("Outline Mode", + "Specifies how the outline is generated."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_Outline_UseCustomNormalMap), + label = new GUIContent("Use Custom Normal Map", + "Use a custom normal map for outline."), + }, + + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_Outline_CustomNormalMap), + label = new GUIContent("Custom Normal Map", + "Custom normal map (linear) for outline. "), }, + //Outline End + }; - - + //Common constants internal const string ShaderPropMainTex = "_MainTex"; internal const string ShaderPropUse_BaseAs1st = "_Use_BaseAs1st"; @@ -221,5 +267,28 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string ShaderProp_2nd_ShadeMap = "_2nd_ShadeMap"; internal const string ShaderProp_2nd_ShadeColor = "_2nd_ShadeColor"; + internal const string ShaderProp_OutlineWidthMap = "_OutlineSampler"; + internal const string ShaderProp_OutlineWidth = "_OutlineWidth"; + internal const string ShaderProp_OutlineColor = "_OutlineColor"; + internal const string ShaderProp_Outline_BlendBaseColor = "_Outline_BlendBaseColor"; + internal const string ShaderProp_OutlineOffsetZ = "_OutlineOffsetZ"; + internal const string ShaderProp_OutlineNear = "_OutlineNear"; + internal const string ShaderProp_OutlineFar = "_OutlineFar"; + internal const string ShaderProp_OutlineMode = "_OutlineMode"; + + internal const string ShaderProp_Outline_UseCustomNormalMap = "_Outline_UseCustomNormalMap"; + internal const string ShaderProp_Outline_CustomNormalMap = "_Outline_CustomNormalMap"; + + + internal enum OutlineMode { + NormalDirection, + PositionScaling + } + + private static readonly GUIContent[] m_outlineModeEnums= EnumUtility.ToInspectorNamesAsGUIContent(typeof(OutlineMode)); + private static readonly int[] m_outlineModeIndices = EnumUtility.ToIndices(typeof(OutlineMode)); + + bool m_outlineFoldout = false; + } From a3099bbf9676a6370145eb3925ed6b9b976b334d Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 17 Nov 2025 16:00:33 +0900 Subject: [PATCH 041/290] minor --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index e97d1d85c..d99140a03 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -79,7 +79,6 @@ static void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, Mate static void DrawColorPropertyGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { materialEditor.ColorProperty(element.mainProperty.prop, element.label.text); - } static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { @@ -179,7 +178,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty private static readonly List m_materialUIElements = new List() { new MaterialUIElement { mainPropertyName = new MaterialName(ShaderPropMainTex), - label = new GUIContent("Base Map", "Base Color : Texture(sRGB) × Color(RGB) Default:White"), + label = new GUIContent("Base Map", "Base Color : Texture(sRGB) × Color(RGB)."), extraPropertyName1 = new MaterialName(ShaderProp_BaseColor), }, new MaterialUIElement { From 2e5875191cccdb2d2a536da07c84c90932ed5115 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 17 Nov 2025 16:13:32 +0900 Subject: [PATCH 042/290] Draw outline controls --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 102 ++++++++++++++++-- .../Assets/Shaders/Toon2D.shader | 17 +++ 2 files changed, 113 insertions(+), 6 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index d99140a03..73097bb13 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -25,13 +25,101 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro { material.SetShaderPassEnabled(lightModeName, newEnabled); EditorUtility.SetDirty(material); - } + } + + DrawOutlineGUI(materialEditor, material, m_materialPropertyUIElements); if (EditorGUI.EndChangeCheck()) { materialEditor.PropertiesChanged(); } } + + + void DrawOutlineGUI(MaterialEditor materialEditor, Material material, + Dictionary uiElements) + { + const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; + bool isOutlineEnabled = material.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); + + EditorGUI.BeginChangeCheck(); +// isOutlineEnabled = EditorGUILayout.Toggle(kOutline, isOutlineEnabled); + +// Get a horizontal rect for all controls + GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); + Rect lineRect = EditorGUILayout.GetControlRect(false, 16); + +// Calculate rects for each control + Rect foldoutRect = new Rect(lineRect.x, lineRect.y, 16, lineRect.height); + Rect toggleRect = new Rect(foldoutRect.xMax, lineRect.y, 16, lineRect.height); + Rect labelRect = new Rect(toggleRect.xMax + 2, lineRect.y, lineRect.width - 34, lineRect.height); + + m_outlineFoldout = EditorGUI.Foldout(foldoutRect, m_outlineFoldout, GUIContent.none, true, foldoutStyle); + isOutlineEnabled = EditorGUI.Toggle(toggleRect, isOutlineEnabled); + EditorGUI.LabelField(labelRect, "Outline"); + + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo("Outline"); + material.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); + } + + //Outline Settings + EditorGUI.BeginDisabledGroup(!isOutlineEnabled); + + int outlineMode = DrawIntPopupGUI(materialEditor, material, uiElements[ShaderProp_OutlineMode], + m_outlineModeEnums, m_outlineModeIndices); + + const string OUTLINE_NORMAL_KEYWORD = "_OUTLINE_NML";; + const string OUTLINE_POSITION_KEYWORD = "_OUTLINE_POS"; + + switch (outlineMode) { + case (int) OutlineMode.NormalDirection: + material.EnableKeyword(OUTLINE_NORMAL_KEYWORD); + material.DisableKeyword(OUTLINE_POSITION_KEYWORD); + break; + case (int) OutlineMode.PositionScaling: + material.EnableKeyword(OUTLINE_POSITION_KEYWORD); + material.DisableKeyword(OUTLINE_NORMAL_KEYWORD); + break; + } + + + EditorGUI.BeginDisabledGroup(outlineMode != (int) OutlineMode.NormalDirection); + { + bool useCustom = DrawToggleGUI(materialEditor, material, uiElements[ShaderProp_Outline_UseCustomNormalMap]); + EditorGUI.BeginDisabledGroup(!useCustom); + DrawTexturePropertySingleLineGUI(materialEditor,uiElements[ShaderProp_Outline_CustomNormalMap]); + EditorGUI.EndDisabledGroup(); + } + EditorGUI.EndDisabledGroup(); + + + DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineWidth]); + + DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_OutlineTex]); + DrawToggleGUI(materialEditor, material, uiElements[ShaderProp_Outline_BlendBaseColor]); + + DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_OutlineWidthMap]); + + DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineOffsetZ]); + + + EditorGUILayout.Space(); + { + EditorGUILayout.LabelField("Camera Distance for Outline Width"); + EditorGUI.indentLevel++; + DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineNear]); + DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineFar]); + EditorGUI.indentLevel--; + + + } + EditorGUI.EndDisabledGroup(); //!isOutlineEnabled + + EditorGUILayout.Space(); + } + //---------------------------------------------------------------------------------------------------------------------- @@ -68,6 +156,7 @@ static void GUI_BasicThreeColors(MaterialEditor materialEditor, Material materia } } +//---------------------------------------------------------------------------------------------------------------------- static void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { if (null!= element.extraProperty2) materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop, element.extraProperty2.prop); @@ -212,9 +301,9 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "Outline Width Map (grayscale, linear): White = full width, Black = 0 width."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_OutlineColor), - label = new GUIContent("Outline Color", - "The color of outline."), + mainPropertyName = new MaterialName(ShaderProp_OutlineTex), + label = new GUIContent("Outline Color", "The color of outline."), + extraPropertyName1 = new MaterialName(ShaderProp_OutlineColor), }, new MaterialUIElement { mainPropertyName = new MaterialName(ShaderProp_Outline_BlendBaseColor), @@ -266,14 +355,15 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string ShaderProp_2nd_ShadeMap = "_2nd_ShadeMap"; internal const string ShaderProp_2nd_ShadeColor = "_2nd_ShadeColor"; - internal const string ShaderProp_OutlineWidthMap = "_OutlineSampler"; + internal const string ShaderProp_OutlineMode = "_OutlineMode"; internal const string ShaderProp_OutlineWidth = "_OutlineWidth"; + internal const string ShaderProp_OutlineWidthMap = "_OutlineWidthMap"; + internal const string ShaderProp_OutlineTex = "_OutlineTex"; internal const string ShaderProp_OutlineColor = "_OutlineColor"; internal const string ShaderProp_Outline_BlendBaseColor = "_Outline_BlendBaseColor"; internal const string ShaderProp_OutlineOffsetZ = "_OutlineOffsetZ"; internal const string ShaderProp_OutlineNear = "_OutlineNear"; internal const string ShaderProp_OutlineFar = "_OutlineFar"; - internal const string ShaderProp_OutlineMode = "_OutlineMode"; internal const string ShaderProp_Outline_UseCustomNormalMap = "_Outline_UseCustomNormalMap"; internal const string ShaderProp_Outline_CustomNormalMap = "_Outline_CustomNormalMap"; diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 21b80cef9..155b5bbeb 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -23,8 +23,25 @@ Shader "Toon2D"{ [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching + + //Outline + _OutlineMode("Outline Mode", Integer) = 0 + _OutlineWidth ("Outline Width", Float ) = 0 + _OutlineWidthMap ("Outline Width Map", 2D) = "white" {} + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineTex ("Outline Tex", 2D) = "black" {} + _Outline_BlendBaseColor ("Blend Base Color to Outline", Integer ) = 0 + _OutlineOffsetZ ("Outline Z Offset", Float) = 0 + _OutlineNear ("Outline Near", Float ) = 0.5 + _OutlineFar ("Outline Far", Float ) = 100 + _Outline_UseCustomNormalMap ("Use Custom Normal Map", Integer ) = 0 + _Outline_CustomNormalMap ("Custom Normal Map", 2D) = "white" {} + + //Test _OutlineExtrusion("Outline Extrusion", float) = 0.02 + + } SubShader{ From 74525d81ce1ac986cff3f716f4f327e56c0129cf Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 17 Nov 2025 18:09:43 +0900 Subject: [PATCH 043/290] foldout --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 73097bb13..169070797 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -63,6 +63,9 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, materialEditor.RegisterPropertyChangeUndo("Outline"); material.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); } + + if (!m_outlineFoldout) + return; //Outline Settings EditorGUI.BeginDisabledGroup(!isOutlineEnabled); From 5445db5a7a46944d5eba772e4001e215f7dc5a25 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 17 Nov 2025 18:10:12 +0900 Subject: [PATCH 044/290] save material --- .../Assets/Materials/Toon2D.mat | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat index 214010db1..97056b837 100644 --- a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat @@ -11,7 +11,8 @@ Material: m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _OUTLINE_NML m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -20,6 +21,7 @@ Material: stringTagMap: {} disabledShaderPasses: - MOTIONVECTORS + - SRPDEFAULTUNLIT m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -76,6 +78,18 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineWidthMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Outline_CustomNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _ParallaxMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -97,6 +111,9 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: + - _OutlineMode: 0 + - _Outline_BlendBaseColor: 0 + - _Outline_UseCustomNormalMap: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 m_Floats: @@ -127,6 +144,10 @@ Material: - _Metallic: 0 - _OcclusionStrength: 1 - _OutlineExtrusion: 0.02 + - _OutlineFar: 100 + - _OutlineNear: 0.5 + - _OutlineOffsetZ: 0 + - _OutlineWidth: 0 - _Parallax: 0.005 - _QueueOffset: 0 - _ReceiveShadows: 1 @@ -149,6 +170,7 @@ Material: - _BaseColor: {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} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} - _White: {r: 1, g: 1, b: 1, a: 1} m_BuildTextureStacks: [] From 20aea1cb462bf9e075d5f7d857d2aa729032addb Mon Sep 17 00:00:00 2001 From: sin Date: Tue, 18 Nov 2025 00:10:37 +0900 Subject: [PATCH 045/290] cleanup --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 56 ++++++++++--------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 169070797..04aed35b8 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -16,17 +16,6 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro EditorGUI.BeginChangeCheck(); GUI_BasicThreeColors(materialEditor, material, m_materialPropertyUIElements); - //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. - string lightModeName = "SRPDefaultUnlit"; - bool enabled = material.GetShaderPassEnabled(lightModeName); - EditorGUI.BeginChangeCheck(); - bool newEnabled = EditorGUILayout.Toggle("Outline", enabled); - if (EditorGUI.EndChangeCheck()) - { - material.SetShaderPassEnabled(lightModeName, newEnabled); - EditorUtility.SetDirty(material); - } - DrawOutlineGUI(materialEditor, material, m_materialPropertyUIElements); @@ -39,35 +28,25 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro void DrawOutlineGUI(MaterialEditor materialEditor, Material material, Dictionary uiElements) { + //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; bool isOutlineEnabled = material.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); EditorGUI.BeginChangeCheck(); -// isOutlineEnabled = EditorGUILayout.Toggle(kOutline, isOutlineEnabled); -// Get a horizontal rect for all controls - GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); - Rect lineRect = EditorGUILayout.GetControlRect(false, 16); + //Draw custom foldout with toggle -// Calculate rects for each control - Rect foldoutRect = new Rect(lineRect.x, lineRect.y, 16, lineRect.height); - Rect toggleRect = new Rect(foldoutRect.xMax, lineRect.y, 16, lineRect.height); - Rect labelRect = new Rect(toggleRect.xMax + 2, lineRect.y, lineRect.width - 34, lineRect.height); - - m_outlineFoldout = EditorGUI.Foldout(foldoutRect, m_outlineFoldout, GUIContent.none, true, foldoutStyle); - isOutlineEnabled = EditorGUI.Toggle(toggleRect, isOutlineEnabled); - EditorGUI.LabelField(labelRect, "Outline"); - - - if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo("Outline"); + if (DrawFoldoutWithToggleGUI(materialEditor, material, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) + { material.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); } + if (!m_outlineFoldout) return; //Outline Settings + EditorGUI.indentLevel++; EditorGUI.BeginDisabledGroup(!isOutlineEnabled); int outlineMode = DrawIntPopupGUI(materialEditor, material, uiElements[ShaderProp_OutlineMode], @@ -119,6 +98,7 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, } EditorGUI.EndDisabledGroup(); //!isOutlineEnabled + EditorGUI.indentLevel--; EditorGUILayout.Space(); } @@ -226,6 +206,28 @@ static int DrawIntPopupGUI(MaterialEditor materialEditor, Material material, Mat return ret; } + + //return true if changed, false otherwise + static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material material, + ref bool foldoutState, ref bool toggleEnabled, string label) + { + GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); + Rect lineRect = EditorGUILayout.GetControlRect(false, 16); + Rect foldoutRect = new Rect(lineRect.x, lineRect.y, 16, lineRect.height); + Rect toggleRect = new Rect(foldoutRect.xMax, lineRect.y, 16, lineRect.height); + Rect labelRect = new Rect(toggleRect.xMax + 2, lineRect.y, lineRect.width - 34, lineRect.height); + + foldoutState = EditorGUI.Foldout(foldoutRect, foldoutState, GUIContent.none, true, foldoutStyle); + toggleEnabled = EditorGUI.Toggle(toggleRect, toggleEnabled); + EditorGUI.LabelField(labelRect, label); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(label); + return true; + } + + return false; + } //---------------------------------------------------------------------------------------------------------------------- From 6f9c18af97f08a4fd8c8beb65cf6eb3ce76ee162 Mon Sep 17 00:00:00 2001 From: sin Date: Tue, 18 Nov 2025 00:24:57 +0900 Subject: [PATCH 046/290] add background --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 04aed35b8..c3cbefba0 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -217,6 +217,14 @@ static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material mat Rect toggleRect = new Rect(foldoutRect.xMax, lineRect.y, 16, lineRect.height); Rect labelRect = new Rect(toggleRect.xMax + 2, lineRect.y, lineRect.width - 34, lineRect.height); + const float BG_COLOR = 0.20f; + EditorGUI.DrawRect(lineRect, new Color(BG_COLOR, BG_COLOR, BG_COLOR, 1f)); //BG + + // Draw top border + Rect topBorderRect = new Rect(lineRect.x, lineRect.y, lineRect.width, 1); + EditorGUI.DrawRect(topBorderRect, new Color(0.12f, 0.12f, 0.12f, 1f)); + + foldoutState = EditorGUI.Foldout(foldoutRect, foldoutState, GUIContent.none, true, foldoutStyle); toggleEnabled = EditorGUI.Toggle(toggleRect, toggleEnabled); EditorGUI.LabelField(labelRect, label); From 24ca5631969c912169d24b5f06cb1af9ac169e09 Mon Sep 17 00:00:00 2001 From: sin Date: Tue, 18 Nov 2025 00:54:08 +0900 Subject: [PATCH 047/290] DrawNormalMap --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 59 +++++++++++++++++-- 1 file changed, 54 insertions(+), 5 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index c3cbefba0..a9bd01f43 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using UnityEditor; +using UnityEditor.Rendering; using UnityEngine; class UnityToon3Das2DGUI : UnityEditor.ShaderGUI { @@ -15,7 +16,8 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro EditorGUI.BeginChangeCheck(); GUI_BasicThreeColors(materialEditor, material, m_materialPropertyUIElements); - + + DrawNormalMapGUI(materialEditor, m_materialPropertyUIElements); DrawOutlineGUI(materialEditor, material, m_materialPropertyUIElements); @@ -23,7 +25,22 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro materialEditor.PropertiesChanged(); } } + public static readonly GUIContent normalMapFoldout = EditorGUIUtility.TrTextContent("Normal Map Settings", + "Normal Map settings. Normal Map itself and its effectiveness to some areas."); + + void DrawNormalMapGUI(MaterialEditor materialEditor, + Dictionary uiElements) { + DrawFoldoutGUI(ref m_normalMapFoldout, normalMapFoldout); + if (!m_normalMapFoldout) + return; + + DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_NormalMap]); + materialEditor.TextureScaleOffsetProperty(uiElements[ShaderProp_NormalMap].mainProperty.prop); + + EditorGUILayout.Space(); + } + void DrawOutlineGUI(MaterialEditor materialEditor, Material material, Dictionary uiElements) @@ -32,9 +49,6 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; bool isOutlineEnabled = material.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); - EditorGUI.BeginChangeCheck(); - - //Draw custom foldout with toggle if (DrawFoldoutWithToggleGUI(materialEditor, material, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) { @@ -207,6 +221,32 @@ static int DrawIntPopupGUI(MaterialEditor materialEditor, Material material, Mat return ret; } + + //return true if changed, false otherwise + static bool DrawFoldoutGUI(ref bool state, GUIContent label) { + + Rect lineRect = EditorGUILayout.GetControlRect(false, 16); + + float initialPadding = lineRect.x; + Rect bgRect = new Rect(0, lineRect.y, lineRect.width + initialPadding, lineRect.height); + + const float BG_COLOR = 0.20f; + EditorGUI.DrawRect(bgRect, new Color(BG_COLOR, BG_COLOR, BG_COLOR, 1f)); //BG + + // Draw top border + Rect topBorderRect = new Rect(bgRect.x, bgRect.y, bgRect.width, 1); + EditorGUI.DrawRect(topBorderRect, new Color(0.12f, 0.12f, 0.12f, 1f)); + + EditorGUI.BeginChangeCheck(); + state = EditorGUI.Foldout(lineRect, state, label); + if (EditorGUI.EndChangeCheck()) { + return true; + } + + return false; + + } + //return true if changed, false otherwise static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material material, ref bool foldoutState, ref bool toggleEnabled, string label) @@ -224,7 +264,7 @@ static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material mat Rect topBorderRect = new Rect(lineRect.x, lineRect.y, lineRect.width, 1); EditorGUI.DrawRect(topBorderRect, new Color(0.12f, 0.12f, 0.12f, 1f)); - + EditorGUI.BeginChangeCheck(); foldoutState = EditorGUI.Foldout(foldoutRect, foldoutState, GUIContent.none, true, foldoutStyle); toggleEnabled = EditorGUI.Toggle(toggleRect, toggleEnabled); EditorGUI.LabelField(labelRect, label); @@ -302,6 +342,12 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), }, + //Normal Map + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_NormalMap), + label = new GUIContent("Normal Map", "A texture that specifies the bumpiness of the material."), + }, + //Outline Start new MaterialUIElement { mainPropertyName = new MaterialName(ShaderProp_OutlineWidth), @@ -367,6 +413,8 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string ShaderProp_1st_ShadeColor = "_1st_ShadeColor"; internal const string ShaderProp_2nd_ShadeMap = "_2nd_ShadeMap"; internal const string ShaderProp_2nd_ShadeColor = "_2nd_ShadeColor"; + + internal const string ShaderProp_NormalMap = "_NormalMap"; internal const string ShaderProp_OutlineMode = "_OutlineMode"; internal const string ShaderProp_OutlineWidth = "_OutlineWidth"; @@ -390,6 +438,7 @@ internal enum OutlineMode { private static readonly GUIContent[] m_outlineModeEnums= EnumUtility.ToInspectorNamesAsGUIContent(typeof(OutlineMode)); private static readonly int[] m_outlineModeIndices = EnumUtility.ToIndices(typeof(OutlineMode)); + bool m_normalMapFoldout = false; bool m_outlineFoldout = false; } From bebeba6776cf08e4a22d880f6c02dec64743de18 Mon Sep 17 00:00:00 2001 From: sin Date: Tue, 18 Nov 2025 00:56:45 +0900 Subject: [PATCH 048/290] BumpScale --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 2 ++ Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index a9bd01f43..cdbf0711d 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -346,6 +346,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty new MaterialUIElement { mainPropertyName = new MaterialName(ShaderProp_NormalMap), label = new GUIContent("Normal Map", "A texture that specifies the bumpiness of the material."), + extraPropertyName1 = new MaterialName(ShaderProp_BumpScale), }, //Outline Start @@ -415,6 +416,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string ShaderProp_2nd_ShadeColor = "_2nd_ShadeColor"; internal const string ShaderProp_NormalMap = "_NormalMap"; + internal const string ShaderProp_BumpScale = "_BumpScale"; internal const string ShaderProp_OutlineMode = "_OutlineMode"; internal const string ShaderProp_OutlineWidth = "_OutlineWidth"; diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 155b5bbeb..814a992f7 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -19,6 +19,8 @@ Shader "Toon2D"{ _MaskTex("Mask", 2D) = "white" {} _NormalMap("Normal Map", 2D) = "bump" {} + _BumpScale ("Normal Scale", Range(0, 1)) = 1 + _Unlit_Intensity ("Unlit_Intensity", Range(0, 4)) = 0 [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching From b511ad85b2ecd1b27bf77f46b94a5e276873f002 Mon Sep 17 00:00:00 2001 From: sin Date: Tue, 18 Nov 2025 01:02:16 +0900 Subject: [PATCH 049/290] refactor bg rect --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index cdbf0711d..830804332 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -227,15 +227,7 @@ static bool DrawFoldoutGUI(ref bool state, GUIContent label) { Rect lineRect = EditorGUILayout.GetControlRect(false, 16); - float initialPadding = lineRect.x; - Rect bgRect = new Rect(0, lineRect.y, lineRect.width + initialPadding, lineRect.height); - - const float BG_COLOR = 0.20f; - EditorGUI.DrawRect(bgRect, new Color(BG_COLOR, BG_COLOR, BG_COLOR, 1f)); //BG - - // Draw top border - Rect topBorderRect = new Rect(bgRect.x, bgRect.y, bgRect.width, 1); - EditorGUI.DrawRect(topBorderRect, new Color(0.12f, 0.12f, 0.12f, 1f)); + DrawBGRect(lineRect); EditorGUI.BeginChangeCheck(); state = EditorGUI.Foldout(lineRect, state, label); @@ -257,12 +249,7 @@ static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material mat Rect toggleRect = new Rect(foldoutRect.xMax, lineRect.y, 16, lineRect.height); Rect labelRect = new Rect(toggleRect.xMax + 2, lineRect.y, lineRect.width - 34, lineRect.height); - const float BG_COLOR = 0.20f; - EditorGUI.DrawRect(lineRect, new Color(BG_COLOR, BG_COLOR, BG_COLOR, 1f)); //BG - - // Draw top border - Rect topBorderRect = new Rect(lineRect.x, lineRect.y, lineRect.width, 1); - EditorGUI.DrawRect(topBorderRect, new Color(0.12f, 0.12f, 0.12f, 1f)); + DrawBGRect(lineRect); EditorGUI.BeginChangeCheck(); foldoutState = EditorGUI.Foldout(foldoutRect, foldoutState, GUIContent.none, true, foldoutStyle); @@ -277,6 +264,26 @@ static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material mat return false; } + static void DrawBGRect(Rect lineRect) { + + float initialPadding = lineRect.x; + Rect bgRect = new Rect(0, lineRect.y, lineRect.width + initialPadding, lineRect.height); + + Color bgColor = GetBGColor(); + EditorGUI.DrawRect(bgRect, bgColor); + + // Draw top border + Rect topBorderRect = new Rect(bgRect.x, bgRect.y, bgRect.width, 1); + EditorGUI.DrawRect(topBorderRect, new Color(0.12f, 0.12f, 0.12f, 1f)); + } + + static Color GetBGColor() { + + return !EditorGUIUtility.isProSkin + ? new Color(0.6f, 0.6f, 0.6f, 1.0f) + : new Color(0.20f, 0.20f, 0.20f, 1.0f); + } + //---------------------------------------------------------------------------------------------------------------------- void InitMaterialPropertyUIElements(MaterialProperty[] allProps) { From c232da1d5f1a6cea1c7a70d78cb5abbda6f6e42b Mon Sep 17 00:00:00 2001 From: sin Date: Tue, 18 Nov 2025 01:39:56 +0900 Subject: [PATCH 050/290] specular --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 87 ++++++++++++++++++- .../Assets/Shaders/Toon2D.shader | 8 +- 2 files changed, 90 insertions(+), 5 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 830804332..2a550d4e8 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -19,6 +19,7 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro DrawNormalMapGUI(materialEditor, m_materialPropertyUIElements); DrawOutlineGUI(materialEditor, material, m_materialPropertyUIElements); + DrawSpecularGUI(materialEditor, material, m_materialPropertyUIElements); if (EditorGUI.EndChangeCheck()) { @@ -50,7 +51,7 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, bool isOutlineEnabled = material.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); - if (DrawFoldoutWithToggleGUI(materialEditor, material, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) + if (DrawFoldoutWithToggleGUI(materialEditor, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) { material.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); } @@ -153,6 +154,22 @@ static void GUI_BasicThreeColors(MaterialEditor materialEditor, Material materia } } + void DrawSpecularGUI(MaterialEditor materialEditor, Material material, + Dictionary uiElements) { + + DrawFoldoutWithToggleGUI(materialEditor, material, uiElements[ShaderPropUnlit_Specular_UseDirectionalLight], + ref m_specularFoldout); + + + if (!m_specularFoldout) + return; + + DrawColorFieldGUI(materialEditor, material, uiElements[ShaderPropUnlit_Specular_Color]); + DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderPropUnlit_Specular_Intensity]); + DrawVector3FieldGUI(materialEditor, material, uiElements[ShaderPropUnlit_Specular_LightDirection]); + } + + //---------------------------------------------------------------------------------------------------------------------- static void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { if (null!= element.extraProperty2) @@ -204,6 +221,19 @@ static Color DrawColorFieldGUI(MaterialEditor materialEditor, Material material, return ret; } + static Vector3 DrawVector3FieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + + Vector3 ret = material.GetVector(element.mainProperty.id); + EditorGUI.BeginChangeCheck(); + ret = EditorGUILayout.Vector3Field(element.label, ret); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetVector(element.mainProperty.id, ret); + } + return ret; + } + //Return the index static int DrawIntPopupGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element, GUIContent[] displayedOptions, int[] optionValues) @@ -240,7 +270,7 @@ static bool DrawFoldoutGUI(ref bool state, GUIContent label) { } //return true if changed, false otherwise - static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material material, + static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, ref bool foldoutState, ref bool toggleEnabled, string label) { GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); @@ -264,6 +294,20 @@ static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material mat return false; } + static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element, + ref bool foldoutState) + { + bool enabled = material.GetInteger(element.mainProperty.id) !=0; + bool ret = DrawFoldoutWithToggleGUI(materialEditor, ref foldoutState, ref enabled, element.label.text); + if (ret) { + material.SetInteger(element.mainProperty.id, enabled ? 1 : 0); + } + + return ret; + + } + + static void DrawBGRect(Rect lineRect) { float initialPadding = lineRect.x; @@ -409,9 +453,31 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "Custom normal map (linear) for outline. "), }, //Outline End - + + //Custom Directional Light + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUnlit_Specular_UseDirectionalLight), + label = new GUIContent("Specular", + "Applies specular color by using a custom directional light."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUnlit_Specular_Color), + label = new GUIContent("Specular Color", + "The specular color. "), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUnlit_Specular_Intensity), + label = new GUIContent("Specular Intensity", + "The specular intensity. "), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUnlit_Specular_LightDirection), + label = new GUIContent("Light Direction", + "The direction of the light for specular. "), + }, }; - + + //Common constants internal const string ShaderPropMainTex = "_MainTex"; internal const string ShaderPropUse_BaseAs1st = "_Use_BaseAs1st"; @@ -438,6 +504,18 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string ShaderProp_Outline_UseCustomNormalMap = "_Outline_UseCustomNormalMap"; internal const string ShaderProp_Outline_CustomNormalMap = "_Outline_CustomNormalMap"; + internal const string ShaderPropUnlit_Specular_UseDirectionalLight = "_Specular_UseDirectionalLight"; + internal const string ShaderPropUnlit_Specular_Color = "_Specular_Color"; + internal const string ShaderPropUnlit_Specular_Intensity = "_Specular_Intensity"; + internal const string ShaderPropUnlit_Specular_LightDirection = "_Specular_LightDirection"; + + // GUI_RangeProperty(material, Styles.metaverseOffsettXaxisText); + // GUI_RangeProperty(material, Styles.metaverseOffsettYaxisText); + // + // GUI_Toggle(material, Styles.invertZaxisDirection, ShaderPropInverse_Z_Axis_BLD, MaterialGetInt(material, ShaderPropInverse_Z_Axis_BLD) != 0); + + + internal enum OutlineMode { NormalDirection, @@ -449,6 +527,7 @@ internal enum OutlineMode { bool m_normalMapFoldout = false; bool m_outlineFoldout = false; + bool m_specularFoldout = false; } diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 814a992f7..ae6021511 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -21,7 +21,6 @@ Shader "Toon2D"{ _NormalMap("Normal Map", 2D) = "bump" {} _BumpScale ("Normal Scale", Range(0, 1)) = 1 - _Unlit_Intensity ("Unlit_Intensity", Range(0, 4)) = 0 [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching @@ -39,11 +38,18 @@ Shader "Toon2D"{ _Outline_UseCustomNormalMap ("Use Custom Normal Map", Integer ) = 0 _Outline_CustomNormalMap ("Custom Normal Map", 2D) = "white" {} + //Specular + _Specular_UseDirectionalLight ("Specular Intensity", Integer) = 0 + _Specular_Color ("Specular Color", Color) = (1,1,1,1) + _Specular_Intensity ("Specular Intensity", float) = 0 + _Specular_LightDirection ("Specular Light Direction", Vector) = (0,-1,0,0) + //Test _OutlineExtrusion("Outline Extrusion", float) = 0.02 + } SubShader{ From 45fe22e84f3c6dec3062b5156166f2020d9d59f3 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 13:52:40 +0900 Subject: [PATCH 051/290] save scene --- .../Assets/ScenesDev/test.unity | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index b1ae74ca8..4d5891d06 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -775,13 +775,13 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 443363985} serializedVersion: 2 - m_LocalRotation: {x: 0.70693415, y: -0, z: -0, w: 0.70727944} - m_LocalPosition: {x: 3.42, y: 5.94, z: 0} + m_LocalRotation: {x: -0.12823418, y: 0.548527, z: -0.79870117, w: 0.21154352} + m_LocalPosition: {x: 3.42, y: 5.94, z: -0.77} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1390602298} - m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} + m_LocalEulerAnglesHint: {x: 55.282, y: 50.098, z: -122.825} --- !u!1773428102 &443363987 ParentConstraint: m_ObjectHideFlags: 0 @@ -789,7 +789,7 @@ ParentConstraint: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 443363985} - m_Enabled: 1 + m_Enabled: 0 serializedVersion: 2 m_Weight: 1 m_TranslationAtRest: {x: 4.01, y: 5.94, z: 0} @@ -847,9 +847,9 @@ Light: m_GameObject: {fileID: 443363985} m_Enabled: 1 serializedVersion: 12 - m_Type: 0 + m_Type: 1 m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1 + m_Intensity: 0.6 m_Range: 10 m_SpotAngle: 30 m_InnerSpotAngle: 21.80208 @@ -1530,19 +1530,19 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalRotation.w - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalRotation.x - value: -0 + value: 0 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalRotation.y - value: -0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalRotation.z - value: -0 + value: 0 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalEulerAnglesHint.x @@ -1550,7 +1550,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalEulerAnglesHint.y - value: 0 + value: 180 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalEulerAnglesHint.z @@ -2165,19 +2165,19 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalRotation.w - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalRotation.x - value: -0 + value: 0 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalRotation.y - value: -0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalRotation.z - value: -0 + value: 0 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalEulerAnglesHint.x @@ -2185,7 +2185,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalEulerAnglesHint.y - value: 0 + value: 180 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalEulerAnglesHint.z @@ -2266,7 +2266,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1604474280} serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 1, w: 0} + m_LocalRotation: {x: 1, y: -0, z: -0, w: 0} m_LocalPosition: {x: -12.32, y: 5.26, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 From be7a9e1c42508e1ae9d8a1dc323ad5898edc3b22 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 13:56:06 +0900 Subject: [PATCH 052/290] minor --- .../Assets/Shaders/Toon2D.shader | 30 +++++-------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index ae6021511..6332def62 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -46,10 +46,6 @@ Shader "Toon2D"{ //Test _OutlineExtrusion("Outline Extrusion", float) = 0.02 - - - - } SubShader{ @@ -61,8 +57,6 @@ Shader "Toon2D"{ Cull Back ZWrite On - - Stencil{ Ref 128 // Put this in the last bit of our stencil value for maximum compatibility with sprite mask Comp always @@ -86,13 +80,11 @@ Shader "Toon2D"{ #pragma multi_compile_instancing #pragma multi_compile _ DEBUG_DISPLAY - struct Attributes - { + struct Attributes { COMMON_2D_INPUTS }; - struct Varyings - { + struct Varyings { COMMON_2D_LIT_OUTPUTS }; @@ -115,20 +107,15 @@ Shader "Toon2D"{ float _ShadeColor_Step; float _1st2nd_Shades_Feather; - - CBUFFER_END //---------------------------------------------------------------------------------------------------------------------- float4 _MainTex_ST; - //TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex); TEXTURE2D(_1st_ShadeMap); TEXTURE2D(_2nd_ShadeMap); - - Varyings LitVertex(Attributes input) - { + Varyings LitVertex(Attributes input) { return CommonLitVertex(input); } @@ -183,15 +170,14 @@ Shader "Toon2D"{ } - //---------------------------------------------------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv) { #if defined(DEBUG_DISPLAY) half4 debugColor = 0; - if (CanDebugOverrideOutputColor(surfaceData, inputData, debugColor)) - { + if (CanDebugOverrideOutputColor(surfaceData, inputData, debugColor)) { return debugColor; } #endif @@ -503,13 +489,11 @@ Shader "Toon2D"{ // GPU Instancing #pragma multi_compile_instancing - struct Attributes - { + struct Attributes { COMMON_2D_INPUTS }; - struct Varyings - { + struct Varyings { COMMON_2D_OUTPUTS }; From b1f215f1708fa57a0f3f4529c52c1bab3bf020d0 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 14:06:11 +0900 Subject: [PATCH 053/290] 3D as 2D materials --- .../Assets/Materials/UnityChan_3Das2D.meta | 8 ++ ...Shader_Eye_Clipping_StencilMask_3Das2D.mat | 86 +++++++++++++++++++ ...r_Eye_Clipping_StencilMask_3Das2D.mat.meta | 8 ++ .../ToonShader_Eyebrow_StencilMask_3Das2D.mat | 86 +++++++++++++++++++ ...Shader_Eyebrow_StencilMask_3Das2D.mat.meta | 8 ++ .../ToonShader_Face_3Das2D.mat | 86 +++++++++++++++++++ .../ToonShader_Face_3Das2D.mat.meta | 8 ++ .../ToonShader_Fhair2_3Das2D.mat | 86 +++++++++++++++++++ .../ToonShader_Fhair2_3Das2D.mat.meta | 8 ++ .../ToonShader_Fhair_StencilOut_3Das2D.mat | 86 +++++++++++++++++++ ...oonShader_Fhair_StencilOut_3Das2D.mat.meta | 8 ++ .../ToonShader_Hair_Clipping_3Das2D.mat | 86 +++++++++++++++++++ .../ToonShader_Hair_Clipping_3Das2D.mat.meta | 8 ++ .../ToonShader_Head_Clipping_3Das2D.mat | 86 +++++++++++++++++++ .../ToonShader_Head_Clipping_3Das2D.mat.meta | 8 ++ .../ToonShader_Main_3Das2D.mat | 86 +++++++++++++++++++ .../ToonShader_Main_3Das2D.mat.meta | 8 ++ 17 files changed, 760 insertions(+) create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D.meta create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat.meta create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat.meta create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat.meta create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat.meta create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat.meta create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat.meta create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat.meta create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat.meta diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D.meta b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D.meta new file mode 100644 index 000000000..286ca230a --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3c997cd6ed2854f458999ce40fb6f9d3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat new file mode 100644 index 000000000..cad702722 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ToonShader_Eye_Clipping_StencilMask_3Das2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: b5e42375dca74b929795cf09ed8a6d66, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineWidthMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Outline_CustomNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _OutlineMode: 0 + - _Outline_BlendBaseColor: 0 + - _Outline_UseCustomNormalMap: 0 + - _Specular_UseDirectionalLight: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + m_Floats: + - _1st2nd_Shades_Feather: 0 + - _BaseColor_Step: 0.393 + - _BaseShade_Feather: 0.629 + - _BumpScale: 1 + - _OutlineExtrusion: 0.02 + - _OutlineFar: 100 + - _OutlineNear: 0.5 + - _OutlineOffsetZ: 0 + - _OutlineWidth: 0 + - _ShadeColor_Step: 0 + - _Specular_Intensity: 0 + m_Colors: + - _1st_ShadeColor: {r: 0.4338235, g: 0.4338235, b: 0.4338235, a: 1} + - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} + - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat.meta new file mode 100644 index 000000000..03bf73ba7 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3f9d94f5fe986d041a6ec19968d86f1d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat new file mode 100644 index 000000000..3d3ce6cc9 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ToonShader_Eyebrow_StencilMask_3Das2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: b5e42375dca74b929795cf09ed8a6d66, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineWidthMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Outline_CustomNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _OutlineMode: 0 + - _Outline_BlendBaseColor: 0 + - _Outline_UseCustomNormalMap: 0 + - _Specular_UseDirectionalLight: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + m_Floats: + - _1st2nd_Shades_Feather: 0.0001 + - _BaseColor_Step: 0.507 + - _BaseShade_Feather: 0.08 + - _BumpScale: 1 + - _OutlineExtrusion: 0.02 + - _OutlineFar: 100 + - _OutlineNear: 0.5 + - _OutlineOffsetZ: 0 + - _OutlineWidth: 0 + - _ShadeColor_Step: 0 + - _Specular_Intensity: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} + - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat.meta new file mode 100644 index 000000000..cfe589507 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1d19f1d638a5ffb449e3a32dd4d5986d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat new file mode 100644 index 000000000..af116aaec --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ToonShader_Face_3Das2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: b5e42375dca74b929795cf09ed8a6d66, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineWidthMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Outline_CustomNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _OutlineMode: 0 + - _Outline_BlendBaseColor: 0 + - _Outline_UseCustomNormalMap: 0 + - _Specular_UseDirectionalLight: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + m_Floats: + - _1st2nd_Shades_Feather: 0.0001 + - _BaseColor_Step: 0.353 + - _BaseShade_Feather: 0.121 + - _BumpScale: 1 + - _OutlineExtrusion: 0.02 + - _OutlineFar: 100 + - _OutlineNear: 0.5 + - _OutlineOffsetZ: 0 + - _OutlineWidth: 0 + - _ShadeColor_Step: 0 + - _Specular_Intensity: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeColor: {r: 0.7490196, g: 0.69411767, b: 0.88235295, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} + - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat.meta new file mode 100644 index 000000000..510d77d95 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 77410fc82598c414fbb68f41d4df2bba +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat new file mode 100644 index 000000000..f05afac88 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ToonShader_Fhair2_3Das2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: b5e42375dca74b929795cf09ed8a6d66, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineWidthMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Outline_CustomNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _OutlineMode: 0 + - _Outline_BlendBaseColor: 0 + - _Outline_UseCustomNormalMap: 0 + - _Specular_UseDirectionalLight: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + m_Floats: + - _1st2nd_Shades_Feather: 0.236 + - _BaseColor_Step: 0.801 + - _BaseShade_Feather: 0.062 + - _BumpScale: 1 + - _OutlineExtrusion: 0.02 + - _OutlineFar: 100 + - _OutlineNear: 0.5 + - _OutlineOffsetZ: 0 + - _OutlineWidth: 0 + - _ShadeColor_Step: 0.727 + - _Specular_Intensity: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} + - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat.meta new file mode 100644 index 000000000..9e57d1802 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 603cf7ef4659af5439a575075bf3ca95 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat new file mode 100644 index 000000000..13e44553f --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ToonShader_Fhair_StencilOut_3Das2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: b5e42375dca74b929795cf09ed8a6d66, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineWidthMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Outline_CustomNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _OutlineMode: 0 + - _Outline_BlendBaseColor: 0 + - _Outline_UseCustomNormalMap: 0 + - _Specular_UseDirectionalLight: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + m_Floats: + - _1st2nd_Shades_Feather: 0.236 + - _BaseColor_Step: 0.801 + - _BaseShade_Feather: 0.062 + - _BumpScale: 1 + - _OutlineExtrusion: 0.02 + - _OutlineFar: 100 + - _OutlineNear: 0.5 + - _OutlineOffsetZ: 0 + - _OutlineWidth: 0 + - _ShadeColor_Step: 0.727 + - _Specular_Intensity: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} + - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat.meta new file mode 100644 index 000000000..af408b6f2 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 66ecb67261a5bed49b4e9f4734178c7e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat new file mode 100644 index 000000000..eaf04cb0c --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ToonShader_Hair_Clipping_3Das2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: b5e42375dca74b929795cf09ed8a6d66, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineWidthMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Outline_CustomNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _OutlineMode: 0 + - _Outline_BlendBaseColor: 0 + - _Outline_UseCustomNormalMap: 0 + - _Specular_UseDirectionalLight: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + m_Floats: + - _1st2nd_Shades_Feather: 0.064 + - _BaseColor_Step: 0.815 + - _BaseShade_Feather: 0.13 + - _BumpScale: 1 + - _OutlineExtrusion: 0.02 + - _OutlineFar: 100 + - _OutlineNear: 0.5 + - _OutlineOffsetZ: 0 + - _OutlineWidth: 0 + - _ShadeColor_Step: 0.722 + - _Specular_Intensity: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} + - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat.meta new file mode 100644 index 000000000..787d36e6d --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 96545c3995189d647accdbd148fa2c3d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat new file mode 100644 index 000000000..82340acf7 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ToonShader_Head_Clipping_3Das2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineWidthMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Outline_CustomNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _OutlineMode: 0 + - _Outline_BlendBaseColor: 0 + - _Outline_UseCustomNormalMap: 0 + - _Specular_UseDirectionalLight: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + m_Floats: + - _1st2nd_Shades_Feather: 0.064 + - _BaseColor_Step: 0.815 + - _BaseShade_Feather: 0.13 + - _BumpScale: 1 + - _OutlineExtrusion: 0.02 + - _OutlineFar: 100 + - _OutlineNear: 0.5 + - _OutlineOffsetZ: 0 + - _OutlineWidth: 0 + - _ShadeColor_Step: 0.722 + - _Specular_Intensity: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeColor: {r: 0.6691177, g: 0.47672933, b: 0.27059904, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} + - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat.meta new file mode 100644 index 000000000..b8141735f --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0f5c320d996610448ab3be5c087d2544 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat new file mode 100644 index 000000000..db9cde33d --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ToonShader_Main_3Das2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: b5e42375dca74b929795cf09ed8a6d66, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineWidthMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Outline_CustomNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _OutlineMode: 0 + - _Outline_BlendBaseColor: 0 + - _Outline_UseCustomNormalMap: 0 + - _Specular_UseDirectionalLight: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + m_Floats: + - _1st2nd_Shades_Feather: 0.08 + - _BaseColor_Step: 0.841 + - _BaseShade_Feather: 0.074 + - _BumpScale: 1 + - _OutlineExtrusion: 0.02 + - _OutlineFar: 100 + - _OutlineNear: 0.5 + - _OutlineOffsetZ: 0 + - _OutlineWidth: 0 + - _ShadeColor_Step: 0 + - _Specular_Intensity: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeColor: {r: 0.7490196, g: 0.69411767, b: 0.88235295, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} + - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat.meta new file mode 100644 index 000000000..274952f7d --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9b9cc9e24bdb5804b9009ba59c8957fe +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: From e26c49e1a0f72c2d8931d273cb9657c3e51a3662 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 14:15:30 +0900 Subject: [PATCH 054/290] add ToonEditorGUIUtility --- .../Scripts/Utilities/ToonEditorGUIUtility.cs | 164 ++++++++++++++++++ .../Utilities/ToonEditorGUIUtility.cs.meta | 2 + 2 files changed, 166 insertions(+) create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs.meta diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs new file mode 100644 index 000000000..369147f54 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs @@ -0,0 +1,164 @@ + +using UnityEditor; +using UnityEngine; + +internal static class ToonEditorGUIUtility { + + internal static void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { + if (null!= element.extraProperty2) + materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop, element.extraProperty2.prop); + else if (null!= element.extraProperty1) + materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop); + else + materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop); + } + + internal static void DrawColorPropertyGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { + materialEditor.ColorProperty(element.mainProperty.prop, element.label.text); + } + + internal static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + EditorGUI.BeginChangeCheck(); + bool ret = EditorGUILayout.Toggle(element.label, material.GetInteger(element.mainProperty.id) !=0); + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetInteger(element.mainProperty.id, ret ? 1 : 0); + } + + return ret; + } + + internal static float DrawFloatFieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + + float ret = material.GetFloat(element.mainProperty.id); + EditorGUI.BeginChangeCheck(); + ret = EditorGUILayout.FloatField(element.label, ret); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetFloat(element.mainProperty.id, ret); + } + return ret; + } + + internal static Color DrawColorFieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + + Color ret = material.GetColor(element.mainProperty.id); + EditorGUI.BeginChangeCheck(); + ret = EditorGUILayout.ColorField(element.label, ret); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetColor(element.mainProperty.id, ret); + } + return ret; + } + + internal static Vector3 DrawVector3FieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + + Vector3 ret = material.GetVector(element.mainProperty.id); + EditorGUI.BeginChangeCheck(); + ret = EditorGUILayout.Vector3Field(element.label, ret); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetVector(element.mainProperty.id, ret); + } + return ret; + } + + //Return the index + internal static int DrawIntPopupGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element, + GUIContent[] displayedOptions, int[] optionValues) + { + int propValue = material.GetInteger(element.mainProperty.id); + + EditorGUI.BeginChangeCheck(); + int ret = EditorGUILayout.IntPopup(element.label, propValue, displayedOptions, optionValues); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetInteger(element.mainProperty.id, ret); + } + + return ret; + } + + + //return true if changed, false otherwise + internal static bool DrawFoldoutGUI(ref bool state, GUIContent label) { + + Rect lineRect = EditorGUILayout.GetControlRect(false, 16); + + DrawBGRect(lineRect); + + EditorGUI.BeginChangeCheck(); + state = EditorGUI.Foldout(lineRect, state, label); + if (EditorGUI.EndChangeCheck()) { + return true; + } + + return false; + + } + + //return true if changed, false otherwise + internal static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, + ref bool foldoutState, ref bool toggleEnabled, string label) + { + GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); + Rect lineRect = EditorGUILayout.GetControlRect(false, 16); + Rect foldoutRect = new Rect(lineRect.x, lineRect.y, 16, lineRect.height); + Rect toggleRect = new Rect(foldoutRect.xMax, lineRect.y, 16, lineRect.height); + Rect labelRect = new Rect(toggleRect.xMax + 2, lineRect.y, lineRect.width - 34, lineRect.height); + + DrawBGRect(lineRect); + + EditorGUI.BeginChangeCheck(); + foldoutState = EditorGUI.Foldout(foldoutRect, foldoutState, GUIContent.none, true, foldoutStyle); + toggleEnabled = EditorGUI.Toggle(toggleRect, toggleEnabled); + EditorGUI.LabelField(labelRect, label); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(label); + return true; + } + + return false; + } + + internal static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element, + ref bool foldoutState) + { + bool enabled = material.GetInteger(element.mainProperty.id) !=0; + bool ret = DrawFoldoutWithToggleGUI(materialEditor, ref foldoutState, ref enabled, element.label.text); + if (ret) { + material.SetInteger(element.mainProperty.id, enabled ? 1 : 0); + } + + return ret; + + } + + + static void DrawBGRect(Rect lineRect) { + + float initialPadding = lineRect.x; + Rect bgRect = new Rect(0, lineRect.y, lineRect.width + initialPadding, lineRect.height); + + Color bgColor = GetBGColor(); + EditorGUI.DrawRect(bgRect, bgColor); + + // Draw top border + Rect topBorderRect = new Rect(bgRect.x, bgRect.y, bgRect.width, 1); + EditorGUI.DrawRect(topBorderRect, new Color(0.12f, 0.12f, 0.12f, 1f)); + } + + static Color GetBGColor() { + return !EditorGUIUtility.isProSkin + ? new Color(0.6f, 0.6f, 0.6f, 1.0f) + : new Color(0.20f, 0.20f, 0.20f, 1.0f); + } + + +} diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs.meta new file mode 100644 index 000000000..c1469258d --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: fe63760a0f620a142a80e4a239dbc7f8 From d7cd68fd34df58f0ea536cba247d41ef37e9ca17 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 14:38:58 +0900 Subject: [PATCH 055/290] * make sure all editor funcitons return true if changed, false otherwise * move editor utility functions to ToonEditorGUIUtility class --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 222 +++--------------- .../Scripts/Utilities/ToonEditorGUIUtility.cs | 86 ++++--- 2 files changed, 86 insertions(+), 222 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 2a550d4e8..f531c7f66 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -4,7 +4,6 @@ using UnityEngine; class UnityToon3Das2DGUI : UnityEditor.ShaderGUI { - public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] props) { @@ -26,17 +25,15 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro materialEditor.PropertiesChanged(); } } - public static readonly GUIContent normalMapFoldout = EditorGUIUtility.TrTextContent("Normal Map Settings", - "Normal Map settings. Normal Map itself and its effectiveness to some areas."); void DrawNormalMapGUI(MaterialEditor materialEditor, Dictionary uiElements) { - DrawFoldoutGUI(ref m_normalMapFoldout, normalMapFoldout); + ToonEditorGUIUtility.DrawFoldoutGUI(ref m_normalMapFoldout, uiElements[ShaderProp_NormalMap].label); if (!m_normalMapFoldout) return; - DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_NormalMap]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_NormalMap]); materialEditor.TextureScaleOffsetProperty(uiElements[ShaderProp_NormalMap].mainProperty.prop); EditorGUILayout.Space(); @@ -51,7 +48,7 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, bool isOutlineEnabled = material.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); - if (DrawFoldoutWithToggleGUI(materialEditor, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) + if (ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(materialEditor, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) { material.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); } @@ -64,8 +61,8 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, EditorGUI.indentLevel++; EditorGUI.BeginDisabledGroup(!isOutlineEnabled); - int outlineMode = DrawIntPopupGUI(materialEditor, material, uiElements[ShaderProp_OutlineMode], - m_outlineModeEnums, m_outlineModeIndices); + ToonEditorGUIUtility.DrawIntPopupGUI(materialEditor, material, uiElements[ShaderProp_OutlineMode], + m_outlineModeEnums, m_outlineModeIndices, out int outlineMode); const string OUTLINE_NORMAL_KEYWORD = "_OUTLINE_NML";; const string OUTLINE_POSITION_KEYWORD = "_OUTLINE_POS"; @@ -84,30 +81,31 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, EditorGUI.BeginDisabledGroup(outlineMode != (int) OutlineMode.NormalDirection); { - bool useCustom = DrawToggleGUI(materialEditor, material, uiElements[ShaderProp_Outline_UseCustomNormalMap]); + ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderProp_Outline_UseCustomNormalMap], + out bool useCustom); EditorGUI.BeginDisabledGroup(!useCustom); - DrawTexturePropertySingleLineGUI(materialEditor,uiElements[ShaderProp_Outline_CustomNormalMap]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor,uiElements[ShaderProp_Outline_CustomNormalMap]); EditorGUI.EndDisabledGroup(); } EditorGUI.EndDisabledGroup(); - DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineWidth]); + ToonEditorGUIUtility.DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineWidth]); - DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_OutlineTex]); - DrawToggleGUI(materialEditor, material, uiElements[ShaderProp_Outline_BlendBaseColor]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_OutlineTex]); + ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderProp_Outline_BlendBaseColor]); - DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_OutlineWidthMap]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_OutlineWidthMap]); - DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineOffsetZ]); + ToonEditorGUIUtility.DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineOffsetZ]); EditorGUILayout.Space(); { EditorGUILayout.LabelField("Camera Distance for Outline Width"); EditorGUI.indentLevel++; - DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineNear]); - DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineFar]); + ToonEditorGUIUtility.DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineNear]); + ToonEditorGUIUtility.DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineFar]); EditorGUI.indentLevel--; @@ -124,208 +122,46 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, static void GUI_BasicThreeColors(MaterialEditor materialEditor, Material material, Dictionary uiElements) { - DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderPropMainTex]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderPropMainTex]); EditorGUI.indentLevel += 2; - bool applyTo1st = DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_BaseAs1st]); + ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_BaseAs1st], out bool applyTo1st ); EditorGUI.indentLevel -= 2; if (applyTo1st) { EditorGUI.indentLevel += 2; - DrawColorPropertyGUI(materialEditor, uiElements[ShaderProp_1st_ShadeColor]); + ToonEditorGUIUtility.DrawColorPropertyGUI(materialEditor, uiElements[ShaderProp_1st_ShadeColor]); EditorGUI.indentLevel -= 2; - } - else { - DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_1st_ShadeMap]); + } else { + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_1st_ShadeMap]); } EditorGUI.indentLevel += 2; - bool applyTo2nd = DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_1stAs2nd]); + ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_1stAs2nd], out bool applyTo2nd); EditorGUI.indentLevel -= 2; if (applyTo2nd) { EditorGUI.indentLevel += 2; - DrawColorPropertyGUI(materialEditor, uiElements[ShaderProp_2nd_ShadeColor]); + ToonEditorGUIUtility.DrawColorPropertyGUI(materialEditor, uiElements[ShaderProp_2nd_ShadeColor]); EditorGUI.indentLevel -= 2; - } - else { - DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_2nd_ShadeMap]); + } else { + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_2nd_ShadeMap]); } } - void DrawSpecularGUI(MaterialEditor materialEditor, Material material, - Dictionary uiElements) { + void DrawSpecularGUI(MaterialEditor mEditor, Material m, Dictionary uiElements) { - DrawFoldoutWithToggleGUI(materialEditor, material, uiElements[ShaderPropUnlit_Specular_UseDirectionalLight], + ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, m, uiElements[ShaderPropUnlit_Specular_UseDirectionalLight], ref m_specularFoldout); if (!m_specularFoldout) return; - DrawColorFieldGUI(materialEditor, material, uiElements[ShaderPropUnlit_Specular_Color]); - DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderPropUnlit_Specular_Intensity]); - DrawVector3FieldGUI(materialEditor, material, uiElements[ShaderPropUnlit_Specular_LightDirection]); - } - - -//---------------------------------------------------------------------------------------------------------------------- - static void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { - if (null!= element.extraProperty2) - materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop, element.extraProperty2.prop); - else if (null!= element.extraProperty1) - materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop); - else - materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop); - } - - static void DrawColorPropertyGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { - materialEditor.ColorProperty(element.mainProperty.prop, element.label.text); - } - - static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { - EditorGUI.BeginChangeCheck(); - bool ret = EditorGUILayout.Toggle(element.label, material.GetInteger(element.mainProperty.id) !=0); - if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetInteger(element.mainProperty.id, ret ? 1 : 0); - } - - return ret; - } - - static float DrawFloatFieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { - - float ret = material.GetFloat(element.mainProperty.id); - EditorGUI.BeginChangeCheck(); - ret = EditorGUILayout.FloatField(element.label, ret); - - if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetFloat(element.mainProperty.id, ret); - } - return ret; - } - - static Color DrawColorFieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { - - Color ret = material.GetColor(element.mainProperty.id); - EditorGUI.BeginChangeCheck(); - ret = EditorGUILayout.ColorField(element.label, ret); - - if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetColor(element.mainProperty.id, ret); - } - return ret; - } - - static Vector3 DrawVector3FieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { - - Vector3 ret = material.GetVector(element.mainProperty.id); - EditorGUI.BeginChangeCheck(); - ret = EditorGUILayout.Vector3Field(element.label, ret); - - if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetVector(element.mainProperty.id, ret); - } - return ret; - } - - //Return the index - static int DrawIntPopupGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element, - GUIContent[] displayedOptions, int[] optionValues) - { - int propValue = material.GetInteger(element.mainProperty.id); - - EditorGUI.BeginChangeCheck(); - int ret = EditorGUILayout.IntPopup(element.label, propValue, displayedOptions, optionValues); - - if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetInteger(element.mainProperty.id, ret); - } - - return ret; - } - - - //return true if changed, false otherwise - static bool DrawFoldoutGUI(ref bool state, GUIContent label) { - - Rect lineRect = EditorGUILayout.GetControlRect(false, 16); - - DrawBGRect(lineRect); - - EditorGUI.BeginChangeCheck(); - state = EditorGUI.Foldout(lineRect, state, label); - if (EditorGUI.EndChangeCheck()) { - return true; - } - - return false; - - } - - //return true if changed, false otherwise - static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, - ref bool foldoutState, ref bool toggleEnabled, string label) - { - GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); - Rect lineRect = EditorGUILayout.GetControlRect(false, 16); - Rect foldoutRect = new Rect(lineRect.x, lineRect.y, 16, lineRect.height); - Rect toggleRect = new Rect(foldoutRect.xMax, lineRect.y, 16, lineRect.height); - Rect labelRect = new Rect(toggleRect.xMax + 2, lineRect.y, lineRect.width - 34, lineRect.height); - - DrawBGRect(lineRect); - - EditorGUI.BeginChangeCheck(); - foldoutState = EditorGUI.Foldout(foldoutRect, foldoutState, GUIContent.none, true, foldoutStyle); - toggleEnabled = EditorGUI.Toggle(toggleRect, toggleEnabled); - EditorGUI.LabelField(labelRect, label); - - if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(label); - return true; - } - - return false; - } - - static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element, - ref bool foldoutState) - { - bool enabled = material.GetInteger(element.mainProperty.id) !=0; - bool ret = DrawFoldoutWithToggleGUI(materialEditor, ref foldoutState, ref enabled, element.label.text); - if (ret) { - material.SetInteger(element.mainProperty.id, enabled ? 1 : 0); - } - - return ret; - - } - - - static void DrawBGRect(Rect lineRect) { - - float initialPadding = lineRect.x; - Rect bgRect = new Rect(0, lineRect.y, lineRect.width + initialPadding, lineRect.height); - - Color bgColor = GetBGColor(); - EditorGUI.DrawRect(bgRect, bgColor); - - // Draw top border - Rect topBorderRect = new Rect(bgRect.x, bgRect.y, bgRect.width, 1); - EditorGUI.DrawRect(topBorderRect, new Color(0.12f, 0.12f, 0.12f, 1f)); - } - - static Color GetBGColor() { - - return !EditorGUIUtility.isProSkin - ? new Color(0.6f, 0.6f, 0.6f, 1.0f) - : new Color(0.20f, 0.20f, 0.20f, 1.0f); + ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, m, uiElements[ShaderPropUnlit_Specular_Color], out Color _); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, m, uiElements[ShaderPropUnlit_Specular_Intensity], out float _); + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, m, uiElements[ShaderPropUnlit_Specular_LightDirection], out Vector3 _); } //---------------------------------------------------------------------------------------------------------------------- diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs index 369147f54..3a64fa3fc 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs @@ -17,71 +17,98 @@ internal static void DrawColorPropertyGUI(MaterialEditor materialEditor, Materia materialEditor.ColorProperty(element.mainProperty.prop, element.label.text); } - internal static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + internal static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, + MaterialPropertyUIElement element) + { + return DrawToggleGUI(materialEditor, material, element, out bool _); + } + + internal static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, + MaterialPropertyUIElement element, out bool newValue) + { + bool prevValue = material.GetInteger(element.mainProperty.id) !=0; EditorGUI.BeginChangeCheck(); - bool ret = EditorGUILayout.Toggle(element.label, material.GetInteger(element.mainProperty.id) !=0); + newValue = EditorGUILayout.Toggle(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetInteger(element.mainProperty.id, ret ? 1 : 0); + material.SetInteger(element.mainProperty.id, newValue ? 1 : 0); + return true; } - - return ret; + return false; } - internal static float DrawFloatFieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + internal static bool DrawFloatFieldGUI(MaterialEditor materialEditor, Material material, + MaterialPropertyUIElement element) + { + + return DrawFloatFieldGUI(materialEditor, material, element, out float _); + } + + internal static bool DrawFloatFieldGUI(MaterialEditor materialEditor, Material material, + MaterialPropertyUIElement element, out float newValue) { - float ret = material.GetFloat(element.mainProperty.id); + float prevValue = material.GetFloat(element.mainProperty.id); EditorGUI.BeginChangeCheck(); - ret = EditorGUILayout.FloatField(element.label, ret); + newValue = EditorGUILayout.FloatField(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetFloat(element.mainProperty.id, ret); + material.SetFloat(element.mainProperty.id, newValue); + return true; } - return ret; + return false; } - internal static Color DrawColorFieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + internal static bool DrawColorFieldGUI(MaterialEditor materialEditor, Material material, + MaterialPropertyUIElement element, out Color newValue) { - Color ret = material.GetColor(element.mainProperty.id); + Color prevValue = material.GetColor(element.mainProperty.id); EditorGUI.BeginChangeCheck(); - ret = EditorGUILayout.ColorField(element.label, ret); + newValue = EditorGUILayout.ColorField(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetColor(element.mainProperty.id, ret); + material.SetColor(element.mainProperty.id, newValue); + return true; } - return ret; + + return false; } - internal static Vector3 DrawVector3FieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + //return true if changed, false otherwise + internal static bool DrawVector3FieldGUI(MaterialEditor materialEditor, Material material, + MaterialPropertyUIElement element, out Vector3 newValue) { - Vector3 ret = material.GetVector(element.mainProperty.id); + Vector3 prevValue = material.GetVector(element.mainProperty.id); EditorGUI.BeginChangeCheck(); - ret = EditorGUILayout.Vector3Field(element.label, ret); + newValue = EditorGUILayout.Vector3Field(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetVector(element.mainProperty.id, ret); + material.SetVector(element.mainProperty.id, newValue); + return true; } - return ret; + + return false; } - //Return the index - internal static int DrawIntPopupGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element, - GUIContent[] displayedOptions, int[] optionValues) + //return true if changed, false otherwise + internal static bool DrawIntPopupGUI(MaterialEditor materialEditor, Material material, + MaterialPropertyUIElement element, GUIContent[] displayedOptions, int[] optionValues, out int newValue) { - int propValue = material.GetInteger(element.mainProperty.id); + int prevValue = material.GetInteger(element.mainProperty.id); EditorGUI.BeginChangeCheck(); - int ret = EditorGUILayout.IntPopup(element.label, propValue, displayedOptions, optionValues); + newValue = EditorGUILayout.IntPopup(element.label, prevValue, displayedOptions, optionValues); if (EditorGUI.EndChangeCheck()) { materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetInteger(element.mainProperty.id, ret); + material.SetInteger(element.mainProperty.id, newValue); + return true; } - return ret; + return false; + } @@ -127,8 +154,9 @@ internal static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, return false; } - internal static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element, - ref bool foldoutState) + //return true if changed, false otherwise + internal static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material material, + MaterialPropertyUIElement element, ref bool foldoutState) { bool enabled = material.GetInteger(element.mainProperty.id) !=0; bool ret = DrawFoldoutWithToggleGUI(materialEditor, ref foldoutState, ref enabled, element.label.text); From 95c74a8a3ac72a82576dfc1a47c681e556a6e6f7 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 14:43:15 +0900 Subject: [PATCH 056/290] fix errors when apply toggle are checked --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index f531c7f66..5d4f3f56e 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -215,11 +215,19 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty label = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."), extraPropertyName1 = new MaterialName(ShaderProp_1st_ShadeColor), }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_1st_ShadeColor), + label = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."), + }, new MaterialUIElement { mainPropertyName = new MaterialName(ShaderProp_2nd_ShadeMap), label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), extraPropertyName1 = new MaterialName(ShaderProp_2nd_ShadeColor) }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_2nd_ShadeColor), + label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), + }, new MaterialUIElement { mainPropertyName = new MaterialName(ShaderPropUse_BaseAs1st), label = new GUIContent("Apply to 1st shading map", "Apply Base map to the 1st shading map."), From f5c0077c06624dcbf0be65e842f475fad951339d Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 14:43:25 +0900 Subject: [PATCH 057/290] minor --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 5d4f3f56e..1bd009a91 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -137,7 +137,7 @@ static void GUI_BasicThreeColors(MaterialEditor materialEditor, Material materia } EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_1stAs2nd], out bool applyTo2nd); + ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_1stAs2nd], out bool applyTo2nd); EditorGUI.indentLevel -= 2; From 1a92ca0240d1d8057a401b3f323b236952b89179 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 14:48:14 +0900 Subject: [PATCH 058/290] rename variables --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 74 +++++++++---------- .../Scripts/Utilities/ToonEditorGUIUtility.cs | 69 +++++++++-------- 2 files changed, 70 insertions(+), 73 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 1bd009a91..27bd8116c 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -5,52 +5,50 @@ class UnityToon3Das2DGUI : UnityEditor.ShaderGUI { - public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] props) { + public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { - Material material = materialEditor.target as Material; + Material material = mEditor.target as Material; if (material == null) return; InitMaterialPropertyUIElements(props); EditorGUI.BeginChangeCheck(); - GUI_BasicThreeColors(materialEditor, material, m_materialPropertyUIElements); + GUI_BasicThreeColors(mEditor, material, m_materialPropertyUIElements); - DrawNormalMapGUI(materialEditor, m_materialPropertyUIElements); - DrawOutlineGUI(materialEditor, material, m_materialPropertyUIElements); - DrawSpecularGUI(materialEditor, material, m_materialPropertyUIElements); + DrawNormalMapGUI(mEditor, m_materialPropertyUIElements); + DrawOutlineGUI(mEditor, material, m_materialPropertyUIElements); + DrawSpecularGUI(mEditor, material, m_materialPropertyUIElements); if (EditorGUI.EndChangeCheck()) { - materialEditor.PropertiesChanged(); + mEditor.PropertiesChanged(); } } - void DrawNormalMapGUI(MaterialEditor materialEditor, - Dictionary uiElements) { + void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements) { ToonEditorGUIUtility.DrawFoldoutGUI(ref m_normalMapFoldout, uiElements[ShaderProp_NormalMap].label); if (!m_normalMapFoldout) return; - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_NormalMap]); - materialEditor.TextureScaleOffsetProperty(uiElements[ShaderProp_NormalMap].mainProperty.prop); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderProp_NormalMap]); + mEditor.TextureScaleOffsetProperty(uiElements[ShaderProp_NormalMap].mainProperty.prop); EditorGUILayout.Space(); } - void DrawOutlineGUI(MaterialEditor materialEditor, Material material, - Dictionary uiElements) + void DrawOutlineGUI(MaterialEditor mEditor, Material m, Dictionary uiElements) { //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; - bool isOutlineEnabled = material.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); + bool isOutlineEnabled = m.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); - if (ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(materialEditor, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) + if (ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) { - material.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); + m.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); } @@ -61,7 +59,7 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, EditorGUI.indentLevel++; EditorGUI.BeginDisabledGroup(!isOutlineEnabled); - ToonEditorGUIUtility.DrawIntPopupGUI(materialEditor, material, uiElements[ShaderProp_OutlineMode], + ToonEditorGUIUtility.DrawIntPopupGUI(mEditor, m, uiElements[ShaderProp_OutlineMode], m_outlineModeEnums, m_outlineModeIndices, out int outlineMode); const string OUTLINE_NORMAL_KEYWORD = "_OUTLINE_NML";; @@ -69,43 +67,43 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, switch (outlineMode) { case (int) OutlineMode.NormalDirection: - material.EnableKeyword(OUTLINE_NORMAL_KEYWORD); - material.DisableKeyword(OUTLINE_POSITION_KEYWORD); + m.EnableKeyword(OUTLINE_NORMAL_KEYWORD); + m.DisableKeyword(OUTLINE_POSITION_KEYWORD); break; case (int) OutlineMode.PositionScaling: - material.EnableKeyword(OUTLINE_POSITION_KEYWORD); - material.DisableKeyword(OUTLINE_NORMAL_KEYWORD); + m.EnableKeyword(OUTLINE_POSITION_KEYWORD); + m.DisableKeyword(OUTLINE_NORMAL_KEYWORD); break; } EditorGUI.BeginDisabledGroup(outlineMode != (int) OutlineMode.NormalDirection); { - ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderProp_Outline_UseCustomNormalMap], + ToonEditorGUIUtility.DrawToggleGUI(mEditor, m, uiElements[ShaderProp_Outline_UseCustomNormalMap], out bool useCustom); EditorGUI.BeginDisabledGroup(!useCustom); - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor,uiElements[ShaderProp_Outline_CustomNormalMap]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor,uiElements[ShaderProp_Outline_CustomNormalMap]); EditorGUI.EndDisabledGroup(); } EditorGUI.EndDisabledGroup(); - ToonEditorGUIUtility.DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineWidth]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, m, uiElements[ShaderProp_OutlineWidth]); - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_OutlineTex]); - ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderProp_Outline_BlendBaseColor]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderProp_OutlineTex]); + ToonEditorGUIUtility.DrawToggleGUI(mEditor, m, uiElements[ShaderProp_Outline_BlendBaseColor]); - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_OutlineWidthMap]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderProp_OutlineWidthMap]); - ToonEditorGUIUtility.DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineOffsetZ]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, m, uiElements[ShaderProp_OutlineOffsetZ]); EditorGUILayout.Space(); { EditorGUILayout.LabelField("Camera Distance for Outline Width"); EditorGUI.indentLevel++; - ToonEditorGUIUtility.DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineNear]); - ToonEditorGUIUtility.DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineFar]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, m, uiElements[ShaderProp_OutlineNear]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, m, uiElements[ShaderProp_OutlineFar]); EditorGUI.indentLevel--; @@ -119,34 +117,34 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, //---------------------------------------------------------------------------------------------------------------------- - static void GUI_BasicThreeColors(MaterialEditor materialEditor, Material material, + static void GUI_BasicThreeColors(MaterialEditor mEditor, Material m, Dictionary uiElements) { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderPropMainTex]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderPropMainTex]); EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_BaseAs1st], out bool applyTo1st ); + ToonEditorGUIUtility.DrawToggleGUI(mEditor, m, uiElements[ShaderPropUse_BaseAs1st], out bool applyTo1st ); EditorGUI.indentLevel -= 2; if (applyTo1st) { EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawColorPropertyGUI(materialEditor, uiElements[ShaderProp_1st_ShadeColor]); + ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[ShaderProp_1st_ShadeColor]); EditorGUI.indentLevel -= 2; } else { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_1st_ShadeMap]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderProp_1st_ShadeMap]); } EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_1stAs2nd], out bool applyTo2nd); + ToonEditorGUIUtility.DrawToggleGUI(mEditor, m, uiElements[ShaderPropUse_1stAs2nd], out bool applyTo2nd); EditorGUI.indentLevel -= 2; if (applyTo2nd) { EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawColorPropertyGUI(materialEditor, uiElements[ShaderProp_2nd_ShadeColor]); + ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[ShaderProp_2nd_ShadeColor]); EditorGUI.indentLevel -= 2; } else { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_2nd_ShadeMap]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderProp_2nd_ShadeMap]); } } diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs index 3a64fa3fc..ebba04745 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs @@ -4,56 +4,55 @@ internal static class ToonEditorGUIUtility { - internal static void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { + internal static void DrawTexturePropertySingleLineGUI(MaterialEditor mEditor, MaterialPropertyUIElement element) { if (null!= element.extraProperty2) - materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop, element.extraProperty2.prop); + mEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop, element.extraProperty2.prop); else if (null!= element.extraProperty1) - materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop); + mEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop); else - materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop); + mEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop); } - internal static void DrawColorPropertyGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { - materialEditor.ColorProperty(element.mainProperty.prop, element.label.text); + internal static void DrawColorPropertyGUI(MaterialEditor mEditor, MaterialPropertyUIElement element) { + mEditor.ColorProperty(element.mainProperty.prop, element.label.text); } - internal static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, + internal static bool DrawToggleGUI(MaterialEditor mEditor, Material m, MaterialPropertyUIElement element) { - return DrawToggleGUI(materialEditor, material, element, out bool _); + return DrawToggleGUI(mEditor, m, element, out bool _); } - internal static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, + internal static bool DrawToggleGUI(MaterialEditor mEditor, Material m, MaterialPropertyUIElement element, out bool newValue) { - bool prevValue = material.GetInteger(element.mainProperty.id) !=0; + bool prevValue = m.GetInteger(element.mainProperty.id) !=0; EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.Toggle(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetInteger(element.mainProperty.id, newValue ? 1 : 0); + mEditor.RegisterPropertyChangeUndo(element.label.text); + m.SetInteger(element.mainProperty.id, newValue ? 1 : 0); return true; } return false; } - internal static bool DrawFloatFieldGUI(MaterialEditor materialEditor, Material material, - MaterialPropertyUIElement element) + internal static bool DrawFloatFieldGUI(MaterialEditor mEditor, Material m, MaterialPropertyUIElement element) { - return DrawFloatFieldGUI(materialEditor, material, element, out float _); + return DrawFloatFieldGUI(mEditor, m, element, out float _); } - internal static bool DrawFloatFieldGUI(MaterialEditor materialEditor, Material material, - MaterialPropertyUIElement element, out float newValue) { - - float prevValue = material.GetFloat(element.mainProperty.id); + internal static bool DrawFloatFieldGUI(MaterialEditor mEditor, Material m, + MaterialPropertyUIElement element, out float newValue) + { + float prevValue = m.GetFloat(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.FloatField(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetFloat(element.mainProperty.id, newValue); + mEditor.RegisterPropertyChangeUndo(element.label.text); + m.SetFloat(element.mainProperty.id, newValue); return true; } return false; @@ -76,16 +75,16 @@ internal static bool DrawColorFieldGUI(MaterialEditor materialEditor, Material m } //return true if changed, false otherwise - internal static bool DrawVector3FieldGUI(MaterialEditor materialEditor, Material material, + internal static bool DrawVector3FieldGUI(MaterialEditor mEditor, Material m, MaterialPropertyUIElement element, out Vector3 newValue) { - Vector3 prevValue = material.GetVector(element.mainProperty.id); + Vector3 prevValue = m.GetVector(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.Vector3Field(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetVector(element.mainProperty.id, newValue); + mEditor.RegisterPropertyChangeUndo(element.label.text); + m.SetVector(element.mainProperty.id, newValue); return true; } @@ -93,17 +92,17 @@ internal static bool DrawVector3FieldGUI(MaterialEditor materialEditor, Material } //return true if changed, false otherwise - internal static bool DrawIntPopupGUI(MaterialEditor materialEditor, Material material, + internal static bool DrawIntPopupGUI(MaterialEditor mEditor, Material m, MaterialPropertyUIElement element, GUIContent[] displayedOptions, int[] optionValues, out int newValue) { - int prevValue = material.GetInteger(element.mainProperty.id); + int prevValue = m.GetInteger(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.IntPopup(element.label, prevValue, displayedOptions, optionValues); if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetInteger(element.mainProperty.id, newValue); + mEditor.RegisterPropertyChangeUndo(element.label.text); + m.SetInteger(element.mainProperty.id, newValue); return true; } @@ -130,7 +129,7 @@ internal static bool DrawFoldoutGUI(ref bool state, GUIContent label) { } //return true if changed, false otherwise - internal static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, + internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, ref bool foldoutState, ref bool toggleEnabled, string label) { GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); @@ -147,7 +146,7 @@ internal static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, EditorGUI.LabelField(labelRect, label); if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(label); + mEditor.RegisterPropertyChangeUndo(label); return true; } @@ -155,13 +154,13 @@ internal static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, } //return true if changed, false otherwise - internal static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material material, + internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, Material m, MaterialPropertyUIElement element, ref bool foldoutState) { - bool enabled = material.GetInteger(element.mainProperty.id) !=0; - bool ret = DrawFoldoutWithToggleGUI(materialEditor, ref foldoutState, ref enabled, element.label.text); + bool enabled = m.GetInteger(element.mainProperty.id) !=0; + bool ret = DrawFoldoutWithToggleGUI(mEditor, ref foldoutState, ref enabled, element.label.text); if (ret) { - material.SetInteger(element.mainProperty.id, enabled ? 1 : 0); + m.SetInteger(element.mainProperty.id, enabled ? 1 : 0); } return ret; From 84706a677176a7e792d3e066d11b938dbf091c54 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 14:49:06 +0900 Subject: [PATCH 059/290] rename --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 27bd8116c..70f80d861 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -14,7 +14,7 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { InitMaterialPropertyUIElements(props); EditorGUI.BeginChangeCheck(); - GUI_BasicThreeColors(mEditor, material, m_materialPropertyUIElements); + DrawThreeColorsGUI(mEditor, material, m_materialPropertyUIElements); DrawNormalMapGUI(mEditor, m_materialPropertyUIElements); DrawOutlineGUI(mEditor, material, m_materialPropertyUIElements); @@ -117,7 +117,7 @@ void DrawOutlineGUI(MaterialEditor mEditor, Material m, Dictionary uiElements) { ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderPropMainTex]); From e81013d5603262fe3b621773b34b9612ca2d9b89 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 15:06:00 +0900 Subject: [PATCH 060/290] support editing multiple materials --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 65 ++++++++++++------- .../Scripts/Utilities/ToonEditorGUIUtility.cs | 52 ++++++++------- 2 files changed, 70 insertions(+), 47 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 70f80d861..94d5bcb2d 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -6,6 +6,16 @@ class UnityToon3Das2DGUI : UnityEditor.ShaderGUI { public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { + + if (null == mEditor.targets || mEditor.targets.Length == 0) { + return; + } + + int numTargets = mEditor.targets.Length; + Material[] mats = new Material[numTargets]; + for (int i = 0; i < numTargets; ++i) { + mats[i] = mEditor.targets[i] as Material; + } Material material = mEditor.target as Material; if (material == null) @@ -14,11 +24,11 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { InitMaterialPropertyUIElements(props); EditorGUI.BeginChangeCheck(); - DrawThreeColorsGUI(mEditor, material, m_materialPropertyUIElements); + DrawThreeColorsGUI(mEditor, mats, m_materialPropertyUIElements); DrawNormalMapGUI(mEditor, m_materialPropertyUIElements); - DrawOutlineGUI(mEditor, material, m_materialPropertyUIElements); - DrawSpecularGUI(mEditor, material, m_materialPropertyUIElements); + DrawOutlineGUI(mEditor, mats, m_materialPropertyUIElements); + DrawSpecularGUI(mEditor, mats, m_materialPropertyUIElements); if (EditorGUI.EndChangeCheck()) { @@ -39,16 +49,17 @@ void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements) + void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements) { //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; - bool isOutlineEnabled = m.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); + bool isOutlineEnabled = mats[0].GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); if (ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) { - m.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); + foreach (Material m in mats) + m.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); } @@ -59,7 +70,7 @@ void DrawOutlineGUI(MaterialEditor mEditor, Material m, Dictionary uiElements) { ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderPropMainTex]); EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(mEditor, m, uiElements[ShaderPropUse_BaseAs1st], out bool applyTo1st ); + ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[ShaderPropUse_BaseAs1st], out bool applyTo1st ); EditorGUI.indentLevel -= 2; if (applyTo1st) { @@ -135,7 +150,7 @@ static void DrawThreeColorsGUI(MaterialEditor mEditor, Material m, } EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(mEditor, m, uiElements[ShaderPropUse_1stAs2nd], out bool applyTo2nd); + ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[ShaderPropUse_1stAs2nd], out bool applyTo2nd); EditorGUI.indentLevel -= 2; @@ -148,18 +163,18 @@ static void DrawThreeColorsGUI(MaterialEditor mEditor, Material m, } } - void DrawSpecularGUI(MaterialEditor mEditor, Material m, Dictionary uiElements) { + void DrawSpecularGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements) { - ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, m, uiElements[ShaderPropUnlit_Specular_UseDirectionalLight], + ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, mats, uiElements[ShaderPropUnlit_Specular_UseDirectionalLight], ref m_specularFoldout); if (!m_specularFoldout) return; - ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, m, uiElements[ShaderPropUnlit_Specular_Color], out Color _); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, m, uiElements[ShaderPropUnlit_Specular_Intensity], out float _); - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, m, uiElements[ShaderPropUnlit_Specular_LightDirection], out Vector3 _); + ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, mats, uiElements[ShaderPropUnlit_Specular_Color], out Color _); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, mats, uiElements[ShaderPropUnlit_Specular_Intensity], out float _); + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[ShaderPropUnlit_Specular_LightDirection], out Vector3 _); } //---------------------------------------------------------------------------------------------------------------------- diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs index ebba04745..c9025701d 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs @@ -17,57 +17,62 @@ internal static void DrawColorPropertyGUI(MaterialEditor mEditor, MaterialProper mEditor.ColorProperty(element.mainProperty.prop, element.label.text); } - internal static bool DrawToggleGUI(MaterialEditor mEditor, Material m, + internal static bool DrawToggleGUI(MaterialEditor mEditor, Material[] mats, MaterialPropertyUIElement element) { - return DrawToggleGUI(mEditor, m, element, out bool _); + return DrawToggleGUI(mEditor, mats, element, out bool _); } - internal static bool DrawToggleGUI(MaterialEditor mEditor, Material m, + internal static bool DrawToggleGUI(MaterialEditor mEditor, Material[] mats, MaterialPropertyUIElement element, out bool newValue) { - bool prevValue = m.GetInteger(element.mainProperty.id) !=0; + + + bool prevValue = mats[0].GetInteger(element.mainProperty.id) !=0; EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.Toggle(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { mEditor.RegisterPropertyChangeUndo(element.label.text); - m.SetInteger(element.mainProperty.id, newValue ? 1 : 0); + foreach (Material m in mats) + m.SetInteger(element.mainProperty.id, newValue ? 1 : 0); return true; } return false; } - internal static bool DrawFloatFieldGUI(MaterialEditor mEditor, Material m, MaterialPropertyUIElement element) + internal static bool DrawFloatFieldGUI(MaterialEditor mEditor, Material[] mats, MaterialPropertyUIElement element) { - return DrawFloatFieldGUI(mEditor, m, element, out float _); + return DrawFloatFieldGUI(mEditor, mats, element, out float _); } - internal static bool DrawFloatFieldGUI(MaterialEditor mEditor, Material m, + internal static bool DrawFloatFieldGUI(MaterialEditor mEditor, Material[] mats, MaterialPropertyUIElement element, out float newValue) { - float prevValue = m.GetFloat(element.mainProperty.id); + float prevValue = mats[0].GetFloat(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.FloatField(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { mEditor.RegisterPropertyChangeUndo(element.label.text); - m.SetFloat(element.mainProperty.id, newValue); + foreach (Material m in mats) + m.SetFloat(element.mainProperty.id, newValue); return true; } return false; } - internal static bool DrawColorFieldGUI(MaterialEditor materialEditor, Material material, + internal static bool DrawColorFieldGUI(MaterialEditor materialEditor, Material[] mats, MaterialPropertyUIElement element, out Color newValue) { - Color prevValue = material.GetColor(element.mainProperty.id); + Color prevValue = mats[0].GetColor(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.ColorField(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetColor(element.mainProperty.id, newValue); + foreach (Material m in mats) + m.SetColor(element.mainProperty.id, newValue); return true; } @@ -75,16 +80,17 @@ internal static bool DrawColorFieldGUI(MaterialEditor materialEditor, Material m } //return true if changed, false otherwise - internal static bool DrawVector3FieldGUI(MaterialEditor mEditor, Material m, + internal static bool DrawVector3FieldGUI(MaterialEditor mEditor, Material[] mats, MaterialPropertyUIElement element, out Vector3 newValue) { - Vector3 prevValue = m.GetVector(element.mainProperty.id); + Vector3 prevValue = mats[0].GetVector(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.Vector3Field(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { mEditor.RegisterPropertyChangeUndo(element.label.text); - m.SetVector(element.mainProperty.id, newValue); + foreach (Material m in mats) + m.SetVector(element.mainProperty.id, newValue); return true; } @@ -92,17 +98,18 @@ internal static bool DrawVector3FieldGUI(MaterialEditor mEditor, Material m, } //return true if changed, false otherwise - internal static bool DrawIntPopupGUI(MaterialEditor mEditor, Material m, + internal static bool DrawIntPopupGUI(MaterialEditor mEditor, Material[] mats, MaterialPropertyUIElement element, GUIContent[] displayedOptions, int[] optionValues, out int newValue) { - int prevValue = m.GetInteger(element.mainProperty.id); + int prevValue = mats[0].GetInteger(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.IntPopup(element.label, prevValue, displayedOptions, optionValues); if (EditorGUI.EndChangeCheck()) { mEditor.RegisterPropertyChangeUndo(element.label.text); - m.SetInteger(element.mainProperty.id, newValue); + foreach (Material m in mats) + m.SetInteger(element.mainProperty.id, newValue); return true; } @@ -154,13 +161,14 @@ internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, } //return true if changed, false otherwise - internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, Material m, + internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, Material[] mats, MaterialPropertyUIElement element, ref bool foldoutState) { - bool enabled = m.GetInteger(element.mainProperty.id) !=0; + bool enabled = mats[0].GetInteger(element.mainProperty.id) !=0; bool ret = DrawFoldoutWithToggleGUI(mEditor, ref foldoutState, ref enabled, element.label.text); if (ret) { - m.SetInteger(element.mainProperty.id, enabled ? 1 : 0); + foreach (Material m in mats) + m.SetInteger(element.mainProperty.id, enabled ? 1 : 0); } return ret; From ff5665a39567fd430af9c350ddc431e507dbf904 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 15:09:40 +0900 Subject: [PATCH 061/290] invert if --- .../Scripts/Utilities/ToonEditorGUIUtility.cs | 105 ++++++++---------- 1 file changed, 49 insertions(+), 56 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs index c9025701d..5384daa47 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs @@ -31,13 +31,13 @@ internal static bool DrawToggleGUI(MaterialEditor mEditor, Material[] mats, bool prevValue = mats[0].GetInteger(element.mainProperty.id) !=0; EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.Toggle(element.label, prevValue); - if (EditorGUI.EndChangeCheck()) { - mEditor.RegisterPropertyChangeUndo(element.label.text); - foreach (Material m in mats) - m.SetInteger(element.mainProperty.id, newValue ? 1 : 0); - return true; - } - return false; + if (!EditorGUI.EndChangeCheck()) + return false; + + mEditor.RegisterPropertyChangeUndo(element.label.text); + foreach (Material m in mats) + m.SetInteger(element.mainProperty.id, newValue ? 1 : 0); + return true; } internal static bool DrawFloatFieldGUI(MaterialEditor mEditor, Material[] mats, MaterialPropertyUIElement element) @@ -52,14 +52,14 @@ internal static bool DrawFloatFieldGUI(MaterialEditor mEditor, Material[] mats, float prevValue = mats[0].GetFloat(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.FloatField(element.label, prevValue); + + if (!EditorGUI.EndChangeCheck()) + return false; - if (EditorGUI.EndChangeCheck()) { - mEditor.RegisterPropertyChangeUndo(element.label.text); - foreach (Material m in mats) - m.SetFloat(element.mainProperty.id, newValue); - return true; - } - return false; + mEditor.RegisterPropertyChangeUndo(element.label.text); + foreach (Material m in mats) + m.SetFloat(element.mainProperty.id, newValue); + return true; } internal static bool DrawColorFieldGUI(MaterialEditor materialEditor, Material[] mats, @@ -68,15 +68,15 @@ internal static bool DrawColorFieldGUI(MaterialEditor materialEditor, Material[] Color prevValue = mats[0].GetColor(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.ColorField(element.label, prevValue); + + if (!EditorGUI.EndChangeCheck()) + return false; - if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - foreach (Material m in mats) - m.SetColor(element.mainProperty.id, newValue); - return true; - } - - return false; + materialEditor.RegisterPropertyChangeUndo(element.label.text); + foreach (Material m in mats) + m.SetColor(element.mainProperty.id, newValue); + return true; + } //return true if changed, false otherwise @@ -86,15 +86,15 @@ internal static bool DrawVector3FieldGUI(MaterialEditor mEditor, Material[] mats Vector3 prevValue = mats[0].GetVector(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.Vector3Field(element.label, prevValue); + + if (!EditorGUI.EndChangeCheck()) + return false; - if (EditorGUI.EndChangeCheck()) { - mEditor.RegisterPropertyChangeUndo(element.label.text); - foreach (Material m in mats) - m.SetVector(element.mainProperty.id, newValue); - return true; - } - - return false; + mEditor.RegisterPropertyChangeUndo(element.label.text); + foreach (Material m in mats) + m.SetVector(element.mainProperty.id, newValue); + return true; + } //return true if changed, false otherwise @@ -105,16 +105,15 @@ internal static bool DrawIntPopupGUI(MaterialEditor mEditor, Material[] mats, EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.IntPopup(element.label, prevValue, displayedOptions, optionValues); + + if (!EditorGUI.EndChangeCheck()) + return false; - if (EditorGUI.EndChangeCheck()) { - mEditor.RegisterPropertyChangeUndo(element.label.text); - foreach (Material m in mats) - m.SetInteger(element.mainProperty.id, newValue); - return true; - } - - return false; - + mEditor.RegisterPropertyChangeUndo(element.label.text); + foreach (Material m in mats) + m.SetInteger(element.mainProperty.id, newValue); + return true; + } @@ -127,12 +126,7 @@ internal static bool DrawFoldoutGUI(ref bool state, GUIContent label) { EditorGUI.BeginChangeCheck(); state = EditorGUI.Foldout(lineRect, state, label); - if (EditorGUI.EndChangeCheck()) { - return true; - } - - return false; - + return EditorGUI.EndChangeCheck(); } //return true if changed, false otherwise @@ -151,13 +145,13 @@ internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, foldoutState = EditorGUI.Foldout(foldoutRect, foldoutState, GUIContent.none, true, foldoutStyle); toggleEnabled = EditorGUI.Toggle(toggleRect, toggleEnabled); EditorGUI.LabelField(labelRect, label); + + if (!EditorGUI.EndChangeCheck()) + return false; - if (EditorGUI.EndChangeCheck()) { - mEditor.RegisterPropertyChangeUndo(label); - return true; - } + mEditor.RegisterPropertyChangeUndo(label); + return true; - return false; } //return true if changed, false otherwise @@ -166,13 +160,12 @@ internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, Material[] { bool enabled = mats[0].GetInteger(element.mainProperty.id) !=0; bool ret = DrawFoldoutWithToggleGUI(mEditor, ref foldoutState, ref enabled, element.label.text); - if (ret) { - foreach (Material m in mats) - m.SetInteger(element.mainProperty.id, enabled ? 1 : 0); - } - - return ret; + if (!ret) + return false; + foreach (Material m in mats) + m.SetInteger(element.mainProperty.id, enabled ? 1 : 0); + return true; } From 0eda324a7e82109f2c852b297496a9868d0716f4 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 15:17:54 +0900 Subject: [PATCH 062/290] use MaterialEditor.FloatProperty --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 10 ++++----- .../Scripts/Utilities/ToonEditorGUIUtility.cs | 22 ++----------------- 2 files changed, 7 insertions(+), 25 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 94d5bcb2d..a03ae674b 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -103,22 +103,22 @@ void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary Date: Wed, 19 Nov 2025 15:23:45 +0900 Subject: [PATCH 063/290] Colorfield --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 2 +- .../Scripts/Utilities/ToonEditorGUIUtility.cs | 23 ++++--------------- 2 files changed, 5 insertions(+), 20 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index a03ae674b..52ca00ebc 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -172,7 +172,7 @@ void DrawSpecularGUI(MaterialEditor mEditor, Material[] mats, Dictionary Date: Wed, 19 Nov 2025 15:32:48 +0900 Subject: [PATCH 064/290] turn all to static --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 52ca00ebc..ec5cb71d9 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -26,9 +26,9 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { EditorGUI.BeginChangeCheck(); DrawThreeColorsGUI(mEditor, mats, m_materialPropertyUIElements); - DrawNormalMapGUI(mEditor, m_materialPropertyUIElements); - DrawOutlineGUI(mEditor, mats, m_materialPropertyUIElements); - DrawSpecularGUI(mEditor, mats, m_materialPropertyUIElements); + DrawNormalMapGUI(mEditor, m_materialPropertyUIElements, ref m_normalMapFoldout); + DrawOutlineGUI(mEditor, mats, m_materialPropertyUIElements, ref m_outlineFoldout); + DrawSpecularGUI(mEditor, mats, m_materialPropertyUIElements, ref m_specularFoldout); if (EditorGUI.EndChangeCheck()) { @@ -36,10 +36,11 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { } } - void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements) { + static void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements, + ref bool foldout) { - ToonEditorGUIUtility.DrawFoldoutGUI(ref m_normalMapFoldout, uiElements[ShaderProp_NormalMap].label); - if (!m_normalMapFoldout) + ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, uiElements[ShaderProp_NormalMap].label); + if (!foldout) return; ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderProp_NormalMap]); @@ -49,21 +50,22 @@ void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements) + static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements, ref bool foldout) { //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; bool isOutlineEnabled = mats[0].GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); - if (ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) + if (ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, ref foldout, ref isOutlineEnabled, "Outline")) { foreach (Material m in mats) m.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); } - if (!m_outlineFoldout) + if (!foldout) return; //Outline Settings @@ -163,13 +165,14 @@ static void DrawThreeColorsGUI(MaterialEditor mEditor, Material[] mats, } } - void DrawSpecularGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements) { + static void DrawSpecularGUI(MaterialEditor mEditor, Material[] mats, + Dictionary uiElements, ref bool foldout) { ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, mats, uiElements[ShaderPropUnlit_Specular_UseDirectionalLight], - ref m_specularFoldout); + ref foldout); - if (!m_specularFoldout) + if (!foldout) return; ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[ShaderPropUnlit_Specular_Color]); From 4dfccbabe1edd0d6af67beeee56f92c479a69642 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 16:56:09 +0900 Subject: [PATCH 065/290] refresh foldouts for outline --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index ec5cb71d9..7cc43802a 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -4,6 +4,7 @@ using UnityEngine; class UnityToon3Das2DGUI : UnityEditor.ShaderGUI { + private Material m_lastMaterial; public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { @@ -16,11 +17,11 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { for (int i = 0; i < numTargets; ++i) { mats[i] = mEditor.targets[i] as Material; } - - Material material = mEditor.target as Material; - if (material == null) - return; - + + if (mats[0] != m_lastMaterial) { + RefreshFoldouts(mats[0]); + } + InitMaterialPropertyUIElements(props); EditorGUI.BeginChangeCheck(); @@ -34,8 +35,18 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { if (EditorGUI.EndChangeCheck()) { mEditor.PropertiesChanged(); } - } + m_lastMaterial = mats[0]; + } + + void RefreshFoldouts(Material mat) { + + m_normalMapFoldout = false; + m_outlineFoldout = mat.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); + m_specularFoldout = false; + } + +//---------------------------------------------------------------------------------------------------------------------- static void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements, ref bool foldout) { @@ -53,8 +64,6 @@ static void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements, ref bool foldout) { - //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. - const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; bool isOutlineEnabled = mats[0].GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); @@ -369,13 +378,8 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string ShaderPropUnlit_Specular_Intensity = "_Specular_Intensity"; internal const string ShaderPropUnlit_Specular_LightDirection = "_Specular_LightDirection"; - // GUI_RangeProperty(material, Styles.metaverseOffsettXaxisText); - // GUI_RangeProperty(material, Styles.metaverseOffsettYaxisText); - // - // GUI_Toggle(material, Styles.invertZaxisDirection, ShaderPropInverse_Z_Axis_BLD, MaterialGetInt(material, ShaderPropInverse_Z_Axis_BLD) != 0); - - - + //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. + const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; internal enum OutlineMode { NormalDirection, From 758b7b6a72c536e475fffb5a98f4e862e1252e88 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 17:42:47 +0900 Subject: [PATCH 066/290] add commented out outline code for vertex --- .../Assets/Shaders/Toon2D.shader | 109 +++++++++++++++--- 1 file changed, 92 insertions(+), 17 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 6332def62..2282ba956 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -378,19 +378,49 @@ Shader "Toon2D"{ // #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" - struct Attributes - { + struct Attributes { COMMON_2D_INPUTS }; - - struct Varyings - { + + struct Varyings { COMMON_2D_LIT_OUTPUTS }; + + // struct Attributes { + // float4 vertex : POSITION; + // float3 normal : NORMAL; + // float4 tangent : TANGENT; + // float2 texcoord0 : TEXCOORD0; + // + // UNITY_VERTEX_INPUT_INSTANCE_ID + // }; + // struct Varyings { + // float4 pos : SV_POSITION; + // float2 uv0 : TEXCOORD0; + // float3 normalDir : TEXCOORD1; + // float3 tangentDir : TEXCOORD2; + // float3 bitangentDir : TEXCOORD3; + // + // UNITY_VERTEX_OUTPUT_STEREO + // }; #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" float _OutlineExtrusion; + TEXTURE2D(_OutlineTex); + SAMPLER(sampler_OutlineTex); + float4 _OutlineTex_ST; + + TEXTURE2D(_Outline_CustomNormalMap); + SAMPLER(sampler_Outline_CustomNormalMap); + float4 _Outline_CustomNormalMap_ST; + int _Outline_UseCustomNormalMap; + + float _OutlineOffsetZ; + float _OutlineWidth; + float _OutlineNear; + float _OutlineFar; + // #ifdef UNIVERSAL_PIPELINE_CORE_INCLUDED // #include "../../UniversalRP/Shaders/UniversalToonInput.hlsl" // #include "../../UniversalRP/Shaders/UniversalToonHead.hlsl" @@ -398,35 +428,80 @@ Shader "Toon2D"{ // #endif #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Lit2DCommon.hlsl" - Varyings CommonLitVertex2(Attributes input) - { + +inline float4 UnityObjectToClipPosInstanced(in float3 pos) { + return mul(UNITY_MATRIX_VP, mul(GetObjectToWorldMatrix(), float4(pos, 1.0))); +} +#define UnityObjectToClipPos UnityObjectToClipPosInstanced + + + +inline float3 UnityObjectToWorldNormal(in float3 norm) +{ +#ifdef UNITY_ASSUME_UNIFORM_SCALING + return UnityObjectToWorldDir(norm); +#else + // mul(IT_M, norm) => mul(norm, I_M) => {dot(norm, I_M.col0), dot(norm, I_M.col1), dot(norm, I_M.col2)} + return normalize(mul(norm, (float3x3)GetWorldToObjectMatrix())); +#endif +} + + Varyings OutlineVertex(Attributes v) { Varyings o = (Varyings) 0; UNITY_SETUP_INSTANCE_ID(input); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); - float3 newPos = input.positionOS; + float3 newPos = v.positionOS; newPos.x += 0.1; // normal extrusion technique - float3 normal = normalize(input.normal); + float3 normal = normalize(v.normal); newPos += float3(normal) * _OutlineExtrusion; - + o.positionCS = TransformObjectToHClip(newPos); - o.uv = input.uv; + o.uv = v.uv; o.lightingUV = half2(ComputeScreenPos(o.positionCS / o.positionCS.w).xy); + +// const float2 uv = v.texcoord0; +// o.uv0 = v.texcoord0; +// +// float4 objPos = mul (GetObjectToWorldMatrix(), float4(0,0,0,1) ); +// float4 _Outline_Sampler_var = tex2Dlod(sampler_OutlineTex,float4(TRANSFORM_TEX(uv, _OutlineTex),0.0,0)); +// o.normalDir = UnityObjectToWorldNormal(v.normal); +// o.tangentDir = normalize( mul( GetObjectToWorldMatrix(), float4( v.tangent.xyz, 0.0 ) ).xyz ); +// o.bitangentDir = normalize(cross(o.normalDir, o.tangentDir) * v.tangent.w); +// float3x3 tangentTransform = float3x3( o.tangentDir, o.bitangentDir, o.normalDir); +// +// //UnpackNormal() can't be used, and so as follows. Do not specify a bump for the texture to be used. +// float4 _BakedNormal_var = (tex2Dlod(sampler_Outline_CustomNormalMap,float4(TRANSFORM_TEX(uv, _Outline_CustomNormalMap),0.0,0)) * 2 - 1); +// float3 _BakedNormalDir = normalize(mul(_BakedNormal_var.rgb, tangentTransform)); +// +// float Set_Outline_Width = (_OutlineWidth*0.001*smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) )*_Outline_Sampler_var.rgb).r; +// float4 _ClipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); +// _OutlineOffsetZ = _OutlineOffsetZ * -0.01; +// +// #ifdef _OUTLINE_NML +// o.pos = UnityObjectToClipPos(lerp(float4(v.vertex.xyz + v.normal*Set_Outline_Width,1), float4(v.vertex.xyz + _BakedNormalDir*Set_Outline_Width,1),_Outline_UseCustomNormalMap)); +// #elif _OUTLINE_POS +// Set_Outline_Width = Set_Outline_Width*2; +// float signVar = dot(normalize(v.vertex.xyz),normalize(v.normal))<0 ? -1 : 1; +// o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signVar*normalize(v.vertex)*Set_Outline_Width, 1)); +// #endif +// o.pos.z = o.pos.z + _OutlineOffsetZ * _ClipCameraPos.z; return o; } - Varyings OutlineVertex(Attributes input) - { - - return CommonLitVertex2(input); - } half4 OutlineFragment(Varyings input) : SV_Target { - return float4(0,0,1,1); + + +#if (UNITY_VERSION >= 202230) + return float4(0,1,1,1); +#else + return float4(1,0,0,1); +#endif } From d22ce3b74df313def07278d34bc474eedb20e803 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 17:55:19 +0900 Subject: [PATCH 067/290] rename vars, etc --- .../Assets/Shaders/Toon2D.shader | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 2282ba956..b8113f774 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -378,13 +378,19 @@ Shader "Toon2D"{ // #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" - struct Attributes { - COMMON_2D_INPUTS - }; + + struct OutlineVertexInput { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float2 texcoord0 : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; - struct Varyings { - COMMON_2D_LIT_OUTPUTS - }; + struct OutlineVertexOutput { + float4 pos : SV_POSITION; + float2 uv0 : TEXCOORD0; + }; // struct Attributes { // float4 vertex : POSITION; @@ -426,7 +432,6 @@ Shader "Toon2D"{ // #include "../../UniversalRP/Shaders/UniversalToonHead.hlsl" // #include "../../UniversalRP/Shaders/UniversalToonOutline.hlsl" // #endif - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Lit2DCommon.hlsl" inline float4 UnityObjectToClipPosInstanced(in float3 pos) { @@ -446,22 +451,21 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) #endif } - Varyings OutlineVertex(Attributes v) { - Varyings o = (Varyings) 0; + OutlineVertexOutput OutlineVertex(OutlineVertexInput v) { + OutlineVertexOutput o = (OutlineVertexOutput) 0; UNITY_SETUP_INSTANCE_ID(input); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); - float3 newPos = v.positionOS; + float3 newPos = v.vertex; newPos.x += 0.1; // normal extrusion technique float3 normal = normalize(v.normal); newPos += float3(normal) * _OutlineExtrusion; - o.positionCS = TransformObjectToHClip(newPos); - o.uv = v.uv; - o.lightingUV = half2(ComputeScreenPos(o.positionCS / o.positionCS.w).xy); + o.pos = TransformObjectToHClip(newPos); + o.uv0 = v.texcoord0; // const float2 uv = v.texcoord0; // o.uv0 = v.texcoord0; @@ -494,7 +498,7 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) - half4 OutlineFragment(Varyings input) : SV_Target { + half4 OutlineFragment(OutlineVertexOutput input) : SV_Target { #if (UNITY_VERSION >= 202230) From 86768d14f234ba66841c250a415af5e873e61c33 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 18:15:04 +0900 Subject: [PATCH 068/290] make outline appear --- .../Assets/Shaders/Toon2D.shader | 85 +++++++------------ 1 file changed, 31 insertions(+), 54 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index b8113f774..53aa89aa2 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -388,27 +388,11 @@ Shader "Toon2D"{ }; struct OutlineVertexOutput { - float4 pos : SV_POSITION; - float2 uv0 : TEXCOORD0; + float4 pos : SV_POSITION; + float2 uv0 : TEXCOORD0; + float3 normalDir : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO }; - - // struct Attributes { - // float4 vertex : POSITION; - // float3 normal : NORMAL; - // float4 tangent : TANGENT; - // float2 texcoord0 : TEXCOORD0; - // - // UNITY_VERTEX_INPUT_INSTANCE_ID - // }; - // struct Varyings { - // float4 pos : SV_POSITION; - // float2 uv0 : TEXCOORD0; - // float3 normalDir : TEXCOORD1; - // float3 tangentDir : TEXCOORD2; - // float3 bitangentDir : TEXCOORD3; - // - // UNITY_VERTEX_OUTPUT_STEREO - // }; #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" float _OutlineExtrusion; @@ -456,43 +440,36 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) UNITY_SETUP_INSTANCE_ID(input); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + const float2 uv = v.texcoord0; + o.uv0 = v.texcoord0; - float3 newPos = v.vertex; - newPos.x += 0.1; - // normal extrusion technique - float3 normal = normalize(v.normal); - newPos += float3(normal) * _OutlineExtrusion; - + float4 objPos = mul (GetObjectToWorldMatrix(), float4(0,0,0,1) ); + float4 _Outline_Sampler_var = tex2Dlod(sampler_OutlineTex,float4(TRANSFORM_TEX(uv, _OutlineTex),0.0,0)); + o.normalDir = UnityObjectToWorldNormal(v.normal); + + const float3 tangentDir = normalize( mul( GetObjectToWorldMatrix(), float4( v.tangent.xyz, 0.0 ) ).xyz ); + const float3 bitangentDir = normalize(cross(o.normalDir, tangentDir) * v.tangent.w); + float3x3 tangentTransform = float3x3(tangentDir, bitangentDir, o.normalDir); + + //UnpackNormal() can't be used, and so as follows. Do not specify a bump for the texture to be used. + float4 _BakedNormal_var = (tex2Dlod(sampler_Outline_CustomNormalMap,float4(TRANSFORM_TEX(uv, _Outline_CustomNormalMap),0.0,0)) * 2 - 1); + float3 _BakedNormalDir = normalize(mul(_BakedNormal_var.rgb, tangentTransform)); - o.pos = TransformObjectToHClip(newPos); - o.uv0 = v.texcoord0; + float Set_Outline_Width = (_OutlineWidth*0.001*smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) )*_Outline_Sampler_var.rgb).r; + float4 _ClipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); + _OutlineOffsetZ = _OutlineOffsetZ * -0.01; -// const float2 uv = v.texcoord0; -// o.uv0 = v.texcoord0; -// -// float4 objPos = mul (GetObjectToWorldMatrix(), float4(0,0,0,1) ); -// float4 _Outline_Sampler_var = tex2Dlod(sampler_OutlineTex,float4(TRANSFORM_TEX(uv, _OutlineTex),0.0,0)); -// o.normalDir = UnityObjectToWorldNormal(v.normal); -// o.tangentDir = normalize( mul( GetObjectToWorldMatrix(), float4( v.tangent.xyz, 0.0 ) ).xyz ); -// o.bitangentDir = normalize(cross(o.normalDir, o.tangentDir) * v.tangent.w); -// float3x3 tangentTransform = float3x3( o.tangentDir, o.bitangentDir, o.normalDir); -// -// //UnpackNormal() can't be used, and so as follows. Do not specify a bump for the texture to be used. -// float4 _BakedNormal_var = (tex2Dlod(sampler_Outline_CustomNormalMap,float4(TRANSFORM_TEX(uv, _Outline_CustomNormalMap),0.0,0)) * 2 - 1); -// float3 _BakedNormalDir = normalize(mul(_BakedNormal_var.rgb, tangentTransform)); -// -// float Set_Outline_Width = (_OutlineWidth*0.001*smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) )*_Outline_Sampler_var.rgb).r; -// float4 _ClipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); -// _OutlineOffsetZ = _OutlineOffsetZ * -0.01; -// -// #ifdef _OUTLINE_NML -// o.pos = UnityObjectToClipPos(lerp(float4(v.vertex.xyz + v.normal*Set_Outline_Width,1), float4(v.vertex.xyz + _BakedNormalDir*Set_Outline_Width,1),_Outline_UseCustomNormalMap)); -// #elif _OUTLINE_POS -// Set_Outline_Width = Set_Outline_Width*2; -// float signVar = dot(normalize(v.vertex.xyz),normalize(v.normal))<0 ? -1 : 1; -// o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signVar*normalize(v.vertex)*Set_Outline_Width, 1)); -// #endif -// o.pos.z = o.pos.z + _OutlineOffsetZ * _ClipCameraPos.z; + float3 newPos; +#ifdef _OUTLINE_NML + newPos = lerp(float4(v.vertex.xyz + v.normal*Set_Outline_Width,1), float4(v.vertex.xyz + _BakedNormalDir*Set_Outline_Width,1),_Outline_UseCustomNormalMap); + o.pos = TransformObjectToHClip(newPos); +#elif _OUTLINE_POS + Set_Outline_Width = Set_Outline_Width*2; + float signVar = dot(normalize(v.vertex.xyz),normalize(v.normal))<0 ? -1 : 1; + o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signVar*normalize(v.vertex)*Set_Outline_Width, 1)); +#endif + o.pos.z = o.pos.z + _OutlineOffsetZ * _ClipCameraPos.z; + return o; } From 4f4aa45a5c1bd51ce709cb4c1333f368fe3760c7 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 18:38:56 +0900 Subject: [PATCH 069/290] add more functions --- .../Assets/Shaders/Toon2D.shader | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 53aa89aa2..45bc07065 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -424,6 +424,51 @@ inline float4 UnityObjectToClipPosInstanced(in float3 pos) { #define UnityObjectToClipPos UnityObjectToClipPosInstanced + // normal should be normalized, w=1.0 + half3 SHEvalLinearL0L1(half4 normal) + { + half3 x; + + // Linear (L1) + constant (L0) polynomial terms + x.r = dot(unity_SHAr, normal); + x.g = dot(unity_SHAg, normal); + x.b = dot(unity_SHAb, normal); + + return x; + } + + // normal should be normalized, w=1.0 + half3 SHEvalLinearL2(half4 normal) + { + half3 x1, x2; + // 4 of the quadratic (L2) polynomials + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(unity_SHBr, vB); + x1.g = dot(unity_SHBg, vB); + x1.b = dot(unity_SHBb, vB); + + // Final (5th) quadratic (L2) polynomial + half vC = normal.x * normal.x - normal.y * normal.y; + x2 = unity_SHC.rgb * vC; + + return x1 + x2; + } + + half3 ShadeSH9(half4 normal) + { + // Linear + constant polynomial terms + half3 res = SHEvalLinearL0L1(normal); + + // Quadratic polynomials + res += SHEvalLinearL2(normal); + + # ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + # endif + + return res; + } + inline float3 UnityObjectToWorldNormal(in float3 norm) { From 1b3276f67746429788b329f85f7de6383cea726d Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 18:39:46 +0900 Subject: [PATCH 070/290] start outputing fragment color for outline --- .../Assets/Shaders/Toon2D.shader | 56 ++++++++++++++++--- 1 file changed, 48 insertions(+), 8 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 45bc07065..e7781bda5 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -27,10 +27,10 @@ Shader "Toon2D"{ //Outline _OutlineMode("Outline Mode", Integer) = 0 - _OutlineWidth ("Outline Width", Float ) = 0 + _OutlineWidth ("Outline Width", Float ) = 5 _OutlineWidthMap ("Outline Width Map", 2D) = "white" {} _OutlineColor ("Outline Color", Color) = (0,0,0,1) - _OutlineTex ("Outline Tex", 2D) = "black" {} + _OutlineTex ("Outline Tex", 2D) = "white" {} _Outline_BlendBaseColor ("Blend Base Color to Outline", Integer ) = 0 _OutlineOffsetZ ("Outline Z Offset", Float) = 0 _OutlineNear ("Outline Near", Float ) = 0.5 @@ -397,6 +397,10 @@ Shader "Toon2D"{ #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" float _OutlineExtrusion; + TEXTURE2D(_MainTex); + SAMPLER(sampler_MainTex); + float4 _MainTex_ST; + TEXTURE2D(_OutlineTex); SAMPLER(sampler_OutlineTex); float4 _OutlineTex_ST; @@ -406,11 +410,17 @@ Shader "Toon2D"{ float4 _Outline_CustomNormalMap_ST; int _Outline_UseCustomNormalMap; - float _OutlineOffsetZ; - float _OutlineWidth; - float _OutlineNear; - float _OutlineFar; - + CBUFFER_START(UnityPerMaterial) + half4 _BaseColor; + float _OutlineOffsetZ; + float _OutlineWidth; + float _OutlineNear; + float _OutlineFar; + float4 _OutlineColor; + int _Outline_BlendBaseColor; + + CBUFFER_END + // #ifdef UNIVERSAL_PIPELINE_CORE_INCLUDED // #include "../../UniversalRP/Shaders/UniversalToonInput.hlsl" // #include "../../UniversalRP/Shaders/UniversalToonHead.hlsl" @@ -520,9 +530,39 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) - half4 OutlineFragment(OutlineVertexOutput input) : SV_Target { + half4 OutlineFragment(OutlineVertexOutput i) : SV_Target { + //find lightColor + //half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); + //lightColor = lerp(half3(1.0,1.0,1.0), lightColor, _Is_LightColor_Outline); + + float3 lightColor = float3(0,0,0); + + + const float2 Set_UV0 = i.uv0; + float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); + float3 Set_BaseColor = _BaseColor.rgb*_MainTex_var.rgb; + float3 _Is_BlendBaseColor_var = lerp( _OutlineColor.rgb*lightColor, (_OutlineColor.rgb*Set_BaseColor*Set_BaseColor*lightColor), _Outline_BlendBaseColor ); + // + float3 _OutlineTex_var = tex2D(sampler_OutlineTex,TRANSFORM_TEX(Set_UV0, _OutlineTex)).rgb; + +#ifdef _IS_OUTLINE_CLIPPING_NO + float3 Set_Outline_Color = _OutlineTex_var.rgb * _OutlineColor.rgb * lightColor; + return float4(Set_Outline_Color,1.0); +#elif _IS_OUTLINE_CLIPPING_YES + float4 _ClippingMask_var = SAMPLE_TEXTURE2D(_ClippingMask, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); + float Set_MainTexAlpha = _MainTex_var.a; + float _IsBaseMapAlphaAsClippingMask_var = lerp( _ClippingMask_var.r, Set_MainTexAlpha, _IsBaseMapAlphaAsClippingMask ); + float _Inverse_Clipping_var = lerp( _IsBaseMapAlphaAsClippingMask_var, (1.0 - _IsBaseMapAlphaAsClippingMask_var), _Inverse_Clipping ); + float Set_Clipping = saturate((_Inverse_Clipping_var+_Clipping_Level)); + clip(Set_Clipping - 0.5); + float4 Set_Outline_Color = lerp( float4(_Is_BlendBaseColor_var,Set_Clipping), float4((_OutlineTex_var.rgb*_Outline_Color.rgb*lightColor),Set_Clipping), _Is_OutlineTex ); + return Set_Outline_Color; +#endif + + + #if (UNITY_VERSION >= 202230) return float4(0,1,1,1); #else From 48cb882548f92ed2876b2280b171bc99abb1d83b Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 19:13:56 +0900 Subject: [PATCH 071/290] Can sample shapeLight in the outline pass --- .../Assets/Shaders/Toon2D.shader | 53 +++++++++++++------ 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index e7781bda5..e7052d478 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -191,9 +191,6 @@ Shader "Toon2D"{ discard; - //return float4(Set_BaseColor,1); - - #if USE_SHAPE_LIGHT_TYPE_0 half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); @@ -204,7 +201,6 @@ Shader "Toon2D"{ shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); } - float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); float3 baseColor = surfaceData.albedo.rgb; @@ -378,28 +374,29 @@ Shader "Toon2D"{ // #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" - struct OutlineVertexInput { + struct OutlineVertexInput { float4 vertex : POSITION; float3 normal : NORMAL; float4 tangent : TANGENT; float2 texcoord0 : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID - }; + }; struct OutlineVertexOutput { float4 pos : SV_POSITION; float2 uv0 : TEXCOORD0; - float3 normalDir : TEXCOORD1; + half2 lightingUV : TEXCOORD1; UNITY_VERTEX_OUTPUT_STEREO }; - - #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" - float _OutlineExtrusion; TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex); float4 _MainTex_ST; + + TEXTURE2D(_MaskTex); + SAMPLER(sampler_MaskTex); TEXTURE2D(_OutlineTex); SAMPLER(sampler_OutlineTex); @@ -524,25 +521,51 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signVar*normalize(v.vertex)*Set_Outline_Width, 1)); #endif o.pos.z = o.pos.z + _OutlineOffsetZ * _ClipCameraPos.z; + + o.lightingUV = half2(ComputeScreenPos(o.pos / o.pos.w).xy); + return o; } - + //SHAPE_LIGHT macros + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" + half4 OutlineFragment(OutlineVertexOutput i) : SV_Target { //find lightColor - //half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); - //lightColor = lerp(half3(1.0,1.0,1.0), lightColor, _Is_LightColor_Outline); - - float3 lightColor = float3(0,0,0); + InputData2D inputData; + + InitializeInputData(i.uv0, i.lightingUV, inputData); + + half4 shapeLight0 = half4(0,0,0,0); + + const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, i.uv0); + const half2 lightingUV = inputData.lightingUV; + + #if USE_SHAPE_LIGHT_TYPE_0 + shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); + if (any(_ShapeLightMaskFilter0)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter0) * mask + _ShapeLightInvertedFilter0 * (1 - + mask); + shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); + } + #endif + + float3 lightColor = shapeLight0.rgb; const float2 Set_UV0 = i.uv0; float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); float3 Set_BaseColor = _BaseColor.rgb*_MainTex_var.rgb; + + //blend base color + //blend lightColor + float3 _Is_BlendBaseColor_var = lerp( _OutlineColor.rgb*lightColor, (_OutlineColor.rgb*Set_BaseColor*Set_BaseColor*lightColor), _Outline_BlendBaseColor ); // float3 _OutlineTex_var = tex2D(sampler_OutlineTex,TRANSFORM_TEX(Set_UV0, _OutlineTex)).rgb; From e6d964137c961947d159ff28d90ea5c7d4bb2aba Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 19:14:09 +0900 Subject: [PATCH 072/290] optimize --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index e7052d478..d346907df 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -497,11 +497,11 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) float4 objPos = mul (GetObjectToWorldMatrix(), float4(0,0,0,1) ); float4 _Outline_Sampler_var = tex2Dlod(sampler_OutlineTex,float4(TRANSFORM_TEX(uv, _OutlineTex),0.0,0)); - o.normalDir = UnityObjectToWorldNormal(v.normal); + const float3 normalDir = UnityObjectToWorldNormal(v.normal); const float3 tangentDir = normalize( mul( GetObjectToWorldMatrix(), float4( v.tangent.xyz, 0.0 ) ).xyz ); - const float3 bitangentDir = normalize(cross(o.normalDir, tangentDir) * v.tangent.w); - float3x3 tangentTransform = float3x3(tangentDir, bitangentDir, o.normalDir); + const float3 bitangentDir = normalize(cross(normalDir, tangentDir) * v.tangent.w); + float3x3 tangentTransform = float3x3(tangentDir, bitangentDir, normalDir); //UnpackNormal() can't be used, and so as follows. Do not specify a bump for the texture to be used. float4 _BakedNormal_var = (tex2Dlod(sampler_Outline_CustomNormalMap,float4(TRANSFORM_TEX(uv, _Outline_CustomNormalMap),0.0,0)) * 2 - 1); From 1f6ef57361e2da3e6d0c1b8356c383dff3494ff4 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 19:35:04 +0900 Subject: [PATCH 073/290] blend baseColor and lightColor to outline --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 13 +++++++-- .../Assets/Shaders/Toon2D.shader | 29 +++++++++---------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 7cc43802a..87537d557 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -117,7 +117,8 @@ static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary Date: Wed, 19 Nov 2025 19:41:33 +0900 Subject: [PATCH 074/290] use range for blending outline --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 4 ++-- .../Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs | 5 +++++ Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 5 ++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 87537d557..52d507831 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -117,8 +117,8 @@ static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary Date: Wed, 19 Nov 2025 19:47:25 +0900 Subject: [PATCH 075/290] remove unused functions --- .../Assets/Shaders/Toon2D.shader | 108 +----------------- 1 file changed, 5 insertions(+), 103 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 7f78dc66c..60a020768 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -120,58 +120,6 @@ Shader "Toon2D"{ return CommonLitVertex(input); } -//---------------------------------------------------------------------------------------------------------------------- - - // normal should be normalized, w=1.0 - half3 SHEvalLinearL0L1(half4 normal) - { - half3 x; - - // Linear (L1) + constant (L0) polynomial terms - x.r = dot(unity_SHAr, normal); - x.g = dot(unity_SHAg, normal); - x.b = dot(unity_SHAb, normal); - - return x; - } - - // normal should be normalized, w=1.0 - half3 SHEvalLinearL2(half4 normal) - { - half3 x1, x2; - // 4 of the quadratic (L2) polynomials - half4 vB = normal.xyzz * normal.yzzx; - x1.r = dot(unity_SHBr, vB); - x1.g = dot(unity_SHBg, vB); - x1.b = dot(unity_SHBb, vB); - - // Final (5th) quadratic (L2) polynomial - half vC = normal.x * normal.x - normal.y * normal.y; - x2 = unity_SHC.rgb * vC; - - return x1 + x2; - } - - - // normal should be normalized, w=1.0 - // output in active color space - half3 ShadeSH9(half4 normal) - { - // Linear + constant polynomial terms - half3 res = SHEvalLinearL0L1(normal); - - // Quadratic polynomials - res += SHEvalLinearL2(normal); - - # ifdef UNITY_COLORSPACE_GAMMA - res = LinearToGammaSpace(res); - # endif - - return res; - } - - -//---------------------------------------------------------------------------------------------------------------------- half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv) { @@ -297,13 +245,13 @@ Shader "Toon2D"{ float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); float2 Set_UV0 = input.uv; float3 mainLightColor = float3(1, 1, 1); - + float3 defaultLightColor = float3(1, 1, 1); // //v.2.0.5 - float3 defaultLightColor = saturate(max(half3(0.05, 0.05, 0.05) * _Unlit_Intensity, - max(ShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), - ShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * - _Unlit_Intensity)); + // float3 defaultLightColor = saturate(max(half3(0.05, 0.05, 0.05) * _Unlit_Intensity, + // max(ShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), + // ShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * + // _Unlit_Intensity)); // float3 customLightDirection = normalize(mul( GetObjectToWorldMatrix(), float4(((float3(1.0,0.0,0.0)*_Offset_X_Axis_BLD*10)+(float3(0.0,1.0,0.0)*_Offset_Y_Axis_BLD*10)+(float3(0.0,0.0,-1.0)*lerp(-1.0,1.0,_Inverse_Z_Axis_BLD))),0)).xyz); // float3 lightDirection = normalize(lerp(defaultLightDirection, mainLight.direction.xyz,any(mainLight.direction.xyz))); // lightDirection = lerp(lightDirection, customLightDirection, _Is_BLD); @@ -432,52 +380,6 @@ inline float4 UnityObjectToClipPosInstanced(in float3 pos) { } #define UnityObjectToClipPos UnityObjectToClipPosInstanced - - // normal should be normalized, w=1.0 - half3 SHEvalLinearL0L1(half4 normal) - { - half3 x; - - // Linear (L1) + constant (L0) polynomial terms - x.r = dot(unity_SHAr, normal); - x.g = dot(unity_SHAg, normal); - x.b = dot(unity_SHAb, normal); - - return x; - } - - // normal should be normalized, w=1.0 - half3 SHEvalLinearL2(half4 normal) - { - half3 x1, x2; - // 4 of the quadratic (L2) polynomials - half4 vB = normal.xyzz * normal.yzzx; - x1.r = dot(unity_SHBr, vB); - x1.g = dot(unity_SHBg, vB); - x1.b = dot(unity_SHBb, vB); - - // Final (5th) quadratic (L2) polynomial - half vC = normal.x * normal.x - normal.y * normal.y; - x2 = unity_SHC.rgb * vC; - - return x1 + x2; - } - - half3 ShadeSH9(half4 normal) - { - // Linear + constant polynomial terms - half3 res = SHEvalLinearL0L1(normal); - - // Quadratic polynomials - res += SHEvalLinearL2(normal); - - # ifdef UNITY_COLORSPACE_GAMMA - res = LinearToGammaSpace(res); - # endif - - return res; - } - inline float3 UnityObjectToWorldNormal(in float3 norm) { From 6f59392951ac999725f69e6deb60e228d1178131 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 20:59:02 +0900 Subject: [PATCH 076/290] default normalmap to true --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 52d507831..d0628cadd 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -41,7 +41,7 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { void RefreshFoldouts(Material mat) { - m_normalMapFoldout = false; + m_normalMapFoldout = true; m_outlineFoldout = mat.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); m_specularFoldout = false; } From 227d0fdb32fc2d61e31364fbcb725e8184c5c65f Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 22:19:30 +0900 Subject: [PATCH 077/290] pass TBN matrix --- .../Assets/Shaders/Toon2D.shader | 73 ++++++++++++++++--- 1 file changed, 63 insertions(+), 10 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 60a020768..3e8866fbb 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -1,4 +1,4 @@ -Shader "Toon2D"{ +Shader "Toon3Das2D"{ Properties{ _BaseColor ("BaseColor", Color) = (1,1,1,1) _MainTex ("BaseMap", 2D) = "white" {} @@ -82,11 +82,20 @@ Shader "Toon2D"{ #pragma multi_compile _ DEBUG_DISPLAY struct Attributes { - COMMON_2D_INPUTS + float3 positionOS : POSITION; + float2 uv : TEXCOORD0; + float3 normal : NORMAL; + float4 tangent : TANGENT; + UNITY_VERTEX_INPUT_INSTANCE_ID }; struct Varyings { - COMMON_2D_LIT_OUTPUTS + float4 positionCS : SV_POSITION; + float2 uv : TEXCOORD0; + half2 lightingUV : TEXCOORD1; + float3 normalWS : TEXCOORD2; + float4 tangentWS : TEXCOORD3; + UNITY_VERTEX_OUTPUT_STEREO }; float4 _White; @@ -95,7 +104,7 @@ Shader "Toon2D"{ CBUFFER_START(UnityPerMaterial) half4 _BaseColor; - float _Unlit_Intensity; + float _BumpScale; int _Use_BaseAs1st; int _Use_1stAs2nd; @@ -116,12 +125,42 @@ Shader "Toon2D"{ TEXTURE2D(_1st_ShadeMap); TEXTURE2D(_2nd_ShadeMap); +inline float3 UnityObjectToWorldNormal(in float3 norm) +{ +#ifdef UNITY_ASSUME_UNIFORM_SCALING + return UnityObjectToWorldDir(norm); +#else + // mul(IT_M, norm) => mul(norm, I_M) => {dot(norm, I_M.col0), dot(norm, I_M.col1), dot(norm, I_M.col2)} + return normalize(mul(norm, (float3x3)GetWorldToObjectMatrix())); +#endif +} + Varyings LitVertex(Attributes input) { - return CommonLitVertex(input); + + Varyings o = (Varyings) 0; + UNITY_SETUP_INSTANCE_ID(input); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + o.positionCS = TransformObjectToHClip(input.positionOS); + const float3 normalWS = TransformObjectToWorldDir(input.normal); + + #if defined(DEBUG_DISPLAY) + o.positionWS = TransformObjectToWorld(input.positionOS); + o.normalWS = normalWS; + #endif + o.uv = input.uv; + o.lightingUV = half2(ComputeScreenPos(o.positionCS / o.positionCS.w).xy); + o.normalWS = normalWS; + + const float3 tangentWS = normalize( mul( GetObjectToWorldMatrix(), float4( input.tangent.xyz, 0 ) ).xyz); + o.tangentWS = float4(tangentWS, input.tangent.w); + + return o; } - half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv) + half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv, + in float3 tangentWS, in float3 bitangentWS, in float3 normalWS) { #if defined(DEBUG_DISPLAY) half4 debugColor = 0; @@ -139,6 +178,11 @@ Shader "Toon2D"{ if (alpha == 0.0) discard; + float3x3 tangentTransform = float3x3( tangentWS, bitangentWS, normalWS); + const float3 normalTS = surfaceData.normalTS; + float3 perturbedNormalWS = normalize(mul( normalTS, tangentTransform )); // Perturbed normals + return float4(perturbedNormalWS,1); + #if USE_SHAPE_LIGHT_TYPE_0 half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); @@ -149,7 +193,8 @@ Shader "Toon2D"{ mask); shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); } - + + float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); float3 baseColor = surfaceData.albedo.rgb; @@ -166,6 +211,8 @@ Shader "Toon2D"{ float _HalfLambert_var = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + + //float _HalfLambert_var = 0.5*dot(lerp( i.normalDir, normalDirection, _Is_NormalMapToBase ),lightDirection)+0.5; // // float4 _Set_2nd_ShadePosition_var = tex2D(_Set_2nd_ShadePosition, TRANSFORM_TEX(uv, _Set_2nd_ShadePosition)); @@ -222,11 +269,16 @@ Shader "Toon2D"{ { const half4 main = color * SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv); const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.uv); - const half3 normalTS = UnpackNormal(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.uv)); + const half3 normalTS = UnpackNormalScale(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.uv), _BumpScale); + SurfaceData2D surfaceData; InputData2D inputData; + const float3 normalWS = normalize(input.normalWS); + const float3 tangentWS = normalize(input.tangentWS); + const float3 bitangentWS = normalize(cross(normalWS, tangentWS) * input.tangentWS.w); + InitializeSurfaceData(main.rgb, main.a, mask, normalTS, surfaceData); InitializeInputData(input.uv, input.lightingUV, inputData); @@ -235,12 +287,13 @@ Shader "Toon2D"{ surfaceData.normalWS = input.normalWS; #endif - return CombinedShapeLightShared2(surfaceData, inputData, input.uv); + return CombinedShapeLightShared2(surfaceData, inputData, input.uv, + normalWS, tangentWS, bitangentWS); } //---------------------------------------------------------------------------------------------------------------------- - half4 LitFragment(Varyings input) : SV_Target + float4 LitFragment(Varyings input) : SV_Target { float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); float2 Set_UV0 = input.uv; From 2631ced665d7360d74b66f0f9fb932fc3604f886 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 22:36:38 +0900 Subject: [PATCH 078/290] update ToonEditorGUIUtility --- .../Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs index 579da969a..07f3c630a 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs @@ -51,6 +51,12 @@ internal static void DrawColorFieldGUI(MaterialEditor mEditor, MaterialPropertyU mEditor.ColorProperty(element.mainProperty.prop, element.label.text); } + internal static bool DrawVector3FieldGUI(MaterialEditor mEditor, Material[] mats, + MaterialPropertyUIElement element) + { + return DrawVector3FieldGUI(mEditor, mats, element, out Vector3 _); + } + //return true if changed, false otherwise internal static bool DrawVector3FieldGUI(MaterialEditor mEditor, Material[] mats, MaterialPropertyUIElement element, out Vector3 newValue) From 0004a54872244bea9489e6c04314783d17fc5ac6 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 22:37:32 +0900 Subject: [PATCH 079/290] Pass Directional Light instead of Specular --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 65 ++++++++++++------- .../Assets/Shaders/Toon2D.shader | 17 ++--- 2 files changed, 52 insertions(+), 30 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index d0628cadd..2fa5488bb 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -29,7 +29,7 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { DrawNormalMapGUI(mEditor, m_materialPropertyUIElements, ref m_normalMapFoldout); DrawOutlineGUI(mEditor, mats, m_materialPropertyUIElements, ref m_outlineFoldout); - DrawSpecularGUI(mEditor, mats, m_materialPropertyUIElements, ref m_specularFoldout); + DrawDirectionalLightGUI(mEditor, mats, m_materialPropertyUIElements, ref m_specularFoldout); if (EditorGUI.EndChangeCheck()) { @@ -175,19 +175,22 @@ static void DrawThreeColorsGUI(MaterialEditor mEditor, Material[] mats, } } - static void DrawSpecularGUI(MaterialEditor mEditor, Material[] mats, + static void DrawDirectionalLightGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements, ref bool foldout) { - ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, mats, uiElements[ShaderPropUnlit_Specular_UseDirectionalLight], + ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, mats, uiElements[ShaderPropUnlit_DirectionalLight_Use], ref foldout); if (!foldout) return; - ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[ShaderPropUnlit_Specular_Color]); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_Specular_Intensity]); - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[ShaderPropUnlit_Specular_LightDirection], out Vector3 _); + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[ShaderPropUnlit_DirectionalLight_Direction]); + ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_Color]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_Intensity]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_2DLightFactor]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_DiffuseFactor]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_SpecularFactor]); } //---------------------------------------------------------------------------------------------------------------------- @@ -331,24 +334,39 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty //Custom Directional Light new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_Specular_UseDirectionalLight), - label = new GUIContent("Specular", - "Applies specular color by using a custom directional light."), + mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_Use), + label = new GUIContent("Custom Directional Light", + "Apply a custom directional light."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_Specular_Color), - label = new GUIContent("Specular Color", - "The specular color. "), + mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_Direction), + label = new GUIContent("Light Direction", + "The direction of the custom directional light. "), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_Specular_Intensity), - label = new GUIContent("Specular Intensity", - "The specular intensity. "), + mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_Color), + label = new GUIContent("Light Color", + "The color of the custom directional light. "), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_Specular_LightDirection), - label = new GUIContent("Light Direction", - "The direction of the light for specular. "), + mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_Intensity), + label = new GUIContent("Light Intensity", + "The intensity of the custom directional light. "), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_2DLightFactor), + label = new GUIContent("2D Light Factor", + "Multiplier for the 2D light contribution."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_DiffuseFactor), + label = new GUIContent("Diffuse Factor", + "Multiplier for the diffuse lighting contribution."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_SpecularFactor), + label = new GUIContent("Specular Factor", + "Multiplier for the specular lighting contribution."), }, }; @@ -380,10 +398,13 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string ShaderProp_Outline_UseCustomNormalMap = "_Outline_UseCustomNormalMap"; internal const string ShaderProp_Outline_CustomNormalMap = "_Outline_CustomNormalMap"; - internal const string ShaderPropUnlit_Specular_UseDirectionalLight = "_Specular_UseDirectionalLight"; - internal const string ShaderPropUnlit_Specular_Color = "_Specular_Color"; - internal const string ShaderPropUnlit_Specular_Intensity = "_Specular_Intensity"; - internal const string ShaderPropUnlit_Specular_LightDirection = "_Specular_LightDirection"; + internal const string ShaderPropUnlit_DirectionalLight_Use = "_DirectionalLight_Use"; + internal const string ShaderPropUnlit_DirectionalLight_Direction = "_DirectionalLight_Direction"; + internal const string ShaderPropUnlit_DirectionalLight_Color = "_DirectionalLight_Color"; + internal const string ShaderPropUnlit_DirectionalLight_Intensity = "_DirectionalLight_Intensity"; + internal const string ShaderPropUnlit_DirectionalLight_2DLightFactor = "_DirectionalLight_2DLightFactor"; + internal const string ShaderPropUnlit_DirectionalLight_DiffuseFactor = "_DirectionalLight_DiffuseFactor"; + internal const string ShaderPropUnlit_DirectionalLight_SpecularFactor = "_DirectionalLight_SpecularFactor"; //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 3e8866fbb..546f2f3da 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -38,15 +38,16 @@ Shader "Toon3Das2D"{ _OutlineFar ("Outline Far", Float ) = 100 _Outline_UseCustomNormalMap ("Use Custom Normal Map", Integer ) = 0 _Outline_CustomNormalMap ("Custom Normal Map", 2D) = "white" {} - - //Specular - _Specular_UseDirectionalLight ("Specular Intensity", Integer) = 0 - _Specular_Color ("Specular Color", Color) = (1,1,1,1) - _Specular_Intensity ("Specular Intensity", float) = 0 - _Specular_LightDirection ("Specular Light Direction", Vector) = (0,-1,0,0) - //Test - _OutlineExtrusion("Outline Extrusion", float) = 0.02 + //Directional Light + _DirectionalLight_Use ("Use Directional Light", Integer) = 0 + _DirectionalLight_Direction ("Specular Light Direction", Vector) = (0,-1,0,0) + _DirectionalLight_Color("Directional Light Color", Color) = (1,1,1,1) + _DirectionalLight_Intensity ("Directional Light Intensity", float) = 0.5 + _DirectionalLight_2DLightFactor ("Directional Light: 2D Light Factor", Range(0,1)) = 1 + _DirectionalLight_DiffuseFactor ("Directional Light: Diffuse Factor", Range(0,1)) = 0.5 + _DirectionalLight_SpecularFactor ("Directional Light: Specular Factor", Range(0,1)) = 0.5 + } SubShader{ From 2cce5270ae11aac1c49f24cfd7c813f6c5f2a75e Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 22:44:02 +0900 Subject: [PATCH 080/290] refresh foldout for directional light --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 2fa5488bb..45b384c28 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -18,18 +18,18 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { mats[i] = mEditor.targets[i] as Material; } + InitMaterialPropertyUIElements(props); + if (mats[0] != m_lastMaterial) { - RefreshFoldouts(mats[0]); + RefreshFoldouts(mats[0], m_materialPropertyUIElements); } - - InitMaterialPropertyUIElements(props); EditorGUI.BeginChangeCheck(); DrawThreeColorsGUI(mEditor, mats, m_materialPropertyUIElements); DrawNormalMapGUI(mEditor, m_materialPropertyUIElements, ref m_normalMapFoldout); DrawOutlineGUI(mEditor, mats, m_materialPropertyUIElements, ref m_outlineFoldout); - DrawDirectionalLightGUI(mEditor, mats, m_materialPropertyUIElements, ref m_specularFoldout); + DrawDirectionalLightGUI(mEditor, mats, m_materialPropertyUIElements, ref m_directionalLightFoldout); if (EditorGUI.EndChangeCheck()) { @@ -39,11 +39,14 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { m_lastMaterial = mats[0]; } - void RefreshFoldouts(Material mat) { + void RefreshFoldouts(Material mat, Dictionary uiElements) { m_normalMapFoldout = true; m_outlineFoldout = mat.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); - m_specularFoldout = false; + + bool lightEnabled = mat.GetInteger(uiElements[ShaderPropUnlit_DirectionalLight_Use].mainProperty.id) !=0; + m_directionalLightFoldout = lightEnabled; + } //---------------------------------------------------------------------------------------------------------------------- @@ -141,7 +144,6 @@ static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary Date: Thu, 20 Nov 2025 00:48:27 +0900 Subject: [PATCH 081/290] move directional light constants --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 15 ++++++--------- .../Assets/ScriptsDev/Toon3Das2DConstants.cs | 7 +++++++ .../Assets/ScriptsDev/Toon3Das2DConstants.cs.meta | 2 ++ 3 files changed, 15 insertions(+), 9 deletions(-) create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs.meta diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 45b384c28..984d86247 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -186,9 +186,9 @@ static void DrawDirectionalLightGUI(MaterialEditor mEditor, Material[] mats, if (!foldout) return; - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[ShaderPropUnlit_DirectionalLight_Direction]); - ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_Color]); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_Intensity]); + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction]); + ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_2DLightFactor]); ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_DiffuseFactor]); ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_SpecularFactor]); @@ -340,17 +340,17 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "Apply a custom directional light."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_Direction), + mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction), label = new GUIContent("Light Direction", "The direction of the custom directional light. "), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_Color), + mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color), label = new GUIContent("Light Color", "The color of the custom directional light. "), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_Intensity), + mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity), label = new GUIContent("Light Intensity", "The intensity of the custom directional light. "), }, @@ -400,9 +400,6 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string ShaderProp_Outline_CustomNormalMap = "_Outline_CustomNormalMap"; internal const string ShaderPropUnlit_DirectionalLight_Use = "_DirectionalLight_Use"; - internal const string ShaderPropUnlit_DirectionalLight_Direction = "_DirectionalLight_Direction"; - internal const string ShaderPropUnlit_DirectionalLight_Color = "_DirectionalLight_Color"; - internal const string ShaderPropUnlit_DirectionalLight_Intensity = "_DirectionalLight_Intensity"; internal const string ShaderPropUnlit_DirectionalLight_2DLightFactor = "_DirectionalLight_2DLightFactor"; internal const string ShaderPropUnlit_DirectionalLight_DiffuseFactor = "_DirectionalLight_DiffuseFactor"; internal const string ShaderPropUnlit_DirectionalLight_SpecularFactor = "_DirectionalLight_SpecularFactor"; diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs new file mode 100644 index 000000000..9f4d24187 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs @@ -0,0 +1,7 @@ + +public static class Toon3Das2DConstants { + public const string ShaderPropUnlit_DirectionalLight_Direction = "_DirectionalLight_Direction"; + public const string ShaderPropUnlit_DirectionalLight_Color = "_DirectionalLight_Color"; + public const string ShaderPropUnlit_DirectionalLight_Intensity = "_DirectionalLight_Intensity"; + +} \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs.meta new file mode 100644 index 000000000..20776ffa5 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: cd2d32aae3fd8c84699b3bd6812a496b From 050e8746983fdd23c677a84629730f8ed6a9b68f Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 20 Nov 2025 00:48:43 +0900 Subject: [PATCH 082/290] add ToonDirectionalLightController --- .../ToonDirectionalLightController.cs | 35 +++++++++++++++++++ .../ToonDirectionalLightController.cs.meta | 2 ++ 2 files changed, 37 insertions(+) create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs.meta diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs new file mode 100644 index 000000000..66a075a23 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using UnityEngine; + +[ExecuteAlways] +[RequireComponent(typeof(Light))] +internal class ToonDirectionalLightController : MonoBehaviour { + void OnEnable() { + m_light = GetComponent(); + } + + + void Update() { + if (m_light.type != LightType.Directional) { + return; + } + + Vector3 lightDir = -m_light.transform.forward; + Color lightColor = m_light.color; + float lightIntensity = m_light.intensity; + + foreach (Material mat in m_materials) { + if (mat == null) continue; + mat.SetVector(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction, lightDir); + mat.SetColor(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color, lightColor); + mat.SetFloat(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity, lightIntensity); + } + } + + +//---------------------------------------------------------------------------------------------------------------------- + [SerializeField] private List m_materials = new List(); + +//---------------------------------------------------------------------------------------------------------------------- + Light m_light; +} \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs.meta new file mode 100644 index 000000000..801eab182 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 95eb0866ac8fd424c8dfba8d023d36df \ No newline at end of file From 7d00cd2383db4fe34cebd525b634fe13aa0edabd Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 20 Nov 2025 00:49:54 +0900 Subject: [PATCH 083/290] show the results of directional light calculation --- .../Assets/Shaders/Toon2D.shader | 59 ++++++++++++------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 546f2f3da..32df5a316 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -21,7 +21,6 @@ Shader "Toon3Das2D"{ _NormalMap("Normal Map", 2D) = "bump" {} _BumpScale ("Normal Scale", Range(0, 1)) = 1 - [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching @@ -86,7 +85,7 @@ Shader "Toon3Das2D"{ float3 positionOS : POSITION; float2 uv : TEXCOORD0; float3 normal : NORMAL; - float4 tangent : TANGENT; + float4 tangent : TANGENT; UNITY_VERTEX_INPUT_INSTANCE_ID }; @@ -118,6 +117,14 @@ Shader "Toon3Das2D"{ float _ShadeColor_Step; float _1st2nd_Shades_Feather; + + float3 _DirectionalLight_Direction; + float4 _DirectionalLight_Color; + float _DirectionalLight_Intensity; + float _DirectionalLight_2DLightFactor; + float _DirectionalLight_DiffuseFactor; + float _DirectionalLight_SpecularFactor; + CBUFFER_END //---------------------------------------------------------------------------------------------------------------------- @@ -182,8 +189,6 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) float3x3 tangentTransform = float3x3( tangentWS, bitangentWS, normalWS); const float3 normalTS = surfaceData.normalTS; float3 perturbedNormalWS = normalize(mul( normalTS, tangentTransform )); // Perturbed normals - return float4(perturbedNormalWS,1); - #if USE_SHAPE_LIGHT_TYPE_0 half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); @@ -203,35 +208,37 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) float4 _1st_ShadeMap_var = lerp( SAMPLE_TEXTURE2D(_1st_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _MainTex_var, _Use_BaseAs1st); - float3 firstShadeColor = _1st_ShadeColor.rgb * _1st_ShadeMap_var.rgb; + float3 firstShadeColor = _1st_ShadeColor.rgb * _1st_ShadeMap_var.rgb * shapeLight0.rgb; float4 _2nd_ShadeMap_var = lerp( SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _1st_ShadeMap_var, _Use_1stAs2nd); - float3 secondShadeColor = _2nd_ShadeColor.rgb * _2nd_ShadeMap_var.rgb; + float3 secondShadeColor = _2nd_ShadeColor.rgb * _2nd_ShadeMap_var.rgb * shapeLight0.rgb; - float _HalfLambert_var = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + const float light2d_intensity = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + //float _HalfLambert_var = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + + float _HalfLambert_var = 0.5 * dot( perturbedNormalWS, _DirectionalLight_Direction) + 0.5; + + //return float4(_DirectionalLight_Direction.rgb,1); + float t = _HalfLambert_var; + + //float _HalfLambert_var = 0.5*dot(lerp( i.normalDir, normalDirection, _Is_NormalMapToBase ),lightDirection)+0.5; // - // float4 _Set_2nd_ShadePosition_var = tex2D(_Set_2nd_ShadePosition, TRANSFORM_TEX(uv, _Set_2nd_ShadePosition)); - // float4 _Set_1st_ShadePosition_var = tex2D(_Set_1st_ShadePosition, TRANSFORM_TEX(uv, _Set_1st_ShadePosition)); - // //v.2.0.6 // //Minmimum value is same as the Minimum Feather's value with the Minimum Step's value as threshold. - // float _SystemShadowsLevel_var = (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel > 0.001 ? (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel : 0.0001; - // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var*saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); + // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var * saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step - _BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); // // // //Composition: 3 Basic Colors as Set_FinalBaseColor - float4 _Set_1st_ShadePosition_var = float4(1, 1, 1, 1); - float4 _Set_2nd_ShadePosition_var = float4(1, 1, 1, 1); + float4 _Set_1st_ShadePosition_var = float4(1, 1, 1, 1); //used in DoubleShadeWithFeather, default: white + float4 _Set_2nd_ShadePosition_var = float4(1, 1, 1, 1); //used in DoubleShadeWithFeather, default: white - float _SystemShadowsLevel_var = 0.5f; - float _Set_SystemShadowsToBase = 1.0f; - float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var*saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); + float Set_FinalShadowMask = saturate((1.0 + ( ( _HalfLambert_var - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); float innerLerpOp = saturate((1.0 + ((_HalfLambert_var - (_ShadeColor_Step - _1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / ( _ShadeColor_Step - ( _ShadeColor_Step - _1st2nd_Shades_Feather)))); @@ -240,10 +247,22 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) innerLerpOp), Set_FinalShadowMask); - //test - //Set_FinalBaseColor = firstShadeColor; + // float4 _Set_HighColorMask_var = tex2D(_Set_HighColorMask, TRANSFORM_TEX(Set_UV0, _Set_HighColorMask)); + // + // float _Specular_var = 0.5*dot(halfDirection,lerp( i.normalDir, normalDirection, _Is_NormalMapToHighColor ))+0.5; // Specular + // float _TweakHighColorMask_var = (saturate((_Set_HighColorMask_var.g+_Tweak_HighColorMaskLevel))*lerp( (1.0 - step(_Specular_var,(1.0 - pow(abs(_HighColor_Power),5)))), pow(abs(_Specular_var),exp2(lerp(11,1,_HighColor_Power))), _Is_SpecularToHighColor )); + // + // float4 _HighColor_Tex_var = tex2D(_HighColor_Tex, TRANSFORM_TEX(Set_UV0, _HighColor_Tex)); + // + // float3 _HighColor_var = (lerp( (_HighColor_Tex_var.rgb*_HighColor.rgb), ((_HighColor_Tex_var.rgb*_HighColor.rgb)*Set_LightColor), _Is_LightColor_HighColor )*_TweakHighColorMask_var); + // //Composition: 3 Basic Colors and HighColor as Set_HighColor + // float3 Set_HighColor = (lerp(SATURATE_IF_SDR((Set_FinalBaseColor-_TweakHighColorMask_var)), Set_FinalBaseColor, lerp(_Is_BlendAddToHiColor,1.0,_Is_SpecularToHighColor) )+lerp( _HighColor_var, (_HighColor_var*((1.0 - Set_FinalShadowMask)+(Set_FinalShadowMask*_TweakHighColorOnShadow))), _Is_UseTweakHighColorOnShadow )); + + + Set_FinalBaseColor = Set_FinalBaseColor * _ShapeLightBlendFactors0.x; - Set_FinalBaseColor = Set_FinalBaseColor * shapeLight0 * _ShapeLightBlendFactors0.x; + + half4 shapeLight0Modulate = half4(Set_FinalBaseColor, alpha); half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; From d330d340aef691be2b91d64ddcd8d502f0101a8e Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 20 Nov 2025 00:50:15 +0900 Subject: [PATCH 084/290] fix parameter passing (tangent) --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 32df5a316..61fd851e2 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -308,7 +308,7 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) #endif return CombinedShapeLightShared2(surfaceData, inputData, input.uv, - normalWS, tangentWS, bitangentWS); + tangentWS, bitangentWS, normalWS); } From d3f87da677861f32b707a1ebfbb839a381089a0a Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 20 Nov 2025 01:13:06 +0900 Subject: [PATCH 085/290] use range property --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 984d86247..6b2fc777a 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -189,9 +189,9 @@ static void DrawDirectionalLightGUI(MaterialEditor mEditor, Material[] mats, ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction]); ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_2DLightFactor]); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_DiffuseFactor]); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_SpecularFactor]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_2DLightFactor]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_DiffuseFactor]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_SpecularFactor]); } //---------------------------------------------------------------------------------------------------------------------- From c67fd8ab5575d92982827df2fc00ff1bc8fa1eff Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 20 Nov 2025 01:13:44 +0900 Subject: [PATCH 086/290] combine 2d light with directional light --- .../Assets/Shaders/Toon2D.shader | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 61fd851e2..61a7993cf 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -199,36 +199,33 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) mask); shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); } - + + const float3 diffuseLightFactor = (shapeLight0.rgb * _DirectionalLight_2DLightFactor) + + (_DirectionalLight_Color * _DirectionalLight_DiffuseFactor); float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); - float3 baseColor = surfaceData.albedo.rgb; + float3 baseColor = surfaceData.albedo.rgb * diffuseLightFactor; // //v.2.0.5 float4 _1st_ShadeMap_var = lerp( SAMPLE_TEXTURE2D(_1st_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _MainTex_var, _Use_BaseAs1st); - float3 firstShadeColor = _1st_ShadeColor.rgb * _1st_ShadeMap_var.rgb * shapeLight0.rgb; + const float3 firstShadeAlbedo = _1st_ShadeColor.rgb * _1st_ShadeMap_var.rgb; + float3 firstShadeColor = firstShadeAlbedo * diffuseLightFactor; float4 _2nd_ShadeMap_var = lerp( SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _1st_ShadeMap_var, _Use_1stAs2nd); - float3 secondShadeColor = _2nd_ShadeColor.rgb * _2nd_ShadeMap_var.rgb * shapeLight0.rgb; + const float3 secondShadeAlbedo = _2nd_ShadeColor.rgb * _2nd_ShadeMap_var.rgb; + float3 secondShadeColor = secondShadeAlbedo * diffuseLightFactor; - const float light2d_intensity = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + const float light2dDiffuse = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, _DirectionalLight_Direction) + 0.5; - - //float _HalfLambert_var = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + float _HalfLambert_var = (light2dDiffuse * _DirectionalLight_2DLightFactor) + + (directionalDiffuse * _DirectionalLight_DiffuseFactor); - float _HalfLambert_var = 0.5 * dot( perturbedNormalWS, _DirectionalLight_Direction) + 0.5; - //return float4(_DirectionalLight_Direction.rgb,1); - float t = _HalfLambert_var; - - - - //float _HalfLambert_var = 0.5*dot(lerp( i.normalDir, normalDirection, _Is_NormalMapToBase ),lightDirection)+0.5; - // // //Minmimum value is same as the Minimum Feather's value with the Minimum Step's value as threshold. // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var * saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step - _BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); // // From 944e57b8000d18bfb6bb80f2e109c133b5270d6d Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 20 Nov 2025 01:17:05 +0900 Subject: [PATCH 087/290] save materials --- ...Shader_Eye_Clipping_StencilMask_3Das2D.mat | 19 +++++++++++++++---- .../ToonShader_Eyebrow_StencilMask_3Das2D.mat | 19 +++++++++++++++---- .../ToonShader_Face_3Das2D.mat | 19 +++++++++++++++---- .../ToonShader_Fhair2_3Das2D.mat | 19 +++++++++++++++---- .../ToonShader_Fhair_StencilOut_3Das2D.mat | 19 +++++++++++++++---- .../ToonShader_Hair_Clipping_3Das2D.mat | 19 +++++++++++++++---- .../ToonShader_Head_Clipping_3Das2D.mat | 19 +++++++++++++++---- .../ToonShader_Main_3Das2D.mat | 19 +++++++++++++++---- 8 files changed, 120 insertions(+), 32 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat index cad702722..08a7dae46 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat @@ -11,7 +11,8 @@ Material: m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _OUTLINE_NML m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -56,6 +57,8 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_Use: 0 + - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 @@ -67,18 +70,26 @@ Material: - _BaseColor_Step: 0.393 - _BaseShade_Feather: 0.629 - _BumpScale: 1 + - _DirectionalLight_2DLightFactor: 0 + - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_Intensity: 0.83 + - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 0 - - _OutlineWidth: 0 + - _OutlineOffsetZ: 1 + - _OutlineWidth: 24.95 + - _Outline_BaseColorBlend: 0.804 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: - _1st_ShadeColor: {r: 0.4338235, g: 0.4338235, b: 0.4338235, a: 1} - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} + - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat index 3d3ce6cc9..c43b9706b 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat @@ -11,7 +11,8 @@ Material: m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _OUTLINE_NML m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -56,6 +57,8 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_Use: 0 + - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 @@ -67,18 +70,26 @@ Material: - _BaseColor_Step: 0.507 - _BaseShade_Feather: 0.08 - _BumpScale: 1 + - _DirectionalLight_2DLightFactor: 0 + - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_Intensity: 0.83 + - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 0 - - _OutlineWidth: 0 + - _OutlineOffsetZ: 1 + - _OutlineWidth: 24.95 + - _Outline_BaseColorBlend: 0.804 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _2nd_ShadeColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} + - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat index af116aaec..c05d92c5e 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat @@ -11,7 +11,8 @@ Material: m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _OUTLINE_NML m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -56,6 +57,8 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_Use: 0 + - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 @@ -67,18 +70,26 @@ Material: - _BaseColor_Step: 0.353 - _BaseShade_Feather: 0.121 - _BumpScale: 1 + - _DirectionalLight_2DLightFactor: 0 + - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_Intensity: 0.83 + - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 0 - - _OutlineWidth: 0 + - _OutlineOffsetZ: 1 + - _OutlineWidth: 24.95 + - _Outline_BaseColorBlend: 0.804 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _2nd_ShadeColor: {r: 0.7490196, g: 0.69411767, b: 0.88235295, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} + - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat index f05afac88..53cbc2501 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat @@ -11,7 +11,8 @@ Material: m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _OUTLINE_NML m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -56,6 +57,8 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_Use: 0 + - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 @@ -67,18 +70,26 @@ Material: - _BaseColor_Step: 0.801 - _BaseShade_Feather: 0.062 - _BumpScale: 1 + - _DirectionalLight_2DLightFactor: 0 + - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_Intensity: 0.83 + - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 0 - - _OutlineWidth: 0 + - _OutlineOffsetZ: 1 + - _OutlineWidth: 24.95 + - _Outline_BaseColorBlend: 0.804 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0.727 - _Specular_Intensity: 0 m_Colors: - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} + - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat index 13e44553f..b2cd0c5f0 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat @@ -11,7 +11,8 @@ Material: m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _OUTLINE_NML m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -56,6 +57,8 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_Use: 0 + - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 @@ -67,18 +70,26 @@ Material: - _BaseColor_Step: 0.801 - _BaseShade_Feather: 0.062 - _BumpScale: 1 + - _DirectionalLight_2DLightFactor: 0 + - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_Intensity: 0.83 + - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 0 - - _OutlineWidth: 0 + - _OutlineOffsetZ: 1 + - _OutlineWidth: 24.95 + - _Outline_BaseColorBlend: 0.804 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0.727 - _Specular_Intensity: 0 m_Colors: - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} + - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat index eaf04cb0c..1dc502f32 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat @@ -11,7 +11,8 @@ Material: m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _OUTLINE_NML m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -56,6 +57,8 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_Use: 0 + - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 @@ -67,18 +70,26 @@ Material: - _BaseColor_Step: 0.815 - _BaseShade_Feather: 0.13 - _BumpScale: 1 + - _DirectionalLight_2DLightFactor: 0 + - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_Intensity: 0.83 + - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 0 - - _OutlineWidth: 0 + - _OutlineOffsetZ: 1 + - _OutlineWidth: 24.95 + - _Outline_BaseColorBlend: 0.804 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0.722 - _Specular_Intensity: 0 m_Colors: - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} + - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat index 82340acf7..080e50529 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat @@ -11,7 +11,8 @@ Material: m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _OUTLINE_NML m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -56,6 +57,8 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_Use: 0 + - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 @@ -67,18 +70,26 @@ Material: - _BaseColor_Step: 0.815 - _BaseShade_Feather: 0.13 - _BumpScale: 1 + - _DirectionalLight_2DLightFactor: 0 + - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_Intensity: 0.83 + - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 0 - - _OutlineWidth: 0 + - _OutlineOffsetZ: 1 + - _OutlineWidth: 24.95 + - _Outline_BaseColorBlend: 0.804 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0.722 - _Specular_Intensity: 0 m_Colors: - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _2nd_ShadeColor: {r: 0.6691177, g: 0.47672933, b: 0.27059904, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} + - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat index db9cde33d..a487004cf 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat @@ -11,7 +11,8 @@ Material: m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _OUTLINE_NML m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -56,6 +57,8 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_Use: 0 + - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 @@ -67,18 +70,26 @@ Material: - _BaseColor_Step: 0.841 - _BaseShade_Feather: 0.074 - _BumpScale: 1 + - _DirectionalLight_2DLightFactor: 0 + - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_Intensity: 0.83 + - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 0 - - _OutlineWidth: 0 + - _OutlineOffsetZ: 1 + - _OutlineWidth: 24.95 + - _Outline_BaseColorBlend: 0.804 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _2nd_ShadeColor: {r: 0.7490196, g: 0.69411767, b: 0.88235295, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} + - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} From 7d10b90137036de5672884ac76ca61560a4b6f33 Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 20 Nov 2025 01:17:34 +0900 Subject: [PATCH 088/290] save test scene --- .../Assets/ScenesDev/Test2D.unity | 2 +- .../Assets/ScenesDev/test.unity | 519 +++++++++--------- 2 files changed, 256 insertions(+), 265 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity b/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity index eece1ae19..72a430f6c 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity @@ -282,7 +282,7 @@ MonoBehaviour: m_RequiresOpaqueTextureOption: 2 m_CameraType: 0 m_Cameras: [] - m_RendererIndex: -1 + m_RendererIndex: 0 m_VolumeLayerMask: serializedVersion: 2 m_Bits: 1 diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index 4d5891d06..c2e5b95f6 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -119,6 +119,155 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &11182605 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 11182606} + - component: {fileID: 11182608} + - component: {fileID: 11182607} + - component: {fileID: 11182609} + m_Layer: 7 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &11182606 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11182605} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: -16.22577, y: 0, z: 9.01071} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1390602298} + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!114 &11182607 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11182605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_CustomShadowLayers: 0 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 0 + m_RenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_ShadowRenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_Version: 4 + m_LightLayerMask: 1 + m_ShadowLayerMask: 1 + m_RenderingLayers: 1 + m_ShadowRenderingLayers: 1 +--- !u!108 &11182608 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11182605} + m_Enabled: 1 + serializedVersion: 12 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 0.83 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize2D: {x: 10, y: 10} + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!114 &11182609 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11182605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 95eb0866ac8fd424c8dfba8d023d36df, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::ToonDirectionalLightController + m_materials: + - {fileID: 2100000, guid: 3f9d94f5fe986d041a6ec19968d86f1d, type: 2} + - {fileID: 2100000, guid: 1d19f1d638a5ffb449e3a32dd4d5986d, type: 2} + - {fileID: 2100000, guid: 77410fc82598c414fbb68f41d4df2bba, type: 2} + - {fileID: 2100000, guid: 603cf7ef4659af5439a575075bf3ca95, type: 2} + - {fileID: 2100000, guid: 66ecb67261a5bed49b4e9f4734178c7e, type: 2} + - {fileID: 2100000, guid: 96545c3995189d647accdbd148fa2c3d, type: 2} + - {fileID: 2100000, guid: 0f5c320d996610448ab3be5c087d2544, type: 2} + - {fileID: 2100000, guid: 9b9cc9e24bdb5804b9009ba59c8957fe, type: 2} --- !u!1 &116300322 GameObject: m_ObjectHideFlags: 0 @@ -228,8 +377,7 @@ Transform: m_LocalPosition: {x: 3.57, y: -2.13, z: 0} m_LocalScale: {x: 3, y: 3, z: 3} m_ConstrainProportionsScale: 1 - m_Children: - - {fileID: 397058299} + m_Children: [] m_Father: {fileID: 1390602298} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &360142871 @@ -621,7 +769,7 @@ Transform: m_Children: [] m_Father: {fileID: 534897190} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &397058298 +--- !u!1 &406666495 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -629,280 +777,82 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 397058299} - - component: {fileID: 397058301} - - component: {fileID: 397058300} + - component: {fileID: 406666497} + - component: {fileID: 406666496} m_Layer: 0 - m_Name: Spot Light + m_Name: Global Light 2D m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &397058299 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 397058298} - serializedVersion: 2 - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.029999971, y: 1.5433334, z: 0} - m_LocalScale: {x: 0.33333334, y: 0.33333334, z: 0.33333334} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 116300326} - m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} ---- !u!114 &397058300 + m_IsActive: 0 +--- !u!114 &406666496 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 397058298} + m_GameObject: {fileID: 406666495} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} m_Name: - m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData - m_UsePipelineSettings: 1 - m_AdditionalLightsShadowResolutionTier: 2 - m_CustomShadowLayers: 0 - m_LightCookieSize: {x: 1, y: 1} - m_LightCookieOffset: {x: 0, y: 0} - m_SoftShadowQuality: 0 - m_RenderingLayersMask: - serializedVersion: 0 - m_Bits: 1 - m_ShadowRenderingLayersMask: - serializedVersion: 0 - m_Bits: 1 - m_Version: 4 - m_LightLayerMask: 1 - m_ShadowLayerMask: 1 - m_RenderingLayers: 1 - m_ShadowRenderingLayers: 1 ---- !u!108 &397058301 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 397058298} - m_Enabled: 1 - serializedVersion: 12 - m_Type: 0 + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.2D.Runtime::UnityEngine.Rendering.Universal.Light2D + m_ComponentVersion: 2 + m_LightType: 4 + m_BlendStyleIndex: 0 + m_FalloffIntensity: 0.5 m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 8.05 - m_Range: 10.42 - m_SpotAngle: 47.9236 - m_InnerSpotAngle: 39.725677 - m_CookieSize2D: {x: 10, y: 10} - m_Shadows: - m_Type: 0 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingLayerMask: 1 - m_Lightmapping: 4 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 - m_ForceVisible: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 0 - m_LightUnit: 1 - m_LuxAtDistance: 1 - m_EnableSpotReflector: 1 ---- !u!1 &443363985 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 443363986} - - component: {fileID: 443363989} - - component: {fileID: 443363988} - - component: {fileID: 443363987} - m_Layer: 7 - m_Name: SD_unitychan_SpotLight - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &443363986 + m_Intensity: 1 + m_LightVolumeIntensity: 1 + m_LightVolumeEnabled: 0 + m_ApplyToSortingLayers: 00000000 + m_LightCookieSprite: {fileID: 0} + m_DeprecatedPointLightCookieSprite: {fileID: 0} + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 + m_OverlapOperation: 0 + m_NormalMapDistance: 3 + m_NormalMapQuality: 2 + m_UseNormalMap: 0 + m_ShadowsEnabled: 1 + m_ShadowIntensity: 0.75 + m_ShadowSoftness: 0.3 + m_ShadowSoftnessFalloffIntensity: 0.5 + m_ShadowVolumeIntensityEnabled: 0 + m_ShadowVolumeIntensity: 0.75 + m_LocalBounds: + m_Center: {x: 0, y: -0.00000011920929, z: 0} + m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} + m_PointLightInnerAngle: 360 + m_PointLightOuterAngle: 360 + m_PointLightInnerRadius: 0 + m_PointLightOuterRadius: 1 + m_ShapeLightParametricSides: 5 + m_ShapeLightParametricAngleOffset: 0 + m_ShapeLightParametricRadius: 1 + m_ShapeLightFalloffSize: 0.5 + m_ShapeLightFalloffOffset: {x: 0, y: 0} + m_ShapePath: + - {x: -0.5, y: -0.5, z: 0} + - {x: 0.5, y: -0.5, z: 0} + - {x: 0.5, y: 0.5, z: 0} + - {x: -0.5, y: 0.5, z: 0} +--- !u!4 &406666497 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 443363985} + m_GameObject: {fileID: 406666495} serializedVersion: 2 - m_LocalRotation: {x: -0.12823418, y: 0.548527, z: -0.79870117, w: 0.21154352} - m_LocalPosition: {x: 3.42, y: 5.94, z: -0.77} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -11.617657, y: 2.2903457, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 1390602298} - m_LocalEulerAnglesHint: {x: 55.282, y: 50.098, z: -122.825} ---- !u!1773428102 &443363987 -ParentConstraint: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 443363985} - m_Enabled: 0 - serializedVersion: 2 - m_Weight: 1 - m_TranslationAtRest: {x: 4.01, y: 5.94, z: 0} - m_RotationAtRest: {x: 90, y: 0, z: 0} - m_TranslationOffsets: - - {x: 0, y: 5.94, z: 0} - m_RotationOffsets: - - {x: 89.96574, y: 0, z: 0} - m_AffectTranslationX: 1 - m_AffectTranslationY: 1 - m_AffectTranslationZ: 1 - m_AffectRotationX: 1 - m_AffectRotationY: 1 - m_AffectRotationZ: 1 - m_Active: 1 - m_IsLocked: 1 - m_Sources: - - sourceTransform: {fileID: 1244320234} - weight: 1 ---- !u!114 &443363988 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 443363985} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData - m_UsePipelineSettings: 1 - m_AdditionalLightsShadowResolutionTier: 2 - m_CustomShadowLayers: 0 - m_LightCookieSize: {x: 1, y: 1} - m_LightCookieOffset: {x: 0, y: 0} - m_SoftShadowQuality: 0 - m_RenderingLayersMask: - serializedVersion: 0 - m_Bits: 1 - m_ShadowRenderingLayersMask: - serializedVersion: 0 - m_Bits: 1 - m_Version: 4 - m_LightLayerMask: 1 - m_ShadowLayerMask: 1 - m_RenderingLayers: 1 - m_ShadowRenderingLayers: 1 ---- !u!108 &443363989 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 443363985} - m_Enabled: 1 - serializedVersion: 12 - m_Type: 1 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 0.6 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.80208 - m_CookieSize2D: {x: 10, y: 10} - m_Shadows: - m_Type: 0 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingLayerMask: 1 - m_Lightmapping: 4 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 - m_ForceVisible: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 0 - m_LightUnit: 1 - m_LuxAtDistance: 1 - m_EnableSpotReflector: 1 + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &534897189 GameObject: m_ObjectHideFlags: 0 @@ -1560,6 +1510,46 @@ PrefabInstance: propertyPath: m_ConstrainProportionsScale value: 1 objectReference: {fileID: 0} + - target: {fileID: 137045927908760868, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: 77410fc82598c414fbb68f41d4df2bba, type: 2} + - target: {fileID: 137045927908760868, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + propertyPath: 'm_Materials.Array.data[1]' + value: + objectReference: {fileID: 2100000, guid: 1d19f1d638a5ffb449e3a32dd4d5986d, type: 2} + - target: {fileID: 137242737495624280, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: 603cf7ef4659af5439a575075bf3ca95, type: 2} + - target: {fileID: 137471627487125408, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: 3f9d94f5fe986d041a6ec19968d86f1d, type: 2} + - target: {fileID: 137500131347435080, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: 9b9cc9e24bdb5804b9009ba59c8957fe, type: 2} + - target: {fileID: 137731917670969218, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: 0f5c320d996610448ab3be5c087d2544, type: 2} + - target: {fileID: 137731917670969218, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + propertyPath: 'm_Materials.Array.data[1]' + value: + objectReference: {fileID: 2100000, guid: 96545c3995189d647accdbd148fa2c3d, type: 2} + - target: {fileID: 137965403754953122, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: 66ecb67261a5bed49b4e9f4734178c7e, type: 2} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] @@ -2236,8 +2226,8 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 116300326} - - {fileID: 443363986} - {fileID: 1244320234} + - {fileID: 11182606} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1604474280 @@ -2266,13 +2256,13 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1604474280} serializedVersion: 2 - m_LocalRotation: {x: 1, y: -0, z: -0, w: 0} - m_LocalPosition: {x: -12.32, y: 5.26, z: 0} + m_LocalRotation: {x: -0.9111758, y: -0.39260286, z: 0.114785224, w: 0.04945808} + m_LocalPosition: {x: -14.18, y: 4.22, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 372493292} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} + m_LocalEulerAnglesHint: {x: 0, y: -165.64, z: 133.38} --- !u!1773428102 &1604474282 ParentConstraint: m_ObjectHideFlags: 0 @@ -2280,7 +2270,7 @@ ParentConstraint: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1604474280} - m_Enabled: 1 + m_Enabled: 0 serializedVersion: 2 m_Weight: 1 m_TranslationAtRest: {x: -12.32, y: 5.26, z: 0} @@ -2315,9 +2305,9 @@ MonoBehaviour: m_ComponentVersion: 2 m_LightType: 3 m_BlendStyleIndex: 0 - m_FalloffIntensity: 0.573 + m_FalloffIntensity: 0.535 m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1.05 + m_Intensity: 1 m_LightVolumeIntensity: 1 m_LightVolumeEnabled: 0 m_ApplyToSortingLayers: 00000000 @@ -2338,10 +2328,10 @@ MonoBehaviour: m_LocalBounds: m_Center: {x: 0, y: -0.00000011920929, z: 0} m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} - m_PointLightInnerAngle: 38.718567 - m_PointLightOuterAngle: 112.86043 + m_PointLightInnerAngle: 0 + m_PointLightOuterAngle: 157.95917 m_PointLightInnerRadius: 0 - m_PointLightOuterRadius: 6.85 + m_PointLightOuterRadius: 23.5 m_ShapeLightParametricSides: 5 m_ShapeLightParametricAngleOffset: 0 m_ShapeLightParametricRadius: 1 @@ -2663,3 +2653,4 @@ SceneRoots: - {fileID: 1390602298} - {fileID: 534897190} - {fileID: 372493292} + - {fileID: 406666497} From c5bf7d887d0c7d68e59d7d861561c1a50da2f1ce Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 17:05:20 +0900 Subject: [PATCH 089/290] Use ObjectTransform.hlsl --- .../Assets/Shaders/ObjectTransform.hlsl | 16 +++++++++ .../Assets/Shaders/ObjectTransform.hlsl.meta | 7 ++++ .../Assets/Shaders/Toon2D.shader | 33 ++----------------- 3 files changed, 25 insertions(+), 31 deletions(-) create mode 100644 Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl create mode 100644 Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl.meta diff --git a/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl b/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl new file mode 100644 index 000000000..b24abd2ff --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl @@ -0,0 +1,16 @@ + +inline float4 UnityObjectToClipPosInstanced(in float3 pos) { + return mul(UNITY_MATRIX_VP, mul(GetObjectToWorldMatrix(), float4(pos, 1.0))); +} +#define UnityObjectToClipPos UnityObjectToClipPosInstanced + + +inline float3 UnityObjectToWorldNormal(in float3 norm) +{ + #ifdef UNITY_ASSUME_UNIFORM_SCALING + return UnityObjectToWorldDir(norm); + #else + // mul(IT_M, norm) => mul(norm, I_M) => {dot(norm, I_M.col0), dot(norm, I_M.col1), dot(norm, I_M.col2)} + return normalize(mul(norm, (float3x3)GetWorldToObjectMatrix())); + #endif +} diff --git a/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl.meta b/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl.meta new file mode 100644 index 000000000..a1165fead --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9b41c14789eff344cb5a038c3548f99e +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 61a7993cf..695b751b9 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -133,15 +133,7 @@ Shader "Toon3Das2D"{ TEXTURE2D(_1st_ShadeMap); TEXTURE2D(_2nd_ShadeMap); -inline float3 UnityObjectToWorldNormal(in float3 norm) -{ -#ifdef UNITY_ASSUME_UNIFORM_SCALING - return UnityObjectToWorldDir(norm); -#else - // mul(IT_M, norm) => mul(norm, I_M) => {dot(norm, I_M.col0), dot(norm, I_M.col1), dot(norm, I_M.col2)} - return normalize(mul(norm, (float3x3)GetWorldToObjectMatrix())); -#endif -} + #include "ObjectTransform.hlsl" Varyings LitVertex(Attributes input) { @@ -437,29 +429,8 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) float _Outline_LightColorBlend; CBUFFER_END - -// #ifdef UNIVERSAL_PIPELINE_CORE_INCLUDED -// #include "../../UniversalRP/Shaders/UniversalToonInput.hlsl" -// #include "../../UniversalRP/Shaders/UniversalToonHead.hlsl" -// #include "../../UniversalRP/Shaders/UniversalToonOutline.hlsl" -// #endif - -inline float4 UnityObjectToClipPosInstanced(in float3 pos) { - return mul(UNITY_MATRIX_VP, mul(GetObjectToWorldMatrix(), float4(pos, 1.0))); -} -#define UnityObjectToClipPos UnityObjectToClipPosInstanced - - -inline float3 UnityObjectToWorldNormal(in float3 norm) -{ -#ifdef UNITY_ASSUME_UNIFORM_SCALING - return UnityObjectToWorldDir(norm); -#else - // mul(IT_M, norm) => mul(norm, I_M) => {dot(norm, I_M.col0), dot(norm, I_M.col1), dot(norm, I_M.col2)} - return normalize(mul(norm, (float3x3)GetWorldToObjectMatrix())); -#endif -} + #include "ObjectTransform.hlsl" OutlineVertexOutput OutlineVertex(OutlineVertexInput v) { OutlineVertexOutput o = (OutlineVertexOutput) 0; From 12452c0572d5473e3dcd54961373f7f9c81a71ac Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 17:09:10 +0900 Subject: [PATCH 090/290] pragma --- Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl | 1 + 1 file changed, 1 insertion(+) diff --git a/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl b/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl index b24abd2ff..bc794b9e0 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl +++ b/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl @@ -1,3 +1,4 @@ +#pragma once inline float4 UnityObjectToClipPosInstanced(in float3 pos) { return mul(UNITY_MATRIX_VP, mul(GetObjectToWorldMatrix(), float4(pos, 1.0))); From d13166df65fd8770a8230a5845c52593c934bb1b Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 17:09:20 +0900 Subject: [PATCH 091/290] cleanup --- .../Assets/Shaders/Toon2D.shader | 26 +++++-------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 695b751b9..8b9e39b5f 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -473,7 +473,6 @@ Shader "Toon3Das2D"{ return o; } - //SHAPE_LIGHT macros #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" @@ -525,13 +524,6 @@ Shader "Toon3Das2D"{ return Set_Outline_Color; #endif - - -#if (UNITY_VERSION >= 202230) - return float4(0,1,1,1); -#else - return float4(1,0,0,1); -#endif } @@ -554,13 +546,11 @@ Shader "Toon3Das2D"{ // GPU Instancing #pragma multi_compile_instancing - struct Attributes - { + struct Attributes { COMMON_2D_NORMALS_INPUTS }; - struct Varyings - { + struct Varyings { COMMON_2D_NORMALS_OUTPUTS }; @@ -568,13 +558,11 @@ Shader "Toon3Das2D"{ #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Normals2DCommon.hlsl" - Varyings NormalsRenderingVertex(Attributes input) - { + Varyings NormalsRenderingVertex(Attributes input) { return CommonNormalsVertex(input); } - half4 NormalsRenderingFragment(Varyings input) : SV_Target - { + half4 NormalsRenderingFragment(Varyings input) : SV_Target { return CommonNormalsFragment(input, _White); } ENDHLSL @@ -606,13 +594,11 @@ Shader "Toon3Das2D"{ #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/2DCommon.hlsl" - Varyings UnlitVertex(Attributes input) - { + Varyings UnlitVertex(Attributes input) { return CommonUnlitVertex(input); } - half4 UnlitFragment(Varyings input) : SV_Target - { + half4 UnlitFragment(Varyings input) : SV_Target { return CommonUnlitFragment(input, _White); } ENDHLSL From d753f171764b2a5babbddbb1d84e0e516bb09da8 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 17:12:13 +0900 Subject: [PATCH 092/290] Multiply --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 8b9e39b5f..8c2e68dcc 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -118,6 +118,7 @@ Shader "Toon3Das2D"{ float _ShadeColor_Step; float _1st2nd_Shades_Feather; + int _DirectionalLight_Use; float3 _DirectionalLight_Direction; float4 _DirectionalLight_Color; float _DirectionalLight_Intensity; @@ -193,7 +194,7 @@ Shader "Toon3Das2D"{ } const float3 diffuseLightFactor = (shapeLight0.rgb * _DirectionalLight_2DLightFactor) - + (_DirectionalLight_Color * _DirectionalLight_DiffuseFactor); + + (_DirectionalLight_Color * _DirectionalLight_DiffuseFactor * _DirectionalLight_Use); float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); float3 baseColor = surfaceData.albedo.rgb * diffuseLightFactor; From f335001ce1975a45ff8eae47b4a1cd1a831a5600 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 17:17:20 +0900 Subject: [PATCH 093/290] rename constants --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 166 +++++++++--------- 1 file changed, 83 insertions(+), 83 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 6b2fc777a..81288b780 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -44,7 +44,7 @@ void RefreshFoldouts(Material mat, Dictionary m_normalMapFoldout = true; m_outlineFoldout = mat.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); - bool lightEnabled = mat.GetInteger(uiElements[ShaderPropUnlit_DirectionalLight_Use].mainProperty.id) !=0; + bool lightEnabled = mat.GetInteger(uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_USE].mainProperty.id) !=0; m_directionalLightFoldout = lightEnabled; } @@ -53,12 +53,12 @@ void RefreshFoldouts(Material mat, Dictionary static void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements, ref bool foldout) { - ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, uiElements[ShaderProp_NormalMap].label); + ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, uiElements[SHADER_PROP_NORMAL_MAP].label); if (!foldout) return; - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderProp_NormalMap]); - mEditor.TextureScaleOffsetProperty(uiElements[ShaderProp_NormalMap].mainProperty.prop); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_NORMAL_MAP]); + mEditor.TextureScaleOffsetProperty(uiElements[SHADER_PROP_NORMAL_MAP].mainProperty.prop); EditorGUILayout.Space(); } @@ -84,7 +84,7 @@ static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements) { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderPropMainTex]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_MAIN_TEX]); EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[ShaderPropUse_BaseAs1st], out bool applyTo1st ); + ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_USE_BASE_AS1_ST], out bool applyTo1st ); EditorGUI.indentLevel -= 2; if (applyTo1st) { EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[ShaderProp_1st_ShadeColor]); + ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[SHADER_PROP_1_ST_SHADE_COLOR]); EditorGUI.indentLevel -= 2; } else { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderProp_1st_ShadeMap]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_1_ST_SHADE_MAP]); } EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[ShaderPropUse_1stAs2nd], out bool applyTo2nd); + ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_USE_1_ST_AS2_ND], out bool applyTo2nd); EditorGUI.indentLevel -= 2; if (applyTo2nd) { EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[ShaderProp_2nd_ShadeColor]); + ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[SHADER_PROP_2_ND_SHADE_COLOR]); EditorGUI.indentLevel -= 2; } else { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderProp_2nd_ShadeMap]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_2_ND_SHADE_MAP]); } } static void DrawDirectionalLightGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements, ref bool foldout) { - ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, mats, uiElements[ShaderPropUnlit_DirectionalLight_Use], + ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_USE], ref foldout); if (!foldout) @@ -189,9 +189,9 @@ static void DrawDirectionalLightGUI(MaterialEditor mEditor, Material[] mats, ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction]); ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_2DLightFactor]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_DiffuseFactor]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_SpecularFactor]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_2D_LIGHT_FACTOR]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR]); } //---------------------------------------------------------------------------------------------------------------------- @@ -236,98 +236,98 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty private static readonly List m_materialUIElements = new List() { new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropMainTex), + mainPropertyName = new MaterialName(SHADER_PROP_MAIN_TEX), label = new GUIContent("Base Map", "Base Color : Texture(sRGB) × Color(RGB)."), - extraPropertyName1 = new MaterialName(ShaderProp_BaseColor), + extraPropertyName1 = new MaterialName(SHADER_PROP_BASE_COLOR), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_1st_ShadeMap), + mainPropertyName = new MaterialName(SHADER_PROP_1_ST_SHADE_MAP), label = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."), - extraPropertyName1 = new MaterialName(ShaderProp_1st_ShadeColor), + extraPropertyName1 = new MaterialName(SHADER_PROP_1_ST_SHADE_COLOR), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_1st_ShadeColor), + mainPropertyName = new MaterialName(SHADER_PROP_1_ST_SHADE_COLOR), label = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_2nd_ShadeMap), + mainPropertyName = new MaterialName(SHADER_PROP_2_ND_SHADE_MAP), label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), - extraPropertyName1 = new MaterialName(ShaderProp_2nd_ShadeColor) + extraPropertyName1 = new MaterialName(SHADER_PROP_2_ND_SHADE_COLOR) }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_2nd_ShadeColor), + mainPropertyName = new MaterialName(SHADER_PROP_2_ND_SHADE_COLOR), label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUse_BaseAs1st), + mainPropertyName = new MaterialName(SHADER_PROP_USE_BASE_AS1_ST), label = new GUIContent("Apply to 1st shading map", "Apply Base map to the 1st shading map."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUse_1stAs2nd), + mainPropertyName = new MaterialName(SHADER_PROP_USE_1_ST_AS2_ND), label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), }, //Normal Map new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_NormalMap), + mainPropertyName = new MaterialName(SHADER_PROP_NORMAL_MAP), label = new GUIContent("Normal Map", "A texture that specifies the bumpiness of the material."), - extraPropertyName1 = new MaterialName(ShaderProp_BumpScale), + extraPropertyName1 = new MaterialName(SHADER_PROP_BUMP_SCALE), }, //Outline Start new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_OutlineWidth), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_WIDTH), label = new GUIContent("Outline Width", "The width of the outline."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_OutlineWidthMap), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_WIDTH_MAP), label = new GUIContent("Outline Width Map", "Outline Width Map (grayscale, linear): White = full width, Black = 0 width."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_OutlineTex), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_TEX), label = new GUIContent("Outline Color", "The color of outline."), - extraPropertyName1 = new MaterialName(ShaderProp_OutlineColor), + extraPropertyName1 = new MaterialName(SHADER_PROP_OUTLINE_COLOR), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_Outline_BaseColorBlend), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_BASE_COLOR_BLEND), label = new GUIContent("Blend Base Color to Outline", "Blend base color to outline color."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_Outline_LightColorBlend), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_LIGHT_COLOR_BLEND), label = new GUIContent("Blend Light Color to Outline", "Blend light color to outline color."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_OutlineOffsetZ), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_OFFSET_Z), label = new GUIContent("Z Offset", "Offsets the outline in the depth (Z) direction of the camera."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_OutlineNear), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_NEAR), label = new GUIContent("Near", "Nearest distance for maximum outline width."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_OutlineFar), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_FAR), label = new GUIContent("Far", "Furthest distance where outline fades to zero width."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_OutlineMode), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_MODE), label = new GUIContent("Outline Mode", "Specifies how the outline is generated."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_Outline_UseCustomNormalMap), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_USE_CUSTOM_NORMAL_MAP), label = new GUIContent("Use Custom Normal Map", "Use a custom normal map for outline."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_Outline_CustomNormalMap), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_CUSTOM_NORMAL_MAP), label = new GUIContent("Custom Normal Map", "Custom normal map (linear) for outline. "), }, @@ -335,7 +335,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty //Custom Directional Light new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_Use), + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_USE), label = new GUIContent("Custom Directional Light", "Apply a custom directional light."), }, @@ -355,17 +355,17 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "The intensity of the custom directional light. "), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_2DLightFactor), + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_2D_LIGHT_FACTOR), label = new GUIContent("2D Light Factor", "Multiplier for the 2D light contribution."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_DiffuseFactor), + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR), label = new GUIContent("Diffuse Factor", "Multiplier for the diffuse lighting contribution."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_SpecularFactor), + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR), label = new GUIContent("Specular Factor", "Multiplier for the specular lighting contribution."), }, @@ -373,36 +373,36 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty //Common constants - internal const string ShaderPropMainTex = "_MainTex"; - internal const string ShaderPropUse_BaseAs1st = "_Use_BaseAs1st"; - internal const string ShaderPropUse_1stAs2nd = "_Use_1stAs2nd"; - internal const string ShaderProp_BaseColor = "_BaseColor"; - internal const string ShaderProp_1st_ShadeMap = "_1st_ShadeMap"; - internal const string ShaderProp_1st_ShadeColor = "_1st_ShadeColor"; - internal const string ShaderProp_2nd_ShadeMap = "_2nd_ShadeMap"; - internal const string ShaderProp_2nd_ShadeColor = "_2nd_ShadeColor"; - - internal const string ShaderProp_NormalMap = "_NormalMap"; - internal const string ShaderProp_BumpScale = "_BumpScale"; + internal const string SHADER_PROP_MAIN_TEX = "_MainTex"; + internal const string SHADER_PROP_USE_BASE_AS1_ST = "_Use_BaseAs1st"; + internal const string SHADER_PROP_USE_1_ST_AS2_ND = "_Use_1stAs2nd"; + internal const string SHADER_PROP_BASE_COLOR = "_BaseColor"; + internal const string SHADER_PROP_1_ST_SHADE_MAP = "_1st_ShadeMap"; + internal const string SHADER_PROP_1_ST_SHADE_COLOR = "_1st_ShadeColor"; + internal const string SHADER_PROP_2_ND_SHADE_MAP = "_2nd_ShadeMap"; + internal const string SHADER_PROP_2_ND_SHADE_COLOR = "_2nd_ShadeColor"; + + internal const string SHADER_PROP_NORMAL_MAP = "_NormalMap"; + internal const string SHADER_PROP_BUMP_SCALE = "_BumpScale"; - internal const string ShaderProp_OutlineMode = "_OutlineMode"; - internal const string ShaderProp_OutlineWidth = "_OutlineWidth"; - internal const string ShaderProp_OutlineWidthMap = "_OutlineWidthMap"; - internal const string ShaderProp_OutlineTex = "_OutlineTex"; - internal const string ShaderProp_OutlineColor = "_OutlineColor"; - internal const string ShaderProp_Outline_BaseColorBlend = "_Outline_BaseColorBlend"; - internal const string ShaderProp_Outline_LightColorBlend = "_Outline_LightColorBlend"; - internal const string ShaderProp_OutlineOffsetZ = "_OutlineOffsetZ"; - internal const string ShaderProp_OutlineNear = "_OutlineNear"; - internal const string ShaderProp_OutlineFar = "_OutlineFar"; - - internal const string ShaderProp_Outline_UseCustomNormalMap = "_Outline_UseCustomNormalMap"; - internal const string ShaderProp_Outline_CustomNormalMap = "_Outline_CustomNormalMap"; - - internal const string ShaderPropUnlit_DirectionalLight_Use = "_DirectionalLight_Use"; - internal const string ShaderPropUnlit_DirectionalLight_2DLightFactor = "_DirectionalLight_2DLightFactor"; - internal const string ShaderPropUnlit_DirectionalLight_DiffuseFactor = "_DirectionalLight_DiffuseFactor"; - internal const string ShaderPropUnlit_DirectionalLight_SpecularFactor = "_DirectionalLight_SpecularFactor"; + internal const string SHADER_PROP_OUTLINE_MODE = "_OutlineMode"; + internal const string SHADER_PROP_OUTLINE_WIDTH = "_OutlineWidth"; + internal const string SHADER_PROP_OUTLINE_WIDTH_MAP = "_OutlineWidthMap"; + internal const string SHADER_PROP_OUTLINE_TEX = "_OutlineTex"; + internal const string SHADER_PROP_OUTLINE_COLOR = "_OutlineColor"; + internal const string SHADER_PROP_OUTLINE_BASE_COLOR_BLEND = "_Outline_BaseColorBlend"; + internal const string SHADER_PROP_OUTLINE_LIGHT_COLOR_BLEND = "_Outline_LightColorBlend"; + internal const string SHADER_PROP_OUTLINE_OFFSET_Z = "_OutlineOffsetZ"; + internal const string SHADER_PROP_OUTLINE_NEAR = "_OutlineNear"; + internal const string SHADER_PROP_OUTLINE_FAR = "_OutlineFar"; + + internal const string SHADER_PROP_OUTLINE_USE_CUSTOM_NORMAL_MAP = "_Outline_UseCustomNormalMap"; + internal const string SHADER_PROP_OUTLINE_CUSTOM_NORMAL_MAP = "_Outline_CustomNormalMap"; + + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_USE = "_DirectionalLight_Use"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_2D_LIGHT_FACTOR = "_DirectionalLight_2DLightFactor"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR = "_DirectionalLight_DiffuseFactor"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR = "_DirectionalLight_SpecularFactor"; //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; From c97a0cb02fa7d93921a2b5906f149b488daae6d4 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 17:22:02 +0900 Subject: [PATCH 094/290] rename to 2DLightStrength --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 8 +++++--- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 8 ++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 81288b780..bf6e50d8d 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -175,6 +175,9 @@ static void DrawThreeColorsGUI(MaterialEditor mEditor, Material[] mats, } else { ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_2_ND_SHADE_MAP]); } + + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_2D_LIGHT_STRENGTH]); + } static void DrawDirectionalLightGUI(MaterialEditor mEditor, Material[] mats, @@ -189,7 +192,6 @@ static void DrawDirectionalLightGUI(MaterialEditor mEditor, Material[] mats, ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction]); ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_2D_LIGHT_FACTOR]); ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR]); ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR]); } @@ -355,7 +357,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "The intensity of the custom directional light. "), }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_2D_LIGHT_FACTOR), + mainPropertyName = new MaterialName(SHADER_PROP_2D_LIGHT_STRENGTH), label = new GUIContent("2D Light Factor", "Multiplier for the 2D light contribution."), }, @@ -381,6 +383,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_1_ST_SHADE_COLOR = "_1st_ShadeColor"; internal const string SHADER_PROP_2_ND_SHADE_MAP = "_2nd_ShadeMap"; internal const string SHADER_PROP_2_ND_SHADE_COLOR = "_2nd_ShadeColor"; + internal const string SHADER_PROP_2D_LIGHT_STRENGTH = "_2DLightStrength"; internal const string SHADER_PROP_NORMAL_MAP = "_NormalMap"; internal const string SHADER_PROP_BUMP_SCALE = "_BumpScale"; @@ -400,7 +403,6 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_OUTLINE_CUSTOM_NORMAL_MAP = "_Outline_CustomNormalMap"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_USE = "_DirectionalLight_Use"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_2D_LIGHT_FACTOR = "_DirectionalLight_2DLightFactor"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR = "_DirectionalLight_DiffuseFactor"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR = "_DirectionalLight_SpecularFactor"; diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 8c2e68dcc..a9dc1dad8 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -15,6 +15,7 @@ Shader "Toon3Das2D"{ _ShadeColor_Step ("ShadeColor_Step", Range(0, 1)) = 0 _1st2nd_Shades_Feather ("1st/2nd_Shades_Feather", Range(0.0001, 1)) = 0.0001 + _2DLightStrength ("2D Light Strength", Range(0,1)) = 1 _MaskTex("Mask", 2D) = "white" {} @@ -43,7 +44,6 @@ Shader "Toon3Das2D"{ _DirectionalLight_Direction ("Specular Light Direction", Vector) = (0,-1,0,0) _DirectionalLight_Color("Directional Light Color", Color) = (1,1,1,1) _DirectionalLight_Intensity ("Directional Light Intensity", float) = 0.5 - _DirectionalLight_2DLightFactor ("Directional Light: 2D Light Factor", Range(0,1)) = 1 _DirectionalLight_DiffuseFactor ("Directional Light: Diffuse Factor", Range(0,1)) = 0.5 _DirectionalLight_SpecularFactor ("Directional Light: Specular Factor", Range(0,1)) = 0.5 @@ -117,12 +117,12 @@ Shader "Toon3Das2D"{ float _ShadeColor_Step; float _1st2nd_Shades_Feather; + float _2DLightStrength; int _DirectionalLight_Use; float3 _DirectionalLight_Direction; float4 _DirectionalLight_Color; float _DirectionalLight_Intensity; - float _DirectionalLight_2DLightFactor; float _DirectionalLight_DiffuseFactor; float _DirectionalLight_SpecularFactor; @@ -193,7 +193,7 @@ Shader "Toon3Das2D"{ shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); } - const float3 diffuseLightFactor = (shapeLight0.rgb * _DirectionalLight_2DLightFactor) + const float3 diffuseLightFactor = (shapeLight0.rgb * _2DLightStrength) + (_DirectionalLight_Color * _DirectionalLight_DiffuseFactor * _DirectionalLight_Use); float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); @@ -215,7 +215,7 @@ Shader "Toon3Das2D"{ const float light2dDiffuse = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, _DirectionalLight_Direction) + 0.5; - float _HalfLambert_var = (light2dDiffuse * _DirectionalLight_2DLightFactor) + float _HalfLambert_var = (light2dDiffuse * _2DLightStrength) + (directionalDiffuse * _DirectionalLight_DiffuseFactor); From da8275d26236a8aa5f78364470cf4555380fedb2 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 17:27:27 +0900 Subject: [PATCH 095/290] Disable DirectionalGroup GUI elements if we are not using it --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index bf6e50d8d..5cfdac56e 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -26,10 +26,10 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { EditorGUI.BeginChangeCheck(); DrawThreeColorsGUI(mEditor, mats, m_materialPropertyUIElements); + DrawDirectionalLightGUI(mEditor, mats, m_materialPropertyUIElements, ref m_directionalLightFoldout); DrawNormalMapGUI(mEditor, m_materialPropertyUIElements, ref m_normalMapFoldout); DrawOutlineGUI(mEditor, mats, m_materialPropertyUIElements, ref m_outlineFoldout); - DrawDirectionalLightGUI(mEditor, mats, m_materialPropertyUIElements, ref m_directionalLightFoldout); if (EditorGUI.EndChangeCheck()) { @@ -183,17 +183,19 @@ static void DrawThreeColorsGUI(MaterialEditor mEditor, Material[] mats, static void DrawDirectionalLightGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements, ref bool foldout) { - ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_USE], - ref foldout); + ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, mats, + uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_USE], ref foldout, out bool toggleEnabled); if (!foldout) return; - + + EditorGUI.BeginDisabledGroup(!toggleEnabled); ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction]); ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR]); ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR]); + EditorGUI.EndDisabledGroup(); } //---------------------------------------------------------------------------------------------------------------------- From 1645e19ee59541aad1ad59b326b526169ea05174 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 17:30:39 +0900 Subject: [PATCH 096/290] clean up unused code --- .../Assets/Shaders/Toon2D.shader | 63 ++----------------- 1 file changed, 5 insertions(+), 58 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index a9dc1dad8..63a709abe 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -72,8 +72,8 @@ Shader "Toon3Das2D"{ HLSLPROGRAM #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" - #pragma vertex LitVertex - #pragma fragment LitFragment + #pragma vertex ToonVertex + #pragma fragment ToonFragment #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" @@ -136,7 +136,7 @@ Shader "Toon3Das2D"{ #include "ObjectTransform.hlsl" - Varyings LitVertex(Attributes input) { + Varyings ToonVertex(Attributes input) { Varyings o = (Varyings) 0; UNITY_SETUP_INSTANCE_ID(input); @@ -251,8 +251,6 @@ Shader "Toon3Das2D"{ Set_FinalBaseColor = Set_FinalBaseColor * _ShapeLightBlendFactors0.x; - - half4 shapeLight0Modulate = half4(Set_FinalBaseColor, alpha); half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; @@ -275,9 +273,8 @@ Shader "Toon3Das2D"{ return max(0, finalOutput); } - half4 CommonLitFragment2(Varyings input, half4 color) - { - const half4 main = color * SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv); + half4 ToonFragment(Varyings input) : SV_Target { + const half4 main = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv); const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.uv); const half3 normalTS = UnpackNormalScale(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.uv), _BumpScale); @@ -302,56 +299,6 @@ Shader "Toon3Das2D"{ } -//---------------------------------------------------------------------------------------------------------------------- - float4 LitFragment(Varyings input) : SV_Target - { - float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); - float2 Set_UV0 = input.uv; - float3 mainLightColor = float3(1, 1, 1); - float3 defaultLightColor = float3(1, 1, 1); - - // //v.2.0.5 - // float3 defaultLightColor = saturate(max(half3(0.05, 0.05, 0.05) * _Unlit_Intensity, - // max(ShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), - // ShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * - // _Unlit_Intensity)); - // float3 customLightDirection = normalize(mul( GetObjectToWorldMatrix(), float4(((float3(1.0,0.0,0.0)*_Offset_X_Axis_BLD*10)+(float3(0.0,1.0,0.0)*_Offset_Y_Axis_BLD*10)+(float3(0.0,0.0,-1.0)*lerp(-1.0,1.0,_Inverse_Z_Axis_BLD))),0)).xyz); - // float3 lightDirection = normalize(lerp(defaultLightDirection, mainLight.direction.xyz,any(mainLight.direction.xyz))); - // lightDirection = lerp(lightDirection, customLightDirection, _Is_BLD); - // //v.2.0.5: - // - half3 originalLightColor = mainLightColor.rgb; - float3 lightColor = max(defaultLightColor, saturate(originalLightColor)); - float3 Set_LightColor = lightColor.rgb; - - float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); - float3 Set_BaseColor = ((_BaseColor.rgb * _MainTex_var.rgb) * Set_LightColor); - - - // //v.2.0.5 - // float4 _1st_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_1st_ShadeMap,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_MainTex_var,_Use_BaseAs1st); - // float3 Set_1st_ShadeColor = lerp( (_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb), ((_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_1st_Shade ); - // //v.2.0.5 - // float4 _2nd_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_1st_ShadeMap_var,_Use_1stAs2nd); - // float3 Set_2nd_ShadeColor = lerp( (_2nd_ShadeColor.rgb*_2nd_ShadeMap_var.rgb), ((_2nd_ShadeColor.rgb*_2nd_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_2nd_Shade ); - // float _HalfLambert_var = 0.5*dot(lerp( i.normalDir, normalDirection, _Is_NormalMapToBase ),lightDirection)+0.5; - // - // float4 _Set_2nd_ShadePosition_var = tex2D(_Set_2nd_ShadePosition, TRANSFORM_TEX(Set_UV0, _Set_2nd_ShadePosition)); - // float4 _Set_1st_ShadePosition_var = tex2D(_Set_1st_ShadePosition, TRANSFORM_TEX(Set_UV0, _Set_1st_ShadePosition)); - // //v.2.0.6 - // //Minmimum value is same as the Minimum Feather's value with the Minimum Step's value as threshold. - // float _SystemShadowsLevel_var = (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel > 0.001 ? (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel : 0.0001; - // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var*saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); - // // - // //Composition: 3 Basic Colors as Set_FinalBaseColor - // float3 Set_FinalBaseColor = lerp(Set_BaseColor,lerp(Set_1st_ShadeColor,Set_2nd_ShadeColor,saturate((1.0 + ( (_HalfLambert_var - (_ShadeColor_Step-_1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0) ) / (_ShadeColor_Step - (_ShadeColor_Step-_1st2nd_Shades_Feather))))),Set_FinalShadowMask); // Final Color - - - //return float4(Set_BaseColor,1); - - - return CommonLitFragment2(input, _White); - } ENDHLSL } From 2de4090d618b7030e4bc887c77f5c742f2217dd6 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 18:05:50 +0900 Subject: [PATCH 097/290] rename shading start and feather vars --- .../Assets/Shaders/Toon2D.shader | 53 ++++++++++--------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 63a709abe..937a81d0e 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -1,23 +1,25 @@ -Shader "Toon3Das2D"{ +Shader "Toon/Toon 3D as 2D"{ Properties{ - _BaseColor ("BaseColor", Color) = (1,1,1,1) - _MainTex ("BaseMap", 2D) = "white" {} - _BaseColor_Step ("BaseColor_Step", Range(0, 1)) = 0.5 - _BaseShade_Feather ("Base/Shade_Feather", Range(0.0001, 1)) = 0.0001 + + _BaseColor ("Base Color", Color) = (1,1,1,1) + _MainTex ("Main Texture", 2D) = "white" {} - _1st_ShadeMap ("1st_ShadeMap", 2D) = "white" {} + //Three Colors + _1st_ShadeColor ("1st Shade Color", Color) = (0.5,0.5,0.5,1) + _1st_ShadeMap ("1st Shade Map", 2D) = "white" {} [Toggle(_)] _Use_BaseAs1st ("Use BaseMap as 1st_ShadeMap", Integer ) = 0 - _1st_ShadeColor ("1st_ShadeColor", Color) = (1,1,1,1) + _2nd_ShadeColor ("2nd Shade Color", Color) = (0.1,0.1,0.1,1) + _2nd_ShadeMap ("2nd Shade Map", 2D) = "white" {} + [Toggle(_)] _Use_1stAs2nd ("Use 1st ShadeMap as 2nd ShadeMap", Integer ) = 0 + + //Start and Feather + _BaseTo1st_ShadeStart ("Base to 1st Shade Start", Range(0, 1)) = 0.5 + _BaseTo1st_ShadeFeather ("Base to 1st Shade Feather", Range(0, 1)) = 0.1 + _1stTo2nd_ShadeStart ("1st to 2nd Shade Start", Range(0, 1)) = 0.25 + _1stTo2nd_ShadeFeather ("1st to 2nd Shade Feather", Range(0, 1)) = 0.1 - _2nd_ShadeMap ("2nd_ShadeMap", 2D) = "white" {} - [Toggle(_)] _Use_1stAs2nd ("Use 1st_ShadeMap as 2nd_ShadeMap", Integer ) = 0 - _2nd_ShadeColor ("2nd_ShadeColor", Color) = (1,1,1,1) - - _ShadeColor_Step ("ShadeColor_Step", Range(0, 1)) = 0 - _1st2nd_Shades_Feather ("1st/2nd_Shades_Feather", Range(0.0001, 1)) = 0.0001 _2DLightStrength ("2D Light Strength", Range(0,1)) = 1 - _MaskTex("Mask", 2D) = "white" {} _NormalMap("Normal Map", 2D) = "bump" {} _BumpScale ("Normal Scale", Range(0, 1)) = 1 @@ -106,19 +108,20 @@ Shader "Toon3Das2D"{ half4 _BaseColor; float _BumpScale; - int _Use_BaseAs1st; - int _Use_1stAs2nd; - + //Three colors float4 _1st_ShadeColor; + int _Use_BaseAs1st; float4 _2nd_ShadeColor; + int _Use_1stAs2nd; - float _BaseColor_Step; - float _BaseShade_Feather; + //Start and Feather + float _BaseTo1st_ShadeStart; + float _BaseTo1st_ShadeFeather; + float _1stTo2nd_ShadeStart; + float _1stTo2nd_ShadeFeather; - float _ShadeColor_Step; - float _1st2nd_Shades_Feather; float _2DLightStrength; - + int _DirectionalLight_Use; float3 _DirectionalLight_Direction; float4 _DirectionalLight_Color; @@ -220,7 +223,7 @@ Shader "Toon3Das2D"{ // //Minmimum value is same as the Minimum Feather's value with the Minimum Step's value as threshold. - // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var * saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step - _BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); + // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var * saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseTo1st_ShadeStart - _BaseTo1st_ShadeFeather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseTo1st_ShadeStart - (_BaseTo1st_ShadeStart-_BaseTo1st_ShadeFeather)))); // // // //Composition: 3 Basic Colors as Set_FinalBaseColor @@ -228,10 +231,10 @@ Shader "Toon3Das2D"{ float4 _Set_2nd_ShadePosition_var = float4(1, 1, 1, 1); //used in DoubleShadeWithFeather, default: white - float Set_FinalShadowMask = saturate((1.0 + ( ( _HalfLambert_var - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); + float Set_FinalShadowMask = saturate((1.0 + ( ( _HalfLambert_var - (_BaseTo1st_ShadeStart-_BaseTo1st_ShadeFeather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseTo1st_ShadeStart - (_BaseTo1st_ShadeStart-_BaseTo1st_ShadeFeather)))); - float innerLerpOp = saturate((1.0 + ((_HalfLambert_var - (_ShadeColor_Step - _1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / ( _ShadeColor_Step - ( _ShadeColor_Step - _1st2nd_Shades_Feather)))); + float innerLerpOp = saturate((1.0 + ((_HalfLambert_var - (_1stTo2nd_ShadeStart - _1stTo2nd_ShadeFeather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / ( _1stTo2nd_ShadeStart - ( _1stTo2nd_ShadeStart - _1stTo2nd_ShadeFeather)))); float3 Set_FinalBaseColor = lerp(baseColor, lerp(firstShadeColor, secondShadeColor, innerLerpOp), From c084790e3f809c664879293a4c8fa06aeff523cc Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 19:58:34 +0900 Subject: [PATCH 098/290] add Shading GUI --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 165 +++++++++++++----- .../Scripts/Utilities/ToonEditorGUIUtility.cs | 10 +- 2 files changed, 123 insertions(+), 52 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 5cfdac56e..474e0ea6c 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -25,7 +25,8 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { } EditorGUI.BeginChangeCheck(); - DrawThreeColorsGUI(mEditor, mats, m_materialPropertyUIElements); + DrawThreeColorsGUI(mEditor, mats, m_materialPropertyUIElements, ref m_colorsFoldout); + DrawShadingGUI(mEditor, mats, m_materialPropertyUIElements, ref m_shadingFoldout); DrawDirectionalLightGUI(mEditor, mats, m_materialPropertyUIElements, ref m_directionalLightFoldout); DrawNormalMapGUI(mEditor, m_materialPropertyUIElements, ref m_normalMapFoldout); @@ -41,6 +42,9 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { void RefreshFoldouts(Material mat, Dictionary uiElements) { + m_colorsFoldout = true; + m_shadingFoldout = true; + m_normalMapFoldout = true; m_outlineFoldout = mat.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); @@ -48,6 +52,69 @@ void RefreshFoldouts(Material mat, Dictionary m_directionalLightFoldout = lightEnabled; } + +//---------------------------------------------------------------------------------------------------------------------- + static void DrawThreeColorsGUI(MaterialEditor mEditor, Material[] mats, + Dictionary uiElements, ref bool foldout) + { + + ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, COLORS_FOLDOUT); + if (!foldout) + return; + + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_MAIN_TEX]); + + EditorGUI.indentLevel += 2; + ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_USE_BASE_AS1_ST], out bool applyTo1st ); + EditorGUI.indentLevel -= 2; + + if (applyTo1st) { + EditorGUI.indentLevel += 2; + ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[SHADER_PROP_1_ST_SHADE_COLOR]); + EditorGUI.indentLevel -= 2; + } else { + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_1_ST_SHADE_MAP]); + } + + EditorGUI.indentLevel += 2; + ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_USE_1ST_AS_2ND], out bool applyTo2nd); + EditorGUI.indentLevel -= 2; + + + if (applyTo2nd) { + EditorGUI.indentLevel += 2; + ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[SHADER_PROP_2ND_SHADE_COLOR]); + EditorGUI.indentLevel -= 2; + } else { + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_2ND_SHADE_MAP]); + } + + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_2D_LIGHT_STRENGTH]); + EditorGUILayout.Space(); + } + + static void DrawShadingGUI(MaterialEditor mEditor, Material[] mats, + Dictionary uiElements, ref bool foldout) + { + + ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, SHADING_FOLDOUT); + if (!foldout) + return; + + EditorGUILayout.LabelField("Base to 1st Shade"); + EditorGUI.indentLevel += INDENT_SIZE; + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_BASE_TO_1ST_SHADE_START]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_BASE_TO_1ST_SHADE_FEATHER]); + EditorGUI.indentLevel -= INDENT_SIZE; + + EditorGUILayout.LabelField("1st to 2nd Shade"); + EditorGUI.indentLevel += INDENT_SIZE; + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_1ST_TO_2ND_SHADE_START]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_1ST_TO_2ND_SHADE_FEATHER]); + EditorGUI.indentLevel -= INDENT_SIZE; + + EditorGUILayout.Space(); + } //---------------------------------------------------------------------------------------------------------------------- static void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements, @@ -146,40 +213,6 @@ static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements) - { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_MAIN_TEX]); - - EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_USE_BASE_AS1_ST], out bool applyTo1st ); - EditorGUI.indentLevel -= 2; - - if (applyTo1st) { - EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[SHADER_PROP_1_ST_SHADE_COLOR]); - EditorGUI.indentLevel -= 2; - } else { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_1_ST_SHADE_MAP]); - } - - EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_USE_1_ST_AS2_ND], out bool applyTo2nd); - EditorGUI.indentLevel -= 2; - - - if (applyTo2nd) { - EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[SHADER_PROP_2_ND_SHADE_COLOR]); - EditorGUI.indentLevel -= 2; - } else { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_2_ND_SHADE_MAP]); - } - - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_2D_LIGHT_STRENGTH]); - - } - static void DrawDirectionalLightGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements, ref bool foldout) { @@ -254,12 +287,12 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty label = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_2_ND_SHADE_MAP), + mainPropertyName = new MaterialName(SHADER_PROP_2ND_SHADE_MAP), label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), - extraPropertyName1 = new MaterialName(SHADER_PROP_2_ND_SHADE_COLOR) + extraPropertyName1 = new MaterialName(SHADER_PROP_2ND_SHADE_COLOR) }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_2_ND_SHADE_COLOR), + mainPropertyName = new MaterialName(SHADER_PROP_2ND_SHADE_COLOR), label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), }, new MaterialUIElement { @@ -267,10 +300,29 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty label = new GUIContent("Apply to 1st shading map", "Apply Base map to the 1st shading map."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_USE_1_ST_AS2_ND), + mainPropertyName = new MaterialName(SHADER_PROP_USE_1ST_AS_2ND), label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), }, + //Shading + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_BASE_TO_1ST_SHADE_START), + label = new GUIContent("Start", "The threshold for transitioning to the 1st shade color. 0: starts transition immediately, 1: never transition."), + // + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_BASE_TO_1ST_SHADE_FEATHER), + label = new GUIContent("Feather", "Controls feathering to the 1st shade color. 0: sharp transition, 1: fully feathered."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_1ST_TO_2ND_SHADE_START), + label = new GUIContent("Start", "The threshold for transitioning to the 2nd shade color. 0: starts transition immediately, 1: never transition."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_1ST_TO_2ND_SHADE_FEATHER), + label = new GUIContent("Feather", "Controls feathering to the 2nd shade color. 0: sharp transition, 1: fully feathered."), + }, + //Normal Map new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_NORMAL_MAP), @@ -377,16 +429,25 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty //Common constants - internal const string SHADER_PROP_MAIN_TEX = "_MainTex"; - internal const string SHADER_PROP_USE_BASE_AS1_ST = "_Use_BaseAs1st"; - internal const string SHADER_PROP_USE_1_ST_AS2_ND = "_Use_1stAs2nd"; + //Colors internal const string SHADER_PROP_BASE_COLOR = "_BaseColor"; - internal const string SHADER_PROP_1_ST_SHADE_MAP = "_1st_ShadeMap"; + internal const string SHADER_PROP_MAIN_TEX = "_MainTex"; + internal const string SHADER_PROP_1_ST_SHADE_COLOR = "_1st_ShadeColor"; - internal const string SHADER_PROP_2_ND_SHADE_MAP = "_2nd_ShadeMap"; - internal const string SHADER_PROP_2_ND_SHADE_COLOR = "_2nd_ShadeColor"; - internal const string SHADER_PROP_2D_LIGHT_STRENGTH = "_2DLightStrength"; + internal const string SHADER_PROP_1_ST_SHADE_MAP = "_1st_ShadeMap"; + internal const string SHADER_PROP_USE_BASE_AS1_ST = "_Use_BaseAs1st"; + + internal const string SHADER_PROP_2ND_SHADE_COLOR = "_2nd_ShadeColor"; + internal const string SHADER_PROP_2ND_SHADE_MAP = "_2nd_ShadeMap"; + internal const string SHADER_PROP_USE_1ST_AS_2ND = "_Use_1stAs2nd"; + + //Shading + internal const string SHADER_PROP_BASE_TO_1ST_SHADE_START = "_BaseTo1st_ShadeStart"; + internal const string SHADER_PROP_BASE_TO_1ST_SHADE_FEATHER = "_BaseTo1st_ShadeFeather"; + internal const string SHADER_PROP_1ST_TO_2ND_SHADE_START = "_1stTo2nd_ShadeStart"; + internal const string SHADER_PROP_1ST_TO_2ND_SHADE_FEATHER = "_1stTo2nd_ShadeFeather"; + internal const string SHADER_PROP_2D_LIGHT_STRENGTH = "_2DLightStrength"; internal const string SHADER_PROP_NORMAL_MAP = "_NormalMap"; internal const string SHADER_PROP_BUMP_SCALE = "_BumpScale"; @@ -419,9 +480,19 @@ internal enum OutlineMode { private static readonly GUIContent[] m_outlineModeEnums= EnumUtility.ToInspectorNamesAsGUIContent(typeof(OutlineMode)); private static readonly int[] m_outlineModeIndices = EnumUtility.ToIndices(typeof(OutlineMode)); + public static readonly GUIContent COLORS_FOLDOUT = EditorGUIUtility.TrTextContent("Colors", + "Colors for basic cel-shading settings in Unity Toon Shader."); + + public static readonly GUIContent SHADING_FOLDOUT = + EditorGUIUtility.TrTextContent("Shading", "Shading settings."); + + bool m_colorsFoldout = true; + bool m_shadingFoldout = true; bool m_normalMapFoldout = false; bool m_outlineFoldout = false; bool m_directionalLightFoldout = false; - + + private const int INDENT_SIZE = 2; + } diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs index 07f3c630a..f9b037f4b 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs @@ -133,15 +133,15 @@ internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, } //return true if changed, false otherwise - internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, Material[] mats, - MaterialPropertyUIElement element, ref bool foldoutState) + internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, Material[] mats, + MaterialPropertyUIElement element, ref bool foldoutState, out bool toggleEnabled) { - bool enabled = mats[0].GetInteger(element.mainProperty.id) !=0; - bool ret = DrawFoldoutWithToggleGUI(mEditor, ref foldoutState, ref enabled, element.label.text); + toggleEnabled = mats[0].GetInteger(element.mainProperty.id) !=0; + bool ret = DrawFoldoutWithToggleGUI(mEditor, ref foldoutState, ref toggleEnabled, element.label.text); if (!ret) return false; foreach (Material m in mats) - m.SetInteger(element.mainProperty.id, enabled ? 1 : 0); + m.SetInteger(element.mainProperty.id, toggleEnabled ? 1 : 0); return true; } From b3232a8ed83caa7ff06a8aad01fd4f8b705b1fb4 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 20:36:10 +0900 Subject: [PATCH 099/290] update materials --- .../ToonShader_Eye_Clipping_StencilMask_3Das2D.mat | 9 +++++++-- .../ToonShader_Eyebrow_StencilMask_3Das2D.mat | 9 +++++++-- .../UnityChan_3Das2D/ToonShader_Face_3Das2D.mat | 9 +++++++-- .../UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat | 9 +++++++-- .../ToonShader_Fhair_StencilOut_3Das2D.mat | 9 +++++++-- .../UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat | 9 +++++++-- .../UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat | 9 +++++++-- .../UnityChan_3Das2D/ToonShader_Main_3Das2D.mat | 9 +++++++-- 8 files changed, 56 insertions(+), 16 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat index 08a7dae46..887d50ea8 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat @@ -57,7 +57,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_Use: 0 + - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 @@ -67,11 +67,16 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0 + - _1stTo2nd_ShadeFeather: 0.1 + - _1stTo2nd_ShadeStart: 0.25 + - _2DLightStrength: 0 - _BaseColor_Step: 0.393 - _BaseShade_Feather: 0.629 + - _BaseTo1st_ShadeFeather: 0.1 + - _BaseTo1st_ShadeStart: 0.5 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat index c43b9706b..ccb2e15d9 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat @@ -57,7 +57,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_Use: 0 + - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 @@ -67,11 +67,16 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.0001 + - _1stTo2nd_ShadeFeather: 0.1 + - _1stTo2nd_ShadeStart: 0.25 + - _2DLightStrength: 0 - _BaseColor_Step: 0.507 - _BaseShade_Feather: 0.08 + - _BaseTo1st_ShadeFeather: 0.1 + - _BaseTo1st_ShadeStart: 0.5 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat index c05d92c5e..e77ae714a 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat @@ -57,7 +57,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_Use: 0 + - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 @@ -67,11 +67,16 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.0001 + - _1stTo2nd_ShadeFeather: 0.1 + - _1stTo2nd_ShadeStart: 0.25 + - _2DLightStrength: 0 - _BaseColor_Step: 0.353 - _BaseShade_Feather: 0.121 + - _BaseTo1st_ShadeFeather: 0.1 + - _BaseTo1st_ShadeStart: 0.5 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat index 53cbc2501..c8b599c11 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat @@ -57,7 +57,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_Use: 0 + - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 @@ -67,11 +67,16 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.236 + - _1stTo2nd_ShadeFeather: 0.1 + - _1stTo2nd_ShadeStart: 0.25 + - _2DLightStrength: 0 - _BaseColor_Step: 0.801 - _BaseShade_Feather: 0.062 + - _BaseTo1st_ShadeFeather: 0.1 + - _BaseTo1st_ShadeStart: 0.5 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat index b2cd0c5f0..d7f43a127 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat @@ -57,7 +57,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_Use: 0 + - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 @@ -67,11 +67,16 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.236 + - _1stTo2nd_ShadeFeather: 0.1 + - _1stTo2nd_ShadeStart: 0.25 + - _2DLightStrength: 0 - _BaseColor_Step: 0.801 - _BaseShade_Feather: 0.062 + - _BaseTo1st_ShadeFeather: 0.1 + - _BaseTo1st_ShadeStart: 0.5 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat index 1dc502f32..67a23041d 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat @@ -57,7 +57,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_Use: 0 + - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 @@ -67,11 +67,16 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.064 + - _1stTo2nd_ShadeFeather: 0.1 + - _1stTo2nd_ShadeStart: 0.25 + - _2DLightStrength: 0 - _BaseColor_Step: 0.815 - _BaseShade_Feather: 0.13 + - _BaseTo1st_ShadeFeather: 0.1 + - _BaseTo1st_ShadeStart: 0.5 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat index 080e50529..747d49ab4 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat @@ -57,7 +57,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_Use: 0 + - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 @@ -67,11 +67,16 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.064 + - _1stTo2nd_ShadeFeather: 0.1 + - _1stTo2nd_ShadeStart: 0.25 + - _2DLightStrength: 0 - _BaseColor_Step: 0.815 - _BaseShade_Feather: 0.13 + - _BaseTo1st_ShadeFeather: 0.1 + - _BaseTo1st_ShadeStart: 0.5 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat index a487004cf..f950d3a42 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat @@ -57,7 +57,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_Use: 0 + - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 @@ -67,11 +67,16 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.08 + - _1stTo2nd_ShadeFeather: 0.1 + - _1stTo2nd_ShadeStart: 0.25 + - _2DLightStrength: 0 - _BaseColor_Step: 0.841 - _BaseShade_Feather: 0.074 + - _BaseTo1st_ShadeFeather: 0.1 + - _BaseTo1st_ShadeStart: 0.5 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 From cf853954330db3d47a24327f746100d9781f7a70 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 20:43:13 +0900 Subject: [PATCH 100/290] updater shading va;lues --- .../ToonShader_Eye_Clipping_StencilMask_3Das2D.mat | 6 +++--- .../ToonShader_Eyebrow_StencilMask_3Das2D.mat | 8 ++++---- .../Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat | 8 ++++---- .../UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat | 8 ++++---- .../ToonShader_Fhair_StencilOut_3Das2D.mat | 8 ++++---- .../UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat | 8 ++++---- .../UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat | 8 ++++---- .../Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat | 6 +++--- 8 files changed, 30 insertions(+), 30 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat index 887d50ea8..c89cf98d7 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat @@ -67,13 +67,13 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0 - - _1stTo2nd_ShadeFeather: 0.1 - - _1stTo2nd_ShadeStart: 0.25 + - _1stTo2nd_ShadeFeather: 0 + - _1stTo2nd_ShadeStart: 0 - _2DLightStrength: 0 - _BaseColor_Step: 0.393 - _BaseShade_Feather: 0.629 - _BaseTo1st_ShadeFeather: 0.1 - - _BaseTo1st_ShadeStart: 0.5 + - _BaseTo1st_ShadeStart: 0.393 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat index ccb2e15d9..7a10ab6c6 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat @@ -67,13 +67,13 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.0001 - - _1stTo2nd_ShadeFeather: 0.1 - - _1stTo2nd_ShadeStart: 0.25 + - _1stTo2nd_ShadeFeather: 0 + - _1stTo2nd_ShadeStart: 0 - _2DLightStrength: 0 - _BaseColor_Step: 0.507 - _BaseShade_Feather: 0.08 - - _BaseTo1st_ShadeFeather: 0.1 - - _BaseTo1st_ShadeStart: 0.5 + - _BaseTo1st_ShadeFeather: 0.08 + - _BaseTo1st_ShadeStart: 0.507 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat index e77ae714a..8b87ab6d9 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat @@ -67,13 +67,13 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.0001 - - _1stTo2nd_ShadeFeather: 0.1 - - _1stTo2nd_ShadeStart: 0.25 + - _1stTo2nd_ShadeFeather: 0 + - _1stTo2nd_ShadeStart: 0 - _2DLightStrength: 0 - _BaseColor_Step: 0.353 - _BaseShade_Feather: 0.121 - - _BaseTo1st_ShadeFeather: 0.1 - - _BaseTo1st_ShadeStart: 0.5 + - _BaseTo1st_ShadeFeather: 0.121 + - _BaseTo1st_ShadeStart: 0.353 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat index c8b599c11..40f71dcaa 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat @@ -67,13 +67,13 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.236 - - _1stTo2nd_ShadeFeather: 0.1 - - _1stTo2nd_ShadeStart: 0.25 + - _1stTo2nd_ShadeFeather: 0.236 + - _1stTo2nd_ShadeStart: 0.727 - _2DLightStrength: 0 - _BaseColor_Step: 0.801 - _BaseShade_Feather: 0.062 - - _BaseTo1st_ShadeFeather: 0.1 - - _BaseTo1st_ShadeStart: 0.5 + - _BaseTo1st_ShadeFeather: 0.062 + - _BaseTo1st_ShadeStart: 0.801 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat index d7f43a127..5f9b01729 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat @@ -67,13 +67,13 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.236 - - _1stTo2nd_ShadeFeather: 0.1 - - _1stTo2nd_ShadeStart: 0.25 + - _1stTo2nd_ShadeFeather: 0.236 + - _1stTo2nd_ShadeStart: 0.727 - _2DLightStrength: 0 - _BaseColor_Step: 0.801 - _BaseShade_Feather: 0.062 - - _BaseTo1st_ShadeFeather: 0.1 - - _BaseTo1st_ShadeStart: 0.5 + - _BaseTo1st_ShadeFeather: 0.062 + - _BaseTo1st_ShadeStart: 0.801 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat index 67a23041d..38cafecf0 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat @@ -67,13 +67,13 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.064 - - _1stTo2nd_ShadeFeather: 0.1 - - _1stTo2nd_ShadeStart: 0.25 + - _1stTo2nd_ShadeFeather: 0.064 + - _1stTo2nd_ShadeStart: 0.722 - _2DLightStrength: 0 - _BaseColor_Step: 0.815 - _BaseShade_Feather: 0.13 - - _BaseTo1st_ShadeFeather: 0.1 - - _BaseTo1st_ShadeStart: 0.5 + - _BaseTo1st_ShadeFeather: 0.13 + - _BaseTo1st_ShadeStart: 0.815 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat index 747d49ab4..2956778de 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat @@ -67,13 +67,13 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.064 - - _1stTo2nd_ShadeFeather: 0.1 - - _1stTo2nd_ShadeStart: 0.25 + - _1stTo2nd_ShadeFeather: 0.064 + - _1stTo2nd_ShadeStart: 0.722 - _2DLightStrength: 0 - _BaseColor_Step: 0.815 - _BaseShade_Feather: 0.13 - - _BaseTo1st_ShadeFeather: 0.1 - - _BaseTo1st_ShadeStart: 0.5 + - _BaseTo1st_ShadeFeather: 0.13 + - _BaseTo1st_ShadeStart: 0.815 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat index f950d3a42..2ab3229ea 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat @@ -67,13 +67,13 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.08 - - _1stTo2nd_ShadeFeather: 0.1 + - _1stTo2nd_ShadeFeather: 0.08 - _1stTo2nd_ShadeStart: 0.25 - _2DLightStrength: 0 - _BaseColor_Step: 0.841 - _BaseShade_Feather: 0.074 - - _BaseTo1st_ShadeFeather: 0.1 - - _BaseTo1st_ShadeStart: 0.5 + - _BaseTo1st_ShadeFeather: 0.074 + - _BaseTo1st_ShadeStart: 0.841 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 From b94853deda48f26050dc0c609ee6fa51f23ffadb Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 23:26:50 +0900 Subject: [PATCH 101/290] update label --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 474e0ea6c..ea4dce28e 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -307,8 +307,10 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty //Shading new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_BASE_TO_1ST_SHADE_START), - label = new GUIContent("Start", "The threshold for transitioning to the 1st shade color. 0: starts transition immediately, 1: never transition."), - // + label = new GUIContent("Start", + "The threshold for transitioning to the 1st shade color. " + + "0: use the base color (no transition), " + + "1: starts transitioning immediately."), }, new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_BASE_TO_1ST_SHADE_FEATHER), @@ -316,7 +318,10 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty }, new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_1ST_TO_2ND_SHADE_START), - label = new GUIContent("Start", "The threshold for transitioning to the 2nd shade color. 0: starts transition immediately, 1: never transition."), + label = new GUIContent("Start", + "The threshold for transitioning to the 2nd shade color. " + + "0: use the 1st shade color (no transition), " + + "1: starts transitioning immediately."), }, new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_1ST_TO_2ND_SHADE_FEATHER), From 957f2422a2c3aee44a06cce1e233f5774d157ef9 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 23:28:30 +0900 Subject: [PATCH 102/290] ThreeColorsLinearShading --- .../Assets/Shaders/Toon2D.shader | 40 ++++++++++++++++--- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 937a81d0e..a628d423c 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -163,6 +163,30 @@ Shader "Toon/Toon 3D as 2D"{ } + float3 ThreeColorsLinearShading( + float3 baseColor, + float3 firstColor, + float3 secondColor, + float3 baseTo1stStart, // t=0: use base, t=1: transition + float3 baseTo1stFeather, + float3 firstToSecondStart, //t=0: use base, t=1: transition + float3 firstToSecondFeather, + float dotNL) // dot(N.L) + { + const float t = saturate(1 - dotNL); //t = 0: light, t=1: dark shaded + + const float invBaseTo1stStart = 1 - baseTo1stStart; + const float invBaseTo2ndStart = 1 - firstToSecondStart; + + const float s1 = smoothstep(invBaseTo1stStart, invBaseTo1stStart + baseTo1stFeather,t); //works + const float s2 = smoothstep(invBaseTo2ndStart, invBaseTo2ndStart + firstToSecondFeather,t); //works + + float3 c01 = lerp(baseColor,firstColor, s1); + float3 c12 = lerp(c01, secondColor, s2); + return c12; + } + + half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv, in float3 tangentWS, in float3 bitangentWS, in float3 normalWS) { @@ -199,24 +223,24 @@ Shader "Toon/Toon 3D as 2D"{ const float3 diffuseLightFactor = (shapeLight0.rgb * _2DLightStrength) + (_DirectionalLight_Color * _DirectionalLight_DiffuseFactor * _DirectionalLight_Use); - float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); - float3 baseColor = surfaceData.albedo.rgb * diffuseLightFactor; + const float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); + const float3 baseColor = surfaceData.albedo.rgb * diffuseLightFactor; - // //v.2.0.5 + //1st and 2nd Shade float4 _1st_ShadeMap_var = lerp( SAMPLE_TEXTURE2D(_1st_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _MainTex_var, _Use_BaseAs1st); const float3 firstShadeAlbedo = _1st_ShadeColor.rgb * _1st_ShadeMap_var.rgb; - float3 firstShadeColor = firstShadeAlbedo * diffuseLightFactor; + const float3 firstShadeColor = firstShadeAlbedo * diffuseLightFactor; float4 _2nd_ShadeMap_var = lerp( SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _1st_ShadeMap_var, _Use_1stAs2nd); const float3 secondShadeAlbedo = _2nd_ShadeColor.rgb * _2nd_ShadeMap_var.rgb; - float3 secondShadeColor = secondShadeAlbedo * diffuseLightFactor; + const float3 secondShadeColor = secondShadeAlbedo * diffuseLightFactor; const float light2dDiffuse = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); - const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, _DirectionalLight_Direction) + 0.5; + const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, -_DirectionalLight_Direction) + 0.5; float _HalfLambert_var = (light2dDiffuse * _2DLightStrength) + (directionalDiffuse * _DirectionalLight_DiffuseFactor); @@ -240,6 +264,10 @@ Shader "Toon/Toon 3D as 2D"{ innerLerpOp), Set_FinalShadowMask); + Set_FinalBaseColor = ThreeColorsLinearShading(baseColor,firstShadeColor, secondShadeColor, + _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, + _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, _HalfLambert_var); + // float4 _Set_HighColorMask_var = tex2D(_Set_HighColorMask, TRANSFORM_TEX(Set_UV0, _Set_HighColorMask)); // // float _Specular_var = 0.5*dot(halfDirection,lerp( i.normalDir, normalDirection, _Is_NormalMapToHighColor ))+0.5; // Specular From 9c3fe6a37c9599b342f08f3330cb92103520c723 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 23:37:32 +0900 Subject: [PATCH 103/290] use BaseColor --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index a628d423c..448738d93 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -178,8 +178,8 @@ Shader "Toon/Toon 3D as 2D"{ const float invBaseTo1stStart = 1 - baseTo1stStart; const float invBaseTo2ndStart = 1 - firstToSecondStart; - const float s1 = smoothstep(invBaseTo1stStart, invBaseTo1stStart + baseTo1stFeather,t); //works - const float s2 = smoothstep(invBaseTo2ndStart, invBaseTo2ndStart + firstToSecondFeather,t); //works + const float s1 = smoothstep(invBaseTo1stStart, invBaseTo1stStart + baseTo1stFeather,t); + const float s2 = smoothstep(invBaseTo2ndStart, invBaseTo2ndStart + firstToSecondFeather,t); float3 c01 = lerp(baseColor,firstColor, s1); float3 c12 = lerp(c01, secondColor, s2); @@ -224,7 +224,7 @@ Shader "Toon/Toon 3D as 2D"{ + (_DirectionalLight_Color * _DirectionalLight_DiffuseFactor * _DirectionalLight_Use); const float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); - const float3 baseColor = surfaceData.albedo.rgb * diffuseLightFactor; + const float3 baseColor = _BaseColor.rgb * surfaceData.albedo.rgb * diffuseLightFactor; //1st and 2nd Shade float4 _1st_ShadeMap_var = lerp( From 30645b4887f9ac8c25310977740890c6ee7e7f20 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 23:43:36 +0900 Subject: [PATCH 104/290] update main material --- .../Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat index 2ab3229ea..5ed1b90ea 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat @@ -63,12 +63,12 @@ Material: - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 - _Specular_UseDirectionalLight: 0 - - _Use_1stAs2nd: 0 + - _Use_1stAs2nd: 1 - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.08 - _1stTo2nd_ShadeFeather: 0.08 - - _1stTo2nd_ShadeStart: 0.25 + - _1stTo2nd_ShadeStart: 0 - _2DLightStrength: 0 - _BaseColor_Step: 0.841 - _BaseShade_Feather: 0.074 @@ -93,7 +93,7 @@ Material: - _2nd_ShadeColor: {r: 0.7490196, g: 0.69411767, b: 0.88235295, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _DirectionalLight_Direction: {r: -0, g: 0.3707992, b: -0.9287131, a: 0} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} From 662c4ade65d84873d25887b57acfa4ed8e3ad548 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 09:58:39 +0900 Subject: [PATCH 105/290] remove unused code --- .../Assets/Shaders/Toon2D.shader | 30 ++++--------------- 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 448738d93..97656d715 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -240,38 +240,20 @@ Shader "Toon/Toon 3D as 2D"{ const float3 secondShadeColor = secondShadeAlbedo * diffuseLightFactor; const float light2dDiffuse = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); - const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, -_DirectionalLight_Direction) + 0.5; + const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, _DirectionalLight_Direction) + 0.5; - float _HalfLambert_var = (light2dDiffuse * _2DLightStrength) + float lightFactor = (light2dDiffuse * _2DLightStrength) + (directionalDiffuse * _DirectionalLight_DiffuseFactor); - - // //Minmimum value is same as the Minimum Feather's value with the Minimum Step's value as threshold. - // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var * saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseTo1st_ShadeStart - _BaseTo1st_ShadeFeather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseTo1st_ShadeStart - (_BaseTo1st_ShadeStart-_BaseTo1st_ShadeFeather)))); - // // - // //Composition: 3 Basic Colors as Set_FinalBaseColor - - float4 _Set_1st_ShadePosition_var = float4(1, 1, 1, 1); //used in DoubleShadeWithFeather, default: white - float4 _Set_2nd_ShadePosition_var = float4(1, 1, 1, 1); //used in DoubleShadeWithFeather, default: white - - - float Set_FinalShadowMask = saturate((1.0 + ( ( _HalfLambert_var - (_BaseTo1st_ShadeStart-_BaseTo1st_ShadeFeather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseTo1st_ShadeStart - (_BaseTo1st_ShadeStart-_BaseTo1st_ShadeFeather)))); - - - float innerLerpOp = saturate((1.0 + ((_HalfLambert_var - (_1stTo2nd_ShadeStart - _1stTo2nd_ShadeFeather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / ( _1stTo2nd_ShadeStart - ( _1stTo2nd_ShadeStart - _1stTo2nd_ShadeFeather)))); - - float3 Set_FinalBaseColor = lerp(baseColor, lerp(firstShadeColor, secondShadeColor, - innerLerpOp), - Set_FinalShadowMask); - - Set_FinalBaseColor = ThreeColorsLinearShading(baseColor,firstShadeColor, secondShadeColor, + float3 Set_FinalBaseColor = ThreeColorsLinearShading(baseColor,firstShadeColor, secondShadeColor, _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, - _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, _HalfLambert_var); + _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, lightFactor); // float4 _Set_HighColorMask_var = tex2D(_Set_HighColorMask, TRANSFORM_TEX(Set_UV0, _Set_HighColorMask)); // // float _Specular_var = 0.5*dot(halfDirection,lerp( i.normalDir, normalDirection, _Is_NormalMapToHighColor ))+0.5; // Specular - // float _TweakHighColorMask_var = (saturate((_Set_HighColorMask_var.g+_Tweak_HighColorMaskLevel))*lerp( (1.0 - step(_Specular_var,(1.0 - pow(abs(_HighColor_Power),5)))), pow(abs(_Specular_var),exp2(lerp(11,1,_HighColor_Power))), _Is_SpecularToHighColor )); + // float _TweakHighColorMask_var = ( + // saturate((_Set_HighColorMask_var.g+_Tweak_HighColorMaskLevel))*lerp( (1.0 - step(_Specular_var,(1.0 - pow(abs(_HighColor_Power),5)))), pow(abs(_Specular_var),exp2(lerp(11,1,_HighColor_Power))), _Is_SpecularToHighColor )); // // float4 _HighColor_Tex_var = tex2D(_HighColor_Tex, TRANSFORM_TEX(Set_UV0, _HighColor_Tex)); // From f2d40195464fab254cbea51f53786159d3073202 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 10:09:00 +0900 Subject: [PATCH 106/290] invert the light direction --- .../Assets/ScriptsDev/ToonDirectionalLightController.cs | 2 +- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs index 66a075a23..e5aef079d 100644 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs @@ -14,7 +14,7 @@ void Update() { return; } - Vector3 lightDir = -m_light.transform.forward; + Vector3 lightDir = m_light.transform.forward; Color lightColor = m_light.color; float lightIntensity = m_light.intensity; diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 97656d715..e3174c1b0 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -240,7 +240,7 @@ Shader "Toon/Toon 3D as 2D"{ const float3 secondShadeColor = secondShadeAlbedo * diffuseLightFactor; const float light2dDiffuse = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); - const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, _DirectionalLight_Direction) + 0.5; + const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, -_DirectionalLight_Direction) + 0.5; float lightFactor = (light2dDiffuse * _2DLightStrength) + (directionalDiffuse * _DirectionalLight_DiffuseFactor); From 6178ac47cf092a86336d9e284344adc064dcf832 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 10:15:55 +0900 Subject: [PATCH 107/290] Make lighting settings in one place --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 69 +++++++++++-------- 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index ea4dce28e..3ef3b62e1 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -27,7 +27,7 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { EditorGUI.BeginChangeCheck(); DrawThreeColorsGUI(mEditor, mats, m_materialPropertyUIElements, ref m_colorsFoldout); DrawShadingGUI(mEditor, mats, m_materialPropertyUIElements, ref m_shadingFoldout); - DrawDirectionalLightGUI(mEditor, mats, m_materialPropertyUIElements, ref m_directionalLightFoldout); + DrawLightingGUI(mEditor, mats, m_materialPropertyUIElements, ref m_lightingFoldout); DrawNormalMapGUI(mEditor, m_materialPropertyUIElements, ref m_normalMapFoldout); DrawOutlineGUI(mEditor, mats, m_materialPropertyUIElements, ref m_outlineFoldout); @@ -49,7 +49,7 @@ void RefreshFoldouts(Material mat, Dictionary m_outlineFoldout = mat.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); bool lightEnabled = mat.GetInteger(uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_USE].mainProperty.id) !=0; - m_directionalLightFoldout = lightEnabled; + m_lightingFoldout = lightEnabled; } @@ -88,11 +88,10 @@ static void DrawThreeColorsGUI(MaterialEditor mEditor, Material[] mats, } else { ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_2ND_SHADE_MAP]); } - - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_2D_LIGHT_STRENGTH]); EditorGUILayout.Space(); } +//---------------------------------------------------------------------------------------------------------------------- static void DrawShadingGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements, ref bool foldout) { @@ -115,6 +114,39 @@ static void DrawShadingGUI(MaterialEditor mEditor, Material[] mats, EditorGUILayout.Space(); } + +//---------------------------------------------------------------------------------------------------------------------- + + static void DrawLightingGUI(MaterialEditor mEditor, Material[] mats, + Dictionary uiElements, ref bool foldout) { + + ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, LIGHTING_FOLDOUT); + + + + if (!foldout) + return; + + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_2D_LIGHT_STRENGTH]); + EditorGUILayout.Space(); + + ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_USE], + out bool directionalLightEnabled); + + EditorGUI.indentLevel+= INDENT_SIZE; + + EditorGUI.BeginDisabledGroup(!directionalLightEnabled); + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction]); + ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR]); + EditorGUI.EndDisabledGroup(); + + EditorGUI.indentLevel-= INDENT_SIZE; + EditorGUILayout.Space(); + + } //---------------------------------------------------------------------------------------------------------------------- static void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements, @@ -211,25 +243,6 @@ static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements, ref bool foldout) { - - ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, mats, - uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_USE], ref foldout, out bool toggleEnabled); - - if (!foldout) - return; - - EditorGUI.BeginDisabledGroup(!toggleEnabled); - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction]); - ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR]); - EditorGUI.EndDisabledGroup(); - } //---------------------------------------------------------------------------------------------------------------------- @@ -485,17 +498,19 @@ internal enum OutlineMode { private static readonly GUIContent[] m_outlineModeEnums= EnumUtility.ToInspectorNamesAsGUIContent(typeof(OutlineMode)); private static readonly int[] m_outlineModeIndices = EnumUtility.ToIndices(typeof(OutlineMode)); - public static readonly GUIContent COLORS_FOLDOUT = EditorGUIUtility.TrTextContent("Colors", + static readonly GUIContent COLORS_FOLDOUT = EditorGUIUtility.TrTextContent("Colors", "Colors for basic cel-shading settings in Unity Toon Shader."); - public static readonly GUIContent SHADING_FOLDOUT = - EditorGUIUtility.TrTextContent("Shading", "Shading settings."); + static readonly GUIContent SHADING_FOLDOUT = EditorGUIUtility.TrTextContent("Shading", "Shading settings."); + + static readonly GUIContent LIGHTING_FOLDOUT + = EditorGUIUtility.TrTextContent("Lighting", "Lighting settings."); bool m_colorsFoldout = true; bool m_shadingFoldout = true; bool m_normalMapFoldout = false; bool m_outlineFoldout = false; - bool m_directionalLightFoldout = false; + bool m_lightingFoldout = false; private const int INDENT_SIZE = 2; From 91138234acc739cbdcf3a741cab3893e29d97445 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 10:20:28 +0900 Subject: [PATCH 108/290] rename diffuse and specular vars --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 12 ++++----- .../Assets/Shaders/Toon2D.shader | 26 +++++++++++-------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 3ef3b62e1..e3917f1cf 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -139,8 +139,8 @@ static void DrawLightingGUI(MaterialEditor mEditor, Material[] mats, ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction]); ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_STRENGTH]); EditorGUI.EndDisabledGroup(); EditorGUI.indentLevel-= INDENT_SIZE; @@ -434,12 +434,12 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "Multiplier for the 2D light contribution."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR), + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH), label = new GUIContent("Diffuse Factor", "Multiplier for the diffuse lighting contribution."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR), + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_STRENGTH), label = new GUIContent("Specular Factor", "Multiplier for the specular lighting contribution."), }, @@ -484,8 +484,8 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_OUTLINE_CUSTOM_NORMAL_MAP = "_Outline_CustomNormalMap"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_USE = "_DirectionalLight_Use"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR = "_DirectionalLight_DiffuseFactor"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR = "_DirectionalLight_SpecularFactor"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH = "_DirectionalLight_DiffuseStrength"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_STRENGTH = "_DirectionalLight_SpecularStrength"; //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index e3174c1b0..446fb2206 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -46,8 +46,8 @@ Shader "Toon/Toon 3D as 2D"{ _DirectionalLight_Direction ("Specular Light Direction", Vector) = (0,-1,0,0) _DirectionalLight_Color("Directional Light Color", Color) = (1,1,1,1) _DirectionalLight_Intensity ("Directional Light Intensity", float) = 0.5 - _DirectionalLight_DiffuseFactor ("Directional Light: Diffuse Factor", Range(0,1)) = 0.5 - _DirectionalLight_SpecularFactor ("Directional Light: Specular Factor", Range(0,1)) = 0.5 + _DirectionalLight_DiffuseStrength ("Directional Light: Diffuse Strength", Range(0,1)) = 0.5 + _DirectionalLight_SpecularStrength ("Directional Light: Specular Strength", Range(0,1)) = 0.5 } @@ -126,8 +126,8 @@ Shader "Toon/Toon 3D as 2D"{ float3 _DirectionalLight_Direction; float4 _DirectionalLight_Color; float _DirectionalLight_Intensity; - float _DirectionalLight_DiffuseFactor; - float _DirectionalLight_SpecularFactor; + float _DirectionalLight_DiffuseStrength; + float _DirectionalLight_SpecularStrength; CBUFFER_END @@ -221,7 +221,7 @@ Shader "Toon/Toon 3D as 2D"{ } const float3 diffuseLightFactor = (shapeLight0.rgb * _2DLightStrength) - + (_DirectionalLight_Color * _DirectionalLight_DiffuseFactor * _DirectionalLight_Use); + + (_DirectionalLight_Color * _DirectionalLight_DiffuseStrength * _DirectionalLight_Use); const float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); const float3 baseColor = _BaseColor.rgb * surfaceData.albedo.rgb * diffuseLightFactor; @@ -239,19 +239,23 @@ Shader "Toon/Toon 3D as 2D"{ const float3 secondShadeAlbedo = _2nd_ShadeColor.rgb * _2nd_ShadeMap_var.rgb; const float3 secondShadeColor = secondShadeAlbedo * diffuseLightFactor; - const float light2dDiffuse = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); - const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, -_DirectionalLight_Direction) + 0.5; + const float light2dDiffuse = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + + const float3 directionalLightDirection = normalize(-_DirectionalLight_Direction); + const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, directionalLightDirection) + 0.5; float lightFactor = (light2dDiffuse * _2DLightStrength) - + (directionalDiffuse * _DirectionalLight_DiffuseFactor); + + (directionalDiffuse * _DirectionalLight_DiffuseStrength); float3 Set_FinalBaseColor = ThreeColorsLinearShading(baseColor,firstShadeColor, secondShadeColor, _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, lightFactor); - // float4 _Set_HighColorMask_var = tex2D(_Set_HighColorMask, TRANSFORM_TEX(Set_UV0, _Set_HighColorMask)); - // - // float _Specular_var = 0.5*dot(halfDirection,lerp( i.normalDir, normalDirection, _Is_NormalMapToHighColor ))+0.5; // Specular + const float4 _Set_HighColorMask_var = float4(1,1,1,1); + + // const float3 halfDirection = normalize(viewDirection+lightDirection); + // const float directionalSpecular = 0.5*dot(halfDirection,perturbedNormalWS) + 0.5; + // float _TweakHighColorMask_var = ( // saturate((_Set_HighColorMask_var.g+_Tweak_HighColorMaskLevel))*lerp( (1.0 - step(_Specular_var,(1.0 - pow(abs(_HighColor_Power),5)))), pow(abs(_Specular_var),exp2(lerp(11,1,_HighColor_Power))), _Is_SpecularToHighColor )); // From 8fd8c00de21b40d6eaee83f261241613f06ffc39 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 12:14:41 +0900 Subject: [PATCH 109/290] Show highlight properties in the GUI --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 131 ++++++++++++------ .../Assets/Shaders/Toon2D.shader | 60 +++++--- 2 files changed, 131 insertions(+), 60 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index e3917f1cf..8ab23e7c9 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -140,7 +140,18 @@ static void DrawLightingGUI(MaterialEditor mEditor, Material[] mats, ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_STRENGTH]); + + EditorGUILayout.LabelField("Highlight Settings"); + EditorGUI.indentLevel+= INDENT_SIZE; + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[SHADER_PROP_VIEW_DIRECTION]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_HIGHLIGHT_TEX]); + ToonEditorGUIUtility.DrawIntPopupGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE], + m_highlightModeEnums, m_highlightModeIndices,out int _); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_POWER]); + + EditorGUI.indentLevel-= INDENT_SIZE; + EditorGUI.EndDisabledGroup(); EditorGUI.indentLevel-= INDENT_SIZE; @@ -341,6 +352,61 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty label = new GUIContent("Feather", "Controls feathering to the 2nd shade color. 0: sharp transition, 1: fully feathered."), }, + //Lighting + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_2D_LIGHT_STRENGTH), + label = new GUIContent("2D Light Factor", + "Multiplier for the 2D light contribution."), + }, + //Custom Directional Light + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_USE), + label = new GUIContent("Custom Directional Light", + "Apply a custom directional light."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction), + label = new GUIContent("Light Direction", + "The direction of the custom directional light. "), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color), + label = new GUIContent("Light Color", + "The color of the custom directional light. "), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity), + label = new GUIContent("Light Intensity", + "The intensity of the custom directional light. "), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH), + label = new GUIContent("Diffuse Strength", + "Multiplier for the diffuse contribution."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_VIEW_DIRECTION), + label = new GUIContent("View Direction", "Camera View Direction"), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_HIGHLIGHT_TEX), + label = new GUIContent("Highlight Map", "Highlight Map."), + extraPropertyName1 = new MaterialName(SHADER_PROP_HIGHLIGHT_COLOR) + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE), + label = new GUIContent("Mode", "Highlight mode."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH), + label = new GUIContent("Strength", "Multiplier for the highlight contribution."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_POWER), + label = new GUIContent("Power", "Highlight power factor."), + }, + + //Normal Map new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_NORMAL_MAP), @@ -407,42 +473,6 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty }, //Outline End - //Custom Directional Light - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_USE), - label = new GUIContent("Custom Directional Light", - "Apply a custom directional light."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction), - label = new GUIContent("Light Direction", - "The direction of the custom directional light. "), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color), - label = new GUIContent("Light Color", - "The color of the custom directional light. "), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity), - label = new GUIContent("Light Intensity", - "The intensity of the custom directional light. "), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_2D_LIGHT_STRENGTH), - label = new GUIContent("2D Light Factor", - "Multiplier for the 2D light contribution."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH), - label = new GUIContent("Diffuse Factor", - "Multiplier for the diffuse lighting contribution."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_STRENGTH), - label = new GUIContent("Specular Factor", - "Multiplier for the specular lighting contribution."), - }, }; @@ -466,6 +496,21 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_1ST_TO_2ND_SHADE_FEATHER = "_1stTo2nd_ShadeFeather"; internal const string SHADER_PROP_2D_LIGHT_STRENGTH = "_2DLightStrength"; + + //Lighting + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_USE = "_DirectionalLight_Use"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH = "_DirectionalLight_DiffuseStrength"; + + + internal const string SHADER_PROP_VIEW_DIRECTION = "_ViewDirection"; + internal const string SHADER_PROP_HIGHLIGHT_COLOR = "_HighlightColor"; + internal const string SHADER_PROP_HIGHLIGHT_TEX = "_HighlightTex"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE = "_DirectionalLight_HighlightMode"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH = "_DirectionalLight_HighlightStrength"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_POWER = "_DirectionalLight_HighlightPower"; + + + internal const string SHADER_PROP_NORMAL_MAP = "_NormalMap"; internal const string SHADER_PROP_BUMP_SCALE = "_BumpScale"; @@ -483,9 +528,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_OUTLINE_USE_CUSTOM_NORMAL_MAP = "_Outline_UseCustomNormalMap"; internal const string SHADER_PROP_OUTLINE_CUSTOM_NORMAL_MAP = "_Outline_CustomNormalMap"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_USE = "_DirectionalLight_Use"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH = "_DirectionalLight_DiffuseStrength"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_STRENGTH = "_DirectionalLight_SpecularStrength"; + //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; @@ -494,10 +537,18 @@ internal enum OutlineMode { NormalDirection, PositionScaling } + + internal enum HighlightMode { + Hard, + Soft, + } private static readonly GUIContent[] m_outlineModeEnums= EnumUtility.ToInspectorNamesAsGUIContent(typeof(OutlineMode)); private static readonly int[] m_outlineModeIndices = EnumUtility.ToIndices(typeof(OutlineMode)); + private static readonly GUIContent[] m_highlightModeEnums = EnumUtility.ToInspectorNamesAsGUIContent(typeof(HighlightMode)); + private static readonly int[] m_highlightModeIndices = EnumUtility.ToIndices(typeof(HighlightMode)); + static readonly GUIContent COLORS_FOLDOUT = EditorGUIUtility.TrTextContent("Colors", "Colors for basic cel-shading settings in Unity Toon Shader."); diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 446fb2206..d206f1b05 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -26,6 +26,19 @@ Shader "Toon/Toon 3D as 2D"{ [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching + //Directional Light + _DirectionalLight_Use ("Use Directional Light", Integer) = 0 + _DirectionalLight_Direction ("Directional Light Direction", Vector) = (0,-1,0,0) + _DirectionalLight_Color("Directional Light Color", Color) = (1,1,1,1) + _DirectionalLight_Intensity ("Directional Light Intensity", float) = 0.5 + _DirectionalLight_DiffuseStrength ("Directional Light: Diffuse Strength", Range(0,1)) = 0.5 + + _ViewDirection ("Camera View Direction", Vector) = (0,0,1,0) + _HighlightColor ("Highlight Color", Color) = (1,1,1,1) + _HighlightTex ("HighColor Map", 2D) = "white" {} + _DirectionalLight_HighlightMode ("Directional Light: Highlight Mode", Integer) = 0 //0: Hard, 1: Soft + _DirectionalLight_HighlightStrength ("Directional Light: Highlight Strength", Range(0,1)) = 0.5 + _DirectionalLight_HighlightPower ("Directional Light: Highlight Power", Range(0,1)) = 0.3 //Outline _OutlineMode("Outline Mode", Integer) = 0 @@ -41,13 +54,6 @@ Shader "Toon/Toon 3D as 2D"{ _Outline_UseCustomNormalMap ("Use Custom Normal Map", Integer ) = 0 _Outline_CustomNormalMap ("Custom Normal Map", 2D) = "white" {} - //Directional Light - _DirectionalLight_Use ("Use Directional Light", Integer) = 0 - _DirectionalLight_Direction ("Specular Light Direction", Vector) = (0,-1,0,0) - _DirectionalLight_Color("Directional Light Color", Color) = (1,1,1,1) - _DirectionalLight_Intensity ("Directional Light Intensity", float) = 0.5 - _DirectionalLight_DiffuseStrength ("Directional Light: Diffuse Strength", Range(0,1)) = 0.5 - _DirectionalLight_SpecularStrength ("Directional Light: Specular Strength", Range(0,1)) = 0.5 } @@ -127,8 +133,13 @@ Shader "Toon/Toon 3D as 2D"{ float4 _DirectionalLight_Color; float _DirectionalLight_Intensity; float _DirectionalLight_DiffuseStrength; - float _DirectionalLight_SpecularStrength; - + + float3 _ViewDirection; + float4 _HighlightColor; + int _DirectionalLight_HighlightMode; + float _DirectionalLight_HighlightStrength; + float _DirectionalLight_HighlightPower; + CBUFFER_END //---------------------------------------------------------------------------------------------------------------------- @@ -136,6 +147,10 @@ Shader "Toon/Toon 3D as 2D"{ TEXTURE2D(_1st_ShadeMap); TEXTURE2D(_2nd_ShadeMap); + + TEXTURE2D(_HighlightTex); + SAMPLER(sampler_HighlightTex); + float4 _HighlightTex_ST; #include "ObjectTransform.hlsl" @@ -253,18 +268,23 @@ Shader "Toon/Toon 3D as 2D"{ const float4 _Set_HighColorMask_var = float4(1,1,1,1); - // const float3 halfDirection = normalize(viewDirection+lightDirection); - // const float directionalSpecular = 0.5*dot(halfDirection,perturbedNormalWS) + 0.5; - // float _TweakHighColorMask_var = ( - // saturate((_Set_HighColorMask_var.g+_Tweak_HighColorMaskLevel))*lerp( (1.0 - step(_Specular_var,(1.0 - pow(abs(_HighColor_Power),5)))), pow(abs(_Specular_var),exp2(lerp(11,1,_HighColor_Power))), _Is_SpecularToHighColor )); - // - // float4 _HighColor_Tex_var = tex2D(_HighColor_Tex, TRANSFORM_TEX(Set_UV0, _HighColor_Tex)); - // - // float3 _HighColor_var = (lerp( (_HighColor_Tex_var.rgb*_HighColor.rgb), ((_HighColor_Tex_var.rgb*_HighColor.rgb)*Set_LightColor), _Is_LightColor_HighColor )*_TweakHighColorMask_var); - // //Composition: 3 Basic Colors and HighColor as Set_HighColor - // float3 Set_HighColor = (lerp(SATURATE_IF_SDR((Set_FinalBaseColor-_TweakHighColorMask_var)), Set_FinalBaseColor, lerp(_Is_BlendAddToHiColor,1.0,_Is_SpecularToHighColor) )+lerp( _HighColor_var, (_HighColor_var*((1.0 - Set_FinalShadowMask)+(Set_FinalShadowMask*_TweakHighColorOnShadow))), _Is_UseTweakHighColorOnShadow )); - + const float3 viewDirection = normalize(-_ViewDirection); + const float3 halfDirection = normalize(viewDirection + directionalLightDirection); + const float dotHN = 0.5*dot(halfDirection,perturbedNormalWS) + 0.5; + + float _TweakHighColorMask_var = + lerp( (1.0 - step(dotHN,(1.0 - pow(abs(_DirectionalLight_HighlightPower),5)))), + pow(abs(dotHN),exp2(lerp(11,1,_DirectionalLight_HighlightPower))), _DirectionalLight_HighlightMode ); + + const float4 highlightTex = SAMPLE_TEXTURE2D(_HighlightTex, sampler_HighlightTex, TRANSFORM_TEX(uv, _HighlightTex)); + const float3 highlightAlbedo = highlightTex.rgb * _HighlightColor.rgb; + const float3 highlightColor = highlightAlbedo * _DirectionalLight_HighlightStrength; + + float3 _HighColor_var = highlightColor * _DirectionalLight_Color * _DirectionalLight_Use * _TweakHighColorMask_var; + + float3 Set_HighColor = Set_FinalBaseColor + _HighColor_var; + Set_FinalBaseColor = Set_FinalBaseColor * _ShapeLightBlendFactors0.x; From 839746d8c314dd0e76680624972fddd26d8f252d Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 12:20:18 +0900 Subject: [PATCH 110/290] add CameraViewController --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 5 ++--- .../Assets/ScriptsDev/Toon3Das2DConstants.cs | 1 + .../ScriptsDev/ToonCameraViewController.cs | 22 +++++++++++++++++++ .../ToonCameraViewController.cs.meta | 2 ++ 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 8ab23e7c9..9cbb5773c 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -143,7 +143,7 @@ static void DrawLightingGUI(MaterialEditor mEditor, Material[] mats, EditorGUILayout.LabelField("Highlight Settings"); EditorGUI.indentLevel+= INDENT_SIZE; - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[SHADER_PROP_VIEW_DIRECTION]); + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.SHADER_PROP_VIEW_DIRECTION]); ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_HIGHLIGHT_TEX]); ToonEditorGUIUtility.DrawIntPopupGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE], m_highlightModeEnums, m_highlightModeIndices,out int _); @@ -385,7 +385,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "Multiplier for the diffuse contribution."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_VIEW_DIRECTION), + mainPropertyName = new MaterialName(Toon3Das2DConstants.SHADER_PROP_VIEW_DIRECTION), label = new GUIContent("View Direction", "Camera View Direction"), }, new MaterialUIElement { @@ -502,7 +502,6 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH = "_DirectionalLight_DiffuseStrength"; - internal const string SHADER_PROP_VIEW_DIRECTION = "_ViewDirection"; internal const string SHADER_PROP_HIGHLIGHT_COLOR = "_HighlightColor"; internal const string SHADER_PROP_HIGHLIGHT_TEX = "_HighlightTex"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE = "_DirectionalLight_HighlightMode"; diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs index 9f4d24187..e69e8c93d 100644 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs @@ -4,4 +4,5 @@ public static class Toon3Das2DConstants { public const string ShaderPropUnlit_DirectionalLight_Color = "_DirectionalLight_Color"; public const string ShaderPropUnlit_DirectionalLight_Intensity = "_DirectionalLight_Intensity"; + public const string SHADER_PROP_VIEW_DIRECTION = "_ViewDirection"; } \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs new file mode 100644 index 000000000..e575b4628 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using UnityEngine; + +[ExecuteAlways] +internal class ToonCameraViewController : MonoBehaviour { + + + void Update() { + + Vector3 dir = transform.forward; + + foreach (Material mat in m_materials) { + if (mat == null) continue; + mat.SetVector(Toon3Das2DConstants.SHADER_PROP_VIEW_DIRECTION, dir); + } + } + + +//---------------------------------------------------------------------------------------------------------------------- + [SerializeField] private List m_materials = new List(); + +} \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta new file mode 100644 index 000000000..c6f5c36a3 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 76eb1733b1eefbe4fb94e0398915fc49 From 8f982ebbce93128dbf5483cdec69d2b172786dd6 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 12:57:42 +0900 Subject: [PATCH 111/290] Revert "add CameraViewController" This reverts commit 6a428ffd65e742a1c83c58bca9ba683fa33e998f. --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 5 +++-- .../Assets/ScriptsDev/Toon3Das2DConstants.cs | 1 - .../ScriptsDev/ToonCameraViewController.cs | 22 ------------------- .../ToonCameraViewController.cs.meta | 2 -- 4 files changed, 3 insertions(+), 27 deletions(-) delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 9cbb5773c..8ab23e7c9 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -143,7 +143,7 @@ static void DrawLightingGUI(MaterialEditor mEditor, Material[] mats, EditorGUILayout.LabelField("Highlight Settings"); EditorGUI.indentLevel+= INDENT_SIZE; - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.SHADER_PROP_VIEW_DIRECTION]); + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[SHADER_PROP_VIEW_DIRECTION]); ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_HIGHLIGHT_TEX]); ToonEditorGUIUtility.DrawIntPopupGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE], m_highlightModeEnums, m_highlightModeIndices,out int _); @@ -385,7 +385,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "Multiplier for the diffuse contribution."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(Toon3Das2DConstants.SHADER_PROP_VIEW_DIRECTION), + mainPropertyName = new MaterialName(SHADER_PROP_VIEW_DIRECTION), label = new GUIContent("View Direction", "Camera View Direction"), }, new MaterialUIElement { @@ -502,6 +502,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH = "_DirectionalLight_DiffuseStrength"; + internal const string SHADER_PROP_VIEW_DIRECTION = "_ViewDirection"; internal const string SHADER_PROP_HIGHLIGHT_COLOR = "_HighlightColor"; internal const string SHADER_PROP_HIGHLIGHT_TEX = "_HighlightTex"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE = "_DirectionalLight_HighlightMode"; diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs index e69e8c93d..9f4d24187 100644 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs @@ -4,5 +4,4 @@ public static class Toon3Das2DConstants { public const string ShaderPropUnlit_DirectionalLight_Color = "_DirectionalLight_Color"; public const string ShaderPropUnlit_DirectionalLight_Intensity = "_DirectionalLight_Intensity"; - public const string SHADER_PROP_VIEW_DIRECTION = "_ViewDirection"; } \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs deleted file mode 100644 index e575b4628..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -[ExecuteAlways] -internal class ToonCameraViewController : MonoBehaviour { - - - void Update() { - - Vector3 dir = transform.forward; - - foreach (Material mat in m_materials) { - if (mat == null) continue; - mat.SetVector(Toon3Das2DConstants.SHADER_PROP_VIEW_DIRECTION, dir); - } - } - - -//---------------------------------------------------------------------------------------------------------------------- - [SerializeField] private List m_materials = new List(); - -} \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta deleted file mode 100644 index c6f5c36a3..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 76eb1733b1eefbe4fb94e0398915fc49 From e58a3c5759b81d5f814bc99e05e1a4f3b25f6f0b Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 14:42:58 +0900 Subject: [PATCH 112/290] pass positionWS to the fragment shader --- .../Assets/Shaders/Toon2D.shader | 34 ++++++++----------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index d206f1b05..d6a168dc9 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -33,7 +33,7 @@ Shader "Toon/Toon 3D as 2D"{ _DirectionalLight_Intensity ("Directional Light Intensity", float) = 0.5 _DirectionalLight_DiffuseStrength ("Directional Light: Diffuse Strength", Range(0,1)) = 0.5 - _ViewDirection ("Camera View Direction", Vector) = (0,0,1,0) + _DirectionalLight_ViewPosition ("Directional Light: View Position", Vector) = (0,0,1,0) _HighlightColor ("Highlight Color", Color) = (1,1,1,1) _HighlightTex ("HighColor Map", 2D) = "white" {} _DirectionalLight_HighlightMode ("Directional Light: Highlight Mode", Integer) = 0 //0: Hard, 1: Soft @@ -103,6 +103,7 @@ Shader "Toon/Toon 3D as 2D"{ half2 lightingUV : TEXCOORD1; float3 normalWS : TEXCOORD2; float4 tangentWS : TEXCOORD3; + float3 positionWS : TEXCOORD4; UNITY_VERTEX_OUTPUT_STEREO }; @@ -134,7 +135,7 @@ Shader "Toon/Toon 3D as 2D"{ float _DirectionalLight_Intensity; float _DirectionalLight_DiffuseStrength; - float3 _ViewDirection; + float3 _DirectionalLight_ViewPosition; float4 _HighlightColor; int _DirectionalLight_HighlightMode; float _DirectionalLight_HighlightStrength; @@ -163,16 +164,13 @@ Shader "Toon/Toon 3D as 2D"{ o.positionCS = TransformObjectToHClip(input.positionOS); const float3 normalWS = TransformObjectToWorldDir(input.normal); - #if defined(DEBUG_DISPLAY) - o.positionWS = TransformObjectToWorld(input.positionOS); - o.normalWS = normalWS; - #endif o.uv = input.uv; o.lightingUV = half2(ComputeScreenPos(o.positionCS / o.positionCS.w).xy); o.normalWS = normalWS; const float3 tangentWS = normalize( mul( GetObjectToWorldMatrix(), float4( input.tangent.xyz, 0 ) ).xyz); o.tangentWS = float4(tangentWS, input.tangent.w); + o.positionWS = TransformObjectToWorld(input.positionOS); return o; } @@ -203,7 +201,7 @@ Shader "Toon/Toon 3D as 2D"{ half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv, - in float3 tangentWS, in float3 bitangentWS, in float3 normalWS) + in float3 tangentWS, in float3 bitangentWS, in float3 normalWS, in float3 positionWS) { #if defined(DEBUG_DISPLAY) half4 debugColor = 0; @@ -266,17 +264,17 @@ Shader "Toon/Toon 3D as 2D"{ _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, lightFactor); - const float4 _Set_HighColorMask_var = float4(1,1,1,1); - - - const float3 viewDirection = normalize(-_ViewDirection); + //Highlight + const float3 viewDirection = normalize(_DirectionalLight_ViewPosition - positionWS); const float3 halfDirection = normalize(viewDirection + directionalLightDirection); - const float dotHN = 0.5*dot(halfDirection,perturbedNormalWS) + 0.5; + float dotHN_01 = 0.5 * dot(halfDirection,perturbedNormalWS) + 0.5; - float _TweakHighColorMask_var = - lerp( (1.0 - step(dotHN,(1.0 - pow(abs(_DirectionalLight_HighlightPower),5)))), - pow(abs(dotHN),exp2(lerp(11,1,_DirectionalLight_HighlightPower))), _DirectionalLight_HighlightMode ); + float _TweakHighColorMask_var = + lerp( (1.0 - step(dotHN_01,(1.0 - pow(abs(_DirectionalLight_HighlightPower),5)))), + pow(abs(dotHN_01),exp2(lerp(11,1,_DirectionalLight_HighlightPower))), _DirectionalLight_HighlightMode ); + + const float4 highlightTex = SAMPLE_TEXTURE2D(_HighlightTex, sampler_HighlightTex, TRANSFORM_TEX(uv, _HighlightTex)); const float3 highlightAlbedo = highlightTex.rgb * _HighlightColor.rgb; const float3 highlightColor = highlightAlbedo * _DirectionalLight_HighlightStrength; @@ -284,9 +282,8 @@ Shader "Toon/Toon 3D as 2D"{ float3 _HighColor_var = highlightColor * _DirectionalLight_Color * _DirectionalLight_Use * _TweakHighColorMask_var; float3 Set_HighColor = Set_FinalBaseColor + _HighColor_var; - - Set_FinalBaseColor = Set_FinalBaseColor * _ShapeLightBlendFactors0.x; + Set_FinalBaseColor = (Set_FinalBaseColor ) * _ShapeLightBlendFactors0.x + _HighColor_var; half4 shapeLight0Modulate = half4(Set_FinalBaseColor, alpha); half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; @@ -315,7 +312,6 @@ Shader "Toon/Toon 3D as 2D"{ const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.uv); const half3 normalTS = UnpackNormalScale(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.uv), _BumpScale); - SurfaceData2D surfaceData; InputData2D inputData; @@ -332,7 +328,7 @@ Shader "Toon/Toon 3D as 2D"{ #endif return CombinedShapeLightShared2(surfaceData, inputData, input.uv, - tangentWS, bitangentWS, normalWS); + tangentWS, bitangentWS, normalWS, input.positionWS); } From 1fb0653aee7a96fac0572139705ae6b2eed2fb7f Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 14:43:46 +0900 Subject: [PATCH 113/290] GUI for viewPos --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 8ab23e7c9..a00272007 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -143,12 +143,12 @@ static void DrawLightingGUI(MaterialEditor mEditor, Material[] mats, EditorGUILayout.LabelField("Highlight Settings"); EditorGUI.indentLevel+= INDENT_SIZE; - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[SHADER_PROP_VIEW_DIRECTION]); + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION]); ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_HIGHLIGHT_TEX]); ToonEditorGUIUtility.DrawIntPopupGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE], m_highlightModeEnums, m_highlightModeIndices,out int _); ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH]); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_POWER]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_POWER]); EditorGUI.indentLevel-= INDENT_SIZE; @@ -385,8 +385,8 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "Multiplier for the diffuse contribution."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_VIEW_DIRECTION), - label = new GUIContent("View Direction", "Camera View Direction"), + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION), + label = new GUIContent("View Position", "Camera View Position"), }, new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_HIGHLIGHT_TEX), @@ -502,7 +502,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH = "_DirectionalLight_DiffuseStrength"; - internal const string SHADER_PROP_VIEW_DIRECTION = "_ViewDirection"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION = "_DirectionalLight_ViewPosition"; internal const string SHADER_PROP_HIGHLIGHT_COLOR = "_HighlightColor"; internal const string SHADER_PROP_HIGHLIGHT_TEX = "_HighlightTex"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE = "_DirectionalLight_HighlightMode"; From 230344566275aac112f8e13d05916ba9696009a1 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 14:47:24 +0900 Subject: [PATCH 114/290] Reapply "add CameraViewController" This reverts commit 0ff8a2766052708ebc8e8d8f47afbf894eff3421. --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 7 +++--- .../Assets/ScriptsDev/Toon3Das2DConstants.cs | 1 + .../ScriptsDev/ToonCameraViewController.cs | 24 +++++++++++++++++++ .../ToonCameraViewController.cs.meta | 2 ++ 4 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index a00272007..d69cf7c84 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -143,7 +143,7 @@ static void DrawLightingGUI(MaterialEditor mEditor, Material[] mats, EditorGUILayout.LabelField("Highlight Settings"); EditorGUI.indentLevel+= INDENT_SIZE; - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION]); + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION]); ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_HIGHLIGHT_TEX]); ToonEditorGUIUtility.DrawIntPopupGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE], m_highlightModeEnums, m_highlightModeIndices,out int _); @@ -385,7 +385,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "Multiplier for the diffuse contribution."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION), + mainPropertyName = new MaterialName(Toon3Das2DConstants.SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION), label = new GUIContent("View Position", "Camera View Position"), }, new MaterialUIElement { @@ -501,8 +501,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_DIRECTIONAL_LIGHT_USE = "_DirectionalLight_Use"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH = "_DirectionalLight_DiffuseStrength"; - - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION = "_DirectionalLight_ViewPosition"; + internal const string SHADER_PROP_HIGHLIGHT_COLOR = "_HighlightColor"; internal const string SHADER_PROP_HIGHLIGHT_TEX = "_HighlightTex"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE = "_DirectionalLight_HighlightMode"; diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs index 9f4d24187..f64e34f2d 100644 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs @@ -4,4 +4,5 @@ public static class Toon3Das2DConstants { public const string ShaderPropUnlit_DirectionalLight_Color = "_DirectionalLight_Color"; public const string ShaderPropUnlit_DirectionalLight_Intensity = "_DirectionalLight_Intensity"; + public const string SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION = "_DirectionalLight_ViewPosition"; } \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs new file mode 100644 index 000000000..7861e5e06 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +[ExecuteAlways] +internal class ToonCameraViewController : MonoBehaviour { + private void OnEnable() { + m_transform = transform; + } + + void Update() { + Vector3 pos = m_transform.position; + foreach (Material mat in m_materials) { + if (mat == null) continue; + mat.SetVector(Toon3Das2DConstants.SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION, pos); + } + } + + +//---------------------------------------------------------------------------------------------------------------------- + [SerializeField] private List m_materials = new List(); + + private Transform m_transform; +} \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta new file mode 100644 index 000000000..c6f5c36a3 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 76eb1733b1eefbe4fb94e0398915fc49 From 9ee18ebc7ea32107fedea171c616ba80cfe00608 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 15:08:09 +0900 Subject: [PATCH 115/290] cleanup highlight --- .../Assets/Shaders/Toon2D.shader | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index d6a168dc9..6ada5acc1 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -212,7 +212,7 @@ Shader "Toon/Toon 3D as 2D"{ #endif half alpha = surfaceData.alpha; - half4 color = half4(surfaceData.albedo, alpha); + half4 albedo = half4(surfaceData.albedo, alpha); const half4 mask = surfaceData.mask; const half2 lightingUV = inputData.lightingUV; @@ -233,23 +233,24 @@ Shader "Toon/Toon 3D as 2D"{ shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); } - const float3 diffuseLightFactor = (shapeLight0.rgb * _2DLightStrength) - + (_DirectionalLight_Color * _DirectionalLight_DiffuseStrength * _DirectionalLight_Use); - - const float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); - const float3 baseColor = _BaseColor.rgb * surfaceData.albedo.rgb * diffuseLightFactor; + const float3 directionalLightColorAndUse = _DirectionalLight_Color * _DirectionalLight_Use; + const float3 diffuseLightFactor = (shapeLight0.rgb * _ShapeLightBlendFactors0.x * _2DLightStrength ) + + (directionalLightColorAndUse * _DirectionalLight_DiffuseStrength); + + const float3 baseColor = _BaseColor.rgb * albedo.rgb * diffuseLightFactor; + //1st and 2nd Shade - float4 _1st_ShadeMap_var = lerp( - SAMPLE_TEXTURE2D(_1st_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _MainTex_var, + const float4 firstShadeTex = lerp( + SAMPLE_TEXTURE2D(_1st_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), albedo, _Use_BaseAs1st); - const float3 firstShadeAlbedo = _1st_ShadeColor.rgb * _1st_ShadeMap_var.rgb; + const float3 firstShadeAlbedo = _1st_ShadeColor.rgb * firstShadeTex.rgb; const float3 firstShadeColor = firstShadeAlbedo * diffuseLightFactor; - float4 _2nd_ShadeMap_var = lerp( - SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _1st_ShadeMap_var, + const float4 secondShadeTex = lerp( + SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), firstShadeTex, _Use_1stAs2nd); - const float3 secondShadeAlbedo = _2nd_ShadeColor.rgb * _2nd_ShadeMap_var.rgb; + const float3 secondShadeAlbedo = _2nd_ShadeColor.rgb * secondShadeTex.rgb; const float3 secondShadeColor = secondShadeAlbedo * diffuseLightFactor; const float light2dDiffuse = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); @@ -257,35 +258,34 @@ Shader "Toon/Toon 3D as 2D"{ const float3 directionalLightDirection = normalize(-_DirectionalLight_Direction); const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, directionalLightDirection) + 0.5; - float lightFactor = (light2dDiffuse * _2DLightStrength) + const float threeColorsT = (light2dDiffuse * _2DLightStrength) + (directionalDiffuse * _DirectionalLight_DiffuseStrength); - float3 Set_FinalBaseColor = ThreeColorsLinearShading(baseColor,firstShadeColor, secondShadeColor, + const float3 finalDiffuseColor = ThreeColorsLinearShading(baseColor,firstShadeColor, secondShadeColor, _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, - _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, lightFactor); + _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, threeColorsT); //Highlight const float3 viewDirection = normalize(_DirectionalLight_ViewPosition - positionWS); const float3 halfDirection = normalize(viewDirection + directionalLightDirection); float dotHN_01 = 0.5 * dot(halfDirection,perturbedNormalWS) + 0.5; - - float _TweakHighColorMask_var = + const float highlight = lerp( (1.0 - step(dotHN_01,(1.0 - pow(abs(_DirectionalLight_HighlightPower),5)))), - pow(abs(dotHN_01),exp2(lerp(11,1,_DirectionalLight_HighlightPower))), _DirectionalLight_HighlightMode ); + pow(abs(dotHN_01),exp2(lerp(11,1,_DirectionalLight_HighlightPower))), + _DirectionalLight_HighlightMode ); const float4 highlightTex = SAMPLE_TEXTURE2D(_HighlightTex, sampler_HighlightTex, TRANSFORM_TEX(uv, _HighlightTex)); const float3 highlightAlbedo = highlightTex.rgb * _HighlightColor.rgb; - const float3 highlightColor = highlightAlbedo * _DirectionalLight_HighlightStrength; - - float3 _HighColor_var = highlightColor * _DirectionalLight_Color * _DirectionalLight_Use * _TweakHighColorMask_var; + const float3 highlightFactor = directionalLightColorAndUse * _DirectionalLight_HighlightStrength; - float3 Set_HighColor = Set_FinalBaseColor + _HighColor_var; + const float3 finalHighlightColor = highlightAlbedo * highlightFactor * highlight; - Set_FinalBaseColor = (Set_FinalBaseColor ) * _ShapeLightBlendFactors0.x + _HighColor_var; + + float3 finalColor = finalDiffuseColor + finalHighlightColor; - half4 shapeLight0Modulate = half4(Set_FinalBaseColor, alpha); + half4 shapeLight0Modulate = half4(finalColor, alpha); half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; #else @@ -295,7 +295,7 @@ Shader "Toon/Toon 3D as 2D"{ half4 finalOutput; #if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 - finalOutput = color; + finalOutput = albedo; #else half4 finalModulate = shapeLight0Modulate; half4 finalAdditve = shapeLight0Additive; From e2fb5426701f3c1a490798625145fcd205bfc571 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 15:29:42 +0900 Subject: [PATCH 116/290] Consider custom directional light inside outline --- .../Assets/Shaders/Toon2D.shader | 18 +++++++++++++----- .../Assets/Shaders/ToonBlend.hlsl | 11 +++++++++++ .../Assets/Shaders/ToonBlend.hlsl.meta | 7 +++++++ 3 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl create mode 100644 Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl.meta diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 6ada5acc1..f8a4844fa 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -154,6 +154,7 @@ Shader "Toon/Toon 3D as 2D"{ float4 _HighlightTex_ST; #include "ObjectTransform.hlsl" + #include "ToonBlend.hlsl" Varyings ToonVertex(Attributes input) { @@ -235,9 +236,8 @@ Shader "Toon/Toon 3D as 2D"{ const float3 directionalLightColorAndUse = _DirectionalLight_Color * _DirectionalLight_Use; - const float3 diffuseLightFactor = (shapeLight0.rgb * _ShapeLightBlendFactors0.x * _2DLightStrength ) - + (directionalLightColorAndUse * _DirectionalLight_DiffuseStrength); - + const float3 diffuseLightFactor = ToonDiffuseBlend(shapeLight0.rgb, _ShapeLightBlendFactors0.x); + const float3 baseColor = _BaseColor.rgb * albedo.rgb * diffuseLightFactor; //1st and 2nd Shade @@ -400,6 +400,12 @@ Shader "Toon/Toon 3D as 2D"{ int _Outline_UseCustomNormalMap; CBUFFER_START(UnityPerMaterial) + + float _2DLightStrength; + int _DirectionalLight_Use; + float4 _DirectionalLight_Color; + float _DirectionalLight_DiffuseStrength; + half4 _BaseColor; float _OutlineOffsetZ; float _OutlineWidth; @@ -412,6 +418,7 @@ Shader "Toon/Toon 3D as 2D"{ CBUFFER_END #include "ObjectTransform.hlsl" + #include "ToonBlend.hlsl" OutlineVertexOutput OutlineVertex(OutlineVertexInput v) { OutlineVertexOutput o = (OutlineVertexOutput) 0; @@ -479,7 +486,8 @@ Shader "Toon/Toon 3D as 2D"{ } #endif - float3 lightColor = shapeLight0.rgb; + + const float3 diffuseLightFactor = ToonDiffuseBlend(shapeLight0.rgb, _ShapeLightBlendFactors0.x); const float2 Set_UV0 = i.uv0; float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); @@ -490,7 +498,7 @@ Shader "Toon/Toon 3D as 2D"{ //Blend const float3 outlineBaseBlend = lerp(outlineAlbedo, outlineAlbedo * Set_BaseColor, _Outline_BaseColorBlend); - const float3 outlineBaseAndLightBlend = lerp(outlineBaseBlend, outlineBaseBlend * lightColor, _Outline_LightColorBlend); + const float3 outlineBaseAndLightBlend = lerp(outlineBaseBlend, outlineBaseBlend * diffuseLightFactor, _Outline_LightColorBlend); #ifdef _IS_OUTLINE_CLIPPING_NO return float4(outlineBaseAndLightBlend,1.0); diff --git a/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl b/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl new file mode 100644 index 000000000..75d25e2b6 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl @@ -0,0 +1,11 @@ +#pragma once + +float3 ToonDiffuseBlend(float3 shapeLight, float _ShapeLightBlendFactors) { + + const float3 directionalLightColorAndUse = _DirectionalLight_Color * _DirectionalLight_Use; + + const float3 diffuseLightFactor = (shapeLight.rgb * _ShapeLightBlendFactors * _2DLightStrength ) + + (directionalLightColorAndUse * _DirectionalLight_DiffuseStrength); + + return diffuseLightFactor; +} diff --git a/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl.meta b/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl.meta new file mode 100644 index 000000000..0bd1bb12f --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5bc7437a7c5f9e543b48e4927ebaa2f2 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From 6a16206144aa9ddba60102fba1daab7cc344cf2c Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 16:38:01 +0900 Subject: [PATCH 117/290] chnage order --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index d69cf7c84..00f7f778f 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -228,12 +228,12 @@ static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary Date: Mon, 24 Nov 2025 16:40:07 +0900 Subject: [PATCH 118/290] fix compile error --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index f8a4844fa..9124382ce 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -476,6 +476,8 @@ Shader "Toon/Toon 3D as 2D"{ const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, i.uv0); const half2 lightingUV = inputData.lightingUV; + float3 diffuseLightFactor = float3(0,0,0); + #if USE_SHAPE_LIGHT_TYPE_0 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); if (any(_ShapeLightMaskFilter0)) @@ -484,10 +486,9 @@ Shader "Toon/Toon 3D as 2D"{ mask); shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); } + diffuseLightFactor = ToonDiffuseBlend(shapeLight0.rgb, _ShapeLightBlendFactors0.x); #endif - - const float3 diffuseLightFactor = ToonDiffuseBlend(shapeLight0.rgb, _ShapeLightBlendFactors0.x); const float2 Set_UV0 = i.uv0; float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); From 35cc2aaabf3a63b3727ae42f5a100cc6073a7246 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 16:42:06 +0900 Subject: [PATCH 119/290] declare widthMap --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 9124382ce..ed6db7faf 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -390,6 +390,10 @@ Shader "Toon/Toon 3D as 2D"{ TEXTURE2D(_MaskTex); SAMPLER(sampler_MaskTex); + TEXTURE2D(_OutlineWidthMap); + SAMPLER(sampler_OutlineWidthMap); + float4 _OutlineWidthMap_ST; + TEXTURE2D(_OutlineTex); SAMPLER(sampler_OutlineTex); float4 _OutlineTex_ST; From ff7e80ae39233d3e0cf6b614baacb69706da83d8 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 16:45:51 +0900 Subject: [PATCH 120/290] use SAMPLE_TEXTURE2D_LOD --- .../Assets/Shaders/Toon2D.shader | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index ed6db7faf..9173be21a 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -48,7 +48,7 @@ Shader "Toon/Toon 3D as 2D"{ _OutlineTex ("Outline Tex", 2D) = "white" {} _Outline_BaseColorBlend ("Blend Base Color to Outline", Range(0,1) ) = 0.5 _Outline_LightColorBlend ("Blend Light Color to Outline", Range(0,1) ) = 0.5 - _OutlineOffsetZ ("Outline Z Offset", Float) = 0 + _OutlineOffsetZ ("Outline Z Offset", Float) = 0.75 _OutlineNear ("Outline Near", Float ) = 0.5 _OutlineFar ("Outline Far", Float ) = 100 _Outline_UseCustomNormalMap ("Use Custom Normal Map", Integer ) = 0 @@ -353,8 +353,9 @@ Shader "Toon/Toon 3D as 2D"{ // // } + HLSLPROGRAM - #pragma target 2.0 + #pragma target 3.0 #pragma vertex OutlineVertex #pragma fragment OutlineFragment @@ -433,7 +434,11 @@ Shader "Toon/Toon 3D as 2D"{ o.uv0 = v.texcoord0; float4 objPos = mul (GetObjectToWorldMatrix(), float4(0,0,0,1) ); - float4 _Outline_Sampler_var = tex2Dlod(sampler_OutlineTex,float4(TRANSFORM_TEX(uv, _OutlineTex),0.0,0)); + + const float outlineWidthAlbedo = SAMPLE_TEXTURE2D_LOD(_OutlineWidthMap, sampler_OutlineWidthMap, TRANSFORM_TEX(uv, _OutlineWidthMap),0).r; + const float outlineWidth = _OutlineWidth * 0.001 * outlineWidthAlbedo; + + const float3 normalDir = UnityObjectToWorldNormal(v.normal); const float3 tangentDir = normalize( mul( GetObjectToWorldMatrix(), float4( v.tangent.xyz, 0.0 ) ).xyz ); @@ -441,10 +446,12 @@ Shader "Toon/Toon 3D as 2D"{ float3x3 tangentTransform = float3x3(tangentDir, bitangentDir, normalDir); //UnpackNormal() can't be used, and so as follows. Do not specify a bump for the texture to be used. - float4 _BakedNormal_var = (tex2Dlod(sampler_Outline_CustomNormalMap,float4(TRANSFORM_TEX(uv, _Outline_CustomNormalMap),0.0,0)) * 2 - 1); + const float4 customNormalMap = SAMPLE_TEXTURE2D_LOD( + _Outline_CustomNormalMap, sampler_Outline_CustomNormalMap, TRANSFORM_TEX(uv, _Outline_CustomNormalMap),0); + float4 _BakedNormal_var = customNormalMap * 2 - 1; float3 _BakedNormalDir = normalize(mul(_BakedNormal_var.rgb, tangentTransform)); - float Set_Outline_Width = (_OutlineWidth*0.001*smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) )*_Outline_Sampler_var.rgb).r; + float Set_Outline_Width = outlineWidth * smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) ); float4 _ClipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); _OutlineOffsetZ = _OutlineOffsetZ * -0.01; From 32efb6d6e3c5d9d0eb64bdcbde4243e18e8837fb Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 19:49:25 +0900 Subject: [PATCH 121/290] use UnpackNormal --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 9173be21a..ea0194786 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -445,11 +445,11 @@ Shader "Toon/Toon 3D as 2D"{ const float3 bitangentDir = normalize(cross(normalDir, tangentDir) * v.tangent.w); float3x3 tangentTransform = float3x3(tangentDir, bitangentDir, normalDir); - //UnpackNormal() can't be used, and so as follows. Do not specify a bump for the texture to be used. + //custom normal map const float4 customNormalMap = SAMPLE_TEXTURE2D_LOD( _Outline_CustomNormalMap, sampler_Outline_CustomNormalMap, TRANSFORM_TEX(uv, _Outline_CustomNormalMap),0); - float4 _BakedNormal_var = customNormalMap * 2 - 1; - float3 _BakedNormalDir = normalize(mul(_BakedNormal_var.rgb, tangentTransform)); + const float3 normalTS = UnpackNormal(customNormalMap); + float3 _BakedNormalDir = normalize(mul(normalTS.xyz, tangentTransform)); float Set_Outline_Width = outlineWidth * smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) ); float4 _ClipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); From d21c299529f02b49fb8b4709ad605302cc5f1bdf Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 19:58:18 +0900 Subject: [PATCH 122/290] rename outline normalmap --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 20 +++++++++---------- .../Assets/Shaders/Toon2D.shader | 16 +++++++-------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 00f7f778f..c3e9982e1 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -218,10 +218,10 @@ static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary Date: Mon, 24 Nov 2025 20:07:12 +0900 Subject: [PATCH 123/290] fix tooltip --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index c3e9982e1..dac5d4eec 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -438,7 +438,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_LIGHT_COLOR_BLEND), label = new GUIContent("Blend Light Color to Outline", - "Blend light color to outline color."), + "Blend the combined effect of 2D lighting and custom directional light to the outline color."), }, new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_OFFSET_Z), From e40c4fe9a3e8228901bcf6a4a888c080c4ce9f81 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 20:20:41 +0900 Subject: [PATCH 124/290] cleanup position scaling mode --- .../Assets/Shaders/Toon2D.shader | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index e28056745..a67742807 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -449,26 +449,26 @@ Shader "Toon/Toon 3D as 2D"{ const float4 customNormalMap = SAMPLE_TEXTURE2D_LOD( _Outline_NormalMap, sampler_Outline_NormalMap, TRANSFORM_TEX(uv, _Outline_NormalMap),0); const float3 normalTS = UnpackNormal(customNormalMap); - float3 _BakedNormalDir = normalize(mul(normalTS.xyz, tangentTransform)); + const float3 outlineNormalMapWS = normalize(mul(normalTS.xyz, tangentTransform)); - float Set_Outline_Width = outlineWidth * smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) ); + float finalOutlineWidth = outlineWidth * smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) ); float4 _ClipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); _OutlineOffsetZ = _OutlineOffsetZ * -0.01; float3 newPos; #ifdef _OUTLINE_NML - newPos = lerp(float4(v.vertex.xyz + v.normal*Set_Outline_Width,1), float4(v.vertex.xyz + _BakedNormalDir*Set_Outline_Width,1),_Outline_UseNormalMap); + const float3 outlineDir = lerp(v.normal, outlineNormalMapWS, _Outline_UseNormalMap); + + newPos = float4(v.vertex.xyz + outlineDir * finalOutlineWidth,1); o.pos = TransformObjectToHClip(newPos); #elif _OUTLINE_POS - Set_Outline_Width = Set_Outline_Width*2; - float signVar = dot(normalize(v.vertex.xyz),normalize(v.normal))<0 ? -1 : 1; - o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signVar*normalize(v.vertex)*Set_Outline_Width, 1)); + const float3 normalizedPos = normalize(v.vertex.xyz); + const float signPN = sign(dot(normalizedPos,normalize(v.normal))); + o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signPN * normalizedPos * finalOutlineWidth, 1)); #endif o.pos.z = o.pos.z + _OutlineOffsetZ * _ClipCameraPos.z; o.lightingUV = half2(ComputeScreenPos(o.pos / o.pos.w).xy); - - return o; } From 6e0c7c66815fb0c404c6a159dce0ba96627bb4f8 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 20:22:00 +0900 Subject: [PATCH 125/290] cleanup --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index a67742807..35641e017 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -453,7 +453,6 @@ Shader "Toon/Toon 3D as 2D"{ float finalOutlineWidth = outlineWidth * smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) ); float4 _ClipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); - _OutlineOffsetZ = _OutlineOffsetZ * -0.01; float3 newPos; #ifdef _OUTLINE_NML @@ -466,7 +465,8 @@ Shader "Toon/Toon 3D as 2D"{ const float signPN = sign(dot(normalizedPos,normalize(v.normal))); o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signPN * normalizedPos * finalOutlineWidth, 1)); #endif - o.pos.z = o.pos.z + _OutlineOffsetZ * _ClipCameraPos.z; + const float scaledOutlineOffsetZ = _OutlineOffsetZ * -0.01; + o.pos.z = o.pos.z + scaledOutlineOffsetZ * _ClipCameraPos.z; o.lightingUV = half2(ComputeScreenPos(o.pos / o.pos.w).xy); return o; From c3ec520225bcb33708022df0ea04cc07c12a82ff Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 20:25:05 +0900 Subject: [PATCH 126/290] cleanup --- .../Assets/Shaders/Toon2D.shader | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 35641e017..b71c2ae36 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -433,29 +433,29 @@ Shader "Toon/Toon 3D as 2D"{ const float2 uv = v.texcoord0; o.uv0 = v.texcoord0; - float4 objPos = mul (GetObjectToWorldMatrix(), float4(0,0,0,1) ); + const float4 objPos = mul (GetObjectToWorldMatrix(), float4(0,0,0,1) ); - const float outlineWidthAlbedo = SAMPLE_TEXTURE2D_LOD(_OutlineWidthMap, sampler_OutlineWidthMap, TRANSFORM_TEX(uv, _OutlineWidthMap),0).r; + const float outlineWidthAlbedo = SAMPLE_TEXTURE2D_LOD(_OutlineWidthMap, sampler_OutlineWidthMap, + TRANSFORM_TEX(uv, _OutlineWidthMap),0).r; const float outlineWidth = _OutlineWidth * 0.001 * outlineWidthAlbedo; + + float finalOutlineWidth = outlineWidth * smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) ); - - const float3 normalDir = UnityObjectToWorldNormal(v.normal); + float3 newPos; +#ifdef _OUTLINE_NML + //TBN + const float3 normalDir = UnityObjectToWorldNormal(v.normal); const float3 tangentDir = normalize( mul( GetObjectToWorldMatrix(), float4( v.tangent.xyz, 0.0 ) ).xyz ); const float3 bitangentDir = normalize(cross(normalDir, tangentDir) * v.tangent.w); float3x3 tangentTransform = float3x3(tangentDir, bitangentDir, normalDir); - //custom normal map + //Outline normal map const float4 customNormalMap = SAMPLE_TEXTURE2D_LOD( _Outline_NormalMap, sampler_Outline_NormalMap, TRANSFORM_TEX(uv, _Outline_NormalMap),0); const float3 normalTS = UnpackNormal(customNormalMap); const float3 outlineNormalMapWS = normalize(mul(normalTS.xyz, tangentTransform)); - - float finalOutlineWidth = outlineWidth * smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) ); - float4 _ClipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); - - float3 newPos; -#ifdef _OUTLINE_NML + const float3 outlineDir = lerp(v.normal, outlineNormalMapWS, _Outline_UseNormalMap); newPos = float4(v.vertex.xyz + outlineDir * finalOutlineWidth,1); @@ -466,7 +466,8 @@ Shader "Toon/Toon 3D as 2D"{ o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signPN * normalizedPos * finalOutlineWidth, 1)); #endif const float scaledOutlineOffsetZ = _OutlineOffsetZ * -0.01; - o.pos.z = o.pos.z + scaledOutlineOffsetZ * _ClipCameraPos.z; + const float4 clipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); + o.pos.z = o.pos.z + scaledOutlineOffsetZ * clipCameraPos.z; o.lightingUV = half2(ComputeScreenPos(o.pos / o.pos.w).xy); return o; From a09aa628bb6c1d2a0dc97ce282bbf2915b97ea75 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 20:28:20 +0900 Subject: [PATCH 127/290] cleanup --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index b71c2ae36..da17ab3f1 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -466,9 +466,8 @@ Shader "Toon/Toon 3D as 2D"{ o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signPN * normalizedPos * finalOutlineWidth, 1)); #endif const float scaledOutlineOffsetZ = _OutlineOffsetZ * -0.01; - const float4 clipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); - o.pos.z = o.pos.z + scaledOutlineOffsetZ * clipCameraPos.z; - + o.pos.z = o.pos.z + scaledOutlineOffsetZ; + o.lightingUV = half2(ComputeScreenPos(o.pos / o.pos.w).xy); return o; } From 445376962dc2020825b6495d38c787546b091569 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 20:30:21 +0900 Subject: [PATCH 128/290] change keyword name --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 4 ++-- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index dac5d4eec..a7354cb40 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -197,8 +197,8 @@ static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary Date: Mon, 24 Nov 2025 20:41:08 +0900 Subject: [PATCH 129/290] cleanup clipping --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 7db55a1b7..d1b6b0ffc 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -521,8 +521,8 @@ Shader "Toon/Toon 3D as 2D"{ float _Inverse_Clipping_var = lerp( _IsBaseMapAlphaAsClippingMask_var, (1.0 - _IsBaseMapAlphaAsClippingMask_var), _Inverse_Clipping ); float Set_Clipping = saturate((_Inverse_Clipping_var+_Clipping_Level)); clip(Set_Clipping - 0.5); - float4 Set_Outline_Color = lerp( float4(_Is_BlendBaseColor_var,Set_Clipping), float4((_OutlineTex_var.rgb*_Outline_Color.rgb*lightColor),Set_Clipping), _Is_OutlineTex ); - return Set_Outline_Color; + + return float4(outlineBaseAndLightBlend,Set_Clipping); #endif } From e5edc646505826625e71b55e37b22bc6d0bedfd6 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 20:59:11 +0900 Subject: [PATCH 130/290] save 2d materials --- ...Shader_Eye_Clipping_StencilMask_3Das2D.mat | 30 +++++++++++++----- .../ToonShader_Eyebrow_StencilMask_3Das2D.mat | 30 +++++++++++++----- .../ToonShader_Face_3Das2D.mat | 30 +++++++++++++----- .../ToonShader_Fhair2_3Das2D.mat | 30 +++++++++++++----- .../ToonShader_Fhair_StencilOut_3Das2D.mat | 30 +++++++++++++----- .../ToonShader_Hair_Clipping_3Das2D.mat | 30 +++++++++++++----- .../ToonShader_Head_Clipping_3Das2D.mat | 30 +++++++++++++----- .../ToonShader_Main_3Das2D.mat | 31 ++++++++++++++----- 8 files changed, 185 insertions(+), 56 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat index c89cf98d7..d3f37088e 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat @@ -12,8 +12,9 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - TOON_OUTLINE_NORMAL + m_InvalidKeywords: - _OUTLINE_NML - m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -32,6 +33,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _HighlightTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} m_Scale: {x: 1, y: 1} @@ -56,12 +61,18 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _Outline_NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_HighlightMode: 0 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 + - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 @@ -69,7 +80,7 @@ Material: - _1st2nd_Shades_Feather: 0 - _1stTo2nd_ShadeFeather: 0 - _1stTo2nd_ShadeStart: 0 - - _2DLightStrength: 0 + - _2DLightStrength: 0.129 - _BaseColor_Step: 0.393 - _BaseShade_Feather: 0.629 - _BaseTo1st_ShadeFeather: 0.1 @@ -77,15 +88,18 @@ Material: - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 + - _DirectionalLight_DiffuseStrength: 0.877 + - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 1 - - _OutlineWidth: 24.95 - - _Outline_BaseColorBlend: 0.804 - - _Outline_LightColorBlend: 1 + - _OutlineOffsetZ: 0.75 + - _OutlineWidth: 5 + - _Outline_BaseColorBlend: 1 + - _Outline_LightColorBlend: 0 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: @@ -93,7 +107,9 @@ Material: - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} + - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat index 7a10ab6c6..f99f9147b 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat @@ -12,8 +12,9 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - TOON_OUTLINE_NORMAL + m_InvalidKeywords: - _OUTLINE_NML - m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -32,6 +33,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _HighlightTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} m_Scale: {x: 1, y: 1} @@ -56,12 +61,18 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _Outline_NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_HighlightMode: 0 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 + - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 @@ -69,7 +80,7 @@ Material: - _1st2nd_Shades_Feather: 0.0001 - _1stTo2nd_ShadeFeather: 0 - _1stTo2nd_ShadeStart: 0 - - _2DLightStrength: 0 + - _2DLightStrength: 0.129 - _BaseColor_Step: 0.507 - _BaseShade_Feather: 0.08 - _BaseTo1st_ShadeFeather: 0.08 @@ -77,15 +88,18 @@ Material: - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 + - _DirectionalLight_DiffuseStrength: 0.877 + - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 1 - - _OutlineWidth: 24.95 - - _Outline_BaseColorBlend: 0.804 - - _Outline_LightColorBlend: 1 + - _OutlineOffsetZ: 0.75 + - _OutlineWidth: 5 + - _Outline_BaseColorBlend: 1 + - _Outline_LightColorBlend: 0 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: @@ -93,7 +107,9 @@ Material: - _2nd_ShadeColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} + - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat index 8b87ab6d9..8a2eecf0a 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat @@ -12,8 +12,9 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - TOON_OUTLINE_NORMAL + m_InvalidKeywords: - _OUTLINE_NML - m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -32,6 +33,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _HighlightTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} m_Scale: {x: 1, y: 1} @@ -56,12 +61,18 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _Outline_NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_HighlightMode: 0 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 + - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 @@ -69,7 +80,7 @@ Material: - _1st2nd_Shades_Feather: 0.0001 - _1stTo2nd_ShadeFeather: 0 - _1stTo2nd_ShadeStart: 0 - - _2DLightStrength: 0 + - _2DLightStrength: 0.129 - _BaseColor_Step: 0.353 - _BaseShade_Feather: 0.121 - _BaseTo1st_ShadeFeather: 0.121 @@ -77,15 +88,18 @@ Material: - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 + - _DirectionalLight_DiffuseStrength: 0.877 + - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 1 - - _OutlineWidth: 24.95 - - _Outline_BaseColorBlend: 0.804 - - _Outline_LightColorBlend: 1 + - _OutlineOffsetZ: 0.75 + - _OutlineWidth: 5 + - _Outline_BaseColorBlend: 1 + - _Outline_LightColorBlend: 0 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: @@ -93,7 +107,9 @@ Material: - _2nd_ShadeColor: {r: 0.7490196, g: 0.69411767, b: 0.88235295, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} + - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat index 40f71dcaa..798b462c0 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat @@ -12,8 +12,9 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - TOON_OUTLINE_NORMAL + m_InvalidKeywords: - _OUTLINE_NML - m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -32,6 +33,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _HighlightTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} m_Scale: {x: 1, y: 1} @@ -56,12 +61,18 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _Outline_NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_HighlightMode: 0 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 + - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 @@ -69,7 +80,7 @@ Material: - _1st2nd_Shades_Feather: 0.236 - _1stTo2nd_ShadeFeather: 0.236 - _1stTo2nd_ShadeStart: 0.727 - - _2DLightStrength: 0 + - _2DLightStrength: 0.129 - _BaseColor_Step: 0.801 - _BaseShade_Feather: 0.062 - _BaseTo1st_ShadeFeather: 0.062 @@ -77,15 +88,18 @@ Material: - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 + - _DirectionalLight_DiffuseStrength: 0.877 + - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 1 - - _OutlineWidth: 24.95 - - _Outline_BaseColorBlend: 0.804 - - _Outline_LightColorBlend: 1 + - _OutlineOffsetZ: 0.75 + - _OutlineWidth: 5 + - _Outline_BaseColorBlend: 1 + - _Outline_LightColorBlend: 0 - _ShadeColor_Step: 0.727 - _Specular_Intensity: 0 m_Colors: @@ -93,7 +107,9 @@ Material: - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} + - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat index 5f9b01729..4377d8041 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat @@ -12,8 +12,9 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - TOON_OUTLINE_NORMAL + m_InvalidKeywords: - _OUTLINE_NML - m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -32,6 +33,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _HighlightTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} m_Scale: {x: 1, y: 1} @@ -56,12 +61,18 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _Outline_NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_HighlightMode: 0 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 + - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 @@ -69,7 +80,7 @@ Material: - _1st2nd_Shades_Feather: 0.236 - _1stTo2nd_ShadeFeather: 0.236 - _1stTo2nd_ShadeStart: 0.727 - - _2DLightStrength: 0 + - _2DLightStrength: 0.129 - _BaseColor_Step: 0.801 - _BaseShade_Feather: 0.062 - _BaseTo1st_ShadeFeather: 0.062 @@ -77,15 +88,18 @@ Material: - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 + - _DirectionalLight_DiffuseStrength: 0.877 + - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 1 - - _OutlineWidth: 24.95 - - _Outline_BaseColorBlend: 0.804 - - _Outline_LightColorBlend: 1 + - _OutlineOffsetZ: 0.75 + - _OutlineWidth: 5 + - _Outline_BaseColorBlend: 1 + - _Outline_LightColorBlend: 0 - _ShadeColor_Step: 0.727 - _Specular_Intensity: 0 m_Colors: @@ -93,7 +107,9 @@ Material: - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} + - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat index 38cafecf0..e9d81b7a7 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat @@ -12,8 +12,9 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - TOON_OUTLINE_NORMAL + m_InvalidKeywords: - _OUTLINE_NML - m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -32,6 +33,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _HighlightTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} m_Scale: {x: 1, y: 1} @@ -56,12 +61,18 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _Outline_NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_HighlightMode: 0 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 + - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 @@ -69,7 +80,7 @@ Material: - _1st2nd_Shades_Feather: 0.064 - _1stTo2nd_ShadeFeather: 0.064 - _1stTo2nd_ShadeStart: 0.722 - - _2DLightStrength: 0 + - _2DLightStrength: 0.129 - _BaseColor_Step: 0.815 - _BaseShade_Feather: 0.13 - _BaseTo1st_ShadeFeather: 0.13 @@ -77,15 +88,18 @@ Material: - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 + - _DirectionalLight_DiffuseStrength: 0.877 + - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 1 - - _OutlineWidth: 24.95 - - _Outline_BaseColorBlend: 0.804 - - _Outline_LightColorBlend: 1 + - _OutlineOffsetZ: 0.75 + - _OutlineWidth: 5 + - _Outline_BaseColorBlend: 1 + - _Outline_LightColorBlend: 0 - _ShadeColor_Step: 0.722 - _Specular_Intensity: 0 m_Colors: @@ -93,7 +107,9 @@ Material: - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} + - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat index 2956778de..5cd0b22ed 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat @@ -12,8 +12,9 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - TOON_OUTLINE_NORMAL + m_InvalidKeywords: - _OUTLINE_NML - m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -32,6 +33,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _HighlightTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} m_Scale: {x: 1, y: 1} @@ -56,12 +61,18 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _Outline_NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_HighlightMode: 0 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 + - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 @@ -69,7 +80,7 @@ Material: - _1st2nd_Shades_Feather: 0.064 - _1stTo2nd_ShadeFeather: 0.064 - _1stTo2nd_ShadeStart: 0.722 - - _2DLightStrength: 0 + - _2DLightStrength: 0.129 - _BaseColor_Step: 0.815 - _BaseShade_Feather: 0.13 - _BaseTo1st_ShadeFeather: 0.13 @@ -77,15 +88,18 @@ Material: - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 + - _DirectionalLight_DiffuseStrength: 0.877 + - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 1 - - _OutlineWidth: 24.95 - - _Outline_BaseColorBlend: 0.804 - - _Outline_LightColorBlend: 1 + - _OutlineOffsetZ: 0.75 + - _OutlineWidth: 5 + - _Outline_BaseColorBlend: 1 + - _Outline_LightColorBlend: 0 - _ShadeColor_Step: 0.722 - _Specular_Intensity: 0 m_Colors: @@ -93,7 +107,9 @@ Material: - _2nd_ShadeColor: {r: 0.6691177, g: 0.47672933, b: 0.27059904, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} + - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat index 5ed1b90ea..b620c5854 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat @@ -12,8 +12,10 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - TOON_OUTLINE_NORMAL + m_InvalidKeywords: + - _ - _OUTLINE_NML - m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -32,6 +34,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _HighlightTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} m_Scale: {x: 1, y: 1} @@ -56,12 +62,18 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _Outline_NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_HighlightMode: 0 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 + - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 1 - _Use_BaseAs1st: 0 @@ -69,7 +81,7 @@ Material: - _1st2nd_Shades_Feather: 0.08 - _1stTo2nd_ShadeFeather: 0.08 - _1stTo2nd_ShadeStart: 0 - - _2DLightStrength: 0 + - _2DLightStrength: 0.129 - _BaseColor_Step: 0.841 - _BaseShade_Feather: 0.074 - _BaseTo1st_ShadeFeather: 0.074 @@ -77,15 +89,18 @@ Material: - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 + - _DirectionalLight_DiffuseStrength: 0.877 + - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 1 - - _OutlineWidth: 24.95 - - _Outline_BaseColorBlend: 0.804 - - _Outline_LightColorBlend: 1 + - _OutlineOffsetZ: 0.75 + - _OutlineWidth: 5 + - _Outline_BaseColorBlend: 1 + - _Outline_LightColorBlend: 0 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: @@ -93,7 +108,9 @@ Material: - _2nd_ShadeColor: {r: 0.7490196, g: 0.69411767, b: 0.88235295, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: -0, g: 0.3707992, b: -0.9287131, a: 0} + - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} + - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} From f97c2a6b8b509e1b844e8f03d15d0c6647468fcc Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 20:59:23 +0900 Subject: [PATCH 131/290] remove clipping --- .../Assets/Shaders/Toon2D.shader | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index d1b6b0ffc..052e2fb81 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -343,7 +343,7 @@ Shader "Toon/Toon 3D as 2D"{ } // Cull [_SRPDefaultUnlitColMode] // ColorMask [_SPRDefaultUnlitColorMask] -// Blend SrcAlpha OneMinusSrcAlpha + Blend SrcAlpha OneMinusSrcAlpha // Stencil // { // Ref[_StencilNo] @@ -359,8 +359,6 @@ Shader "Toon/Toon 3D as 2D"{ #pragma vertex OutlineVertex #pragma fragment OutlineFragment - - #pragma multi_compile _IS_OUTLINE_CLIPPING_NO _IS_OUTLINE_CLIPPING_YES #pragma multi_compile TOON_OUTLINE_NORMAL TOON_OUTLINE_POS // Outline is implemented in UniversalToonOutline.hlsl. // #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" @@ -512,19 +510,7 @@ Shader "Toon/Toon 3D as 2D"{ const float3 outlineBaseBlend = lerp(outlineAlbedo, outlineAlbedo * Set_BaseColor, _Outline_BaseColorBlend); const float3 outlineBaseAndLightBlend = lerp(outlineBaseBlend, outlineBaseBlend * diffuseLightFactor, _Outline_LightColorBlend); -#ifdef _IS_OUTLINE_CLIPPING_NO return float4(outlineBaseAndLightBlend,1.0); -#elif _IS_OUTLINE_CLIPPING_YES - float4 _ClippingMask_var = SAMPLE_TEXTURE2D(_ClippingMask, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); - float Set_MainTexAlpha = _MainTex_var.a; - float _IsBaseMapAlphaAsClippingMask_var = lerp( _ClippingMask_var.r, Set_MainTexAlpha, _IsBaseMapAlphaAsClippingMask ); - float _Inverse_Clipping_var = lerp( _IsBaseMapAlphaAsClippingMask_var, (1.0 - _IsBaseMapAlphaAsClippingMask_var), _Inverse_Clipping ); - float Set_Clipping = saturate((_Inverse_Clipping_var+_Clipping_Level)); - clip(Set_Clipping - 0.5); - - return float4(outlineBaseAndLightBlend,Set_Clipping); -#endif - } From 6e66373c0680c68ce8b97e3b268f17f838645abc Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 21:13:00 +0900 Subject: [PATCH 132/290] rename to highlight size --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 6 +++--- .../Assets/Shaders/Toon2D.shader | 18 +++++++++++------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index a7354cb40..ac96eacab 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -148,7 +148,7 @@ static void DrawLightingGUI(MaterialEditor mEditor, Material[] mats, ToonEditorGUIUtility.DrawIntPopupGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE], m_highlightModeEnums, m_highlightModeIndices,out int _); ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_POWER]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_SIZE]); EditorGUI.indentLevel-= INDENT_SIZE; @@ -402,7 +402,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty label = new GUIContent("Strength", "Multiplier for the highlight contribution."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_POWER), + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_SIZE), label = new GUIContent("Power", "Highlight power factor."), }, @@ -506,7 +506,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_HIGHLIGHT_TEX = "_HighlightTex"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE = "_DirectionalLight_HighlightMode"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH = "_DirectionalLight_HighlightStrength"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_POWER = "_DirectionalLight_HighlightPower"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_SIZE = "_DirectionalLight_HighlightSize"; diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 052e2fb81..db1867258 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -38,7 +38,7 @@ Shader "Toon/Toon 3D as 2D"{ _HighlightTex ("HighColor Map", 2D) = "white" {} _DirectionalLight_HighlightMode ("Directional Light: Highlight Mode", Integer) = 0 //0: Hard, 1: Soft _DirectionalLight_HighlightStrength ("Directional Light: Highlight Strength", Range(0,1)) = 0.5 - _DirectionalLight_HighlightPower ("Directional Light: Highlight Power", Range(0,1)) = 0.3 + _DirectionalLight_HighlightSize ("Directional Light: Highlight Size", Range(0,1)) = 0.3 //Outline _OutlineMode("Outline Mode", Integer) = 0 @@ -139,7 +139,7 @@ Shader "Toon/Toon 3D as 2D"{ float4 _HighlightColor; int _DirectionalLight_HighlightMode; float _DirectionalLight_HighlightStrength; - float _DirectionalLight_HighlightPower; + float _DirectionalLight_HighlightSize; CBUFFER_END @@ -201,7 +201,7 @@ Shader "Toon/Toon 3D as 2D"{ } - half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv, + half4 CombinedShapeLightSharedWithToon(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv, in float3 tangentWS, in float3 bitangentWS, in float3 normalWS, in float3 positionWS) { #if defined(DEBUG_DISPLAY) @@ -271,8 +271,8 @@ Shader "Toon/Toon 3D as 2D"{ float dotHN_01 = 0.5 * dot(halfDirection,perturbedNormalWS) + 0.5; const float highlight = - lerp( (1.0 - step(dotHN_01,(1.0 - pow(abs(_DirectionalLight_HighlightPower),5)))), - pow(abs(dotHN_01),exp2(lerp(11,1,_DirectionalLight_HighlightPower))), + lerp( (1.0 - step(dotHN_01,(1.0 - pow(abs(_DirectionalLight_HighlightSize),5)))), + pow(abs(dotHN_01),exp2(lerp(11,1,_DirectionalLight_HighlightSize))), _DirectionalLight_HighlightMode ); @@ -327,7 +327,7 @@ Shader "Toon/Toon 3D as 2D"{ surfaceData.normalWS = input.normalWS; #endif - return CombinedShapeLightShared2(surfaceData, inputData, input.uv, + return CombinedShapeLightSharedWithToon(surfaceData, inputData, input.uv, tangentWS, bitangentWS, normalWS, input.positionWS); } @@ -595,4 +595,8 @@ Shader "Toon/Toon 3D as 2D"{ CustomEditor "UnityToon3Das2DGUI" -} \ No newline at end of file +} + + +//[Note-sin: 2025-11-24] Texture that only needs one channel at the moment +//1. _OutlineWidthMap From aa2dbff9ee5d1e78fb231936c703f2640df0c510 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 21:26:56 +0900 Subject: [PATCH 133/290] save materials --- ...onShader_Eye_Clipping_StencilMask_3Das2D.mat | 11 ++++++----- .../ToonShader_Eyebrow_StencilMask_3Das2D.mat | 10 ++++++---- .../UnityChan_3Das2D/ToonShader_Face_3Das2D.mat | 13 +++++++------ .../ToonShader_Fhair2_3Das2D.mat | 13 +++++++------ .../ToonShader_Fhair_StencilOut_3Das2D.mat | 11 ++++++----- .../ToonShader_Hair_Clipping_3Das2D.mat | 17 +++++++++-------- .../ToonShader_Head_Clipping_3Das2D.mat | 13 +++++++------ .../UnityChan_3Das2D/ToonShader_Main_3Das2D.mat | 15 ++++++++------- 8 files changed, 56 insertions(+), 47 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat index d3f37088e..8c13d7974 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat @@ -83,13 +83,14 @@ Material: - _2DLightStrength: 0.129 - _BaseColor_Step: 0.393 - _BaseShade_Feather: 0.629 - - _BaseTo1st_ShadeFeather: 0.1 + - _BaseTo1st_ShadeFeather: 0.629 - _BaseTo1st_ShadeStart: 0.393 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_DiffuseStrength: 0.877 - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightSize: 0 - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 @@ -98,8 +99,8 @@ Material: - _OutlineNear: 0.5 - _OutlineOffsetZ: 0.75 - _OutlineWidth: 5 - - _Outline_BaseColorBlend: 1 - - _Outline_LightColorBlend: 0 + - _Outline_BaseColorBlend: 0 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: @@ -109,8 +110,8 @@ Material: - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _HighlightColor: {r: 0, g: 0, b: 0, a: 1} + - _OutlineColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat index f99f9147b..7484bdadf 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat @@ -20,7 +20,8 @@ Material: m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} - disabledShaderPasses: [] + disabledShaderPasses: + - SRPDEFAULTUNLIT m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -89,7 +90,8 @@ Material: - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_DiffuseStrength: 0.877 - - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightPower: 0.315 + - _DirectionalLight_HighlightSize: 0.315 - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 @@ -99,7 +101,7 @@ Material: - _OutlineOffsetZ: 0.75 - _OutlineWidth: 5 - _Outline_BaseColorBlend: 1 - - _Outline_LightColorBlend: 0 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: @@ -109,7 +111,7 @@ Material: - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} + - _HighlightColor: {r: 0.5529412, g: 0.15294118, b: 0.105882354, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat index 8a2eecf0a..f586d0062 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat @@ -54,7 +54,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _OutlineWidthMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 6d7e50a99f93487aa7444c0f14286af7, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Outline_CustomNormalMap: @@ -66,13 +66,13 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_HighlightMode: 0 + - _DirectionalLight_HighlightMode: 1 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 - - _Outline_UseNormalMap: 0 + - _Outline_UseNormalMap: 1 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 @@ -89,7 +89,8 @@ Material: - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_DiffuseStrength: 0.877 - - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightPower: 0.315 + - _DirectionalLight_HighlightSize: 0.315 - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 @@ -99,7 +100,7 @@ Material: - _OutlineOffsetZ: 0.75 - _OutlineWidth: 5 - _Outline_BaseColorBlend: 1 - - _Outline_LightColorBlend: 0 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: @@ -109,7 +110,7 @@ Material: - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} + - _HighlightColor: {r: 0.5529412, g: 0.15294118, b: 0.105882354, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat index 798b462c0..0203dfa13 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat @@ -54,7 +54,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _OutlineWidthMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 6d7e50a99f93487aa7444c0f14286af7, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Outline_CustomNormalMap: @@ -62,17 +62,17 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Outline_NormalMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 5b30ce1dc38b14141b4635ebb6c167ac, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_HighlightMode: 0 + - _DirectionalLight_HighlightMode: 1 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 - - _Outline_UseNormalMap: 0 + - _Outline_UseNormalMap: 1 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 @@ -90,6 +90,7 @@ Material: - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_DiffuseStrength: 0.877 - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightSize: 0 - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 @@ -97,9 +98,9 @@ Material: - _OutlineFar: 100 - _OutlineNear: 0.5 - _OutlineOffsetZ: 0.75 - - _OutlineWidth: 5 + - _OutlineWidth: 4.4 - _Outline_BaseColorBlend: 1 - - _Outline_LightColorBlend: 0 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0.727 - _Specular_Intensity: 0 m_Colors: diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat index 4377d8041..ea1fbd4db 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat @@ -54,7 +54,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _OutlineWidthMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 6d7e50a99f93487aa7444c0f14286af7, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Outline_CustomNormalMap: @@ -66,7 +66,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_HighlightMode: 0 + - _DirectionalLight_HighlightMode: 1 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 @@ -90,6 +90,7 @@ Material: - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_DiffuseStrength: 0.877 - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightSize: 0 - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 @@ -97,9 +98,9 @@ Material: - _OutlineFar: 100 - _OutlineNear: 0.5 - _OutlineOffsetZ: 0.75 - - _OutlineWidth: 5 + - _OutlineWidth: 2.92 - _Outline_BaseColorBlend: 1 - - _Outline_LightColorBlend: 0 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0.727 - _Specular_Intensity: 0 m_Colors: @@ -110,7 +111,7 @@ Material: - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0.32156864, g: 0.32156864, b: 0.32156864, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat index e9d81b7a7..78e75afe5 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat @@ -12,7 +12,7 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: - - TOON_OUTLINE_NORMAL + - TOON_OUTLINE_POS m_InvalidKeywords: - _OUTLINE_NML m_LightmapFlags: 4 @@ -54,7 +54,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _OutlineWidthMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 6d7e50a99f93487aa7444c0f14286af7, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Outline_CustomNormalMap: @@ -66,10 +66,10 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_HighlightMode: 0 + - _DirectionalLight_HighlightMode: 1 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - - _OutlineMode: 0 + - _OutlineMode: 1 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 - _Outline_UseNormalMap: 0 @@ -90,6 +90,7 @@ Material: - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_DiffuseStrength: 0.877 - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightSize: 0 - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 @@ -97,9 +98,9 @@ Material: - _OutlineFar: 100 - _OutlineNear: 0.5 - _OutlineOffsetZ: 0.75 - - _OutlineWidth: 5 + - _OutlineWidth: 4.3 - _Outline_BaseColorBlend: 1 - - _Outline_LightColorBlend: 0 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0.722 - _Specular_Intensity: 0 m_Colors: @@ -109,8 +110,8 @@ Material: - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _HighlightColor: {r: 0, g: 0, b: 0, a: 1} + - _OutlineColor: {r: 0.40392157, g: 0.40392157, b: 0.40392157, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat index 5cd0b22ed..3cc4d9ef7 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat @@ -54,7 +54,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _OutlineWidthMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 6d7e50a99f93487aa7444c0f14286af7, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Outline_CustomNormalMap: @@ -66,7 +66,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_HighlightMode: 0 + - _DirectionalLight_HighlightMode: 1 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 @@ -90,6 +90,7 @@ Material: - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_DiffuseStrength: 0.877 - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightSize: 0.2 - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 @@ -97,9 +98,9 @@ Material: - _OutlineFar: 100 - _OutlineNear: 0.5 - _OutlineOffsetZ: 0.75 - - _OutlineWidth: 5 + - _OutlineWidth: 1 - _Outline_BaseColorBlend: 1 - - _Outline_LightColorBlend: 0 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0.722 - _Specular_Intensity: 0 m_Colors: @@ -109,8 +110,8 @@ Material: - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _HighlightColor: {r: 0.47058824, g: 0.47058824, b: 0.47058824, a: 1} + - _OutlineColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat index b620c5854..427f3bf2d 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat @@ -55,7 +55,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _OutlineWidthMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 6d7e50a99f93487aa7444c0f14286af7, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Outline_CustomNormalMap: @@ -63,17 +63,17 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Outline_NormalMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 72cb1f5c5a9106843a355751851f8b09, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_HighlightMode: 0 + - _DirectionalLight_HighlightMode: 1 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 - - _Outline_UseNormalMap: 0 + - _Outline_UseNormalMap: 1 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 1 - _Use_BaseAs1st: 0 @@ -91,6 +91,7 @@ Material: - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_DiffuseStrength: 0.877 - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightSize: 0 - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 @@ -98,9 +99,9 @@ Material: - _OutlineFar: 100 - _OutlineNear: 0.5 - _OutlineOffsetZ: 0.75 - - _OutlineWidth: 5 + - _OutlineWidth: 2.9 - _Outline_BaseColorBlend: 1 - - _Outline_LightColorBlend: 0 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: @@ -111,7 +112,7 @@ Material: - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0.19215687, g: 0.19215687, b: 0.19215687, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} From 1a6eab7b1639dc20d1a6c5d0889b194420469490 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 21:38:15 +0900 Subject: [PATCH 134/290] adjust the shading settings --- .../ToonShader_Eye_Clipping_StencilMask_3Das2D.mat | 2 +- .../ToonShader_Eyebrow_StencilMask_3Das2D.mat | 4 ++-- .../Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat | 4 ++-- .../Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat | 4 ++-- .../UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat | 4 ++-- .../UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat | 6 +++--- .../UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat | 4 ++-- .../Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat index 8c13d7974..2a9941ca0 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat @@ -108,7 +108,7 @@ Material: - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_Direction: {r: 0.1626372, g: -0.5113381, b: 0.84384984, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 0, g: 0, b: 0, a: 1} - _OutlineColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat index 7484bdadf..65d9fc69e 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat @@ -75,7 +75,7 @@ Material: - _Outline_UseCustomNormalMap: 0 - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - - _Use_1stAs2nd: 0 + - _Use_1stAs2nd: 1 - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.0001 @@ -109,7 +109,7 @@ Material: - _2nd_ShadeColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_Direction: {r: 0.1626372, g: -0.5113381, b: 0.84384984, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 0.5529412, g: 0.15294118, b: 0.105882354, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat index f586d0062..56877cf8b 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat @@ -74,7 +74,7 @@ Material: - _Outline_UseCustomNormalMap: 0 - _Outline_UseNormalMap: 1 - _Specular_UseDirectionalLight: 0 - - _Use_1stAs2nd: 0 + - _Use_1stAs2nd: 1 - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.0001 @@ -108,7 +108,7 @@ Material: - _2nd_ShadeColor: {r: 0.7490196, g: 0.69411767, b: 0.88235295, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_Direction: {r: 0.1626372, g: -0.5113381, b: 0.84384984, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 0.5529412, g: 0.15294118, b: 0.105882354, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat index 0203dfa13..d19b7b87f 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat @@ -74,7 +74,7 @@ Material: - _Outline_UseCustomNormalMap: 0 - _Outline_UseNormalMap: 1 - _Specular_UseDirectionalLight: 0 - - _Use_1stAs2nd: 0 + - _Use_1stAs2nd: 1 - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.236 @@ -108,7 +108,7 @@ Material: - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_Direction: {r: 0.1626372, g: -0.5113381, b: 0.84384984, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat index ea1fbd4db..40a6d0121 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat @@ -74,7 +74,7 @@ Material: - _Outline_UseCustomNormalMap: 0 - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - - _Use_1stAs2nd: 0 + - _Use_1stAs2nd: 1 - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.236 @@ -108,7 +108,7 @@ Material: - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_Direction: {r: 0.1626372, g: -0.5113381, b: 0.84384984, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 0.32156864, g: 0.32156864, b: 0.32156864, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat index 78e75afe5..dade4ab93 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat @@ -74,8 +74,8 @@ Material: - _Outline_UseCustomNormalMap: 0 - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - - _Use_1stAs2nd: 0 - - _Use_BaseAs1st: 0 + - _Use_1stAs2nd: 1 + - _Use_BaseAs1st: 1 m_Floats: - _1st2nd_Shades_Feather: 0.064 - _1stTo2nd_ShadeFeather: 0.064 @@ -108,7 +108,7 @@ Material: - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_Direction: {r: 0.1626372, g: -0.5113381, b: 0.84384984, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 0, g: 0, b: 0, a: 1} - _OutlineColor: {r: 0.40392157, g: 0.40392157, b: 0.40392157, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat index 3cc4d9ef7..a3fdf0be1 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat @@ -74,7 +74,7 @@ Material: - _Outline_UseCustomNormalMap: 0 - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - - _Use_1stAs2nd: 0 + - _Use_1stAs2nd: 1 - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.064 @@ -108,7 +108,7 @@ Material: - _2nd_ShadeColor: {r: 0.6691177, g: 0.47672933, b: 0.27059904, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_Direction: {r: 0.1626372, g: -0.5113381, b: 0.84384984, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 0.47058824, g: 0.47058824, b: 0.47058824, a: 1} - _OutlineColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat index 427f3bf2d..2472221ce 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat @@ -75,7 +75,7 @@ Material: - _Outline_UseCustomNormalMap: 0 - _Outline_UseNormalMap: 1 - _Specular_UseDirectionalLight: 0 - - _Use_1stAs2nd: 1 + - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.08 @@ -109,7 +109,7 @@ Material: - _2nd_ShadeColor: {r: 0.7490196, g: 0.69411767, b: 0.88235295, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_Direction: {r: 0.1626372, g: -0.5113381, b: 0.84384984, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 0.19215687, g: 0.19215687, b: 0.19215687, a: 1} From cf0c0347d560f48a0e8a96b0abc6dc8214d79ef3 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 22:49:46 +0900 Subject: [PATCH 135/290] update label --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index ac96eacab..459fb5af0 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -399,11 +399,11 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty }, new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH), - label = new GUIContent("Strength", "Multiplier for the highlight contribution."), + label = new GUIContent("Highlight Strength", "Multiplier for the highlight contribution."), }, new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_SIZE), - label = new GUIContent("Power", "Highlight power factor."), + label = new GUIContent("Highlight Size", "Highlight size."), }, From 8511f86ead071516d464abf53049b022f14219f4 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 23:36:26 +0900 Subject: [PATCH 136/290] add prefabs --- Toonshader_ProjectURP/Assets/Prefabs.meta | 8 + .../Assets/Prefabs/SD_unitychan_2D.prefab | 6022 +++++++++++++++++ .../Prefabs/SD_unitychan_2D.prefab.meta | 7 + 3 files changed, 6037 insertions(+) create mode 100644 Toonshader_ProjectURP/Assets/Prefabs.meta create mode 100644 Toonshader_ProjectURP/Assets/Prefabs/SD_unitychan_2D.prefab create mode 100644 Toonshader_ProjectURP/Assets/Prefabs/SD_unitychan_2D.prefab.meta diff --git a/Toonshader_ProjectURP/Assets/Prefabs.meta b/Toonshader_ProjectURP/Assets/Prefabs.meta new file mode 100644 index 000000000..3eecca26e --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: feb4e03eedd0cb94eb4b1d07c65d3383 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Prefabs/SD_unitychan_2D.prefab b/Toonshader_ProjectURP/Assets/Prefabs/SD_unitychan_2D.prefab new file mode 100644 index 000000000..cdc920643 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Prefabs/SD_unitychan_2D.prefab @@ -0,0 +1,6022 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4701421483510144 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5731700714063062722} + - component: {fileID: 8727559746035349811} + m_Layer: 6 + m_Name: J_R_HeadRibbon_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5731700714063062722 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4701421483510144} + serializedVersion: 2 + m_LocalRotation: {x: -0.25047436, y: 0.28337345, z: 0.04999436, w: 0.92437154} + m_LocalPosition: {x: 0.0795154, y: -0.06875421, z: 0.31363952} + m_LocalScale: {x: 0.9999998, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8288908343178119051} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8727559746035349811 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4701421483510144} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 8288908343178119051} + boneAxis: {x: 0, y: 0, z: 1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + debug: 1 + threshold: 0.01 +--- !u!1 &24114967919257654 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7032405307784783804} + m_Layer: 6 + m_Name: Character1_LeftHandPinky2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7032405307784783804 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 24114967919257654} + serializedVersion: 2 + m_LocalRotation: {x: -0.0041052187, y: -0.02118038, z: -0.00477994, w: 0.99975586} + m_LocalPosition: {x: -0.009598923, y: 0.000000007152557, z: 0.000000076293944} + m_LocalScale: {x: 1.0000001, y: 0.9999998, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8418220330097518440} + m_Father: {fileID: 8544153664223713142} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &116592254993198272 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1945343063166025465} + m_Layer: 6 + m_Name: Character1_RightHandMiddle2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1945343063166025465 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 116592254993198272} + serializedVersion: 2 + m_LocalRotation: {x: -0.0038748826, y: -0.017280553, z: 0.010274474, w: 0.9997904} + m_LocalPosition: {x: 0.01678072, y: -0.000000042915342, z: 0.000000076293944} + m_LocalScale: {x: 0.9999997, y: 0.9999998, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2355703600664584488} + m_Father: {fileID: 2267692973050519269} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &188036615518678405 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2268707898031551092} + - component: {fileID: 5469484761548186197} + m_Layer: 6 + m_Name: Character1_LeftHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2268707898031551092 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 188036615518678405} + serializedVersion: 2 + m_LocalRotation: {x: -0.025144951, y: 0.0009263517, z: -0.00004903172, w: 0.9996834} + m_LocalPosition: {x: -0.112707324, y: -0.0000000047683715, z: -0.000000038146972} + m_LocalScale: {x: 1.0000001, y: 0.99999976, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 347900642799376463} + - {fileID: 2142336817693022222} + - {fileID: 8544153664223713142} + - {fileID: 4311764050378445562} + - {fileID: 1740985048597586241} + m_Father: {fileID: 7396104810784837768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5469484761548186197 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 188036615518678405} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.07 +--- !u!1 &219660183361621404 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2824019142497116302} + m_Layer: 6 + m_Name: J_L_Elbow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2824019142497116302 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 219660183361621404} + serializedVersion: 2 + m_LocalRotation: {x: -0.0065112184, y: -0.0007156489, z: -0.017952146, w: 0.99981743} + m_LocalPosition: {x: 0.00022022247, y: 0.0046890355, z: -0.00008010864} + m_LocalScale: {x: 1.0000002, y: 0.99999976, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7396104810784837768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &225404716319441635 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7490102396379286848} + m_Layer: 6 + m_Name: Character1_LeftUpLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7490102396379286848 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 225404716319441635} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.09838927, y: 0.0002046585, z: -0.06464721} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 9130718734329090452} + - {fileID: 1241849649781415384} + m_Father: {fileID: 29597928197065389} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &283883574830613507 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 347900642799376463} + m_Layer: 6 + m_Name: Character1_LeftHandIndex1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &347900642799376463 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283883574830613507} + serializedVersion: 2 + m_LocalRotation: {x: 0.008546737, y: -0.09441612, z: 0.03057627, w: 0.99502647} + m_LocalPosition: {x: -0.046978243, y: -0.022182073, z: 0.0025979613} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4487619767070584897} + m_Father: {fileID: 2268707898031551092} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &436425014046712664 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2004898901779290869} + m_Layer: 6 + m_Name: Character1_LeftFoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2004898901779290869 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 436425014046712664} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.03391635, z: -0.16433224} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2105237481522923700} + m_Father: {fileID: 9130718734329090452} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &436858141743470579 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4311764050378445562} + m_Layer: 6 + m_Name: Character1_LeftHandRing1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4311764050378445562 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 436858141743470579} + serializedVersion: 2 + m_LocalRotation: {x: -0.002642449, y: -0.03478314, z: -0.004747433, w: 0.9993802} + m_LocalPosition: {x: -0.049339905, y: 0.008889142, z: 0.0041249082} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2687392561584112538} + m_Father: {fileID: 2268707898031551092} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &454840462129759945 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2142336817693022222} + m_Layer: 6 + m_Name: Character1_LeftHandMiddle1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2142336817693022222 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 454840462129759945} + serializedVersion: 2 + m_LocalRotation: {x: 0.0055155223, y: -0.087773144, z: 0.0217056, w: 0.9958887} + m_LocalPosition: {x: -0.05140888, y: -0.0063463617, z: 0.006106071} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999976} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6725300670364461023} + m_Father: {fileID: 2268707898031551092} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &530681079345152123 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6407150209309253158} + m_Layer: 6 + m_Name: Character1_Reference + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6407150209309253158 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 530681079345152123} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.000000002661807} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 29597928197065389} + m_Father: {fileID: 6731142422001346709} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &604876840981190205 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4808659917229634046} + m_Layer: 6 + m_Name: J_R_HairSide_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4808659917229634046 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 604876840981190205} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000069662923, y: 0.00000008195637, z: 0.000000029802383, + w: 1} + m_LocalPosition: {x: 0.17118447, y: 0.000000009536743, z: -0.00000016212464} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 0.99999976} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8855767437384622858} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &730778440229028643 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7039575964410758742} + - component: {fileID: 8314716407754399569} + m_Layer: 6 + m_Name: J_R_HairSide_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7039575964410758742 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 730778440229028643} + serializedVersion: 2 + m_LocalRotation: {x: 0.03276742, y: 0.4340327, z: 0.09296258, w: 0.8954887} + m_LocalPosition: {x: 0.072985135, y: -0.09341254, z: 0.27946243} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8855767437384622858} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8314716407754399569 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 730778440229028643} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 8855767437384622858} + boneAxis: {x: 1, y: 0, z: 0} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: [] + debug: 1 + threshold: 0.01 +--- !u!1 &800097489790157745 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 612309645553071391} + - component: {fileID: 4348996100345983640} + m_Layer: 6 + m_Name: J_L_HairSide_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &612309645553071391 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 800097489790157745} + serializedVersion: 2 + m_LocalRotation: {x: 0.029233634, y: -0.33951724, z: -0.06338306, w: 0.93800646} + m_LocalPosition: {x: -0.124109186, y: 0.000000047683713, z: -0.00000030517577} + m_LocalScale: {x: 0.9999999, y: 1.0000002, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5872812096164718950} + m_Father: {fileID: 699930855321221375} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &4348996100345983640 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 800097489790157745} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 5872812096164718950} + boneAxis: {x: -1, y: 0, z: 0} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: [] + debug: 1 + threshold: 0.01 +--- !u!1 &849165504154124924 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8857949806185292424} + - component: {fileID: 2185278896394700416} + m_Layer: 6 + m_Name: J_R_HairTail_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8857949806185292424 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849165504154124924} + serializedVersion: 2 + m_LocalRotation: {x: 0.27495188, y: -0.14915672, z: -0.13304274, w: 0.9404538} + m_LocalPosition: {x: 0.08453457, y: 0.12091121, z: 0.074723355} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1718512596781371879} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2185278896394700416 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849165504154124924} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 1718512596781371879} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.08 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.007, z: 0} + colliders: + - {fileID: 3742319637435193207} + - {fileID: 6804823801260687976} + - {fileID: 5945787198051039176} + - {fileID: 2177169964850823879} + debug: 1 + threshold: 0.01 +--- !u!1 &906258176490767633 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3580862425918477564} + m_Layer: 6 + m_Name: J_R_Sode_C00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3580862425918477564 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906258176490767633} + serializedVersion: 2 + m_LocalRotation: {x: -0.008828224, y: -0.005897476, z: 0.10055573, w: 0.9948748} + m_LocalPosition: {x: 0.01254324, y: 0.036262, z: -0.0059057614} + m_LocalScale: {x: 0.99999994, y: 1.0000002, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6963582107709384724} + m_Father: {fileID: 446200131182488843} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &954687525056108494 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5065832433306771527} + m_Layer: 6 + m_Name: bone_eye_R + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5065832433306771527 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 954687525056108494} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.026893293, y: 0.046498314, z: 0.10205597} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &994237003113453090 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2961329562039978871} + m_Layer: 6 + m_Name: Character1_RightShoulder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2961329562039978871 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 994237003113453090} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000017797277, y: 0.14720337, z: 0.012063239, w: 0.9890327} + m_LocalPosition: {x: 0.02673147, y: 0.046953294, z: 0.1026548} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6954321385767605024} + m_Father: {fileID: 9120174409034302403} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1062312390838644691 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3398889758669254210} + m_Layer: 6 + m_Name: Character1_RightFoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3398889758669254210 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1062312390838644691} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000000509566, y: 0.000029975812, z: -0.00016999245, w: 1} + m_LocalPosition: {x: -0, y: 0.033916343, z: -0.16433214} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8938201858354982214} + m_Father: {fileID: 5833084827420442486} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1165333237025849021 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4487619767070584897} + m_Layer: 6 + m_Name: Character1_LeftHandIndex2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4487619767070584897 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165333237025849021} + serializedVersion: 2 + m_LocalRotation: {x: 0.0058518304, y: 0.04137672, z: 0.0068952497, w: 0.9991027} + m_LocalPosition: {x: -0.014227028, y: -0.00000000834465, z: 0.000000076293944} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999996} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 644978463370826841} + m_Father: {fileID: 347900642799376463} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1165559236122699706 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8591750898746922411} + - component: {fileID: 2954485512992697158} + m_Layer: 6 + m_Name: J_acce_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8591750898746922411 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165559236122699706} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -2.5015806e-10, y: -0.052113816, z: 0.06192604} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7271580559260712381} + m_Father: {fileID: 9120174409034302403} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2954485512992697158 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165559236122699706} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 7271580559260712381} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.1 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: [] + debug: 1 + threshold: 0.01 +--- !u!1 &1234363997120937107 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6878059461571870231} + - component: {fileID: 2055818716676457244} + m_Layer: 6 + m_Name: Character1_LeftArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6878059461571870231 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1234363997120937107} + serializedVersion: 2 + m_LocalRotation: {x: 0.026822958, y: -0.19842313, z: 0.0032788063, w: 0.9797439} + m_LocalPosition: {x: -0.046947505, y: -0.0003006166, z: 0.0036682128} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7396104810784837768} + - {fileID: 7895641511515384564} + m_Father: {fileID: 6093097180885946835} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2055818716676457244 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1234363997120937107} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.05 +--- !u!1 &1301542983648007760 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1654624824523219389} + m_Layer: 6 + m_Name: Character1_RightHandIndex3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1654624824523219389 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1301542983648007760} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000007450581, y: 0.000000104308135, z: -0.000000016763806, + w: 1} + m_LocalPosition: {x: 0.010736103, y: -0.000000085830685, z: -0.00000015258789} + m_LocalScale: {x: 0.99999994, y: 0.99999976, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1749022844549540435} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1337150063009337818 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8418220330097518440} + m_Layer: 6 + m_Name: Character1_LeftHandPinky3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8418220330097518440 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1337150063009337818} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000002793968, y: -0.000000029802322, z: -0.000000007450581, + w: 1} + m_LocalPosition: {x: -0.0075915335, y: -0.000000009536743, z: 0} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7032405307784783804} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1341362871341351714 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1054518996607798814} + m_Layer: 6 + m_Name: J_R_HeadRibbon_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1054518996607798814 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1341362871341351714} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000007748599, y: -0.00000043213427, z: -0.00000084936573, + w: 1} + m_LocalPosition: {x: -0.0000009536743, y: -0.0000010681152, z: 0.16675788} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 312985126539233903} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1439928643943303844 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5074259165098998069} + m_Layer: 6 + m_Name: J_R_ForeArm_00_tw + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5074259165098998069 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1439928643943303844} + serializedVersion: 2 + m_LocalRotation: {x: -0.012467529, y: -0.00039108118, z: 0.000021479957, w: 0.9999222} + m_LocalPosition: {x: 0.1089093, y: 0.00009293079, z: -0.00038059233} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 446200131182488843} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1597064968528032783 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1718512596781371879} + - component: {fileID: 5769535583271219466} + m_Layer: 6 + m_Name: J_R_HairTail_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1718512596781371879 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1597064968528032783} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000029802322, y: -0.0000000074505815, z: -0.00000010058282, + w: 1} + m_LocalPosition: {x: -0.000000095367426, y: 0.0000009918213, z: -0.19820796} + m_LocalScale: {x: 1.0000002, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7360389635270391183} + m_Father: {fileID: 8857949806185292424} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5769535583271219466 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1597064968528032783} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 7360389635270391183} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + - {fileID: 6804823801260687976} + - {fileID: 5945787198051039176} + - {fileID: 2177169964850823879} + debug: 1 + threshold: 0.01 +--- !u!1 &1625475289135790493 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2755942572119240026} + m_Layer: 6 + m_Name: J_R_Sode_E00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2755942572119240026 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1625475289135790493} + serializedVersion: 2 + m_LocalRotation: {x: 0.002230505, y: 0.0000016093232, z: -0.0000000026582874, w: 0.99999756} + m_LocalPosition: {x: 0.0237582, y: 0.000000004172325, z: 0.0000009918213} + m_LocalScale: {x: 1.0000002, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7021926352628559999} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1697002752442651709 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2148168642296180} + m_Layer: 6 + m_Name: J_R_Sode_B01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2148168642296180 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1697002752442651709} + serializedVersion: 2 + m_LocalRotation: {x: 0.000022957096, y: -0.0000007750364, z: -0.000007668492, w: 1} + m_LocalPosition: {x: 0.111486964, y: -0.0000026249886, z: 0.00000125885} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2598788246662646975} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1721989194271613396 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2590597086074521511} + m_Layer: 6 + m_Name: Character1_RightHandThumb3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2590597086074521511 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1721989194271613396} + serializedVersion: 2 + m_LocalRotation: {x: -0.01386646, y: 0.019060291, z: 0.00015806762, w: 0.9997222} + m_LocalPosition: {x: 0.010316124, y: 0.0000005340576, z: -0.00000010967254} + m_LocalScale: {x: 1.0000002, y: 1.0000004, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8931402703070841046} + m_Father: {fileID: 4214762892820373619} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1783773124011686840 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 312985126539233903} + - component: {fileID: 7380194914189166690} + m_Layer: 6 + m_Name: J_R_HeadRibbon_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &312985126539233903 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1783773124011686840} + serializedVersion: 2 + m_LocalRotation: {x: 0.68807024, y: 0.05360729, z: 0.0443758, w: 0.7222994} + m_LocalPosition: {x: 0.0000008010864, y: 0.000001335144, z: 0.13668053} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1054518996607798814} + m_Father: {fileID: 8288908343178119051} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7380194914189166690 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1783773124011686840} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 1054518996607798814} + boneAxis: {x: 0, y: 0, z: 1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + debug: 1 + threshold: 0.01 +--- !u!1 &1837524912982795708 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2138355904350086949} + m_Layer: 6 + m_Name: J_R_HairSide2_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2138355904350086949 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1837524912982795708} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: -0.07184112} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6982430254059911505} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1996512241493110588 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8645214920068418899} + m_Layer: 6 + m_Name: LookPos + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8645214920068418899 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1996512241493110588} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.8, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6731142422001346709} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2002885710864653430 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4662294156586103562} + m_Layer: 6 + m_Name: Character1_LeftHandRing3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4662294156586103562 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2002885710864653430} + serializedVersion: 2 + m_LocalRotation: {x: 6.765418e-17, y: -0.000000044703473, z: 0.0000000015133989, + w: 1} + m_LocalPosition: {x: -0.010001297, y: 0.0000000017881393, z: 0} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2687392561584112538} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2163072715003180786 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2350293877619336017} + - component: {fileID: 8449650592627471630} + m_Layer: 6 + m_Name: J_R_Skirt_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2350293877619336017 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2163072715003180786} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000074505815, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.000000095367426, z: -0.060169753} + m_LocalScale: {x: 1, y: 0.9999999, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8844543047423818134} + m_Father: {fileID: 7206730510584683501} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8449650592627471630 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2163072715003180786} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 8844543047423818134} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 4237397560926780522} + - {fileID: 126894663884498659} + - {fileID: 4646042344897761171} + debug: 1 + threshold: 0.01 +--- !u!1 &2174636109454660141 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6279320856188589947} + m_Layer: 6 + m_Name: J_L_HairFront_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6279320856188589947 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2174636109454660141} + serializedVersion: 2 + m_LocalRotation: {x: 0.14653109, y: -0.012764544, z: -0.0018909584, w: 0.9891219} + m_LocalPosition: {x: 0.0000000023841857, y: 0, z: -0.18115325} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 220351708734432648} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2228752027473629224 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1038416052695676677} + m_Layer: 6 + m_Name: Character1_LeftHandThumb4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1038416052695676677 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2228752027473629224} + serializedVersion: 2 + m_LocalRotation: {x: 0.00000014156107, y: 0.00000002607702, z: -0.000000089406974, + w: 1} + m_LocalPosition: {x: -0.012429466, y: -0.000000038146972, z: 0.000000038146972} + m_LocalScale: {x: 1, y: 0.99999976, z: 0.9999997} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6690496443531499613} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2300892023884190509 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4797773783076098714} + m_Layer: 6 + m_Name: J_L_Sode_C01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4797773783076098714 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2300892023884190509} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000037252907, y: -0.000000044703487, z: 0.0000000074505815, + w: 1} + m_LocalPosition: {x: -0.107970506, y: -0.000000009536743, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3342038955245361892} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2378791293606974704 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4214762892820373619} + m_Layer: 6 + m_Name: Character1_RightHandThumb2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4214762892820373619 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2378791293606974704} + serializedVersion: 2 + m_LocalRotation: {x: -0.007267016, y: 0.07349538, z: -0.111579284, w: 0.99100745} + m_LocalPosition: {x: 0.017501583, y: 0.000000114440915, z: -0.00000050544736} + m_LocalScale: {x: 0.99999994, y: 0.99999964, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2590597086074521511} + m_Father: {fileID: 439045745349089632} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2408117209060125217 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7966788070020410002} + m_Layer: 6 + m_Name: Character1_RightHandPinky1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7966788070020410002 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2408117209060125217} + serializedVersion: 2 + m_LocalRotation: {x: 0.009402843, y: 0.14908786, z: -0.03696336, w: 0.98808813} + m_LocalPosition: {x: 0.046354044, y: 0.022601992, z: 0.00095024105} + m_LocalScale: {x: 0.9999999, y: 1, z: 0.9999998} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6397107419441545405} + m_Father: {fileID: 5755076169123862156} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2441900717573544699 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6698999444532217468} + m_Layer: 6 + m_Name: J_L_SkirtBack_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6698999444532217468 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2441900717573544699} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: -0.06979225} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1541561317559911158} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2542678360567054871 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4006969703662656344} + m_Layer: 6 + m_Name: J_R_Sode_D00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4006969703662656344 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2542678360567054871} + serializedVersion: 2 + m_LocalRotation: {x: -0.010909932, y: 0.104387626, z: 0.022491591, w: 0.99422246} + m_LocalPosition: {x: 0.015457363, y: 0.00009038925, z: -0.03743225} + m_LocalScale: {x: 0.99999976, y: 1.0000001, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2051485737349694948} + m_Father: {fileID: 446200131182488843} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2567537932918011793 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1241849649781415384} + - component: {fileID: 7598970713000379034} + m_Layer: 6 + m_Name: Locator_LeftUpLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1241849649781415384 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2567537932918011793} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.07247563} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7490102396379286848} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7598970713000379034 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2567537932918011793} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.06 +--- !u!1 &2593667274209736985 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6430434720047991833} + m_Layer: 6 + m_Name: J_R_HairTail_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6430434720047991833 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2593667274209736985} + serializedVersion: 2 + m_LocalRotation: {x: -1.6653337e-16, y: -0.000000014901158, z: -0.000000011175868, + w: 1} + m_LocalPosition: {x: -0.000000038146972, y: -0.000000038146972, z: -0.17191932} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7360389635270391183} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2609993454752576944 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2610291734591142933} + - component: {fileID: 5823264736046475635} + m_Layer: 6 + m_Name: _Fhair + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2610291734591142933 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2609993454752576944} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4228537525546935594} + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!137 &5823264736046475635 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2609993454752576944} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 2 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66ecb67261a5bed49b4e9f4734178c7e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300006, guid: 7d482c82ffb74a7fbfc5c7b288095351, type: 3} + m_Bones: + - {fileID: 612309645553071391} + - {fileID: 699930855321221375} + - {fileID: 6526853387327317499} + - {fileID: 7039575964410758742} + - {fileID: 8855767437384622858} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 6526853387327317499} + m_AABB: + m_Center: {x: 0, y: -0.03, z: 0.16} + m_Extent: {x: 0.295, y: 0.12, z: 0.176} + m_DirtyAABB: 0 +--- !u!1 &2636037261930780200 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4005512137851375714} + - component: {fileID: 3752581507719097027} + m_Layer: 6 + m_Name: J_L_HeadRibbon_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4005512137851375714 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2636037261930780200} + serializedVersion: 2 + m_LocalRotation: {x: 0.68807155, y: -0.053607468, z: -0.044375025, w: 0.7222982} + m_LocalPosition: {x: -0, y: 0.00000022888183, z: 0.13667938} + m_LocalScale: {x: 1, y: 0.99999976, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8400846392894500075} + m_Father: {fileID: 8288184820673587655} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3752581507719097027 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2636037261930780200} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 8400846392894500075} + boneAxis: {x: 0, y: 0, z: 1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + debug: 1 + threshold: 0.01 +--- !u!1 &2651599606854574190 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2687392561584112538} + m_Layer: 6 + m_Name: Character1_LeftHandRing2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2687392561584112538 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2651599606854574190} + serializedVersion: 2 + m_LocalRotation: {x: -0.005074419, y: -0.01721808, z: -0.011732383, w: 0.99977005} + m_LocalPosition: {x: -0.013061695, y: 0.000000007152557, z: -0.000000038146972} + m_LocalScale: {x: 0.99999964, y: 0.99999976, z: 0.9999998} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4662294156586103562} + m_Father: {fileID: 4311764050378445562} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2660563876341861809 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2225245250193162762} + - component: {fileID: 2778570379256716332} + m_Layer: 6 + m_Name: J_L_HairTail_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2225245250193162762 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2660563876341861809} + serializedVersion: 2 + m_LocalRotation: {x: -4.9960047e-16, y: -0.00000006705523, z: -0.0000000074505815, + w: 1} + m_LocalPosition: {x: -0, y: 0.000000114440915, z: -0.2224917} + m_LocalScale: {x: 0.9999999, y: 1.0000004, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7410364982531109626} + m_Father: {fileID: 650710974728237554} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2778570379256716332 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2660563876341861809} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 7410364982531109626} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + - {fileID: 2055818716676457244} + - {fileID: 1952171542537200122} + - {fileID: 2177169964850823879} + - {fileID: 5469484761548186197} + debug: 1 + threshold: 0.01 +--- !u!1 &2722470468437240058 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8288908343178119051} + - component: {fileID: 6811777108806405795} + m_Layer: 6 + m_Name: J_R_HeadRibbon_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8288908343178119051 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2722470468437240058} + serializedVersion: 2 + m_LocalRotation: {x: -0.82907134, y: 0.12707938, z: -0.096691504, w: 0.5358566} + m_LocalPosition: {x: -0.0000011062622, y: -0.0000010299682, z: 0.24783768} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 312985126539233903} + m_Father: {fileID: 5731700714063062722} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6811777108806405795 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2722470468437240058} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 312985126539233903} + boneAxis: {x: 0, y: 0, z: 1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + debug: 1 + threshold: 0.01 +--- !u!1 &2833677757875666648 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1740985048597586241} + m_Layer: 6 + m_Name: Character1_LeftHandThumb1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1740985048597586241 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2833677757875666648} + serializedVersion: 2 + m_LocalRotation: {x: 0.7231719, y: 0.16827042, z: 0.18860354, w: 0.6427568} + m_LocalPosition: {x: -0.016437054, y: -0.01568381, z: -0.017473105} + m_LocalScale: {x: 1, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 627136687486605248} + m_Father: {fileID: 2268707898031551092} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2872353104234345470 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 644978463370826841} + m_Layer: 6 + m_Name: Character1_LeftHandIndex3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &644978463370826841 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2872353104234345470} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000018626456, y: -0.00000014901154, z: -0.0000000037252887, + w: 1} + m_LocalPosition: {x: -0.0107357595, y: 0.000000014305114, z: -0.000000076293944} + m_LocalScale: {x: 1.0000005, y: 1, z: 1.0000004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4487619767070584897} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2998961262265051476 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5833084827420442486} + - component: {fileID: 126894663884498659} + m_Layer: 6 + m_Name: Character1_RightLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5833084827420442486 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2998961262265051476} + serializedVersion: 2 + m_LocalRotation: {x: 8.881784e-16, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.02183431, z: -0.1518638} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3398889758669254210} + m_Father: {fileID: 2423412952060108609} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &126894663884498659 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2998961262265051476} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.05 +--- !u!1 &3032179794786167899 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 650710974728237554} + - component: {fileID: 2105859277721558611} + m_Layer: 6 + m_Name: J_L_HairTail_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &650710974728237554 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3032179794786167899} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000029802326, y: -0.000000022351744, z: 0.000000011175873, + w: 1} + m_LocalPosition: {x: 0.000000019073486, y: -0.000000076293944, z: -0.19820912} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2225245250193162762} + m_Father: {fileID: 2219722635308239775} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2105859277721558611 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3032179794786167899} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 2225245250193162762} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + - {fileID: 2055818716676457244} + - {fileID: 1952171542537200122} + - {fileID: 2177169964850823879} + debug: 1 + threshold: 0.01 +--- !u!1 &3100082352255109641 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1624019310821944626} + - component: {fileID: 8595815926925720104} + m_Layer: 6 + m_Name: _eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1624019310821944626 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3100082352255109641} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4228537525546935594} + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!137 &8595815926925720104 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3100082352255109641} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 2 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 3f9d94f5fe986d041a6ec19968d86f1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300008, guid: 7d482c82ffb74a7fbfc5c7b288095351, type: 3} + m_Bones: + - {fileID: 6353880293219359101} + - {fileID: 5065832433306771527} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 5065832433306771527} + m_AABB: + m_Center: {x: -0.027, y: -0.108, z: -0.021} + m_Extent: {x: 0.094, y: 0.008, z: 0.034} + m_DirtyAABB: 0 +--- !u!1 &3223785493978147267 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7328954229572208060} + m_Layer: 6 + m_Name: Character1_LeftHandMiddle3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7328954229572208060 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3223785493978147267} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000007450579, y: -0.000000014901163, z: -0.0000000037252907, + w: 1} + m_LocalPosition: {x: -0.012807655, y: -0.000000005960464, z: -0.000000076293944} + m_LocalScale: {x: 0.9999999, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6725300670364461023} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3486880178515505638 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7271580559260712381} + m_Layer: 6 + m_Name: J_acce_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7271580559260712381 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3486880178515505638} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: -0.017489681, z: -0.022835387} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8591750898746922411} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3732929220959569902 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7360389635270391183} + - component: {fileID: 1293945147033921126} + m_Layer: 6 + m_Name: J_R_HairTail_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7360389635270391183 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3732929220959569902} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000089406925, y: 0.000000014901161, z: -0.000000040978207, + w: 1} + m_LocalPosition: {x: -0.0000004196167, y: -0.0000005340576, z: -0.2224927} + m_LocalScale: {x: 0.9999997, y: 1.0000005, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6430434720047991833} + m_Father: {fileID: 1718512596781371879} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1293945147033921126 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3732929220959569902} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 6430434720047991833} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + - {fileID: 6804823801260687976} + - {fileID: 5945787198051039176} + - {fileID: 2177169964850823879} + - {fileID: 2236474210489685004} + debug: 1 + threshold: 0.01 +--- !u!1 &3763628574515435971 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6731142422001346709} + - component: {fileID: 5757260810511786122} + - component: {fileID: 2503438222180621390} + - component: {fileID: 9116022294543279056} + - component: {fileID: 3154194682003541504} + - component: {fileID: 8050305352418330004} + - component: {fileID: 6055481018498512936} + m_Layer: 6 + m_Name: SD_unitychan_2D + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6731142422001346709 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3763628574515435971} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0.9995854, z: 0, w: -0.028793927} + m_LocalPosition: {x: -12.32, y: 0, z: 0} + m_LocalScale: {x: 3.96, y: 3.96, z: 3.96} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 6407150209309253158} + - {fileID: 8645214920068418899} + - {fileID: 4228537525546935594} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: -183.3, z: 0} +--- !u!95 &5757260810511786122 +Animator: + serializedVersion: 7 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3763628574515435971} + m_Enabled: 1 + m_Avatar: {fileID: 9000000, guid: 7d482c82ffb74a7fbfc5c7b288095351, type: 3} + m_Controller: {fileID: 9100000, guid: b1956214b7a44fc9bec22567af111a35, type: 2} + m_CullingMode: 1 + m_UpdateMode: 0 + m_ApplyRootMotion: 1 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_AnimatePhysics: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 +--- !u!114 &2503438222180621390 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3763628574515435971} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f2ff98864dcb4134ba90930706ec5c19, type: 3} + m_Name: + m_EditorClassIdentifier: + _random: 0 + _threshold: 0.5 + _interval: 10 + isGUI: 0 +--- !u!114 &9116022294543279056 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3763628574515435971} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c67123d0e0f146e697bb437163c8dddc, type: 3} + m_Name: + m_EditorClassIdentifier: + animations: + - {fileID: 7400000, guid: c4544fb5b42c4552870042c04cb737f1, type: 2} + - {fileID: 7400000, guid: 8cdef82beb75460f82696a83f7bfba04, type: 2} + - {fileID: 7400000, guid: 823c17bb316e4c218c9beff783729a1f, type: 2} + - {fileID: 7400000, guid: eb341d461bfc49f89db3587f69bca0c6, type: 2} + - {fileID: 7400000, guid: ce1a347fa6e6465b843f36dc83582bae, type: 2} + - {fileID: 7400000, guid: dec3c005cf844201bbef95939e02c8de, type: 2} + - {fileID: 7400000, guid: 174f028e4ccf4719a7815e1c7894ceea, type: 2} + - {fileID: 7400000, guid: f44409afa9024ee2bb3101f621229b8b, type: 2} + - {fileID: 7400000, guid: 4ce8eb4a108d4c7b8b4561f26e7866e9, type: 2} + - {fileID: 7400000, guid: 2d8b9ed644c545e498f975bc939c5d08, type: 2} + - {fileID: 7400000, guid: 604de7575f9c46b5a948a29180b85fa1, type: 2} + - {fileID: 7400000, guid: 24773958be8b4089a71a8cd22e2c849d, type: 2} + - {fileID: 7400000, guid: d9f6a58fed7746738b0afb93ecc442ca, type: 2} + - {fileID: 7400000, guid: d7898170620647fcb36b2142c04bd648, type: 2} + - {fileID: 7400000, guid: ecd04fe714a640fbbdf2139c12d881b3, type: 2} + - {fileID: 7400000, guid: 925f903d002e4acbac5c4eafb345c93d, type: 2} + - {fileID: 7400000, guid: 73e5e53087f64843bb92acce55950646, type: 2} + - {fileID: 7400000, guid: 7fe487b57948406ba0e71c243762875b, type: 2} + - {fileID: 7400000, guid: e382dc476bce434480784cd40d20600a, type: 2} + delayWeight: 3 + isKeepFace: 1 + isGUI: 0 +--- !u!114 &3154194682003541504 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3763628574515435971} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f43949b7c4b743bdb782be6c4275073f, type: 3} + m_Name: + m_EditorClassIdentifier: + isActive: 1 + ref_face: {fileID: 2161748187344067778} + ratio_Close: 85 + ratio_HalfClose: 20 + index_EYE_blk: 0 + index_EYE_sml: 1 + index_EYE_dmg: 15 + ratio_Open: 0 + timeBlink: 0.4 + threshold: 0.3 + interval: 3 +--- !u!114 &8050305352418330004 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3763628574515435971} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1f2e6774bbb440e1b90ec5051477225a, type: 3} + m_Name: + m_EditorClassIdentifier: + dynamicRatio: 1 + stiffnessForce: 0.01 + stiffnessCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.010707155 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0.010707155 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + dragForce: 0.4 + dragCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.40000004 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0.40000004 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + springBones: + - {fileID: 5053127848451338921} + - {fileID: 7887378130367053097} + - {fileID: 869632525762003056} + - {fileID: 4348996100345983640} + - {fileID: 3660892605848956866} + - {fileID: 2105859277721558611} + - {fileID: 2778570379256716332} + - {fileID: 7372975349392021593} + - {fileID: 8463605413180248651} + - {fileID: 3752581507719097027} + - {fileID: 365682419521750707} + - {fileID: 2715013834793208439} + - {fileID: 1860357686482802260} + - {fileID: 2134467581654292776} + - {fileID: 2127697319085753800} + - {fileID: 8314716407754399569} + - {fileID: 3654952180710147857} + - {fileID: 2185278896394700416} + - {fileID: 5769535583271219466} + - {fileID: 1293945147033921126} + - {fileID: 8727559746035349811} + - {fileID: 6811777108806405795} + - {fileID: 7380194914189166690} + - {fileID: 7888507672601922300} + - {fileID: 8449650592627471630} + - {fileID: 2740617454352934065} + - {fileID: 2954485512992697158} +--- !u!114 &6055481018498512936 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3763628574515435971} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ff342babe4934cdeaf74b996a43cb5d4, type: 3} + m_Name: + m_EditorClassIdentifier: + isWindActive: 1 + threshold: 0.5 + interval: 5 + windPower: 1 + gravity: 0.98 + isGUI: 0 +--- !u!1 &3903041098038084877 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2105237481522923700} + m_Layer: 6 + m_Name: Character1_LeftToeBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2105237481522923700 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3903041098038084877} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.00009206772, y: -0.044022497, z: -0.041161656} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2004898901779290869} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3908205429895148045 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6353880293219359101} + m_Layer: 6 + m_Name: bone_eye_L + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6353880293219359101 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3908205429895148045} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.026893321, y: 0.04649828, z: 0.102056116} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4030810819268419301 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7071530083350639876} + m_Layer: 6 + m_Name: J_R_Sode_A00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7071530083350639876 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4030810819268419301} + serializedVersion: 2 + m_LocalRotation: {x: -0.007507754, y: -0.0075066104, z: -0.09549668, w: 0.99537313} + m_LocalPosition: {x: 0.016253967, y: -0.04258907, z: -0.004563751} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 65304671717520652} + m_Father: {fileID: 446200131182488843} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4089475108514837883 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5872812096164718950} + m_Layer: 6 + m_Name: J_L_HairSide_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5872812096164718950 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4089475108514837883} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000077299774, y: -0.00000008475035, z: -0.000000014901153, + w: 1} + m_LocalPosition: {x: -0.17118454, y: 0.000000009536743, z: 0.00000022888183} + m_LocalScale: {x: 1.0000001, y: 1, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 612309645553071391} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4132814973932139131 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4621580118481350796} + m_Layer: 6 + m_Name: Character1_Spine1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4621580118481350796 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4132814973932139131} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.000000009536743, z: 0.04283531} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 9120174409034302403} + m_Father: {fileID: 5997968756326345837} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4194163012382237545 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5997968756326345837} + m_Layer: 6 + m_Name: Character1_Spine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5997968756326345837 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4194163012382237545} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: -0.00017591476, z: 0.001539917} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4621580118481350796} + m_Father: {fileID: 29597928197065389} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4235508750247604389 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7206730510584683501} + - component: {fileID: 7888507672601922300} + m_Layer: 6 + m_Name: J_R_Skirt_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7206730510584683501 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4235508750247604389} + serializedVersion: 2 + m_LocalRotation: {x: -0.08715573, y: 0, z: -0, w: 0.9961947} + m_LocalPosition: {x: 0.08367225, y: -0.05437761, z: 0.015768737} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2350293877619336017} + m_Father: {fileID: 29597928197065389} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7888507672601922300 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4235508750247604389} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 2350293877619336017} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.01, z: 0} + colliders: + - {fileID: 4237397560926780522} + - {fileID: 126894663884498659} + - {fileID: 4646042344897761171} + debug: 1 + threshold: 0.01 +--- !u!1 &4275565025371768374 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8123648678838411109} + m_Layer: 6 + m_Name: J_L_knee + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8123648678838411109 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4275565025371768374} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.00028729916, z: -0.0016981125} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 9130718734329090452} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4296839564137766281 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 56685568677107031} + m_Layer: 6 + m_Name: Character1_Neck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &56685568677107031 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4296839564137766281} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.047267172, z: 0.1330844} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6526853387327317499} + m_Father: {fileID: 9120174409034302403} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4307154371054408781 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6645859756972294891} + m_Layer: 6 + m_Name: J_L_Sode_A01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6645859756972294891 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4307154371054408781} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000014901161, y: 0.000000014901158, z: -0.000000018626446, + w: 1} + m_LocalPosition: {x: -0.10319832, y: 0.000000028610229, z: 0.000000038146972} + m_LocalScale: {x: 1.0000002, y: 1, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4612639662609169669} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4471403981006925009 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4990400317689328422} + m_Layer: 6 + m_Name: Character1_RightHandRing3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4990400317689328422 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4471403981006925009} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000002421438, y: 0.000000029802315, z: -0.0000000022118978, + w: 1} + m_LocalPosition: {x: 0.0100004, y: -0.000000009834766, z: -0.00000034332274} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6385624135361057265} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4555604448874851774 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9113194316341878803} + m_Layer: 6 + m_Name: J_R_Elbow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9113194316341878803 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4555604448874851774} + serializedVersion: 2 + m_LocalRotation: {x: -0.006511231, y: 0.00071536587, z: 0.017952094, w: 0.99981743} + m_LocalPosition: {x: -0.00022066115, y: 0.0046890113, z: -0.000079879756} + m_LocalScale: {x: 1.0000002, y: 1.0000001, z: 1.0000005} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 446200131182488843} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4564253623441068590 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1122555548113153179} + - component: {fileID: 5286555014758074657} + m_Layer: 6 + m_Name: _head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1122555548113153179 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4564253623441068590} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4228537525546935594} + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!137 &5286555014758074657 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4564253623441068590} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 2 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 0f5c320d996610448ab3be5c087d2544, type: 2} + - {fileID: 2100000, guid: 96545c3995189d647accdbd148fa2c3d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300002, guid: 7d482c82ffb74a7fbfc5c7b288095351, type: 3} + m_Bones: + - {fileID: 6526853387327317499} + - {fileID: 8374793752138679864} + - {fileID: 2219722635308239775} + - {fileID: 650710974728237554} + - {fileID: 2225245250193162762} + - {fileID: 6350278636661609562} + - {fileID: 8288184820673587655} + - {fileID: 4005512137851375714} + - {fileID: 6982430254059911505} + - {fileID: 8857949806185292424} + - {fileID: 1718512596781371879} + - {fileID: 7360389635270391183} + - {fileID: 5731700714063062722} + - {fileID: 8288908343178119051} + - {fileID: 312985126539233903} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 6526853387327317499} + m_AABB: + m_Center: {x: 0, y: 0.26, z: 0.026} + m_Extent: {x: 0.487, y: 0.359, z: 0.572} + m_DirtyAABB: 0 +--- !u!1 &4612474773820537967 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8070889619200223800} + - component: {fileID: 3742319637435193207} + m_Layer: 6 + m_Name: Locator_AboveHead + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8070889619200223800 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4612474773820537967} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0.03246137, z: 0.166686} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3742319637435193207 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4612474773820537967} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.2 +--- !u!1 &4643059418833223977 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1749022844549540435} + m_Layer: 6 + m_Name: Character1_RightHandIndex2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1749022844549540435 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4643059418833223977} + serializedVersion: 2 + m_LocalRotation: {x: 0.0058521065, y: -0.04137672, z: -0.0068952506, w: 0.9991027} + m_LocalPosition: {x: 0.014227294, y: 0.00000006437301, z: -0.00000015258789} + m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999976} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1654624824523219389} + m_Father: {fileID: 3149775317872288184} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4644341937121223472 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6526853387327317499} + m_Layer: 6 + m_Name: Character1_Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6526853387327317499 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4644341937121223472} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.5015806e-10, y: -0.00804217, z: 0.030468559} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4954622075558114072} + - {fileID: 6353880293219359101} + - {fileID: 5065832433306771527} + - {fileID: 220351708734432648} + - {fileID: 8374793752138679864} + - {fileID: 699930855321221375} + - {fileID: 2219722635308239775} + - {fileID: 6350278636661609562} + - {fileID: 4248700656684398461} + - {fileID: 6982430254059911505} + - {fileID: 7039575964410758742} + - {fileID: 8857949806185292424} + - {fileID: 5731700714063062722} + - {fileID: 8070889619200223800} + m_Father: {fileID: 56685568677107031} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4701387812620264104 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3005056069481410214} + - component: {fileID: 7737939273965273251} + m_Layer: 6 + m_Name: _Fhair2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3005056069481410214 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4701387812620264104} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4228537525546935594} + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!137 &7737939273965273251 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4701387812620264104} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 2 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 603cf7ef4659af5439a575075bf3ca95, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300010, guid: 7d482c82ffb74a7fbfc5c7b288095351, type: 3} + m_Bones: + - {fileID: 6526853387327317499} + - {fileID: 220351708734432648} + - {fileID: 4248700656684398461} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 6526853387327317499} + m_AABB: + m_Center: {x: 0.019, y: -0.111, z: 0.188} + m_Extent: {x: 0.037, y: 0.044, z: 0.105} + m_DirtyAABB: 0 +--- !u!1 &4828964285052282239 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 861820310669654305} + m_Layer: 6 + m_Name: J_L_ForeArm_00_tw + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &861820310669654305 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828964285052282239} + serializedVersion: 2 + m_LocalRotation: {x: -0.012573468, y: 0.00046314503, z: -0.00002451689, w: 0.99992085} + m_LocalPosition: {x: -0.10891037, y: 0.00009298801, z: -0.00038040162} + m_LocalScale: {x: 1.0000004, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7396104810784837768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4866825602820108857 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9120174409034302403} + m_Layer: 6 + m_Name: Character1_Spine2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9120174409034302403 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4866825602820108857} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.00015314102, z: 0.041275635} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6093097180885946835} + - {fileID: 56685568677107031} + - {fileID: 2961329562039978871} + - {fileID: 8591750898746922411} + - {fileID: 1643941648384315466} + m_Father: {fileID: 4621580118481350796} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4881496285946555352 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2582931053939394173} + m_Layer: 6 + m_Name: J_R_SkirtBack_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2582931053939394173 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4881496285946555352} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: -0.06979225} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6831772141878411927} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4913657814871505121 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7410364982531109626} + m_Layer: 6 + m_Name: J_L_HairTail_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7410364982531109626 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4913657814871505121} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000014901161, y: -0.000000007450581, z: -0.000000007450581, + w: 1} + m_LocalPosition: {x: 0.000000019073486, y: 0.000000076293944, z: -0.17191942} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2225245250193162762} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4980279165888321717 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8931402703070841046} + m_Layer: 6 + m_Name: Character1_RightHandThumb4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8931402703070841046 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4980279165888321717} + serializedVersion: 2 + m_LocalRotation: {x: 0.00000030919912, y: 0.000000108033525, z: 0.00000022351746, + w: 1} + m_LocalPosition: {x: 0.012428941, y: -0.0000006866455, z: 0.00000018596648} + m_LocalScale: {x: 0.99999964, y: 0.9999998, z: 0.9999998} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2590597086074521511} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5048720820961056140 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2553643339994845254} + - component: {fileID: 4646042344897761171} + m_Layer: 6 + m_Name: Locator_RightUpLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2553643339994845254 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5048720820961056140} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: -0.00009900672, z: -0.00014139892, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.0699162} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2423412952060108609} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &4646042344897761171 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5048720820961056140} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.06 +--- !u!1 &5064952843108433067 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8938201858354982214} + m_Layer: 6 + m_Name: Character1_RightToeBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8938201858354982214 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5064952843108433067} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 6.1098625e-13, w: 1} + m_LocalPosition: {x: 0.00009202957, y: -0.044022463, z: -0.041161664} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3398889758669254210} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5313307378197191260 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6397107419441545405} + m_Layer: 6 + m_Name: Character1_RightHandPinky2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6397107419441545405 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5313307378197191260} + serializedVersion: 2 + m_LocalRotation: {x: -0.0041054687, y: 0.021180103, z: 0.004780198, w: 0.99975586} + m_LocalPosition: {x: 0.009599628, y: 0.00000007390976, z: 0.0000011444091} + m_LocalScale: {x: 1.0000004, y: 0.9999999, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4962509302789058149} + m_Father: {fileID: 7966788070020410002} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5357346096268649034 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8400846392894500075} + m_Layer: 6 + m_Name: J_L_HeadRibbon_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8400846392894500075 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5357346096268649034} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000022351746, y: -0.00000011920929, z: 0.0000000149011345, + w: 1} + m_LocalPosition: {x: -0.000000076293944, y: -0.00000015258789, z: 0.16675673} + m_LocalScale: {x: 1, y: 0.9999998, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4005512137851375714} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5401563396523540146 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 627136687486605248} + m_Layer: 6 + m_Name: Character1_LeftHandThumb2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &627136687486605248 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5401563396523540146} + serializedVersion: 2 + m_LocalRotation: {x: -0.0072667697, y: -0.07349535, z: 0.11157922, w: 0.99100745} + m_LocalPosition: {x: -0.017500991, y: 0, z: -0.000000076293944} + m_LocalScale: {x: 0.99999976, y: 0.9999999, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6690496443531499613} + m_Father: {fileID: 1740985048597586241} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5412792538822288528 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7396104810784837768} + - component: {fileID: 1952171542537200122} + m_Layer: 6 + m_Name: Character1_LeftForeArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7396104810784837768 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5412792538822288528} + serializedVersion: 2 + m_LocalRotation: {x: 0.013020072, y: 0.001430947, z: 0.035897728, w: 0.99926966} + m_LocalPosition: {x: -0.11878532, y: 0.000000009536743, z: 0.000000076293944} + m_LocalScale: {x: 0.9999999, y: 0.9999998, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2268707898031551092} + - {fileID: 2824019142497116302} + - {fileID: 861820310669654305} + - {fileID: 4612639662609169669} + - {fileID: 2234923054981574972} + - {fileID: 3342038955245361892} + - {fileID: 5207081768540906711} + m_Father: {fileID: 6878059461571870231} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1952171542537200122 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5412792538822288528} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.05 +--- !u!1 &5425203079364918255 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1274123420685706251} + m_Layer: 6 + m_Name: J_L_Sode_E00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1274123420685706251 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5425203079364918255} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000006519262, y: -0.00000046193605, z: 0.000000004190955, + w: 1} + m_LocalPosition: {x: -0.02375902, y: -5.9604643e-10, z: 0.000000114440915} + m_LocalScale: {x: 0.9999999, y: 0.9999997, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7895641511515384564} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5527928506538396792 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8631932705004513523} + m_Layer: 6 + m_Name: J_L_Skirt_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8631932705004513523 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5527928506538396792} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: -0.06979223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3984155238952603344} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5654697583955873360 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 699930855321221375} + - component: {fileID: 869632525762003056} + m_Layer: 6 + m_Name: J_L_HairSide_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &699930855321221375 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5654697583955873360} + serializedVersion: 2 + m_LocalRotation: {x: 0.032767124, y: -0.43403226, z: -0.092962936, w: 0.89548886} + m_LocalPosition: {x: -0.07298515, y: -0.0934125, z: 0.27946135} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 612309645553071391} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &869632525762003056 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5654697583955873360} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 612309645553071391} + boneAxis: {x: -1, y: 0, z: 0} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: [] + debug: 1 + threshold: 0.01 +--- !u!1 &5725743184177743746 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3149775317872288184} + m_Layer: 6 + m_Name: Character1_RightHandIndex1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3149775317872288184 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5725743184177743746} + serializedVersion: 2 + m_LocalRotation: {x: 0.008546484, y: 0.094416015, z: -0.030576246, w: 0.99502647} + m_LocalPosition: {x: 0.046977613, y: -0.02218206, z: 0.002598419} + m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1749022844549540435} + m_Father: {fileID: 5755076169123862156} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5834618362995374323 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6401941459970387374} + m_Layer: 6 + m_Name: Character1_RightHandRing1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6401941459970387374 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834618362995374323} + serializedVersion: 2 + m_LocalRotation: {x: -0.0026424497, y: 0.034782935, z: 0.00474744, w: 0.9993802} + m_LocalPosition: {x: 0.049340207, y: 0.008889168, z: 0.0041255187} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6385624135361057265} + m_Father: {fileID: 5755076169123862156} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5839509526745451135 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1643941648384315466} + - component: {fileID: 2177169964850823879} + m_Layer: 6 + m_Name: Locator_UpperBody + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1643941648384315466 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5839509526745451135} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0.04870856, z: 0.05303502} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 9120174409034302403} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2177169964850823879 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5839509526745451135} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.1 +--- !u!1 &5852959122383165786 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8544153664223713142} + m_Layer: 6 + m_Name: Character1_LeftHandPinky1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8544153664223713142 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5852959122383165786} + serializedVersion: 2 + m_LocalRotation: {x: 0.009402834, y: -0.1490879, z: 0.036963325, w: 0.98808813} + m_LocalPosition: {x: -0.046355017, y: 0.022602014, z: 0.0009494018} + m_LocalScale: {x: 1, y: 1.0000002, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7032405307784783804} + m_Father: {fileID: 2268707898031551092} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5871597644458133844 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6831772141878411927} + - component: {fileID: 2740617454352934065} + m_Layer: 6 + m_Name: J_R_SkirtBack_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6831772141878411927 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5871597644458133844} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.065894224, y: 0.049491055, z: -0.019820098} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2582931053939394173} + m_Father: {fileID: 29597928197065389} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2740617454352934065 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5871597644458133844} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 2582931053939394173} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.03 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.01, z: 0} + colliders: + - {fileID: 4237397560926780522} + - {fileID: 126894663884498659} + - {fileID: 4646042344897761171} + debug: 1 + threshold: 0.01 +--- !u!1 &5873621934725613905 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4962509302789058149} + m_Layer: 6 + m_Name: Character1_RightHandPinky3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4962509302789058149 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5873621934725613905} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000024121255, y: 0.00000025331983, z: -0.000000014901105, + w: 1} + m_LocalPosition: {x: 0.0075922012, y: 0.00000013589859, z: -0.00000030517577} + m_LocalScale: {x: 0.99999964, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6397107419441545405} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5915506034642101527 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2234923054981574972} + m_Layer: 6 + m_Name: J_L_Sode_B00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2234923054981574972 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5915506034642101527} + serializedVersion: 2 + m_LocalRotation: {x: -0.004493182, y: 0.16546658, z: -0.024590796, w: 0.98589855} + m_LocalPosition: {x: -0.0107017895, y: 0.000851388, z: 0.02043209} + m_LocalScale: {x: 1.0000002, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 9059987628779412517} + m_Father: {fileID: 7396104810784837768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6090098268396068696 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4954622075558114072} + - component: {fileID: 2161748187344067778} + m_Layer: 6 + m_Name: _face + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4954622075558114072 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6090098268396068696} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -2.5015806e-10, y: 0.009918099, z: -0.6672374} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!137 &2161748187344067778 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6090098268396068696} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 2 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 77410fc82598c414fbb68f41d4df2bba, type: 2} + - {fileID: 2100000, guid: 1d19f1d638a5ffb449e3a32dd4d5986d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300000, guid: 7d482c82ffb74a7fbfc5c7b288095351, type: 3} + m_Bones: [] + m_BlendShapeWeights: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_RootBone: {fileID: 0} + m_AABB: + m_Center: {x: 0, y: 0.754, z: 0.045} + m_Extent: {x: 0.141, y: 0.115, z: 0.069} + m_DirtyAABB: 0 +--- !u!1 &6133703520049981530 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 29597928197065389} + m_Layer: 6 + m_Name: Character1_Hips + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &29597928197065389 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6133703520049981530} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.41803354, z: 0.049120344} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7490102396379286848} + - {fileID: 2423412952060108609} + - {fileID: 5997968756326345837} + - {fileID: 3903073689557626799} + - {fileID: 1541561317559911158} + - {fileID: 7206730510584683501} + - {fileID: 6831772141878411927} + - {fileID: 541384037228338826} + m_Father: {fileID: 6407150209309253158} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6134404846302216326 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2219722635308239775} + - component: {fileID: 3660892605848956866} + m_Layer: 6 + m_Name: J_L_HairTail_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2219722635308239775 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6134404846302216326} + serializedVersion: 2 + m_LocalRotation: {x: 0.27495223, y: 0.14915642, z: 0.13304274, w: 0.94045377} + m_LocalPosition: {x: -0.08453446, y: 0.12091128, z: 0.07472458} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 650710974728237554} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3660892605848956866 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6134404846302216326} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 650710974728237554} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.08 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.007, z: 0} + colliders: + - {fileID: 3742319637435193207} + - {fileID: 2055818716676457244} + - {fileID: 1952171542537200122} + - {fileID: 2177169964850823879} + debug: 1 + threshold: 0.01 +--- !u!1 &6178152074234705202 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6350278636661609562} + - component: {fileID: 7372975349392021593} + m_Layer: 6 + m_Name: J_L_HeadRibbon_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6350278636661609562 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6178152074234705202} + serializedVersion: 2 + m_LocalRotation: {x: -0.2504739, y: -0.2833735, z: -0.049994256, w: 0.9243716} + m_LocalPosition: {x: -0.079515405, y: -0.068754226, z: 0.3136406} + m_LocalScale: {x: 0.99999994, y: 0.99999976, z: 0.9999998} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8288184820673587655} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7372975349392021593 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6178152074234705202} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 8288184820673587655} + boneAxis: {x: 0, y: 0, z: 1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + debug: 1 + threshold: 0.01 +--- !u!1 &6211667901187136842 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6725300670364461023} + m_Layer: 6 + m_Name: Character1_LeftHandMiddle2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6725300670364461023 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6211667901187136842} + serializedVersion: 2 + m_LocalRotation: {x: -0.0038751021, y: 0.017281516, z: -0.010274473, w: 0.9997904} + m_LocalPosition: {x: -0.016781254, y: 0.000000019073486, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7328954229572208060} + m_Father: {fileID: 2142336817693022222} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6241505657057301182 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5755076169123862156} + - component: {fileID: 2236474210489685004} + m_Layer: 6 + m_Name: Character1_RightHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5755076169123862156 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6241505657057301182} + serializedVersion: 2 + m_LocalRotation: {x: -0.024933074, y: -0.0007821354, z: 0.000042964955, w: 0.9996888} + m_LocalPosition: {x: 0.11270626, y: -0.00000007152557, z: -0.0000009536743} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000004} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3149775317872288184} + - {fileID: 2267692973050519269} + - {fileID: 7966788070020410002} + - {fileID: 6401941459970387374} + - {fileID: 439045745349089632} + m_Father: {fileID: 446200131182488843} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2236474210489685004 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6241505657057301182} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.07 +--- !u!1 &6300459396168663946 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8374793752138679864} + - component: {fileID: 7887378130367053097} + m_Layer: 6 + m_Name: J_L_HairSide2_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8374793752138679864 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6300459396168663946} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.13977991, y: -0.032653578, z: 0.14276138} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8555601841336020544} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7887378130367053097 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6300459396168663946} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 8555601841336020544} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: [] + debug: 1 + threshold: 0.01 +--- !u!1 &6300974693869485373 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3903073689557626799} + - component: {fileID: 365682419521750707} + m_Layer: 6 + m_Name: J_L_Skirt_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3903073689557626799 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6300974693869485373} + serializedVersion: 2 + m_LocalRotation: {x: -0.08715573, y: 0, z: -0, w: 0.9961947} + m_LocalPosition: {x: -0.08367218, y: -0.054377582, z: 0.01576828} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3984155238952603344} + m_Father: {fileID: 29597928197065389} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &365682419521750707 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6300974693869485373} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 3984155238952603344} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.01, z: 0} + colliders: + - {fileID: 4237397560926780522} + - {fileID: 5622497061649964821} + - {fileID: 7598970713000379034} + debug: 1 + threshold: 0.01 +--- !u!1 &6331784844233827884 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6385624135361057265} + m_Layer: 6 + m_Name: Character1_RightHandRing2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6385624135361057265 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6331784844233827884} + serializedVersion: 2 + m_LocalRotation: {x: -0.0050746724, y: 0.017218595, z: 0.01173241, w: 0.99977005} + m_LocalPosition: {x: 0.013061752, y: 0.000000005960464, z: 0.00000015258789} + m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999964} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4990400317689328422} + m_Father: {fileID: 6401941459970387374} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6422079993104970979 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2598788246662646975} + m_Layer: 6 + m_Name: J_R_Sode_B00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2598788246662646975 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6422079993104970979} + serializedVersion: 2 + m_LocalRotation: {x: -0.0044931974, y: -0.16546617, z: 0.024590768, w: 0.9858986} + m_LocalPosition: {x: 0.010701637, y: 0.00085137604, z: 0.0204319} + m_LocalScale: {x: 1.0000001, y: 0.9999998, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2148168642296180} + m_Father: {fileID: 446200131182488843} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6473899708057712658 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 65304671717520652} + m_Layer: 6 + m_Name: J_R_Sode_A01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &65304671717520652 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6473899708057712658} + serializedVersion: 2 + m_LocalRotation: {x: 0.000023934985, y: 0.0000045448483, z: -0.00000024597793, w: 1} + m_LocalPosition: {x: 0.10319793, y: 0.00000018596648, z: -0.0000025939942} + m_LocalScale: {x: 1, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7071530083350639876} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6571246899436162287 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1541561317559911158} + - component: {fileID: 1860357686482802260} + m_Layer: 6 + m_Name: J_L_SkirtBack_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1541561317559911158 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6571246899436162287} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.06589424, y: 0.049491055, z: -0.019819336} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6698999444532217468} + m_Father: {fileID: 29597928197065389} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1860357686482802260 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6571246899436162287} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 6698999444532217468} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.03 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.01, z: 0} + colliders: + - {fileID: 4237397560926780522} + - {fileID: 5622497061649964821} + - {fileID: 7598970713000379034} + debug: 1 + threshold: 0.01 +--- !u!1 &6661035546890823218 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 439045745349089632} + m_Layer: 6 + m_Name: Character1_RightHandThumb1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &439045745349089632 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6661035546890823218} + serializedVersion: 2 + m_LocalRotation: {x: 0.7231718, y: -0.16827066, z: -0.18860316, w: 0.6427569} + m_LocalPosition: {x: 0.016436901, y: -0.015683817, z: -0.017472915} + m_LocalScale: {x: 0.9999999, y: 1, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4214762892820373619} + m_Father: {fileID: 5755076169123862156} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6661394658488556038 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2051485737349694948} + m_Layer: 6 + m_Name: J_R_Sode_D01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2051485737349694948 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6661394658488556038} + serializedVersion: 2 + m_LocalRotation: {x: 0.00002354477, y: -0.0000008641438, z: 0.000005244297, w: 1} + m_LocalPosition: {x: 0.10183468, y: 0.0000029587745, z: 0.00000125885} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4006969703662656344} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6718389729297730740 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6320071064974784136} + m_Layer: 6 + m_Name: J_R_knee + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6320071064974784136 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6718389729297730740} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000025893838, y: 0.000000009194991, z: 0.0000000023283064, + w: 1} + m_LocalPosition: {x: -0, y: 0.022121582, z: -0.15356168} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2423412952060108609} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6925958816042242961 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3342038955245361892} + m_Layer: 6 + m_Name: J_L_Sode_C00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3342038955245361892 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6925958816042242961} + serializedVersion: 2 + m_LocalRotation: {x: -0.008827749, y: 0.0058973646, z: -0.10055546, w: 0.99487484} + m_LocalPosition: {x: -0.012543258, y: 0.036262, z: -0.005905571} + m_LocalScale: {x: 1.0000001, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4797773783076098714} + m_Father: {fileID: 7396104810784837768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6946307129390035735 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6690496443531499613} + m_Layer: 6 + m_Name: Character1_LeftHandThumb3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6690496443531499613 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6946307129390035735} + serializedVersion: 2 + m_LocalRotation: {x: -0.01386693, y: -0.019060507, z: -0.00015807952, w: 0.9997222} + m_LocalPosition: {x: -0.010315971, y: 0, z: 0.00000007152557} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1038416052695676677} + m_Father: {fileID: 627136687486605248} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6955022916378376002 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7021926352628559999} + m_Layer: 6 + m_Name: J_R_Arm_00_tw + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7021926352628559999 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6955022916378376002} + serializedVersion: 2 + m_LocalRotation: {x: -0.019467767, y: 0.0000867438, z: 0.0000013984003, w: 0.9998105} + m_LocalPosition: {x: -0.0006183624, y: 0.00000034093856, z: 0.000029029845} + m_LocalScale: {x: 0.99999976, y: 0.9999998, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2755942572119240026} + m_Father: {fileID: 6954321385767605024} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7134389897970941102 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8288184820673587655} + - component: {fileID: 8463605413180248651} + m_Layer: 6 + m_Name: J_L_HeadRibbon_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8288184820673587655 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7134389897970941102} + serializedVersion: 2 + m_LocalRotation: {x: -0.8290727, y: -0.12707953, z: 0.09669092, w: 0.5358546} + m_LocalPosition: {x: 0.000000076293944, y: -0.000000114440915, z: 0.2478369} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1.0000005} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4005512137851375714} + m_Father: {fileID: 6350278636661609562} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8463605413180248651 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7134389897970941102} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 4005512137851375714} + boneAxis: {x: 0, y: 0, z: 1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + debug: 1 + threshold: 0.01 +--- !u!1 &7279308382332940472 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6982430254059911505} + - component: {fileID: 2127697319085753800} + m_Layer: 6 + m_Name: J_R_HairSide2_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6982430254059911505 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7279308382332940472} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.13977984, y: -0.032653518, z: 0.14276077} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2138355904350086949} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2127697319085753800 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7279308382332940472} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 2138355904350086949} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: [] + debug: 1 + threshold: 0.01 +--- !u!1 &7417868316547513817 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 220351708734432648} + - component: {fileID: 5053127848451338921} + m_Layer: 6 + m_Name: J_L_HairFront_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &220351708734432648 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7417868316547513817} + serializedVersion: 2 + m_LocalRotation: {x: -0.032923594, y: 0.012465945, z: 0.003332434, w: 0.99937457} + m_LocalPosition: {x: 0.00047761618, y: -0.102207325, z: 0.28018036} + m_LocalScale: {x: 1, y: 0.9999999, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6279320856188589947} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5053127848451338921 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7417868316547513817} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 6279320856188589947} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: [] + debug: 1 + threshold: 0.01 +--- !u!1 &7422033952457024370 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6963582107709384724} + m_Layer: 6 + m_Name: J_R_Sode_C01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6963582107709384724 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7422033952457024370} + serializedVersion: 2 + m_LocalRotation: {x: 0.00002408773, y: -0.0000046640653, z: 1.1234674e-10, w: 1} + m_LocalPosition: {x: 0.10796964, y: 0.000000333786, z: 0.0000027847288} + m_LocalScale: {x: 0.99999964, y: 0.9999999, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3580862425918477564} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7440065012690024429 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7895641511515384564} + m_Layer: 6 + m_Name: J_L_Arm_00_tw + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7895641511515384564 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7440065012690024429} + serializedVersion: 2 + m_LocalRotation: {x: -0.019484475, y: -0.000087756256, z: -0.0000014493894, w: 0.99981016} + m_LocalPosition: {x: 0.00061920163, y: 0.0000003504753, z: 0.000030059813} + m_LocalScale: {x: 1, y: 0.99999976, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1274123420685706251} + m_Father: {fileID: 6878059461571870231} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7470772141849515107 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4248700656684398461} + - component: {fileID: 2134467581654292776} + m_Layer: 6 + m_Name: J_R_HairFront_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4248700656684398461 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7470772141849515107} + serializedVersion: 2 + m_LocalRotation: {x: -0.06683042, y: -0.07431372, z: 0.0030237695, w: 0.9949885} + m_LocalPosition: {x: 0.014399265, y: -0.09940759, z: 0.28018036} + m_LocalScale: {x: 1.0000001, y: 0.9999998, z: 0.99999976} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4421361216595297283} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2134467581654292776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7470772141849515107} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 4421361216595297283} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: [] + debug: 1 + threshold: 0.01 +--- !u!1 &7513917819248657796 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8555601841336020544} + m_Layer: 6 + m_Name: J_L_HairSide2_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8555601841336020544 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7513917819248657796} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: -0.07184112} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8374793752138679864} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7540377780967610214 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5207081768540906711} + m_Layer: 6 + m_Name: J_L_Sode_D00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5207081768540906711 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7540377780967610214} + serializedVersion: 2 + m_LocalRotation: {x: -0.0109099485, y: -0.104387544, z: -0.022491656, w: 0.9942225} + m_LocalPosition: {x: -0.015458488, y: 0.00009045124, z: -0.037431754} + m_LocalScale: {x: 0.9999999, y: 0.99999976, z: 0.9999998} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1164422361666431161} + m_Father: {fileID: 7396104810784837768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7621408989575438848 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8855767437384622858} + - component: {fileID: 3654952180710147857} + m_Layer: 6 + m_Name: J_R_HairSide_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8855767437384622858 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7621408989575438848} + serializedVersion: 2 + m_LocalRotation: {x: 0.029233143, y: 0.33951682, z: 0.063383006, w: 0.9380066} + m_LocalPosition: {x: 0.124110945, y: -0.00000016212464, z: -0.0000010681152} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4808659917229634046} + m_Father: {fileID: 7039575964410758742} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3654952180710147857 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7621408989575438848} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 4808659917229634046} + boneAxis: {x: 1, y: 0, z: 0} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: [] + debug: 1 + threshold: 0.01 +--- !u!1 &7782350045114135825 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 446200131182488843} + - component: {fileID: 5945787198051039176} + m_Layer: 6 + m_Name: Character1_RightForeArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &446200131182488843 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7782350045114135825} + serializedVersion: 2 + m_LocalRotation: {x: 0.013020083, y: -0.0014304537, z: -0.03589762, w: 0.99926966} + m_LocalPosition: {x: 0.11878662, y: -0.0000000023841857, z: -0.0000005340576} + m_LocalScale: {x: 1, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5755076169123862156} + - {fileID: 9113194316341878803} + - {fileID: 5074259165098998069} + - {fileID: 7071530083350639876} + - {fileID: 2598788246662646975} + - {fileID: 3580862425918477564} + - {fileID: 4006969703662656344} + m_Father: {fileID: 6954321385767605024} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5945787198051039176 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7782350045114135825} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.05 +--- !u!1 &7785554163382420134 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6954321385767605024} + - component: {fileID: 6804823801260687976} + m_Layer: 6 + m_Name: Character1_RightArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6954321385767605024 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7785554163382420134} + serializedVersion: 2 + m_LocalRotation: {x: 0.02679965, y: 0.1984241, z: -0.003274372, w: 0.9797443} + m_LocalPosition: {x: 0.04694744, y: -0.0003006053, z: 0.0036683274} + m_LocalScale: {x: 1.0000002, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 446200131182488843} + - {fileID: 7021926352628559999} + m_Father: {fileID: 2961329562039978871} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6804823801260687976 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7785554163382420134} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.05 +--- !u!1 &7835538482898923977 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4421361216595297283} + m_Layer: 6 + m_Name: J_R_HairFront_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4421361216595297283 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7835538482898923977} + serializedVersion: 2 + m_LocalRotation: {x: 0.14653113, y: -0.012764582, z: -0.0018909615, w: 0.9891219} + m_LocalPosition: {x: -0.000000028610229, y: 0.000000019073486, z: -0.18115318} + m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4248700656684398461} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7879561262097683484 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1288929777825255150} + - component: {fileID: 7552893586261974913} + m_Layer: 6 + m_Name: _body + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1288929777825255150 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7879561262097683484} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4228537525546935594} + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!137 &7552893586261974913 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7879561262097683484} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 9b9cc9e24bdb5804b9009ba59c8957fe, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300004, guid: 7d482c82ffb74a7fbfc5c7b288095351, type: 3} + m_Bones: + - {fileID: 9130718734329090452} + - {fileID: 2004898901779290869} + - {fileID: 29597928197065389} + - {fileID: 7490102396379286848} + - {fileID: 9120174409034302403} + - {fileID: 6093097180885946835} + - {fileID: 7895641511515384564} + - {fileID: 8123648678838411109} + - {fileID: 7206730510584683501} + - {fileID: 3903073689557626799} + - {fileID: 3984155238952603344} + - {fileID: 1541561317559911158} + - {fileID: 2350293877619336017} + - {fileID: 1274123420685706251} + - {fileID: 5207081768540906711} + - {fileID: 2234923054981574972} + - {fileID: 4612639662609169669} + - {fileID: 2824019142497116302} + - {fileID: 3342038955245361892} + - {fileID: 7396104810784837768} + - {fileID: 2268707898031551092} + - {fileID: 4311764050378445562} + - {fileID: 6878059461571870231} + - {fileID: 8544153664223713142} + - {fileID: 347900642799376463} + - {fileID: 1740985048597586241} + - {fileID: 2142336817693022222} + - {fileID: 2687392561584112538} + - {fileID: 4487619767070584897} + - {fileID: 7032405307784783804} + - {fileID: 6725300670364461023} + - {fileID: 6690496443531499613} + - {fileID: 861820310669654305} + - {fileID: 627136687486605248} + - {fileID: 8591750898746922411} + - {fileID: 5833084827420442486} + - {fileID: 3398889758669254210} + - {fileID: 2423412952060108609} + - {fileID: 7021926352628559999} + - {fileID: 2961329562039978871} + - {fileID: 6320071064974784136} + - {fileID: 6831772141878411927} + - {fileID: 9113194316341878803} + - {fileID: 2755942572119240026} + - {fileID: 446200131182488843} + - {fileID: 7071530083350639876} + - {fileID: 2598788246662646975} + - {fileID: 4006969703662656344} + - {fileID: 3580862425918477564} + - {fileID: 5755076169123862156} + - {fileID: 5074259165098998069} + - {fileID: 2590597086074521511} + - {fileID: 6385624135361057265} + - {fileID: 6954321385767605024} + - {fileID: 1749022844549540435} + - {fileID: 439045745349089632} + - {fileID: 7966788070020410002} + - {fileID: 6397107419441545405} + - {fileID: 1945343063166025465} + - {fileID: 6401941459970387374} + - {fileID: 3149775317872288184} + - {fileID: 2267692973050519269} + - {fileID: 4214762892820373619} + - {fileID: 6526853387327317499} + - {fileID: 56685568677107031} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 29597928197065389} + m_AABB: + m_Center: {x: 0, y: 0.008, z: -0.081} + m_Extent: {x: 0.324, y: 0.145, z: 0.336} + m_DirtyAABB: 0 +--- !u!1 &7941598378412098330 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8844543047423818134} + m_Layer: 6 + m_Name: J_R_Skirt_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8844543047423818134 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7941598378412098330} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.000000019073486, z: -0.06979223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2350293877619336017} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7951457905010954670 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4228537525546935594} + m_Layer: 6 + m_Name: Mesh_SD_unitychan + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4228537525546935594 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7951457905010954670} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1288929777825255150} + - {fileID: 1624019310821944626} + - {fileID: 2610291734591142933} + - {fileID: 3005056069481410214} + - {fileID: 1122555548113153179} + m_Father: {fileID: 6731142422001346709} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8380099222079526815 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1164422361666431161} + m_Layer: 6 + m_Name: J_L_Sode_D01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1164422361666431161 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8380099222079526815} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000018626454, y: -0.000000044703476, z: 0.000000001862645, + w: 1} + m_LocalPosition: {x: -0.101834446, y: 0, z: 0.000000038146972} + m_LocalScale: {x: 1.0000001, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5207081768540906711} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8395745312774838002 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6093097180885946835} + m_Layer: 6 + m_Name: Character1_LeftShoulder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6093097180885946835 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8395745312774838002} + serializedVersion: 2 + m_LocalRotation: {x: 5.4117755e-10, y: -0.14720343, z: -0.012063365, w: 0.9890327} + m_LocalPosition: {x: -0.026731491, y: 0.046953294, z: 0.10265426} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6878059461571870231} + m_Father: {fileID: 9120174409034302403} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8407776964008459017 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2267692973050519269} + m_Layer: 6 + m_Name: Character1_RightHandMiddle1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2267692973050519269 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8407776964008459017} + serializedVersion: 2 + m_LocalRotation: {x: 0.0055155335, y: 0.08777313, z: -0.021705609, w: 0.9958887} + m_LocalPosition: {x: 0.051409397, y: -0.006346327, z: 0.006106949} + m_LocalScale: {x: 1, y: 1.0000002, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1945343063166025465} + m_Father: {fileID: 5755076169123862156} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8532562385638308393 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2355703600664584488} + m_Layer: 6 + m_Name: Character1_RightHandMiddle3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2355703600664584488 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8532562385638308393} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000018626964, y: -0.00000092387177, z: -0.000000055879344, + w: 1} + m_LocalPosition: {x: 0.012807674, y: 0.0000000667572, z: -0.00000087738033} + m_LocalScale: {x: 1.0000002, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1945343063166025465} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8679779466394157924 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2423412952060108609} + m_Layer: 6 + m_Name: Character1_RightUpLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2423412952060108609 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8679779466394157924} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000050956612, y: -0.00002997581, z: 0.00016999245, w: 1} + m_LocalPosition: {x: 0.09838916, y: 0.0002045536, z: -0.06464706} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5833084827420442486} + - {fileID: 6320071064974784136} + - {fileID: 2553643339994845254} + m_Father: {fileID: 29597928197065389} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8726454797839578918 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4612639662609169669} + m_Layer: 6 + m_Name: J_L_Sode_A00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4612639662609169669 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8726454797839578918} + serializedVersion: 2 + m_LocalRotation: {x: -0.0075075305, y: 0.0075068395, z: 0.095496655, w: 0.99537313} + m_LocalPosition: {x: -0.016254006, y: -0.042589106, z: -0.004563713} + m_LocalScale: {x: 1.0000002, y: 0.99999976, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6645859756972294891} + m_Father: {fileID: 7396104810784837768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8809074375141990714 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9059987628779412517} + m_Layer: 6 + m_Name: J_L_Sode_B01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9059987628779412517 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8809074375141990714} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0.0000000018626454, w: 1} + m_LocalPosition: {x: -0.11148712, y: -0.0000000023841857, z: 0} + m_LocalScale: {x: 0.99999994, y: 1, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2234923054981574972} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8832480588170221485 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 541384037228338826} + - component: {fileID: 4237397560926780522} + m_Layer: 6 + m_Name: Locator_Hips + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &541384037228338826 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8832480588170221485} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0.005178678, z: -0.02264928} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 29597928197065389} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &4237397560926780522 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8832480588170221485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.08 +--- !u!1 &9132162797234363520 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9130718734329090452} + - component: {fileID: 5622497061649964821} + m_Layer: 6 + m_Name: Character1_LeftLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9130718734329090452 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9132162797234363520} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.021834202, z: -0.15186352} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2004898901779290869} + - {fileID: 8123648678838411109} + m_Father: {fileID: 7490102396379286848} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5622497061649964821 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9132162797234363520} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.05 +--- !u!1 &9150489648765871549 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3984155238952603344} + - component: {fileID: 2715013834793208439} + m_Layer: 6 + m_Name: J_L_Skirt_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3984155238952603344 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9150489648765871549} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000074505815, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: -0.060169294} + m_LocalScale: {x: 1, y: 0.9999999, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8631932705004513523} + m_Father: {fileID: 3903073689557626799} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2715013834793208439 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9150489648765871549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 8631932705004513523} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 4237397560926780522} + - {fileID: 5622497061649964821} + - {fileID: 7598970713000379034} + debug: 1 + threshold: 0.01 diff --git a/Toonshader_ProjectURP/Assets/Prefabs/SD_unitychan_2D.prefab.meta b/Toonshader_ProjectURP/Assets/Prefabs/SD_unitychan_2D.prefab.meta new file mode 100644 index 000000000..cb9aeed5b --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Prefabs/SD_unitychan_2D.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dc9a3d182bbd1a24fa639a5bdb5bb13f +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From ce45bede92a5fbdba37e50fb69bfa54006659d80 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 26 Nov 2025 13:45:20 +0900 Subject: [PATCH 137/290] rename shader --- .../Assets/Shaders/{Toon2D.shader => Toon3Das2D.shader} | 0 .../Assets/Shaders/{Toon2D.shader.meta => Toon3Das2D.shader.meta} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename Toonshader_ProjectURP/Assets/Shaders/{Toon2D.shader => Toon3Das2D.shader} (100%) rename Toonshader_ProjectURP/Assets/Shaders/{Toon2D.shader.meta => Toon3Das2D.shader.meta} (100%) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader similarity index 100% rename from Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader rename to Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader.meta b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader.meta similarity index 100% rename from Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader.meta rename to Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader.meta From 48a3888b3a5943248918a559f4da9ae6ae053e28 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 26 Nov 2025 16:24:20 +0900 Subject: [PATCH 138/290] use all shape lights --- .../Assets/Shaders/Toon3Das2D.shader | 166 ++++++++---------- .../Assets/Shaders/ToonBlend.hlsl | 99 +++++++++++ 2 files changed, 172 insertions(+), 93 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader index db1867258..49cc8e7c5 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader @@ -83,6 +83,7 @@ Shader "Toon/Toon 3D as 2D"{ #pragma vertex ToonVertex #pragma fragment ToonFragment + //USE_SHAPE_LIGHT keywords #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" // GPU Instancing @@ -109,7 +110,18 @@ Shader "Toon/Toon 3D as 2D"{ float4 _White; - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Lit2DCommon.hlsl" + //#include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Lit2DCommon.hlsl" + + TEXTURE2D(_MainTex); + SAMPLER(sampler_MainTex); + UNITY_TEXTURE_STREAMING_DEBUG_VARS_FOR_TEX(_MainTex); + + TEXTURE2D(_MaskTex); + SAMPLER(sampler_MaskTex); + + TEXTURE2D(_NormalMap); + SAMPLER(sampler_NormalMap); + CBUFFER_START(UnityPerMaterial) half4 _BaseColor; @@ -201,69 +213,63 @@ Shader "Toon/Toon 3D as 2D"{ } - half4 CombinedShapeLightSharedWithToon(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv, + half4 CombinedShapeLightAndToon(ShapeLightResult shapeLightResult, SurfaceData2D surfaceData, + in float2 uv, in float3 tangentWS, in float3 bitangentWS, in float3 normalWS, in float3 positionWS) { - #if defined(DEBUG_DISPLAY) - half4 debugColor = 0; - - if (CanDebugOverrideOutputColor(surfaceData, inputData, debugColor)) { - return debugColor; - } - #endif - - half alpha = surfaceData.alpha; - half4 albedo = half4(surfaceData.albedo, alpha); - const half4 mask = surfaceData.mask; - const half2 lightingUV = inputData.lightingUV; - - if (alpha == 0.0) - discard; - + const half alpha = surfaceData.alpha; + float3x3 tangentTransform = float3x3( tangentWS, bitangentWS, normalWS); const float3 normalTS = surfaceData.normalTS; float3 perturbedNormalWS = normalize(mul( normalTS, tangentTransform )); // Perturbed normals - #if USE_SHAPE_LIGHT_TYPE_0 - half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); - - if (any(_ShapeLightMaskFilter0)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter0) * mask + _ShapeLightInvertedFilter0 * (1 - - mask); - shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); - } - - const float3 directionalLightColorAndUse = _DirectionalLight_Color * _DirectionalLight_Use; + half4 light2dMod = shapeLightResult.mod; + half4 light2dAdd = shapeLightResult.add; - const float3 diffuseLightFactor = ToonDiffuseBlend(shapeLight0.rgb, _ShapeLightBlendFactors0.x); - - const float3 baseColor = _BaseColor.rgb * albedo.rgb * diffuseLightFactor; + const float light2dIntensity = max( + light2dMod.r * light2dAdd.r, max( + light2dMod.g + light2dAdd.g, + light2dMod.b + light2dAdd.b)); + const half4 mainTex = half4(surfaceData.albedo, alpha); + const float3 baseAlbedo = _BaseColor.rgb * mainTex.rgb; + //1st and 2nd Shade const float4 firstShadeTex = lerp( - SAMPLE_TEXTURE2D(_1st_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), albedo, + SAMPLE_TEXTURE2D(_1st_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), mainTex, _Use_BaseAs1st); const float3 firstShadeAlbedo = _1st_ShadeColor.rgb * firstShadeTex.rgb; - const float3 firstShadeColor = firstShadeAlbedo * diffuseLightFactor; const float4 secondShadeTex = lerp( SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), firstShadeTex, _Use_1stAs2nd); const float3 secondShadeAlbedo = _2nd_ShadeColor.rgb * secondShadeTex.rgb; - const float3 secondShadeColor = secondShadeAlbedo * diffuseLightFactor; + + //perform 3 color linear shading with 2D colors and lights + const float3 color2D = ThreeColorsLinearShading( + baseAlbedo * light2dMod + light2dAdd, + firstShadeAlbedo * light2dMod + light2dAdd, + secondShadeAlbedo * light2dMod + light2dAdd, + _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, + _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, light2dIntensity); + - const float light2dDiffuse = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + //Toon Directional Light + const float3 directionalLightColorAndUse = _DirectionalLight_Color * _DirectionalLight_Use; const float3 directionalLightDirection = normalize(-_DirectionalLight_Direction); - const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, directionalLightDirection) + 0.5; + const float dotNL = 0.5 * dot( perturbedNormalWS, directionalLightDirection) + 0.5; - const float threeColorsT = (light2dDiffuse * _2DLightStrength) - + (directionalDiffuse * _DirectionalLight_DiffuseStrength); - - const float3 finalDiffuseColor = ThreeColorsLinearShading(baseColor,firstShadeColor, secondShadeColor, + const float3 toonDiffuseColor = ThreeColorsLinearShading( + baseAlbedo * directionalLightColorAndUse, + firstShadeAlbedo * directionalLightColorAndUse, + secondShadeAlbedo * directionalLightColorAndUse, _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, - _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, threeColorsT); + _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, + dotNL); + + const float3 finalDiffuseColor = color2D * _2DLightStrength + + toonDiffuseColor * _DirectionalLight_DiffuseStrength; //Highlight const float3 viewDirection = normalize(_DirectionalLight_ViewPosition - positionWS); @@ -285,49 +291,37 @@ Shader "Toon/Toon 3D as 2D"{ float3 finalColor = finalDiffuseColor + finalHighlightColor; - half4 shapeLight0Modulate = half4(finalColor, alpha); - half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; - - #else - half4 shapeLight0Modulate = 0; - half4 shapeLight0Additive = 0; - #endif - - half4 finalOutput; - #if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 - finalOutput = albedo; - #else - half4 finalModulate = shapeLight0Modulate; - half4 finalAdditve = shapeLight0Additive; - finalOutput = _HDREmulationScale * (finalModulate + finalAdditve); - #endif - - finalOutput.a = alpha; - - return max(0, finalOutput); + return float4(finalColor,alpha); } + half4 ToonFragment(Varyings input) : SV_Target { const half4 main = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv); const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.uv); const half3 normalTS = UnpackNormalScale(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.uv), _BumpScale); SurfaceData2D surfaceData; - InputData2D inputData; - + const float3 normalWS = normalize(input.normalWS); const float3 tangentWS = normalize(input.tangentWS); const float3 bitangentWS = normalize(cross(normalWS, tangentWS) * input.tangentWS.w); + + const float alpha = main.a; - InitializeSurfaceData(main.rgb, main.a, mask, normalTS, surfaceData); - InitializeInputData(input.uv, input.lightingUV, inputData); + InitializeSurfaceData(main.rgb, alpha, mask, normalTS, surfaceData); #if defined(DEBUG_DISPLAY) SETUP_DEBUG_TEXTURE_DATA_2D_NO_TS(inputData, input.positionWS, input.positionCS, _MainTex); surfaceData.normalWS = input.normalWS; #endif - return CombinedShapeLightSharedWithToon(surfaceData, inputData, input.uv, + if (alpha == 0.0) + discard; + + ShapeLightResult shapeLightResult = CombinedShapeLight(mask, input.lightingUV); + + + return CombinedShapeLightAndToon(shapeLightResult, surfaceData, input.uv, tangentWS, bitangentWS, normalWS, input.positionWS); } @@ -365,6 +359,7 @@ Shader "Toon/Toon 3D as 2D"{ // #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" + //USE_SHAPE_LIGHT keywords #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" struct OutlineVertexInput { @@ -470,34 +465,11 @@ Shader "Toon/Toon 3D as 2D"{ return o; } - //SHAPE_LIGHT macros - #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" half4 OutlineFragment(OutlineVertexOutput i) : SV_Target { - InputData2D inputData; - - InitializeInputData(i.uv0, i.lightingUV, inputData); - - half4 shapeLight0 = half4(0,0,0,0); - const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, i.uv0); - const half2 lightingUV = inputData.lightingUV; - - float3 diffuseLightFactor = float3(0,0,0); - - #if USE_SHAPE_LIGHT_TYPE_0 - shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); - if (any(_ShapeLightMaskFilter0)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter0) * mask + _ShapeLightInvertedFilter0 * (1 - - mask); - shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); - } - diffuseLightFactor = ToonDiffuseBlend(shapeLight0.rgb, _ShapeLightBlendFactors0.x); - #endif - + const half2 lightingUV = i.lightingUV; const float2 Set_UV0 = i.uv0; float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); @@ -506,9 +478,17 @@ Shader "Toon/Toon 3D as 2D"{ const float3 outlineTex = tex2D(sampler_OutlineTex,TRANSFORM_TEX(Set_UV0, _OutlineTex)).rgb; const float3 outlineAlbedo = outlineTex * _OutlineColor.rgb; - //Blend + //Blend with baseColor const float3 outlineBaseBlend = lerp(outlineAlbedo, outlineAlbedo * Set_BaseColor, _Outline_BaseColorBlend); - const float3 outlineBaseAndLightBlend = lerp(outlineBaseBlend, outlineBaseBlend * diffuseLightFactor, _Outline_LightColorBlend); + + //Blend with light + ShapeLightResult shapeLightResult = CombinedShapeLight(mask, lightingUV); + const float3 color2D = (outlineBaseBlend.rgb * shapeLightResult.mod.rgb) + shapeLightResult.add.rgb; + const float3 colorToon = outlineBaseBlend.rgb * _DirectionalLight_Color.rgb * _DirectionalLight_Use; + const float3 outlineLightColor = (color2D * _2DLightStrength) + + (colorToon * _DirectionalLight_DiffuseStrength); + + const float3 outlineBaseAndLightBlend = lerp(outlineBaseBlend, outlineLightColor, _Outline_LightColorBlend); return float4(outlineBaseAndLightBlend,1.0); } diff --git a/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl b/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl index 75d25e2b6..7491d54a8 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl +++ b/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl @@ -1,5 +1,9 @@ #pragma once + +#include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" //_ShapeLightTexture + + float3 ToonDiffuseBlend(float3 shapeLight, float _ShapeLightBlendFactors) { const float3 directionalLightColorAndUse = _DirectionalLight_Color * _DirectionalLight_Use; @@ -9,3 +13,98 @@ float3 ToonDiffuseBlend(float3 shapeLight, float _ShapeLightBlendFactors) { return diffuseLightFactor; } + +struct ShapeLightResult { + half4 mod; + half4 add; +}; + +//---------------------------------------------------------------------------------------------------------------------- + +ShapeLightResult CombinedShapeLight(in half4 mask, in half2 lightingUV) +{ + ShapeLightResult ret = (ShapeLightResult)0; + + #if defined(DEBUG_DISPLAY) + half4 debugColor = 0; + + if (CanDebugOverrideOutputColor(surfaceData, inputData, debugColor)) + { + ret.mod = ret.add = debugColor; + return ret; + } + #endif + +#if USE_SHAPE_LIGHT_TYPE_0 + half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); + + if (any(_ShapeLightMaskFilter0)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter0) * mask + _ShapeLightInvertedFilter0 * (1 - mask); + shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); + } + + half4 shapeLight0Modulate = shapeLight0 * _ShapeLightBlendFactors0.x; + half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; +#else + half4 shapeLight0Modulate = 0; + half4 shapeLight0Additive = 0; +#endif + +#if USE_SHAPE_LIGHT_TYPE_1 + half4 shapeLight1 = SAMPLE_TEXTURE2D(_ShapeLightTexture1, sampler_ShapeLightTexture1, lightingUV); + + if (any(_ShapeLightMaskFilter1)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter1) * mask + _ShapeLightInvertedFilter1 * (1 - mask); + shapeLight1 *= dot(processedMask, _ShapeLightMaskFilter1); + } + + half4 shapeLight1Modulate = shapeLight1 * _ShapeLightBlendFactors1.x; + half4 shapeLight1Additive = shapeLight1 * _ShapeLightBlendFactors1.y; +#else + half4 shapeLight1Modulate = 0; + half4 shapeLight1Additive = 0; +#endif + +#if USE_SHAPE_LIGHT_TYPE_2 + half4 shapeLight2 = SAMPLE_TEXTURE2D(_ShapeLightTexture2, sampler_ShapeLightTexture2, lightingUV); + + if (any(_ShapeLightMaskFilter2)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter2) * mask + _ShapeLightInvertedFilter2 * (1 - mask); + shapeLight2 *= dot(processedMask, _ShapeLightMaskFilter2); + } + + half4 shapeLight2Modulate = shapeLight2 * _ShapeLightBlendFactors2.x; + half4 shapeLight2Additive = shapeLight2 * _ShapeLightBlendFactors2.y; +#else + half4 shapeLight2Modulate = 0; + half4 shapeLight2Additive = 0; +#endif + +#if USE_SHAPE_LIGHT_TYPE_3 + half4 shapeLight3 = SAMPLE_TEXTURE2D(_ShapeLightTexture3, sampler_ShapeLightTexture3, lightingUV); + + if (any(_ShapeLightMaskFilter3)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter3) * mask + _ShapeLightInvertedFilter3 * (1 - mask); + shapeLight3 *= dot(processedMask, _ShapeLightMaskFilter3); + } + + half4 shapeLight3Modulate = shapeLight3 * _ShapeLightBlendFactors3.x; + half4 shapeLight3Additive = shapeLight3 * _ShapeLightBlendFactors3.y; +#else + half4 shapeLight3Modulate = 0; + half4 shapeLight3Additive = 0; +#endif + + half4 finalOutput; +#if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 +#else + ret.mod = shapeLight0Modulate + shapeLight1Modulate + shapeLight2Modulate + shapeLight3Modulate; + ret.add = shapeLight0Additive + shapeLight1Additive + shapeLight2Additive + shapeLight3Additive; +#endif + + return ret; +} From ef8db16f32b01769197dd0956747abab9874ef21 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 26 Nov 2025 16:25:07 +0900 Subject: [PATCH 139/290] Remove unused code --- Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl b/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl index 7491d54a8..df4a0cf65 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl +++ b/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl @@ -3,17 +3,6 @@ #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" //_ShapeLightTexture - -float3 ToonDiffuseBlend(float3 shapeLight, float _ShapeLightBlendFactors) { - - const float3 directionalLightColorAndUse = _DirectionalLight_Color * _DirectionalLight_Use; - - const float3 diffuseLightFactor = (shapeLight.rgb * _ShapeLightBlendFactors * _2DLightStrength ) - + (directionalLightColorAndUse * _DirectionalLight_DiffuseStrength); - - return diffuseLightFactor; -} - struct ShapeLightResult { half4 mod; half4 add; From c032979478f0b4393ba338dd0c0830f7bed9f061 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 26 Nov 2025 16:33:34 +0900 Subject: [PATCH 140/290] rename --- .../Assets/Shaders/{ToonBlend.hlsl => ShapeLight2D.hlsl} | 0 .../Shaders/{ToonBlend.hlsl.meta => ShapeLight2D.hlsl.meta} | 0 Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) rename Toonshader_ProjectURP/Assets/Shaders/{ToonBlend.hlsl => ShapeLight2D.hlsl} (100%) rename Toonshader_ProjectURP/Assets/Shaders/{ToonBlend.hlsl.meta => ShapeLight2D.hlsl.meta} (100%) diff --git a/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl b/Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl similarity index 100% rename from Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl rename to Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl diff --git a/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl.meta b/Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl.meta similarity index 100% rename from Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl.meta rename to Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl.meta diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader index 49cc8e7c5..cfe817aca 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader @@ -166,7 +166,7 @@ Shader "Toon/Toon 3D as 2D"{ float4 _HighlightTex_ST; #include "ObjectTransform.hlsl" - #include "ToonBlend.hlsl" + #include "ShapeLight2D.hlsl" Varyings ToonVertex(Attributes input) { @@ -416,7 +416,7 @@ Shader "Toon/Toon 3D as 2D"{ CBUFFER_END #include "ObjectTransform.hlsl" - #include "ToonBlend.hlsl" + #include "ShapeLight2D.hlsl" OutlineVertexOutput OutlineVertex(OutlineVertexInput v) { OutlineVertexOutput o = (OutlineVertexOutput) 0; From 602d98155568f39e3f13cf22eead60dfb5ba1afb Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 26 Nov 2025 22:17:19 +0900 Subject: [PATCH 141/290] _HDREmulationScale --- .../Assets/Shaders/Toon3Das2D.shader | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader index cfe817aca..bce1b74c3 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader @@ -167,6 +167,9 @@ Shader "Toon/Toon 3D as 2D"{ #include "ObjectTransform.hlsl" #include "ShapeLight2D.hlsl" + + //_HDREmulationScale declaration + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightVariables.hlsl" Varyings ToonVertex(Attributes input) { @@ -247,16 +250,16 @@ Shader "Toon/Toon 3D as 2D"{ //perform 3 color linear shading with 2D colors and lights const float3 color2D = ThreeColorsLinearShading( - baseAlbedo * light2dMod + light2dAdd, - firstShadeAlbedo * light2dMod + light2dAdd, - secondShadeAlbedo * light2dMod + light2dAdd, + (baseAlbedo * light2dMod + light2dAdd).rgb, + (firstShadeAlbedo * light2dMod + light2dAdd).rgb, + (secondShadeAlbedo * light2dMod + light2dAdd).rgb, _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, light2dIntensity); //Toon Directional Light - const float3 directionalLightColorAndUse = _DirectionalLight_Color * _DirectionalLight_Use; + const float3 directionalLightColorAndUse = _DirectionalLight_Color.rgb * _DirectionalLight_Use; const float3 directionalLightDirection = normalize(-_DirectionalLight_Direction); const float dotNL = 0.5 * dot( perturbedNormalWS, directionalLightDirection) + 0.5; @@ -289,7 +292,7 @@ Shader "Toon/Toon 3D as 2D"{ const float3 finalHighlightColor = highlightAlbedo * highlightFactor * highlight; - float3 finalColor = finalDiffuseColor + finalHighlightColor; + const float3 finalColor = _HDREmulationScale * (finalDiffuseColor + finalHighlightColor); return float4(finalColor,alpha); } From bd873d78f23823d5a37e99001f6f37723c8b3ece Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 26 Nov 2025 22:21:36 +0900 Subject: [PATCH 142/290] HDREmulationScale for outline --- Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader index bce1b74c3..2bf98afd6 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader @@ -109,9 +109,7 @@ Shader "Toon/Toon 3D as 2D"{ }; float4 _White; - - //#include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Lit2DCommon.hlsl" - + TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex); UNITY_TEXTURE_STREAMING_DEBUG_VARS_FOR_TEX(_MainTex); @@ -290,7 +288,6 @@ Shader "Toon/Toon 3D as 2D"{ const float3 highlightFactor = directionalLightColorAndUse * _DirectionalLight_HighlightStrength; const float3 finalHighlightColor = highlightAlbedo * highlightFactor * highlight; - const float3 finalColor = _HDREmulationScale * (finalDiffuseColor + finalHighlightColor); @@ -365,6 +362,9 @@ Shader "Toon/Toon 3D as 2D"{ //USE_SHAPE_LIGHT keywords #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" + //_HDREmulationScale declaration + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightVariables.hlsl" + struct OutlineVertexInput { float4 vertex : POSITION; float3 normal : NORMAL; @@ -493,7 +493,7 @@ Shader "Toon/Toon 3D as 2D"{ const float3 outlineBaseAndLightBlend = lerp(outlineBaseBlend, outlineLightColor, _Outline_LightColorBlend); - return float4(outlineBaseAndLightBlend,1.0); + return float4(_HDREmulationScale * outlineBaseAndLightBlend,1.0); } From 82e77479be9b86a414707e2304a32ce804d9aa88 Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 27 Nov 2025 00:50:03 +0900 Subject: [PATCH 143/290] add normal textures [skip ci] --- .../Textures/BakedNormal_FHair_Normal.png | Bin 0 -> 18703 bytes .../BakedNormal_FHair_Normal.png.meta | 117 ++++++++++++++++++ .../BakedNormal_SDunitychan_Normal.png | Bin 0 -> 241283 bytes .../BakedNormal_SDunitychan_Normal.png.meta | 117 ++++++++++++++++++ 4 files changed, 234 insertions(+) create mode 100644 com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_FHair_Normal.png create mode 100644 com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_FHair_Normal.png.meta create mode 100644 com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_SDunitychan_Normal.png create mode 100644 com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_SDunitychan_Normal.png.meta diff --git a/com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_FHair_Normal.png b/com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_FHair_Normal.png new file mode 100644 index 0000000000000000000000000000000000000000..9ec63b4a3b42d2840cd54427c0e5c0778ca99832 GIT binary patch literal 18703 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 QcxBP;n+Dp&H(-(f7nE@)A^-pY literal 0 HcmV?d00001 diff --git a/com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_FHair_Normal.png.meta b/com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_FHair_Normal.png.meta new file mode 100644 index 000000000..b7fc0fcc7 --- /dev/null +++ b/com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_FHair_Normal.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 5b30ce1dc38b14141b4635ebb6c167ac +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: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + 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: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_SDunitychan_Normal.png b/com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_SDunitychan_Normal.png new file mode 100644 index 0000000000000000000000000000000000000000..89a544af4826109b3ae972963b56c278fc3beca6 GIT binary patch literal 241283 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

vJ2(oYM&9$CWH@$uTK*mwT&$2t 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 Date: Wed, 3 Dec 2025 17:46:29 +0900 Subject: [PATCH 144/290] delete already merged files [skip ci] --- .../Assets/Editor/Scripts/MaterialName.cs | 8 - .../Editor/Scripts/MaterialName.cs.meta | 2 - .../Editor/Scripts/MaterialPropertyInfo.cs | 7 - .../Scripts/MaterialPropertyInfo.cs.meta | 2 - .../Scripts/MaterialPropertyUIElement.cs | 10 - .../Scripts/MaterialPropertyUIElement.cs.meta | 2 - .../Editor/Scripts/MaterialUIElement.cs | 9 - .../Editor/Scripts/MaterialUIElement.cs.meta | 2 - .../Editor/Scripts/UnityToon3Das2DGUI.cs | 568 ----------------- .../Editor/Scripts/UnityToon3Das2DGUI.cs.meta | 2 - .../Assets/Editor/Scripts/Utilities.meta | 8 - .../Editor/Scripts/Utilities/EnumUtility.cs | 37 -- .../Scripts/Utilities/EnumUtility.cs.meta | 2 - .../Scripts/Utilities/ToonEditorGUIUtility.cs | 170 ----- .../Utilities/ToonEditorGUIUtility.cs.meta | 2 - Toonshader_ProjectURP/Assets/Samples.meta | 8 - .../ScriptsDev/ToonCameraViewController.cs | 24 - .../ToonCameraViewController.cs.meta | 2 - .../ToonDirectionalLightController.cs | 35 -- .../ToonDirectionalLightController.cs.meta | 2 - .../Assets/Shaders/ObjectTransform.hlsl | 17 - .../Assets/Shaders/ObjectTransform.hlsl.meta | 7 - .../Assets/Shaders/ShapeLight2D.hlsl | 99 --- .../Assets/Shaders/ShapeLight2D.hlsl.meta | 7 - .../Assets/Shaders/Toon3Das2D.shader | 585 ------------------ .../Assets/Shaders/Toon3Das2D.shader.meta | 9 - 26 files changed, 1626 deletions(-) delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities.meta delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/Samples.meta delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl delete mode 100644 Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl.meta delete mode 100644 Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl delete mode 100644 Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl.meta delete mode 100644 Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader delete mode 100644 Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader.meta diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs deleted file mode 100644 index 1e94c2866..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs +++ /dev/null @@ -1,8 +0,0 @@ -using UnityEngine; - -internal class MaterialName { - internal readonly string name; - internal readonly int nameID; - internal MaterialName(string s) { name = s; nameID = Shader.PropertyToID(s); } -} - diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs.meta deleted file mode 100644 index 30a5deef4..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 0428cf2e3aaf4c54ba04d9e9949d9cc7 diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs deleted file mode 100644 index 953cbd63c..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs +++ /dev/null @@ -1,7 +0,0 @@ -using UnityEditor; - -internal class MaterialPropertyInfo { - internal MaterialProperty prop; - internal int id; -} - diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs.meta deleted file mode 100644 index a7c43105c..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: a233b827442dc9d4fada0418da91533a diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs deleted file mode 100644 index c4973aaea..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs +++ /dev/null @@ -1,10 +0,0 @@ - -using UnityEngine; - -internal class MaterialPropertyUIElement { - internal GUIContent label; - internal MaterialPropertyInfo mainProperty; - internal MaterialPropertyInfo extraProperty1; - internal MaterialPropertyInfo extraProperty2; -} - diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs.meta deleted file mode 100644 index 516a4595b..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 0926110c81ecaf64a877cafc3ae63176 diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs deleted file mode 100644 index 336294798..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs +++ /dev/null @@ -1,9 +0,0 @@ -using UnityEngine; - -internal class MaterialUIElement { - internal GUIContent label; - internal MaterialName mainPropertyName; - internal MaterialName extraPropertyName1; - internal MaterialName extraPropertyName2; -} - diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs.meta deleted file mode 100644 index e76c14724..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 66ff40605a2055e4cab580db1e179d1b diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs deleted file mode 100644 index 459fb5af0..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ /dev/null @@ -1,568 +0,0 @@ -using System.Collections.Generic; -using UnityEditor; -using UnityEditor.Rendering; -using UnityEngine; - -class UnityToon3Das2DGUI : UnityEditor.ShaderGUI { - private Material m_lastMaterial; - - public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { - - if (null == mEditor.targets || mEditor.targets.Length == 0) { - return; - } - - int numTargets = mEditor.targets.Length; - Material[] mats = new Material[numTargets]; - for (int i = 0; i < numTargets; ++i) { - mats[i] = mEditor.targets[i] as Material; - } - - InitMaterialPropertyUIElements(props); - - if (mats[0] != m_lastMaterial) { - RefreshFoldouts(mats[0], m_materialPropertyUIElements); - } - - EditorGUI.BeginChangeCheck(); - DrawThreeColorsGUI(mEditor, mats, m_materialPropertyUIElements, ref m_colorsFoldout); - DrawShadingGUI(mEditor, mats, m_materialPropertyUIElements, ref m_shadingFoldout); - DrawLightingGUI(mEditor, mats, m_materialPropertyUIElements, ref m_lightingFoldout); - - DrawNormalMapGUI(mEditor, m_materialPropertyUIElements, ref m_normalMapFoldout); - DrawOutlineGUI(mEditor, mats, m_materialPropertyUIElements, ref m_outlineFoldout); - - - if (EditorGUI.EndChangeCheck()) { - mEditor.PropertiesChanged(); - } - - m_lastMaterial = mats[0]; - } - - void RefreshFoldouts(Material mat, Dictionary uiElements) { - - m_colorsFoldout = true; - m_shadingFoldout = true; - - m_normalMapFoldout = true; - m_outlineFoldout = mat.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); - - bool lightEnabled = mat.GetInteger(uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_USE].mainProperty.id) !=0; - m_lightingFoldout = lightEnabled; - - } - -//---------------------------------------------------------------------------------------------------------------------- - static void DrawThreeColorsGUI(MaterialEditor mEditor, Material[] mats, - Dictionary uiElements, ref bool foldout) - { - - ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, COLORS_FOLDOUT); - if (!foldout) - return; - - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_MAIN_TEX]); - - EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_USE_BASE_AS1_ST], out bool applyTo1st ); - EditorGUI.indentLevel -= 2; - - if (applyTo1st) { - EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[SHADER_PROP_1_ST_SHADE_COLOR]); - EditorGUI.indentLevel -= 2; - } else { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_1_ST_SHADE_MAP]); - } - - EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_USE_1ST_AS_2ND], out bool applyTo2nd); - EditorGUI.indentLevel -= 2; - - - if (applyTo2nd) { - EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[SHADER_PROP_2ND_SHADE_COLOR]); - EditorGUI.indentLevel -= 2; - } else { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_2ND_SHADE_MAP]); - } - EditorGUILayout.Space(); - } - -//---------------------------------------------------------------------------------------------------------------------- - static void DrawShadingGUI(MaterialEditor mEditor, Material[] mats, - Dictionary uiElements, ref bool foldout) - { - - ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, SHADING_FOLDOUT); - if (!foldout) - return; - - EditorGUILayout.LabelField("Base to 1st Shade"); - EditorGUI.indentLevel += INDENT_SIZE; - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_BASE_TO_1ST_SHADE_START]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_BASE_TO_1ST_SHADE_FEATHER]); - EditorGUI.indentLevel -= INDENT_SIZE; - - EditorGUILayout.LabelField("1st to 2nd Shade"); - EditorGUI.indentLevel += INDENT_SIZE; - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_1ST_TO_2ND_SHADE_START]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_1ST_TO_2ND_SHADE_FEATHER]); - EditorGUI.indentLevel -= INDENT_SIZE; - - EditorGUILayout.Space(); - } - -//---------------------------------------------------------------------------------------------------------------------- - - static void DrawLightingGUI(MaterialEditor mEditor, Material[] mats, - Dictionary uiElements, ref bool foldout) { - - ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, LIGHTING_FOLDOUT); - - - - if (!foldout) - return; - - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_2D_LIGHT_STRENGTH]); - EditorGUILayout.Space(); - - ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_USE], - out bool directionalLightEnabled); - - EditorGUI.indentLevel+= INDENT_SIZE; - - EditorGUI.BeginDisabledGroup(!directionalLightEnabled); - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction]); - ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH]); - - EditorGUILayout.LabelField("Highlight Settings"); - EditorGUI.indentLevel+= INDENT_SIZE; - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION]); - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_HIGHLIGHT_TEX]); - ToonEditorGUIUtility.DrawIntPopupGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE], - m_highlightModeEnums, m_highlightModeIndices,out int _); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_SIZE]); - - EditorGUI.indentLevel-= INDENT_SIZE; - - EditorGUI.EndDisabledGroup(); - - EditorGUI.indentLevel-= INDENT_SIZE; - EditorGUILayout.Space(); - - } - -//---------------------------------------------------------------------------------------------------------------------- - static void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements, - ref bool foldout) { - - ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, uiElements[SHADER_PROP_NORMAL_MAP].label); - if (!foldout) - return; - - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_NORMAL_MAP]); - mEditor.TextureScaleOffsetProperty(uiElements[SHADER_PROP_NORMAL_MAP].mainProperty.prop); - - EditorGUILayout.Space(); - } - - - static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements, ref bool foldout) - { - bool isOutlineEnabled = mats[0].GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); - - - if (ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, ref foldout, ref isOutlineEnabled, "Outline")) - { - foreach (Material m in mats) - m.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); - } - - - if (!foldout) - return; - - //Outline Settings - EditorGUI.indentLevel++; - EditorGUI.BeginDisabledGroup(!isOutlineEnabled); - - ToonEditorGUIUtility.DrawIntPopupGUI(mEditor, mats, uiElements[SHADER_PROP_OUTLINE_MODE], - m_outlineModeEnums, m_outlineModeIndices, out int outlineMode); - - const string OUTLINE_NORMAL_KEYWORD = "TOON_OUTLINE_NORMAL";; - const string OUTLINE_POSITION_KEYWORD = "TOON_OUTLINE_POS"; - - switch (outlineMode) { - case (int) OutlineMode.NormalDirection: - foreach (Material m in mats) { - m.EnableKeyword(OUTLINE_NORMAL_KEYWORD); - m.DisableKeyword(OUTLINE_POSITION_KEYWORD); - } - break; - case (int) OutlineMode.PositionScaling: - foreach (Material m in mats) { - m.DisableKeyword(OUTLINE_NORMAL_KEYWORD); - m.EnableKeyword(OUTLINE_POSITION_KEYWORD); - } - break; - } - - - EditorGUI.BeginDisabledGroup(outlineMode != (int) OutlineMode.NormalDirection); - { - ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_OUTLINE_USE_NORMAL_MAP], - out bool useCustom); - EditorGUI.BeginDisabledGroup(!useCustom); - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor,uiElements[SHADER_PROP_OUTLINE_NORMAL_MAP]); - EditorGUI.EndDisabledGroup(); - } - EditorGUI.EndDisabledGroup(); - - - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[SHADER_PROP_OUTLINE_WIDTH]); - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_OUTLINE_WIDTH_MAP]); - - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_OUTLINE_TEX]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_OUTLINE_BASE_COLOR_BLEND]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_OUTLINE_LIGHT_COLOR_BLEND]); - - - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[SHADER_PROP_OUTLINE_OFFSET_Z]); - - - EditorGUILayout.Space(); - { - EditorGUILayout.LabelField("Camera Distance for Outline Width"); - EditorGUI.indentLevel++; - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[SHADER_PROP_OUTLINE_NEAR]); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[SHADER_PROP_OUTLINE_FAR]); - EditorGUI.indentLevel--; - - - } - EditorGUI.EndDisabledGroup(); //!isOutlineEnabled - EditorGUI.indentLevel--; - - EditorGUILayout.Space(); - } - - -//---------------------------------------------------------------------------------------------------------------------- - - void InitMaterialPropertyUIElements(MaterialProperty[] allProps) { - int numProperties = m_materialUIElements.Count; - for (int i = 0; i < numProperties; ++i) { - MaterialUIElement propInfo = m_materialUIElements[i]; - - MaterialPropertyInfo mainProp = MaterialNameToPropertyInfo(propInfo.mainPropertyName, allProps); - MaterialPropertyInfo extraProperty1 = null!= propInfo.extraPropertyName1 ? - MaterialNameToPropertyInfo(propInfo.extraPropertyName1, allProps) : null; - - MaterialPropertyInfo extraProperty2 = null!= propInfo.extraPropertyName2 ? - MaterialNameToPropertyInfo(propInfo.extraPropertyName2, allProps) : null; - - - MaterialPropertyUIElement newElement10 = new MaterialPropertyUIElement { - label = propInfo.label, - mainProperty = mainProp, - extraProperty1 = extraProperty1, - extraProperty2 = extraProperty2, - }; - - m_materialPropertyUIElements[propInfo.mainPropertyName.name] = newElement10; - } - - } - -//---------------------------------------------------------------------------------------------------------------------- - - MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty[] allProps) { - MaterialPropertyInfo info = new MaterialPropertyInfo(); - info.prop = FindProperty(m.name, allProps); - info.id = m.nameID; - return info; - } - -//---------------------------------------------------------------------------------------------------------------------- - - private readonly Dictionary m_materialPropertyUIElements = new Dictionary(); - - private static readonly List m_materialUIElements = new List() { - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_MAIN_TEX), - label = new GUIContent("Base Map", "Base Color : Texture(sRGB) × Color(RGB)."), - extraPropertyName1 = new MaterialName(SHADER_PROP_BASE_COLOR), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_1_ST_SHADE_MAP), - label = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."), - extraPropertyName1 = new MaterialName(SHADER_PROP_1_ST_SHADE_COLOR), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_1_ST_SHADE_COLOR), - label = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_2ND_SHADE_MAP), - label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), - extraPropertyName1 = new MaterialName(SHADER_PROP_2ND_SHADE_COLOR) - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_2ND_SHADE_COLOR), - label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_USE_BASE_AS1_ST), - label = new GUIContent("Apply to 1st shading map", "Apply Base map to the 1st shading map."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_USE_1ST_AS_2ND), - label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), - }, - - //Shading - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_BASE_TO_1ST_SHADE_START), - label = new GUIContent("Start", - "The threshold for transitioning to the 1st shade color. " + - "0: use the base color (no transition), " + - "1: starts transitioning immediately."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_BASE_TO_1ST_SHADE_FEATHER), - label = new GUIContent("Feather", "Controls feathering to the 1st shade color. 0: sharp transition, 1: fully feathered."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_1ST_TO_2ND_SHADE_START), - label = new GUIContent("Start", - "The threshold for transitioning to the 2nd shade color. " + - "0: use the 1st shade color (no transition), " + - "1: starts transitioning immediately."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_1ST_TO_2ND_SHADE_FEATHER), - label = new GUIContent("Feather", "Controls feathering to the 2nd shade color. 0: sharp transition, 1: fully feathered."), - }, - - //Lighting - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_2D_LIGHT_STRENGTH), - label = new GUIContent("2D Light Factor", - "Multiplier for the 2D light contribution."), - }, - //Custom Directional Light - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_USE), - label = new GUIContent("Custom Directional Light", - "Apply a custom directional light."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction), - label = new GUIContent("Light Direction", - "The direction of the custom directional light. "), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color), - label = new GUIContent("Light Color", - "The color of the custom directional light. "), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity), - label = new GUIContent("Light Intensity", - "The intensity of the custom directional light. "), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH), - label = new GUIContent("Diffuse Strength", - "Multiplier for the diffuse contribution."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(Toon3Das2DConstants.SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION), - label = new GUIContent("View Position", "Camera View Position"), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_HIGHLIGHT_TEX), - label = new GUIContent("Highlight Map", "Highlight Map."), - extraPropertyName1 = new MaterialName(SHADER_PROP_HIGHLIGHT_COLOR) - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE), - label = new GUIContent("Mode", "Highlight mode."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH), - label = new GUIContent("Highlight Strength", "Multiplier for the highlight contribution."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_SIZE), - label = new GUIContent("Highlight Size", "Highlight size."), - }, - - - //Normal Map - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_NORMAL_MAP), - label = new GUIContent("Normal Map", "A texture that specifies the bumpiness of the material."), - extraPropertyName1 = new MaterialName(SHADER_PROP_BUMP_SCALE), - }, - - //Outline Start - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_WIDTH), - label = new GUIContent("Outline Width", - "The width of the outline."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_WIDTH_MAP), - label = new GUIContent("Outline Width Map", - "Outline Width Map (grayscale, linear): White = full width, Black = 0 width."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_TEX), - label = new GUIContent("Outline Color", "The color of outline."), - extraPropertyName1 = new MaterialName(SHADER_PROP_OUTLINE_COLOR), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_BASE_COLOR_BLEND), - label = new GUIContent("Blend Base Color to Outline", - "Blend base color to outline color."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_LIGHT_COLOR_BLEND), - label = new GUIContent("Blend Light Color to Outline", - "Blend the combined effect of 2D lighting and custom directional light to the outline color."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_OFFSET_Z), - label = new GUIContent("Z Offset", - "Offsets the outline in the depth (Z) direction of the camera."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_NEAR), - label = new GUIContent("Near", - "Nearest distance for maximum outline width."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_FAR), - label = new GUIContent("Far", - "Furthest distance where outline fades to zero width."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_MODE), - label = new GUIContent("Outline Mode", - "Specifies how the outline is generated."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_USE_NORMAL_MAP), - label = new GUIContent("Use Normal Map", - "Use a normal map for outline."), - }, - - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_NORMAL_MAP), - label = new GUIContent("Normal Map", - "Normal map for outline. "), - }, - //Outline End - - }; - - - //Common constants - //Colors - internal const string SHADER_PROP_BASE_COLOR = "_BaseColor"; - internal const string SHADER_PROP_MAIN_TEX = "_MainTex"; - - internal const string SHADER_PROP_1_ST_SHADE_COLOR = "_1st_ShadeColor"; - internal const string SHADER_PROP_1_ST_SHADE_MAP = "_1st_ShadeMap"; - internal const string SHADER_PROP_USE_BASE_AS1_ST = "_Use_BaseAs1st"; - - internal const string SHADER_PROP_2ND_SHADE_COLOR = "_2nd_ShadeColor"; - internal const string SHADER_PROP_2ND_SHADE_MAP = "_2nd_ShadeMap"; - internal const string SHADER_PROP_USE_1ST_AS_2ND = "_Use_1stAs2nd"; - - //Shading - internal const string SHADER_PROP_BASE_TO_1ST_SHADE_START = "_BaseTo1st_ShadeStart"; - internal const string SHADER_PROP_BASE_TO_1ST_SHADE_FEATHER = "_BaseTo1st_ShadeFeather"; - internal const string SHADER_PROP_1ST_TO_2ND_SHADE_START = "_1stTo2nd_ShadeStart"; - internal const string SHADER_PROP_1ST_TO_2ND_SHADE_FEATHER = "_1stTo2nd_ShadeFeather"; - - internal const string SHADER_PROP_2D_LIGHT_STRENGTH = "_2DLightStrength"; - - //Lighting - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_USE = "_DirectionalLight_Use"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH = "_DirectionalLight_DiffuseStrength"; - - - internal const string SHADER_PROP_HIGHLIGHT_COLOR = "_HighlightColor"; - internal const string SHADER_PROP_HIGHLIGHT_TEX = "_HighlightTex"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE = "_DirectionalLight_HighlightMode"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH = "_DirectionalLight_HighlightStrength"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_SIZE = "_DirectionalLight_HighlightSize"; - - - - internal const string SHADER_PROP_NORMAL_MAP = "_NormalMap"; - internal const string SHADER_PROP_BUMP_SCALE = "_BumpScale"; - - internal const string SHADER_PROP_OUTLINE_MODE = "_OutlineMode"; - internal const string SHADER_PROP_OUTLINE_WIDTH = "_OutlineWidth"; - internal const string SHADER_PROP_OUTLINE_WIDTH_MAP = "_OutlineWidthMap"; - internal const string SHADER_PROP_OUTLINE_TEX = "_OutlineTex"; - internal const string SHADER_PROP_OUTLINE_COLOR = "_OutlineColor"; - internal const string SHADER_PROP_OUTLINE_BASE_COLOR_BLEND = "_Outline_BaseColorBlend"; - internal const string SHADER_PROP_OUTLINE_LIGHT_COLOR_BLEND = "_Outline_LightColorBlend"; - internal const string SHADER_PROP_OUTLINE_OFFSET_Z = "_OutlineOffsetZ"; - internal const string SHADER_PROP_OUTLINE_NEAR = "_OutlineNear"; - internal const string SHADER_PROP_OUTLINE_FAR = "_OutlineFar"; - - internal const string SHADER_PROP_OUTLINE_USE_NORMAL_MAP = "_Outline_UseNormalMap"; - internal const string SHADER_PROP_OUTLINE_NORMAL_MAP = "_Outline_NormalMap"; - - - - //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. - const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; - - internal enum OutlineMode { - NormalDirection, - PositionScaling - } - - internal enum HighlightMode { - Hard, - Soft, - } - - private static readonly GUIContent[] m_outlineModeEnums= EnumUtility.ToInspectorNamesAsGUIContent(typeof(OutlineMode)); - private static readonly int[] m_outlineModeIndices = EnumUtility.ToIndices(typeof(OutlineMode)); - - private static readonly GUIContent[] m_highlightModeEnums = EnumUtility.ToInspectorNamesAsGUIContent(typeof(HighlightMode)); - private static readonly int[] m_highlightModeIndices = EnumUtility.ToIndices(typeof(HighlightMode)); - - static readonly GUIContent COLORS_FOLDOUT = EditorGUIUtility.TrTextContent("Colors", - "Colors for basic cel-shading settings in Unity Toon Shader."); - - static readonly GUIContent SHADING_FOLDOUT = EditorGUIUtility.TrTextContent("Shading", "Shading settings."); - - static readonly GUIContent LIGHTING_FOLDOUT - = EditorGUIUtility.TrTextContent("Lighting", "Lighting settings."); - - bool m_colorsFoldout = true; - bool m_shadingFoldout = true; - bool m_normalMapFoldout = false; - bool m_outlineFoldout = false; - bool m_lightingFoldout = false; - - private const int INDENT_SIZE = 2; - -} - diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs.meta deleted file mode 100644 index ce543e820..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 90970b66b10259d49ba803d27ee33afc diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities.meta deleted file mode 100644 index c05e4929b..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 090af0a94f53c7a4fb6cdf6254373deb -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs deleted file mode 100644 index 49a7018da..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs +++ /dev/null @@ -1,37 +0,0 @@ - -using System; -using System.Collections.Generic; -using System.Reflection; -using UnityEngine; - -internal static class EnumUtility { - internal static GUIContent[] ToInspectorNamesAsGUIContent(Type t) { - MemberInfo[] members = t.GetMembers(BindingFlags.Static | BindingFlags.Public); - - int numMembers = members.Length; - GUIContent[] ret = new GUIContent[numMembers]; - for (int i = 0; i < numMembers; i++) { - InspectorNameAttribute inspectorNameAttribute = (InspectorNameAttribute) Attribute.GetCustomAttribute( - members[i], typeof(InspectorNameAttribute)); - if (inspectorNameAttribute == null) { - ret[i] = new GUIContent(members[i].Name); - } else { - ret[i] = new GUIContent(inspectorNameAttribute.displayName); - } - } - return ret; - } - - internal static int[] ToIndices(Type t) { - - MemberInfo[] members = t.GetMembers(BindingFlags.Static | BindingFlags.Public); - int numMembers = members.Length; - int[] indices = new int[numMembers]; - for (int i = 0; i < numMembers; ++i) { - indices[i] = i; - } - return indices; - - } - -} diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs.meta deleted file mode 100644 index cb73a5ca9..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 05528202f03325348a70db7be3aa1271 diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs deleted file mode 100644 index f9b037f4b..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs +++ /dev/null @@ -1,170 +0,0 @@ - -using UnityEditor; -using UnityEngine; - -internal static class ToonEditorGUIUtility { - - internal static void DrawTexturePropertySingleLineGUI(MaterialEditor mEditor, MaterialPropertyUIElement element) { - if (null!= element.extraProperty2) - mEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop, element.extraProperty2.prop); - else if (null!= element.extraProperty1) - mEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop); - else - mEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop); - } - - internal static void DrawColorPropertyGUI(MaterialEditor mEditor, MaterialPropertyUIElement element) { - mEditor.ColorProperty(element.mainProperty.prop, element.label.text); - } - - internal static void DrawRangePropertyGUI(MaterialEditor mEditor, MaterialPropertyUIElement element) { - mEditor.RangeProperty(element.mainProperty.prop, element.label.text); - } - - - internal static bool DrawToggleGUI(MaterialEditor mEditor, Material[] mats, - MaterialPropertyUIElement element) - { - return DrawToggleGUI(mEditor, mats, element, out bool _); - } - - internal static bool DrawToggleGUI(MaterialEditor mEditor, Material[] mats, - MaterialPropertyUIElement element, out bool newValue) - { - bool prevValue = mats[0].GetInteger(element.mainProperty.id) !=0; - EditorGUI.BeginChangeCheck(); - newValue = EditorGUILayout.Toggle(element.label, prevValue); - if (!EditorGUI.EndChangeCheck()) - return false; - - mEditor.RegisterPropertyChangeUndo(element.label.text); - foreach (Material m in mats) - m.SetInteger(element.mainProperty.id, newValue ? 1 : 0); - return true; - } - - internal static void DrawFloatFieldGUI(MaterialEditor mEditor, MaterialPropertyUIElement element) { - mEditor.FloatProperty(element.mainProperty.prop, element.label.text); - } - - internal static void DrawColorFieldGUI(MaterialEditor mEditor, MaterialPropertyUIElement element) { - mEditor.ColorProperty(element.mainProperty.prop, element.label.text); - } - - internal static bool DrawVector3FieldGUI(MaterialEditor mEditor, Material[] mats, - MaterialPropertyUIElement element) - { - return DrawVector3FieldGUI(mEditor, mats, element, out Vector3 _); - } - - //return true if changed, false otherwise - internal static bool DrawVector3FieldGUI(MaterialEditor mEditor, Material[] mats, - MaterialPropertyUIElement element, out Vector3 newValue) - { - Vector3 prevValue = mats[0].GetVector(element.mainProperty.id); - EditorGUI.BeginChangeCheck(); - newValue = EditorGUILayout.Vector3Field(element.label, prevValue); - - if (!EditorGUI.EndChangeCheck()) - return false; - - mEditor.RegisterPropertyChangeUndo(element.label.text); - foreach (Material m in mats) - m.SetVector(element.mainProperty.id, newValue); - return true; - - } - - //return true if changed, false otherwise - internal static bool DrawIntPopupGUI(MaterialEditor mEditor, Material[] mats, - MaterialPropertyUIElement element, GUIContent[] displayedOptions, int[] optionValues, out int newValue) - { - int prevValue = mats[0].GetInteger(element.mainProperty.id); - - EditorGUI.BeginChangeCheck(); - newValue = EditorGUILayout.IntPopup(element.label, prevValue, displayedOptions, optionValues); - - if (!EditorGUI.EndChangeCheck()) - return false; - - mEditor.RegisterPropertyChangeUndo(element.label.text); - foreach (Material m in mats) - m.SetInteger(element.mainProperty.id, newValue); - return true; - - } - - - //return true if changed, false otherwise - internal static bool DrawFoldoutGUI(ref bool state, GUIContent label) { - - Rect lineRect = EditorGUILayout.GetControlRect(false, 16); - - DrawBGRect(lineRect); - - EditorGUI.BeginChangeCheck(); - state = EditorGUI.Foldout(lineRect, state, label); - return EditorGUI.EndChangeCheck(); - } - - //return true if changed, false otherwise - internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, - ref bool foldoutState, ref bool toggleEnabled, string label) - { - GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); - Rect lineRect = EditorGUILayout.GetControlRect(false, 16); - Rect foldoutRect = new Rect(lineRect.x, lineRect.y, 16, lineRect.height); - Rect toggleRect = new Rect(foldoutRect.xMax, lineRect.y, 16, lineRect.height); - Rect labelRect = new Rect(toggleRect.xMax + 2, lineRect.y, lineRect.width - 34, lineRect.height); - - DrawBGRect(lineRect); - - EditorGUI.BeginChangeCheck(); - foldoutState = EditorGUI.Foldout(foldoutRect, foldoutState, GUIContent.none, true, foldoutStyle); - toggleEnabled = EditorGUI.Toggle(toggleRect, toggleEnabled); - EditorGUI.LabelField(labelRect, label); - - if (!EditorGUI.EndChangeCheck()) - return false; - - mEditor.RegisterPropertyChangeUndo(label); - return true; - - } - - //return true if changed, false otherwise - internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, Material[] mats, - MaterialPropertyUIElement element, ref bool foldoutState, out bool toggleEnabled) - { - toggleEnabled = mats[0].GetInteger(element.mainProperty.id) !=0; - bool ret = DrawFoldoutWithToggleGUI(mEditor, ref foldoutState, ref toggleEnabled, element.label.text); - if (!ret) - return false; - foreach (Material m in mats) - m.SetInteger(element.mainProperty.id, toggleEnabled ? 1 : 0); - - return true; - } - - - static void DrawBGRect(Rect lineRect) { - - float initialPadding = lineRect.x; - Rect bgRect = new Rect(0, lineRect.y, lineRect.width + initialPadding, lineRect.height); - - Color bgColor = GetBGColor(); - EditorGUI.DrawRect(bgRect, bgColor); - - // Draw top border - Rect topBorderRect = new Rect(bgRect.x, bgRect.y, bgRect.width, 1); - EditorGUI.DrawRect(topBorderRect, new Color(0.12f, 0.12f, 0.12f, 1f)); - } - - static Color GetBGColor() { - return !EditorGUIUtility.isProSkin - ? new Color(0.6f, 0.6f, 0.6f, 1.0f) - : new Color(0.20f, 0.20f, 0.20f, 1.0f); - } - - -} diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs.meta deleted file mode 100644 index c1469258d..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: fe63760a0f620a142a80e4a239dbc7f8 diff --git a/Toonshader_ProjectURP/Assets/Samples.meta b/Toonshader_ProjectURP/Assets/Samples.meta deleted file mode 100644 index 34bd6165f..000000000 --- a/Toonshader_ProjectURP/Assets/Samples.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7fd12dfadcd915441a5df9453615a65d -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs deleted file mode 100644 index 7861e5e06..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -[ExecuteAlways] -internal class ToonCameraViewController : MonoBehaviour { - private void OnEnable() { - m_transform = transform; - } - - void Update() { - Vector3 pos = m_transform.position; - foreach (Material mat in m_materials) { - if (mat == null) continue; - mat.SetVector(Toon3Das2DConstants.SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION, pos); - } - } - - -//---------------------------------------------------------------------------------------------------------------------- - [SerializeField] private List m_materials = new List(); - - private Transform m_transform; -} \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta deleted file mode 100644 index c6f5c36a3..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 76eb1733b1eefbe4fb94e0398915fc49 diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs deleted file mode 100644 index e5aef079d..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -[ExecuteAlways] -[RequireComponent(typeof(Light))] -internal class ToonDirectionalLightController : MonoBehaviour { - void OnEnable() { - m_light = GetComponent(); - } - - - void Update() { - if (m_light.type != LightType.Directional) { - return; - } - - Vector3 lightDir = m_light.transform.forward; - Color lightColor = m_light.color; - float lightIntensity = m_light.intensity; - - foreach (Material mat in m_materials) { - if (mat == null) continue; - mat.SetVector(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction, lightDir); - mat.SetColor(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color, lightColor); - mat.SetFloat(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity, lightIntensity); - } - } - - -//---------------------------------------------------------------------------------------------------------------------- - [SerializeField] private List m_materials = new List(); - -//---------------------------------------------------------------------------------------------------------------------- - Light m_light; -} \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs.meta deleted file mode 100644 index 801eab182..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 95eb0866ac8fd424c8dfba8d023d36df \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl b/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl deleted file mode 100644 index bc794b9e0..000000000 --- a/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -inline float4 UnityObjectToClipPosInstanced(in float3 pos) { - return mul(UNITY_MATRIX_VP, mul(GetObjectToWorldMatrix(), float4(pos, 1.0))); -} -#define UnityObjectToClipPos UnityObjectToClipPosInstanced - - -inline float3 UnityObjectToWorldNormal(in float3 norm) -{ - #ifdef UNITY_ASSUME_UNIFORM_SCALING - return UnityObjectToWorldDir(norm); - #else - // mul(IT_M, norm) => mul(norm, I_M) => {dot(norm, I_M.col0), dot(norm, I_M.col1), dot(norm, I_M.col2)} - return normalize(mul(norm, (float3x3)GetWorldToObjectMatrix())); - #endif -} diff --git a/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl.meta b/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl.meta deleted file mode 100644 index a1165fead..000000000 --- a/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 9b41c14789eff344cb5a038c3548f99e -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl b/Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl deleted file mode 100644 index df4a0cf65..000000000 --- a/Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl +++ /dev/null @@ -1,99 +0,0 @@ -#pragma once - - -#include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" //_ShapeLightTexture - -struct ShapeLightResult { - half4 mod; - half4 add; -}; - -//---------------------------------------------------------------------------------------------------------------------- - -ShapeLightResult CombinedShapeLight(in half4 mask, in half2 lightingUV) -{ - ShapeLightResult ret = (ShapeLightResult)0; - - #if defined(DEBUG_DISPLAY) - half4 debugColor = 0; - - if (CanDebugOverrideOutputColor(surfaceData, inputData, debugColor)) - { - ret.mod = ret.add = debugColor; - return ret; - } - #endif - -#if USE_SHAPE_LIGHT_TYPE_0 - half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); - - if (any(_ShapeLightMaskFilter0)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter0) * mask + _ShapeLightInvertedFilter0 * (1 - mask); - shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); - } - - half4 shapeLight0Modulate = shapeLight0 * _ShapeLightBlendFactors0.x; - half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; -#else - half4 shapeLight0Modulate = 0; - half4 shapeLight0Additive = 0; -#endif - -#if USE_SHAPE_LIGHT_TYPE_1 - half4 shapeLight1 = SAMPLE_TEXTURE2D(_ShapeLightTexture1, sampler_ShapeLightTexture1, lightingUV); - - if (any(_ShapeLightMaskFilter1)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter1) * mask + _ShapeLightInvertedFilter1 * (1 - mask); - shapeLight1 *= dot(processedMask, _ShapeLightMaskFilter1); - } - - half4 shapeLight1Modulate = shapeLight1 * _ShapeLightBlendFactors1.x; - half4 shapeLight1Additive = shapeLight1 * _ShapeLightBlendFactors1.y; -#else - half4 shapeLight1Modulate = 0; - half4 shapeLight1Additive = 0; -#endif - -#if USE_SHAPE_LIGHT_TYPE_2 - half4 shapeLight2 = SAMPLE_TEXTURE2D(_ShapeLightTexture2, sampler_ShapeLightTexture2, lightingUV); - - if (any(_ShapeLightMaskFilter2)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter2) * mask + _ShapeLightInvertedFilter2 * (1 - mask); - shapeLight2 *= dot(processedMask, _ShapeLightMaskFilter2); - } - - half4 shapeLight2Modulate = shapeLight2 * _ShapeLightBlendFactors2.x; - half4 shapeLight2Additive = shapeLight2 * _ShapeLightBlendFactors2.y; -#else - half4 shapeLight2Modulate = 0; - half4 shapeLight2Additive = 0; -#endif - -#if USE_SHAPE_LIGHT_TYPE_3 - half4 shapeLight3 = SAMPLE_TEXTURE2D(_ShapeLightTexture3, sampler_ShapeLightTexture3, lightingUV); - - if (any(_ShapeLightMaskFilter3)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter3) * mask + _ShapeLightInvertedFilter3 * (1 - mask); - shapeLight3 *= dot(processedMask, _ShapeLightMaskFilter3); - } - - half4 shapeLight3Modulate = shapeLight3 * _ShapeLightBlendFactors3.x; - half4 shapeLight3Additive = shapeLight3 * _ShapeLightBlendFactors3.y; -#else - half4 shapeLight3Modulate = 0; - half4 shapeLight3Additive = 0; -#endif - - half4 finalOutput; -#if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 -#else - ret.mod = shapeLight0Modulate + shapeLight1Modulate + shapeLight2Modulate + shapeLight3Modulate; - ret.add = shapeLight0Additive + shapeLight1Additive + shapeLight2Additive + shapeLight3Additive; -#endif - - return ret; -} diff --git a/Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl.meta b/Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl.meta deleted file mode 100644 index 0bd1bb12f..000000000 --- a/Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 5bc7437a7c5f9e543b48e4927ebaa2f2 -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader deleted file mode 100644 index 2bf98afd6..000000000 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader +++ /dev/null @@ -1,585 +0,0 @@ -Shader "Toon/Toon 3D as 2D"{ - Properties{ - - _BaseColor ("Base Color", Color) = (1,1,1,1) - _MainTex ("Main Texture", 2D) = "white" {} - - //Three Colors - _1st_ShadeColor ("1st Shade Color", Color) = (0.5,0.5,0.5,1) - _1st_ShadeMap ("1st Shade Map", 2D) = "white" {} - [Toggle(_)] _Use_BaseAs1st ("Use BaseMap as 1st_ShadeMap", Integer ) = 0 - _2nd_ShadeColor ("2nd Shade Color", Color) = (0.1,0.1,0.1,1) - _2nd_ShadeMap ("2nd Shade Map", 2D) = "white" {} - [Toggle(_)] _Use_1stAs2nd ("Use 1st ShadeMap as 2nd ShadeMap", Integer ) = 0 - - //Start and Feather - _BaseTo1st_ShadeStart ("Base to 1st Shade Start", Range(0, 1)) = 0.5 - _BaseTo1st_ShadeFeather ("Base to 1st Shade Feather", Range(0, 1)) = 0.1 - _1stTo2nd_ShadeStart ("1st to 2nd Shade Start", Range(0, 1)) = 0.25 - _1stTo2nd_ShadeFeather ("1st to 2nd Shade Feather", Range(0, 1)) = 0.1 - - _2DLightStrength ("2D Light Strength", Range(0,1)) = 1 - - _MaskTex("Mask", 2D) = "white" {} - _NormalMap("Normal Map", 2D) = "bump" {} - _BumpScale ("Normal Scale", Range(0, 1)) = 1 - - [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching - - //Directional Light - _DirectionalLight_Use ("Use Directional Light", Integer) = 0 - _DirectionalLight_Direction ("Directional Light Direction", Vector) = (0,-1,0,0) - _DirectionalLight_Color("Directional Light Color", Color) = (1,1,1,1) - _DirectionalLight_Intensity ("Directional Light Intensity", float) = 0.5 - _DirectionalLight_DiffuseStrength ("Directional Light: Diffuse Strength", Range(0,1)) = 0.5 - - _DirectionalLight_ViewPosition ("Directional Light: View Position", Vector) = (0,0,1,0) - _HighlightColor ("Highlight Color", Color) = (1,1,1,1) - _HighlightTex ("HighColor Map", 2D) = "white" {} - _DirectionalLight_HighlightMode ("Directional Light: Highlight Mode", Integer) = 0 //0: Hard, 1: Soft - _DirectionalLight_HighlightStrength ("Directional Light: Highlight Strength", Range(0,1)) = 0.5 - _DirectionalLight_HighlightSize ("Directional Light: Highlight Size", Range(0,1)) = 0.3 - - //Outline - _OutlineMode("Outline Mode", Integer) = 0 - _OutlineWidth ("Outline Width", Float ) = 5 - _OutlineWidthMap ("Outline Width Map", 2D) = "white" {} - _OutlineColor ("Outline Color", Color) = (0.1,0.1,0.1,1) - _OutlineTex ("Outline Tex", 2D) = "white" {} - _Outline_BaseColorBlend ("Blend Base Color to Outline", Range(0,1) ) = 0.5 - _Outline_LightColorBlend ("Blend Light Color to Outline", Range(0,1) ) = 0.5 - _OutlineOffsetZ ("Outline Z Offset", Float) = 0.75 - _OutlineNear ("Outline Near", Float ) = 0.5 - _OutlineFar ("Outline Far", Float ) = 100 - _Outline_UseNormalMap ("Outline: Use Outline Normal Map", Integer ) = 0 - _Outline_NormalMap ("Outline Normal Map", 2D) = "bump" {} - - - } - - SubShader{ - Tags{ - "Queue" = "Transparent" "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" - } - - Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha - Cull Back - ZWrite On - - Stencil{ - Ref 128 // Put this in the last bit of our stencil value for maximum compatibility with sprite mask - Comp always - Pass replace - } - - Pass{ - Tags{ - "LightMode" = "Universal2D" - } - - HLSLPROGRAM - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" - - #pragma vertex ToonVertex - #pragma fragment ToonFragment - - //USE_SHAPE_LIGHT keywords - #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" - - // GPU Instancing - #pragma multi_compile_instancing - #pragma multi_compile _ DEBUG_DISPLAY - - struct Attributes { - float3 positionOS : POSITION; - float2 uv : TEXCOORD0; - float3 normal : NORMAL; - float4 tangent : TANGENT; - UNITY_VERTEX_INPUT_INSTANCE_ID - }; - - struct Varyings { - float4 positionCS : SV_POSITION; - float2 uv : TEXCOORD0; - half2 lightingUV : TEXCOORD1; - float3 normalWS : TEXCOORD2; - float4 tangentWS : TEXCOORD3; - float3 positionWS : TEXCOORD4; - UNITY_VERTEX_OUTPUT_STEREO - }; - - float4 _White; - - TEXTURE2D(_MainTex); - SAMPLER(sampler_MainTex); - UNITY_TEXTURE_STREAMING_DEBUG_VARS_FOR_TEX(_MainTex); - - TEXTURE2D(_MaskTex); - SAMPLER(sampler_MaskTex); - - TEXTURE2D(_NormalMap); - SAMPLER(sampler_NormalMap); - - - CBUFFER_START(UnityPerMaterial) - half4 _BaseColor; - float _BumpScale; - - //Three colors - float4 _1st_ShadeColor; - int _Use_BaseAs1st; - float4 _2nd_ShadeColor; - int _Use_1stAs2nd; - - //Start and Feather - float _BaseTo1st_ShadeStart; - float _BaseTo1st_ShadeFeather; - float _1stTo2nd_ShadeStart; - float _1stTo2nd_ShadeFeather; - - float _2DLightStrength; - - int _DirectionalLight_Use; - float3 _DirectionalLight_Direction; - float4 _DirectionalLight_Color; - float _DirectionalLight_Intensity; - float _DirectionalLight_DiffuseStrength; - - float3 _DirectionalLight_ViewPosition; - float4 _HighlightColor; - int _DirectionalLight_HighlightMode; - float _DirectionalLight_HighlightStrength; - float _DirectionalLight_HighlightSize; - - CBUFFER_END - -//---------------------------------------------------------------------------------------------------------------------- - float4 _MainTex_ST; - - TEXTURE2D(_1st_ShadeMap); - TEXTURE2D(_2nd_ShadeMap); - - TEXTURE2D(_HighlightTex); - SAMPLER(sampler_HighlightTex); - float4 _HighlightTex_ST; - - #include "ObjectTransform.hlsl" - #include "ShapeLight2D.hlsl" - - //_HDREmulationScale declaration - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightVariables.hlsl" - - Varyings ToonVertex(Attributes input) { - - Varyings o = (Varyings) 0; - UNITY_SETUP_INSTANCE_ID(input); - UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); - - o.positionCS = TransformObjectToHClip(input.positionOS); - const float3 normalWS = TransformObjectToWorldDir(input.normal); - - o.uv = input.uv; - o.lightingUV = half2(ComputeScreenPos(o.positionCS / o.positionCS.w).xy); - o.normalWS = normalWS; - - const float3 tangentWS = normalize( mul( GetObjectToWorldMatrix(), float4( input.tangent.xyz, 0 ) ).xyz); - o.tangentWS = float4(tangentWS, input.tangent.w); - o.positionWS = TransformObjectToWorld(input.positionOS); - - return o; - } - - - float3 ThreeColorsLinearShading( - float3 baseColor, - float3 firstColor, - float3 secondColor, - float3 baseTo1stStart, // t=0: use base, t=1: transition - float3 baseTo1stFeather, - float3 firstToSecondStart, //t=0: use base, t=1: transition - float3 firstToSecondFeather, - float dotNL) // dot(N.L) - { - const float t = saturate(1 - dotNL); //t = 0: light, t=1: dark shaded - - const float invBaseTo1stStart = 1 - baseTo1stStart; - const float invBaseTo2ndStart = 1 - firstToSecondStart; - - const float s1 = smoothstep(invBaseTo1stStart, invBaseTo1stStart + baseTo1stFeather,t); - const float s2 = smoothstep(invBaseTo2ndStart, invBaseTo2ndStart + firstToSecondFeather,t); - - float3 c01 = lerp(baseColor,firstColor, s1); - float3 c12 = lerp(c01, secondColor, s2); - return c12; - } - - - half4 CombinedShapeLightAndToon(ShapeLightResult shapeLightResult, SurfaceData2D surfaceData, - in float2 uv, - in float3 tangentWS, in float3 bitangentWS, in float3 normalWS, in float3 positionWS) - { - const half alpha = surfaceData.alpha; - - float3x3 tangentTransform = float3x3( tangentWS, bitangentWS, normalWS); - const float3 normalTS = surfaceData.normalTS; - float3 perturbedNormalWS = normalize(mul( normalTS, tangentTransform )); // Perturbed normals - - half4 light2dMod = shapeLightResult.mod; - half4 light2dAdd = shapeLightResult.add; - - const float light2dIntensity = max( - light2dMod.r * light2dAdd.r, max( - light2dMod.g + light2dAdd.g, - light2dMod.b + light2dAdd.b)); - - const half4 mainTex = half4(surfaceData.albedo, alpha); - const float3 baseAlbedo = _BaseColor.rgb * mainTex.rgb; - - //1st and 2nd Shade - const float4 firstShadeTex = lerp( - SAMPLE_TEXTURE2D(_1st_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), mainTex, - _Use_BaseAs1st); - const float3 firstShadeAlbedo = _1st_ShadeColor.rgb * firstShadeTex.rgb; - - const float4 secondShadeTex = lerp( - SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), firstShadeTex, - _Use_1stAs2nd); - const float3 secondShadeAlbedo = _2nd_ShadeColor.rgb * secondShadeTex.rgb; - - //perform 3 color linear shading with 2D colors and lights - const float3 color2D = ThreeColorsLinearShading( - (baseAlbedo * light2dMod + light2dAdd).rgb, - (firstShadeAlbedo * light2dMod + light2dAdd).rgb, - (secondShadeAlbedo * light2dMod + light2dAdd).rgb, - _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, - _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, light2dIntensity); - - - - //Toon Directional Light - const float3 directionalLightColorAndUse = _DirectionalLight_Color.rgb * _DirectionalLight_Use; - const float3 directionalLightDirection = normalize(-_DirectionalLight_Direction); - const float dotNL = 0.5 * dot( perturbedNormalWS, directionalLightDirection) + 0.5; - - const float3 toonDiffuseColor = ThreeColorsLinearShading( - baseAlbedo * directionalLightColorAndUse, - firstShadeAlbedo * directionalLightColorAndUse, - secondShadeAlbedo * directionalLightColorAndUse, - _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, - _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, - dotNL); - - const float3 finalDiffuseColor = color2D * _2DLightStrength + - toonDiffuseColor * _DirectionalLight_DiffuseStrength; - - //Highlight - const float3 viewDirection = normalize(_DirectionalLight_ViewPosition - positionWS); - const float3 halfDirection = normalize(viewDirection + directionalLightDirection); - float dotHN_01 = 0.5 * dot(halfDirection,perturbedNormalWS) + 0.5; - - const float highlight = - lerp( (1.0 - step(dotHN_01,(1.0 - pow(abs(_DirectionalLight_HighlightSize),5)))), - pow(abs(dotHN_01),exp2(lerp(11,1,_DirectionalLight_HighlightSize))), - _DirectionalLight_HighlightMode ); - - - const float4 highlightTex = SAMPLE_TEXTURE2D(_HighlightTex, sampler_HighlightTex, TRANSFORM_TEX(uv, _HighlightTex)); - const float3 highlightAlbedo = highlightTex.rgb * _HighlightColor.rgb; - const float3 highlightFactor = directionalLightColorAndUse * _DirectionalLight_HighlightStrength; - - const float3 finalHighlightColor = highlightAlbedo * highlightFactor * highlight; - - const float3 finalColor = _HDREmulationScale * (finalDiffuseColor + finalHighlightColor); - - return float4(finalColor,alpha); - } - - - half4 ToonFragment(Varyings input) : SV_Target { - const half4 main = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv); - const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.uv); - const half3 normalTS = UnpackNormalScale(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.uv), _BumpScale); - - SurfaceData2D surfaceData; - - const float3 normalWS = normalize(input.normalWS); - const float3 tangentWS = normalize(input.tangentWS); - const float3 bitangentWS = normalize(cross(normalWS, tangentWS) * input.tangentWS.w); - - const float alpha = main.a; - - InitializeSurfaceData(main.rgb, alpha, mask, normalTS, surfaceData); - - #if defined(DEBUG_DISPLAY) - SETUP_DEBUG_TEXTURE_DATA_2D_NO_TS(inputData, input.positionWS, input.positionCS, _MainTex); - surfaceData.normalWS = input.normalWS; - #endif - - if (alpha == 0.0) - discard; - - ShapeLightResult shapeLightResult = CombinedShapeLight(mask, input.lightingUV); - - - return CombinedShapeLightAndToon(shapeLightResult, surfaceData, input.uv, - tangentWS, bitangentWS, normalWS, input.positionWS); - } - - - ENDHLSL - } - -//---------------------------------------------------------------------------------------------------------------------- - Pass { - Name "Outline" - Tags { - "LightMode" = "SRPDefaultUnlit" - } -// Cull [_SRPDefaultUnlitColMode] -// ColorMask [_SPRDefaultUnlitColorMask] - Blend SrcAlpha OneMinusSrcAlpha -// Stencil -// { -// Ref[_StencilNo] -// Comp[_StencilComp] -// Pass[_StencilOpPass] -// Fail[_StencilOpFail] -// -// } - - - HLSLPROGRAM - #pragma target 3.0 - #pragma vertex OutlineVertex - #pragma fragment OutlineFragment - - #pragma multi_compile TOON_OUTLINE_NORMAL TOON_OUTLINE_POS - // Outline is implemented in UniversalToonOutline.hlsl. - // #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" - // #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" - - //USE_SHAPE_LIGHT keywords - #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" - - //_HDREmulationScale declaration - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightVariables.hlsl" - - struct OutlineVertexInput { - float4 vertex : POSITION; - float3 normal : NORMAL; - float4 tangent : TANGENT; - float2 texcoord0 : TEXCOORD0; - UNITY_VERTEX_INPUT_INSTANCE_ID - }; - - struct OutlineVertexOutput { - float4 pos : SV_POSITION; - float2 uv0 : TEXCOORD0; - half2 lightingUV : TEXCOORD1; - UNITY_VERTEX_OUTPUT_STEREO - }; - - TEXTURE2D(_MainTex); - SAMPLER(sampler_MainTex); - float4 _MainTex_ST; - - TEXTURE2D(_MaskTex); - SAMPLER(sampler_MaskTex); - - TEXTURE2D(_OutlineWidthMap); - SAMPLER(sampler_OutlineWidthMap); - float4 _OutlineWidthMap_ST; - - TEXTURE2D(_OutlineTex); - SAMPLER(sampler_OutlineTex); - float4 _OutlineTex_ST; - - TEXTURE2D(_Outline_NormalMap); - SAMPLER(sampler_Outline_NormalMap); - float4 _Outline_NormalMap_ST; - int _Outline_UseNormalMap; - - CBUFFER_START(UnityPerMaterial) - - float _2DLightStrength; - int _DirectionalLight_Use; - float4 _DirectionalLight_Color; - float _DirectionalLight_DiffuseStrength; - - half4 _BaseColor; - float _OutlineOffsetZ; - float _OutlineWidth; - float _OutlineNear; - float _OutlineFar; - float4 _OutlineColor; - float _Outline_BaseColorBlend; - float _Outline_LightColorBlend; - - CBUFFER_END - - #include "ObjectTransform.hlsl" - #include "ShapeLight2D.hlsl" - - OutlineVertexOutput OutlineVertex(OutlineVertexInput v) { - OutlineVertexOutput o = (OutlineVertexOutput) 0; - UNITY_SETUP_INSTANCE_ID(input); - UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); - - const float2 uv = v.texcoord0; - o.uv0 = v.texcoord0; - - const float4 objPos = mul (GetObjectToWorldMatrix(), float4(0,0,0,1) ); - - const float outlineWidthAlbedo = SAMPLE_TEXTURE2D_LOD(_OutlineWidthMap, sampler_OutlineWidthMap, - TRANSFORM_TEX(uv, _OutlineWidthMap),0).r; - const float outlineWidth = _OutlineWidth * 0.001 * outlineWidthAlbedo; - - float finalOutlineWidth = outlineWidth * smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) ); - - float3 newPos; -#ifdef TOON_OUTLINE_NORMAL - - //TBN - const float3 normalDir = UnityObjectToWorldNormal(v.normal); - const float3 tangentDir = normalize( mul( GetObjectToWorldMatrix(), float4( v.tangent.xyz, 0.0 ) ).xyz ); - const float3 bitangentDir = normalize(cross(normalDir, tangentDir) * v.tangent.w); - float3x3 tangentTransform = float3x3(tangentDir, bitangentDir, normalDir); - - //Outline normal map - const float4 customNormalMap = SAMPLE_TEXTURE2D_LOD( - _Outline_NormalMap, sampler_Outline_NormalMap, TRANSFORM_TEX(uv, _Outline_NormalMap),0); - const float3 normalTS = UnpackNormal(customNormalMap); - const float3 outlineNormalMapWS = normalize(mul(normalTS.xyz, tangentTransform)); - - const float3 outlineDir = lerp(v.normal, outlineNormalMapWS, _Outline_UseNormalMap); - - newPos = float4(v.vertex.xyz + outlineDir * finalOutlineWidth,1); - o.pos = TransformObjectToHClip(newPos); -#elif TOON_OUTLINE_POS - const float3 normalizedPos = normalize(v.vertex.xyz); - const float signPN = sign(dot(normalizedPos,normalize(v.normal))); - o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signPN * normalizedPos * finalOutlineWidth, 1)); -#endif - const float scaledOutlineOffsetZ = _OutlineOffsetZ * -0.01; - o.pos.z = o.pos.z + scaledOutlineOffsetZ; - - o.lightingUV = half2(ComputeScreenPos(o.pos / o.pos.w).xy); - return o; - } - - - half4 OutlineFragment(OutlineVertexOutput i) : SV_Target { - - const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, i.uv0); - const half2 lightingUV = i.lightingUV; - - const float2 Set_UV0 = i.uv0; - float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); - float3 Set_BaseColor = _BaseColor.rgb * _MainTex_var.rgb; - - const float3 outlineTex = tex2D(sampler_OutlineTex,TRANSFORM_TEX(Set_UV0, _OutlineTex)).rgb; - const float3 outlineAlbedo = outlineTex * _OutlineColor.rgb; - - //Blend with baseColor - const float3 outlineBaseBlend = lerp(outlineAlbedo, outlineAlbedo * Set_BaseColor, _Outline_BaseColorBlend); - - //Blend with light - ShapeLightResult shapeLightResult = CombinedShapeLight(mask, lightingUV); - const float3 color2D = (outlineBaseBlend.rgb * shapeLightResult.mod.rgb) + shapeLightResult.add.rgb; - const float3 colorToon = outlineBaseBlend.rgb * _DirectionalLight_Color.rgb * _DirectionalLight_Use; - const float3 outlineLightColor = (color2D * _2DLightStrength) + - (colorToon * _DirectionalLight_DiffuseStrength); - - const float3 outlineBaseAndLightBlend = lerp(outlineBaseBlend, outlineLightColor, _Outline_LightColorBlend); - - return float4(_HDREmulationScale * outlineBaseAndLightBlend,1.0); - } - - - ENDHLSL - } - - -//---------------------------------------------------------------------------------------------------------------------- - Pass{ - Tags{ - "LightMode" = "NormalsRendering" - } - - HLSLPROGRAM - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" - - #pragma vertex NormalsRenderingVertex - #pragma fragment NormalsRenderingFragment - - // GPU Instancing - #pragma multi_compile_instancing - - struct Attributes { - COMMON_2D_NORMALS_INPUTS - }; - - struct Varyings { - COMMON_2D_NORMALS_OUTPUTS - }; - - float4 _White; - - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Normals2DCommon.hlsl" - - Varyings NormalsRenderingVertex(Attributes input) { - return CommonNormalsVertex(input); - } - - half4 NormalsRenderingFragment(Varyings input) : SV_Target { - return CommonNormalsFragment(input, _White); - } - ENDHLSL - } - - Pass{ - Tags{ - "LightMode" = "UniversalForward" "Queue"="Transparent" "RenderType"="Transparent" - } - - HLSLPROGRAM - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" - - #pragma vertex UnlitVertex - #pragma fragment UnlitFragment - - // GPU Instancing - #pragma multi_compile_instancing - - struct Attributes { - COMMON_2D_INPUTS - }; - - struct Varyings { - COMMON_2D_OUTPUTS - }; - - float4 _White; - - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/2DCommon.hlsl" - - Varyings UnlitVertex(Attributes input) { - return CommonUnlitVertex(input); - } - - half4 UnlitFragment(Varyings input) : SV_Target { - return CommonUnlitFragment(input, _White); - } - ENDHLSL - } - - } - - CustomEditor "UnityToon3Das2DGUI" - -} - - -//[Note-sin: 2025-11-24] Texture that only needs one channel at the moment -//1. _OutlineWidthMap diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader.meta b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader.meta deleted file mode 100644 index dca3b76c9..000000000 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 60d646244f75ab84f8eb12819a6d87ff -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: From fefbd24a65f383582650784d4190ea2ae444c379 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 3 Dec 2025 17:48:30 +0900 Subject: [PATCH 145/290] remove script [skip ci] --- .../Assets/ScriptsDev/Toon3Das2DConstants.cs | 8 -------- .../Assets/ScriptsDev/Toon3Das2DConstants.cs.meta | 2 -- 2 files changed, 10 deletions(-) delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs.meta diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs deleted file mode 100644 index f64e34f2d..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs +++ /dev/null @@ -1,8 +0,0 @@ - -public static class Toon3Das2DConstants { - public const string ShaderPropUnlit_DirectionalLight_Direction = "_DirectionalLight_Direction"; - public const string ShaderPropUnlit_DirectionalLight_Color = "_DirectionalLight_Color"; - public const string ShaderPropUnlit_DirectionalLight_Intensity = "_DirectionalLight_Intensity"; - - public const string SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION = "_DirectionalLight_ViewPosition"; -} \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs.meta deleted file mode 100644 index 20776ffa5..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: cd2d32aae3fd8c84699b3bd6812a496b From 8bd6f53a8ab4f6725f1cbf65d45a6aadf7849445 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 11:03:40 +0900 Subject: [PATCH 146/290] add 2d --- .../Assets/RP_Assets/Renderer2D.asset | 69 +++ .../Assets/RP_Assets/Renderer2D.asset.meta | 8 + .../Assets/ScenesDev/test.unity | 441 ++++++++++++++++++ .../Assets/ScenesDev/test.unity.meta | 7 + 4 files changed, 525 insertions(+) create mode 100644 Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset create mode 100644 Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset.meta create mode 100644 Toonshader_ProjectURP/Assets/ScenesDev/test.unity create mode 100644 Toonshader_ProjectURP/Assets/ScenesDev/test.unity.meta diff --git a/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset b/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset new file mode 100644 index 000000000..aca5e7059 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset @@ -0,0 +1,69 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11145981673336645838492a2d98e247, type: 3} + m_Name: Renderer2D + m_EditorClassIdentifier: + debugShaders: + debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, type: 3} + hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} + probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, type: 3} + probeVolumeResources: + probeVolumeDebugShader: {fileID: 4800000, guid: e5c6678ed2aaa91408dd3df699057aae, type: 3} + probeVolumeFragmentationDebugShader: {fileID: 4800000, guid: 03cfc4915c15d504a9ed85ecc404e607, type: 3} + probeVolumeOffsetDebugShader: {fileID: 4800000, guid: 53a11f4ebaebf4049b3638ef78dc9664, type: 3} + probeVolumeSamplingDebugShader: {fileID: 4800000, guid: 8f96cd657dc40064aa21efcc7e50a2e7, type: 3} + probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 57d7c4c16e2765b47a4d2069b311bffe, type: 3} + probeSamplingDebugTexture: {fileID: 2800000, guid: 24ec0e140fb444a44ab96ee80844e18e, type: 3} + m_RendererFeatures: [] + m_RendererFeatureMap: + m_UseNativeRenderPass: 0 + m_TransparencySortMode: 0 + m_TransparencySortAxis: {x: 0, y: 1, z: 0} + m_HDREmulationScale: 1 + m_LightRenderTextureScale: 0.5 + m_LightBlendStyles: + - name: Multiply + maskTextureChannel: 0 + blendMode: 1 + - name: Additive + maskTextureChannel: 0 + blendMode: 0 + - name: Multiply with Mask + maskTextureChannel: 1 + blendMode: 1 + - name: Additive with Mask + maskTextureChannel: 1 + blendMode: 0 + m_UseDepthStencilBuffer: 1 + m_UseCameraSortingLayersTexture: 0 + m_CameraSortingLayersTextureBound: -1 + m_CameraSortingLayerDownsamplingMethod: 0 + m_MaxLightRenderTextureCount: 16 + m_MaxShadowRenderTextureCount: 1 + m_LightShader: {fileID: 4800000, guid: 3f6c848ca3d7bca4bbe846546ac701a1, type: 3} + m_CoreBlitShader: {fileID: 4800000, guid: 93446b5c5339d4f00b85c159e1159b7c, type: 3} + m_CoreBlitColorAndDepthPS: {fileID: 4800000, guid: d104b2fc1ca6445babb8e90b0758136b, type: 3} + m_BlitHDROverlay: {fileID: 4800000, guid: a89bee29cffa951418fc1e2da94d1959, type: 3} + m_SamplingShader: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3} + m_ProjectedShadowShader: {fileID: 4800000, guid: ce09d4a80b88c5a4eb9768fab4f1ee00, type: 3} + m_SpriteShadowShader: {fileID: 4800000, guid: 44fc62292b65ab04eabcf310e799ccf6, type: 3} + m_SpriteUnshadowShader: {fileID: 4800000, guid: de02b375720b5c445afe83cd483bedf3, type: 3} + m_GeometryShadowShader: {fileID: 4800000, guid: 19349a0f9a7ed4c48a27445bcf92e5e1, type: 3} + m_GeometryUnshadowShader: {fileID: 4800000, guid: 77774d9009bb81447b048c907d4c6273, type: 3} + m_FallbackErrorShader: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3} + m_PostProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} + m_FallOffLookup: {fileID: 2800000, guid: 5688ab254e4c0634f8d6c8e0792331ca, type: 3} + m_DefaultMaterialType: 0 + m_DefaultCustomMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_DefaultLitMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_DefaultUnlitMaterial: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2} + m_DefaultMaskMaterial: {fileID: 2100000, guid: 15d0c3709176029428a0da2f8cecf0b5, type: 2} diff --git a/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset.meta b/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset.meta new file mode 100644 index 000000000..a5c42b240 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aec34135564b84745baffe07fc9f7d4c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity new file mode 100644 index 000000000..cc505907b --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -0,0 +1,441 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 2 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &391645602 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 391645606} + - component: {fileID: 391645605} + - component: {fileID: 391645604} + - component: {fileID: 391645603} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &391645603 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 391645602} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: 1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 + m_Version: 2 +--- !u!81 &391645604 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 391645602} + m_Enabled: 1 +--- !u!20 &391645605 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 391645602} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &391645606 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 391645602} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1873556968 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1873556970} + - component: {fileID: 1873556969} + m_Layer: 0 + m_Name: Spot Light 2D + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1873556969 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1873556968} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.2D.Runtime::UnityEngine.Rendering.Universal.Light2D + m_ComponentVersion: 2 + m_LightType: 3 + m_BlendStyleIndex: 0 + m_FalloffIntensity: 0.5 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_LightVolumeIntensity: 1 + m_LightVolumeEnabled: 0 + m_ApplyToSortingLayers: 00000000 + m_LightCookieSprite: {fileID: 0} + m_DeprecatedPointLightCookieSprite: {fileID: 0} + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 + m_OverlapOperation: 0 + m_NormalMapDistance: 3 + m_NormalMapQuality: 2 + m_UseNormalMap: 0 + m_ShadowsEnabled: 1 + m_ShadowIntensity: 0.75 + m_ShadowSoftness: 0.3 + m_ShadowSoftnessFalloffIntensity: 0.5 + m_ShadowVolumeIntensityEnabled: 0 + m_ShadowVolumeIntensity: 0.75 + m_LocalBounds: + m_Center: {x: 0, y: -0.00000011920929, z: 0} + m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} + m_PointLightInnerAngle: 360 + m_PointLightOuterAngle: 360 + m_PointLightInnerRadius: 0 + m_PointLightOuterRadius: 1 + m_ShapeLightParametricSides: 5 + m_ShapeLightParametricAngleOffset: 0 + m_ShapeLightParametricRadius: 1 + m_ShapeLightFalloffSize: 0.5 + m_ShapeLightFalloffOffset: {x: 0, y: 0} + m_ShapePath: + - {x: -0.5, y: -0.5, z: 0} + - {x: 0.5, y: -0.5, z: 0} + - {x: 0.5, y: 0.5, z: 0} + - {x: -0.5, y: 0.5, z: 0} +--- !u!4 &1873556970 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1873556968} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2080296072 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2080296074} + - component: {fileID: 2080296073} + m_Layer: 0 + m_Name: Square + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &2080296073 +SpriteRenderer: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2080296072} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, + type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_SpriteSortPoint: 0 +--- !u!4 &2080296074 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2080296072} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: -0} + m_LocalScale: {x: 10, y: 10, z: 10} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 391645606} + - {fileID: 2080296074} + - {fileID: 1873556970} diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity.meta b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity.meta new file mode 100644 index 000000000..ba7fcc491 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2681cb91f570ac5449f6d70798606c2e +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From 7873e77e1b2d58c3a9816a42e3fbba87ccf9d472 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 16:19:40 +0900 Subject: [PATCH 147/290] save scene --- .../Assets/ScenesDev/test.unity | 568 +++++++++++++++++- 1 file changed, 550 insertions(+), 18 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index cc505907b..8c207a294 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -119,6 +119,118 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &116300322 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 116300326} + - component: {fileID: 116300325} + - component: {fileID: 116300324} + - component: {fileID: 116300323} + m_Layer: 7 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!135 &116300323 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 116300322} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &116300324 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 116300322} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &116300325 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 116300322} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &116300326 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 116300322} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -3.7} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &391645602 GameObject: m_ObjectHideFlags: 0 @@ -129,10 +241,9 @@ GameObject: m_Component: - component: {fileID: 391645606} - component: {fileID: 391645605} - - component: {fileID: 391645604} - component: {fileID: 391645603} - m_Layer: 0 - m_Name: Main Camera + m_Layer: 7 + m_Name: 3D Camera m_TagString: MainCamera m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -155,7 +266,7 @@ MonoBehaviour: m_RequiresOpaqueTextureOption: 2 m_CameraType: 0 m_Cameras: [] - m_RendererIndex: 1 + m_RendererIndex: 0 m_VolumeLayerMask: serializedVersion: 2 m_Bits: 1 @@ -182,24 +293,186 @@ MonoBehaviour: m_VarianceClampScale: 0.9 m_ContrastAdaptiveSharpening: 0 m_Version: 2 ---- !u!81 &391645604 -AudioListener: +--- !u!20 &391645605 +Camera: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 391645602} m_Enabled: 1 ---- !u!20 &391645605 -Camera: + serializedVersion: 2 + m_ClearFlags: 4 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 128 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &391645606 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 391645602} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.1, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 534897190} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &534897189 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 534897190} + m_Layer: 0 + m_Name: Cameras + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &534897190 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 534897189} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1733474742} + - {fileID: 391645606} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &648398109 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 648398113} + - component: {fileID: 648398112} + - component: {fileID: 648398111} + - component: {fileID: 648398110} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!114 &648398110 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648398109} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 + m_Version: 2 +--- !u!81 &648398111 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648398109} + m_Enabled: 1 +--- !u!20 &648398112 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 648398109} m_Enabled: 1 serializedVersion: 2 - m_ClearFlags: 2 + m_ClearFlags: 1 m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} m_projectionMatrixMode: 1 m_GateFitMode: 2 @@ -224,9 +497,9 @@ Camera: near clip plane: 0.3 far clip plane: 1000 field of view: 60 - orthographic: 1 + orthographic: 0 orthographic size: 5 - m_Depth: -1 + m_Depth: 0 m_CullingMask: serializedVersion: 2 m_Bits: 4294967295 @@ -241,21 +514,150 @@ Camera: m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 ---- !u!4 &391645606 +--- !u!4 &648398113 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 391645602} + m_GameObject: {fileID: 648398109} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalRotation: {x: -0.24242356, y: 0.44294274, z: -0.12574561, w: -0.8539442} + m_LocalPosition: {x: 45.20628, y: 42.024525, z: -34.08668} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1733474739 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1733474742} + - component: {fileID: 1733474741} + - component: {fileID: 1733474740} + m_Layer: 6 + m_Name: 2D Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1733474740 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733474739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 1 + m_Cameras: + - {fileID: 391645605} + m_RendererIndex: 1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 + m_Version: 2 +--- !u!20 &1733474741 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733474739} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 4 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 64 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1733474742 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733474739} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -10.13, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 534897190} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1873556968 GameObject: m_ObjectHideFlags: 0 @@ -266,7 +668,7 @@ GameObject: m_Component: - component: {fileID: 1873556970} - component: {fileID: 1873556969} - m_Layer: 0 + m_Layer: 6 m_Name: Spot Light 2D m_TagString: Untagged m_Icon: {fileID: 0} @@ -340,6 +742,133 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1896131351 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1896131354} + - component: {fileID: 1896131353} + - component: {fileID: 1896131352} + m_Layer: 7 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1896131352 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1896131351} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_CustomShadowLayers: 0 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 0 + m_RenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_ShadowRenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_Version: 4 + m_LightLayerMask: 1 + m_ShadowLayerMask: 1 + m_RenderingLayers: 1 + m_ShadowRenderingLayers: 1 +--- !u!108 &1896131353 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1896131351} + m_Enabled: 1 + serializedVersion: 12 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize2D: {x: 10, y: 10} + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 128 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &1896131354 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1896131351} + serializedVersion: 2 + m_LocalRotation: {x: 0.6262405, y: -0.25520658, z: 0.043091897, w: 0.7354153} + m_LocalPosition: {x: 3.7, y: 0, z: -11.11} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 70.577, y: -75.122, z: -50.409} --- !u!1 &2080296072 GameObject: m_ObjectHideFlags: 0 @@ -350,7 +879,7 @@ GameObject: m_Component: - component: {fileID: 2080296074} - component: {fileID: 2080296073} - m_Layer: 0 + m_Layer: 6 m_Name: Square m_TagString: Untagged m_Icon: {fileID: 0} @@ -436,6 +965,9 @@ Transform: SceneRoots: m_ObjectHideFlags: 0 m_Roots: - - {fileID: 391645606} - {fileID: 2080296074} - {fileID: 1873556970} + - {fileID: 116300326} + - {fileID: 534897190} + - {fileID: 1896131354} + - {fileID: 648398113} From b78a4a4c0299333ee1eb321bc8269b15f4c8b2aa Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 16:20:51 +0900 Subject: [PATCH 148/290] save --- .../Assets/ScenesDev/test.unity | 153 +----------------- 1 file changed, 7 insertions(+), 146 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index 8c207a294..ec663ddba 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -248,7 +248,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!114 &391645603 MonoBehaviour: m_ObjectHideFlags: 0 @@ -392,143 +392,6 @@ Transform: - {fileID: 391645606} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &648398109 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 648398113} - - component: {fileID: 648398112} - - component: {fileID: 648398111} - - component: {fileID: 648398110} - m_Layer: 0 - m_Name: Camera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!114 &648398110 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 648398109} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData - m_RenderShadows: 1 - m_RequiresDepthTextureOption: 2 - m_RequiresOpaqueTextureOption: 2 - m_CameraType: 0 - m_Cameras: [] - m_RendererIndex: -1 - m_VolumeLayerMask: - serializedVersion: 2 - m_Bits: 1 - m_VolumeTrigger: {fileID: 0} - m_VolumeFrameworkUpdateModeOption: 2 - m_RenderPostProcessing: 0 - m_Antialiasing: 0 - m_AntialiasingQuality: 2 - m_StopNaN: 0 - m_Dithering: 0 - m_ClearDepth: 1 - m_AllowXRRendering: 1 - m_AllowHDROutput: 1 - m_UseScreenCoordOverride: 0 - m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} - m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} - m_RequiresDepthTexture: 0 - m_RequiresColorTexture: 0 - m_TaaSettings: - m_Quality: 3 - m_FrameInfluence: 0.1 - m_JitterScale: 1 - m_MipBias: 0 - m_VarianceClampScale: 0.9 - m_ContrastAdaptiveSharpening: 0 - m_Version: 2 ---- !u!81 &648398111 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 648398109} - m_Enabled: 1 ---- !u!20 &648398112 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 648398109} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_FocalLength: 50 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &648398113 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 648398109} - serializedVersion: 2 - m_LocalRotation: {x: -0.24242356, y: 0.44294274, z: -0.12574561, w: -0.8539442} - m_LocalPosition: {x: 45.20628, y: 42.024525, z: -34.08668} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1733474739 GameObject: m_ObjectHideFlags: 0 @@ -562,9 +425,8 @@ MonoBehaviour: m_RenderShadows: 1 m_RequiresDepthTextureOption: 2 m_RequiresOpaqueTextureOption: 2 - m_CameraType: 1 - m_Cameras: - - {fileID: 391645605} + m_CameraType: 0 + m_Cameras: [] m_RendererIndex: 1 m_VolumeLayerMask: serializedVersion: 2 @@ -601,8 +463,8 @@ Camera: m_GameObject: {fileID: 1733474739} m_Enabled: 1 serializedVersion: 2 - m_ClearFlags: 4 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.5622641, g: 0.5622641, b: 0.5622641, a: 0} m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 @@ -736,7 +598,7 @@ Transform: m_GameObject: {fileID: 1873556968} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalPosition: {x: -16.09, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -955,7 +817,7 @@ Transform: m_GameObject: {fileID: 2080296072} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0, y: 0, z: -0} + m_LocalPosition: {x: -16.09, y: 0, z: -0} m_LocalScale: {x: 10, y: 10, z: 10} m_ConstrainProportionsScale: 0 m_Children: [] @@ -970,4 +832,3 @@ SceneRoots: - {fileID: 116300326} - {fileID: 534897190} - {fileID: 1896131354} - - {fileID: 648398113} From c93fcf3b8db4f09a9639590aecc112a51c88c759 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 16:25:30 +0900 Subject: [PATCH 149/290] save --- .../Assets/ScenesDev/test.unity | 151 +++++++++++++++++- 1 file changed, 148 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index ec663ddba..65a99497b 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -231,6 +231,150 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &360142871 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 360142872} + - component: {fileID: 360142875} + - component: {fileID: 360142874} + - component: {fileID: 360142873} + m_Layer: 6 + m_Name: Sphere2D + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &360142872 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 360142871} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -8.49, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 372493292} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &360142873 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 360142871} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &360142874 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 360142871} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 047f5b08b2bbb7b418d714b143050655, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &360142875 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 360142871} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &372493291 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 372493292} + m_Layer: 6 + m_Name: 2D Objects + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &372493292 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 372493291} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 360142872} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &391645602 GameObject: m_ObjectHideFlags: 0 @@ -578,7 +722,7 @@ MonoBehaviour: m_PointLightInnerAngle: 360 m_PointLightOuterAngle: 360 m_PointLightInnerRadius: 0 - m_PointLightOuterRadius: 1 + m_PointLightOuterRadius: 8.81 m_ShapeLightParametricSides: 5 m_ShapeLightParametricAngleOffset: 0 m_ShapeLightParametricRadius: 1 @@ -598,7 +742,7 @@ Transform: m_GameObject: {fileID: 1873556968} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -16.09, y: 0, z: 0} + m_LocalPosition: {x: -14.84, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -817,7 +961,7 @@ Transform: m_GameObject: {fileID: 2080296072} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -16.09, y: 0, z: -0} + m_LocalPosition: {x: -18.3, y: 0, z: -0} m_LocalScale: {x: 10, y: 10, z: 10} m_ConstrainProportionsScale: 0 m_Children: [] @@ -832,3 +976,4 @@ SceneRoots: - {fileID: 116300326} - {fileID: 534897190} - {fileID: 1896131354} + - {fileID: 372493292} From 215f42f3c9c8b964cf3477dc736a95ac26ce3353 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 16:40:16 +0900 Subject: [PATCH 150/290] setup Toon --- .../Assets/Materials/Toon2D.mat | 145 ++++++++++++++++++ .../Assets/Materials/Toon2D.mat.meta | 8 + .../Assets/Shaders/Toon2D.shader | 143 +++++++++++++++++ .../Assets/Shaders/Toon2D.shader.meta | 9 ++ 4 files changed, 305 insertions(+) create mode 100644 Toonshader_ProjectURP/Assets/Materials/Toon2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/Toon2D.mat.meta create mode 100644 Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader create mode 100644 Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader.meta diff --git a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat new file mode 100644 index 000000000..190f3b4df --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat @@ -0,0 +1,145 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Toon2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {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} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &5791580664690647399 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 diff --git a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat.meta new file mode 100644 index 000000000..9fd219211 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2bcd5ea8a27e2684b83133920ea644e5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader new file mode 100644 index 000000000..b64fb6dbb --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -0,0 +1,143 @@ +Shader "Toon2D" { + Properties { + _MainTex("Diffuse", 2D) = "white" {} + _MaskTex("Mask", 2D) = "white" {} + _NormalMap("Normal Map", 2D) = "bump" {} + [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching + } + + SubShader + { + Tags {"Queue" = "Transparent" "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" } + + Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha + Cull Back + ZWrite On + + Stencil { + Ref 128 // Put this in the last bit of our stencil value for maximum compatibility with sprite mask + Comp always + Pass replace + } + + Pass + { + Tags { "LightMode" = "Universal2D" } + + HLSLPROGRAM + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" + + #pragma vertex LitVertex + #pragma fragment LitFragment + + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" + + // GPU Instancing + #pragma multi_compile_instancing + #pragma multi_compile _ DEBUG_DISPLAY + + struct Attributes + { + COMMON_2D_INPUTS + }; + + struct Varyings + { + COMMON_2D_LIT_OUTPUTS + }; + + float4 _White; + + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Lit2DCommon.hlsl" + + Varyings LitVertex(Attributes input) + { + return CommonLitVertex(input); + } + + half4 LitFragment(Varyings input) : SV_Target + { + return CommonLitFragment(input, _White); + } + ENDHLSL + } + + Pass + { + Tags { "LightMode" = "NormalsRendering"} + + HLSLPROGRAM + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" + + #pragma vertex NormalsRenderingVertex + #pragma fragment NormalsRenderingFragment + + // GPU Instancing + #pragma multi_compile_instancing + + struct Attributes + { + COMMON_2D_NORMALS_INPUTS + }; + + struct Varyings + { + COMMON_2D_NORMALS_OUTPUTS + }; + + float4 _White; + + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Normals2DCommon.hlsl" + + Varyings NormalsRenderingVertex(Attributes input) + { + return CommonNormalsVertex(input); + } + + half4 NormalsRenderingFragment(Varyings input) : SV_Target + { + return CommonNormalsFragment(input, _White); + } + ENDHLSL + } + + Pass + { + Tags { "LightMode" = "UniversalForward" "Queue"="Transparent" "RenderType"="Transparent"} + + HLSLPROGRAM + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" + + #pragma vertex UnlitVertex + #pragma fragment UnlitFragment + + // GPU Instancing + #pragma multi_compile_instancing + + struct Attributes + { + COMMON_2D_INPUTS + }; + + struct Varyings + { + COMMON_2D_OUTPUTS + }; + + float4 _White; + + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/2DCommon.hlsl" + + Varyings UnlitVertex(Attributes input) + { + return CommonUnlitVertex(input); + } + + half4 UnlitFragment(Varyings input) : SV_Target + { + return CommonUnlitFragment(input, _White); + } + ENDHLSL + } + } +} diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader.meta b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader.meta new file mode 100644 index 000000000..dca3b76c9 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 60d646244f75ab84f8eb12819a6d87ff +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: From 372185dacab61c253164163a01812ae6994acfa2 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 16:48:28 +0900 Subject: [PATCH 151/290] comment --- .../Assets/Shaders/Toon2D.shader | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index b64fb6dbb..4bf10d44c 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -57,6 +57,31 @@ Shader "Toon2D" { half4 LitFragment(Varyings input) : SV_Target { + + // float3 Set_LightColor = lightColor.rgb; + // float3 Set_BaseColor = lerp( (_BaseColor.rgb*_MainTex_var.rgb), ((_BaseColor.rgb*_MainTex_var.rgb)*Set_LightColor), _Is_LightColor_Base ); + // //v.2.0.5 + // float4 _1st_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_1st_ShadeMap,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_MainTex_var,_Use_BaseAs1st); + // float3 Set_1st_ShadeColor = lerp( (_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb), ((_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_1st_Shade ); + // //v.2.0.5 + // float4 _2nd_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_1st_ShadeMap_var,_Use_1stAs2nd); + // float3 Set_2nd_ShadeColor = lerp( (_2nd_ShadeColor.rgb*_2nd_ShadeMap_var.rgb), ((_2nd_ShadeColor.rgb*_2nd_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_2nd_Shade ); + // float _HalfLambert_var = 0.5*dot(lerp( i.normalDir, normalDirection, _Is_NormalMapToBase ),lightDirection)+0.5; + // + // float4 _Set_2nd_ShadePosition_var = tex2D(_Set_2nd_ShadePosition, TRANSFORM_TEX(Set_UV0, _Set_2nd_ShadePosition)); + // float4 _Set_1st_ShadePosition_var = tex2D(_Set_1st_ShadePosition, TRANSFORM_TEX(Set_UV0, _Set_1st_ShadePosition)); + // //v.2.0.6 + // //Minmimum value is same as the Minimum Feather's value with the Minimum Step's value as threshold. + // float _SystemShadowsLevel_var = (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel > 0.001 ? (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel : 0.0001; + // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var*saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); + // // + // //Composition: 3 Basic Colors as Set_FinalBaseColor + // float3 Set_FinalBaseColor = lerp(Set_BaseColor,lerp(Set_1st_ShadeColor,Set_2nd_ShadeColor,saturate((1.0 + ( (_HalfLambert_var - (_ShadeColor_Step-_1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0) ) / (_ShadeColor_Step - (_ShadeColor_Step-_1st2nd_Shades_Feather))))),Set_FinalShadowMask); // Final Color + + + return float4(1,0,0,1); + + return CommonLitFragment(input, _White); } ENDHLSL From 3212056b0a88a33d8b7000dce0511ffa1a1339d7 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 17:27:57 +0900 Subject: [PATCH 152/290] 1st --- .../Assets/Shaders/Toon2D.shader | 101 +++++++++++++++++- 1 file changed, 97 insertions(+), 4 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 4bf10d44c..8fb40c1fa 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -1,8 +1,14 @@ Shader "Toon2D" { Properties { - _MainTex("Diffuse", 2D) = "white" {} + _BaseColor ("BaseColor", Color) = (1,1,1,1) + _MainTex ("BaseMap", 2D) = "white" {} _MaskTex("Mask", 2D) = "white" {} _NormalMap("Normal Map", 2D) = "bump" {} + _Unlit_Intensity ("Unlit_Intensity", Range(0, 4)) = 0 + + [Toggle(_)] _Is_Filter_LightColor ("VRChat : SceneLights HiCut_Filter", Float ) = 1 + [Toggle(_)] _Is_LightColor_Base ("Is_LightColor_Base", Float ) = 1 + [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching } @@ -14,6 +20,8 @@ Shader "Toon2D" { Cull Back ZWrite On + + Stencil { Ref 128 // Put this in the last bit of our stencil value for maximum compatibility with sprite mask Comp always @@ -50,16 +58,101 @@ Shader "Toon2D" { #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Lit2DCommon.hlsl" + CBUFFER_START(UnityPerMaterial) + half4 _BaseColor; + float _Unlit_Intensity; + float _Is_Filter_LightColor; + float _Is_LightColor_Base; + + + + CBUFFER_END + +//---------------------------------------------------------------------------------------------------------------------- + float4 _MainTex_ST; + + //TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex); + + Varyings LitVertex(Attributes input) { return CommonLitVertex(input); } +//---------------------------------------------------------------------------------------------------------------------- + +// normal should be normalized, w=1.0 +half3 SHEvalLinearL0L1(half4 normal) +{ + half3 x; + + // Linear (L1) + constant (L0) polynomial terms + x.r = dot(unity_SHAr, normal); + x.g = dot(unity_SHAg, normal); + x.b = dot(unity_SHAb, normal); + + return x; +} + +// normal should be normalized, w=1.0 +half3 SHEvalLinearL2(half4 normal) +{ + half3 x1, x2; + // 4 of the quadratic (L2) polynomials + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(unity_SHBr, vB); + x1.g = dot(unity_SHBg, vB); + x1.b = dot(unity_SHBb, vB); + + // Final (5th) quadratic (L2) polynomial + half vC = normal.x*normal.x - normal.y*normal.y; + x2 = unity_SHC.rgb * vC; + + return x1 + x2; +} + + +// normal should be normalized, w=1.0 +// output in active color space +half3 ShadeSH9(half4 normal) +{ + // Linear + constant polynomial terms + half3 res = SHEvalLinearL0L1(normal); + + // Quadratic polynomials + res += SHEvalLinearL2(normal); + +# ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); +# endif + + return res; +} + +//---------------------------------------------------------------------------------------------------------------------- half4 LitFragment(Varyings input) : SV_Target { - // float3 Set_LightColor = lightColor.rgb; - // float3 Set_BaseColor = lerp( (_BaseColor.rgb*_MainTex_var.rgb), ((_BaseColor.rgb*_MainTex_var.rgb)*Set_LightColor), _Is_LightColor_Base ); + float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); + float2 Set_UV0 = input.uv; + float3 mainLightColor = float3(1,1,1); + + + // //v.2.0.5 + float3 defaultLightColor = saturate(max(half3(0.05,0.05,0.05)*_Unlit_Intensity,max(ShadeSH9(half4(0.0, 0.0, 0.0, 1.0)),ShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb)*_Unlit_Intensity)); + // float3 customLightDirection = normalize(mul( GetObjectToWorldMatrix(), float4(((float3(1.0,0.0,0.0)*_Offset_X_Axis_BLD*10)+(float3(0.0,1.0,0.0)*_Offset_Y_Axis_BLD*10)+(float3(0.0,0.0,-1.0)*lerp(-1.0,1.0,_Inverse_Z_Axis_BLD))),0)).xyz); + // float3 lightDirection = normalize(lerp(defaultLightDirection, mainLight.direction.xyz,any(mainLight.direction.xyz))); + // lightDirection = lerp(lightDirection, customLightDirection, _Is_BLD); + // //v.2.0.5: + // + half3 originalLightColor = mainLightColor.rgb; + float3 lightColor = lerp(max(defaultLightColor, originalLightColor), max(defaultLightColor, saturate(originalLightColor)), _Is_Filter_LightColor); + float3 Set_LightColor = lightColor.rgb; + + float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); + float3 Set_BaseColor = lerp( (_BaseColor.rgb*_MainTex_var.rgb), ((_BaseColor.rgb*_MainTex_var.rgb)*Set_LightColor), _Is_LightColor_Base ); + + // //v.2.0.5 // float4 _1st_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_1st_ShadeMap,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_MainTex_var,_Use_BaseAs1st); // float3 Set_1st_ShadeColor = lerp( (_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb), ((_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_1st_Shade ); @@ -79,7 +172,7 @@ Shader "Toon2D" { // float3 Set_FinalBaseColor = lerp(Set_BaseColor,lerp(Set_1st_ShadeColor,Set_2nd_ShadeColor,saturate((1.0 + ( (_HalfLambert_var - (_ShadeColor_Step-_1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0) ) / (_ShadeColor_Step - (_ShadeColor_Step-_1st2nd_Shades_Feather))))),Set_FinalShadowMask); // Final Color - return float4(1,0,0,1); + return float4(Set_BaseColor,1); return CommonLitFragment(input, _White); From 72e0ae05c2a7cc5097dedbfb82083c84e9c44098 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 17:51:01 +0900 Subject: [PATCH 153/290] add the default shader --- .../Assets/Shaders/Toon2D.shader | 125 +++++++++++++++++- 1 file changed, 123 insertions(+), 2 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 8fb40c1fa..0a79505b0 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -129,6 +129,127 @@ half3 ShadeSH9(half4 normal) return res; } + +//---------------------------------------------------------------------------------------------------------------------- + +half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData) +{ + #if defined(DEBUG_DISPLAY) + half4 debugColor = 0; + + if (CanDebugOverrideOutputColor(surfaceData, inputData, debugColor)) + { + return debugColor; + } + #endif + + half alpha = surfaceData.alpha; + half4 color = half4(surfaceData.albedo, alpha); + const half4 mask = surfaceData.mask; + const half2 lightingUV = inputData.lightingUV; + + if (alpha == 0.0) + discard; + +#if USE_SHAPE_LIGHT_TYPE_0 + half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); + + if (any(_ShapeLightMaskFilter0)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter0) * mask + _ShapeLightInvertedFilter0 * (1 - mask); + shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); + } + + half4 shapeLight0Modulate = shapeLight0 * _ShapeLightBlendFactors0.x; + half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; +#else + half4 shapeLight0Modulate = 0; + half4 shapeLight0Additive = 0; +#endif + +#if USE_SHAPE_LIGHT_TYPE_1 + half4 shapeLight1 = SAMPLE_TEXTURE2D(_ShapeLightTexture1, sampler_ShapeLightTexture1, lightingUV); + + if (any(_ShapeLightMaskFilter1)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter1) * mask + _ShapeLightInvertedFilter1 * (1 - mask); + shapeLight1 *= dot(processedMask, _ShapeLightMaskFilter1); + } + + half4 shapeLight1Modulate = shapeLight1 * _ShapeLightBlendFactors1.x; + half4 shapeLight1Additive = shapeLight1 * _ShapeLightBlendFactors1.y; +#else + half4 shapeLight1Modulate = 0; + half4 shapeLight1Additive = 0; +#endif + +#if USE_SHAPE_LIGHT_TYPE_2 + half4 shapeLight2 = SAMPLE_TEXTURE2D(_ShapeLightTexture2, sampler_ShapeLightTexture2, lightingUV); + + if (any(_ShapeLightMaskFilter2)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter2) * mask + _ShapeLightInvertedFilter2 * (1 - mask); + shapeLight2 *= dot(processedMask, _ShapeLightMaskFilter2); + } + + half4 shapeLight2Modulate = shapeLight2 * _ShapeLightBlendFactors2.x; + half4 shapeLight2Additive = shapeLight2 * _ShapeLightBlendFactors2.y; +#else + half4 shapeLight2Modulate = 0; + half4 shapeLight2Additive = 0; +#endif + +#if USE_SHAPE_LIGHT_TYPE_3 + half4 shapeLight3 = SAMPLE_TEXTURE2D(_ShapeLightTexture3, sampler_ShapeLightTexture3, lightingUV); + + if (any(_ShapeLightMaskFilter3)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter3) * mask + _ShapeLightInvertedFilter3 * (1 - mask); + shapeLight3 *= dot(processedMask, _ShapeLightMaskFilter3); + } + + half4 shapeLight3Modulate = shapeLight3 * _ShapeLightBlendFactors3.x; + half4 shapeLight3Additive = shapeLight3 * _ShapeLightBlendFactors3.y; +#else + half4 shapeLight3Modulate = 0; + half4 shapeLight3Additive = 0; +#endif + + half4 finalOutput; +#if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 + finalOutput = color; +#else + half4 finalModulate = shapeLight0Modulate + shapeLight1Modulate + shapeLight2Modulate + shapeLight3Modulate; + half4 finalAdditve = shapeLight0Additive + shapeLight1Additive + shapeLight2Additive + shapeLight3Additive; + finalOutput = _HDREmulationScale * (color * finalModulate + finalAdditve); +#endif + + finalOutput.a = alpha; + + return max(0, finalOutput); +} + +half4 CommonLitFragment2(Varyings input, half4 color) +{ + const half4 main = color * SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv); + const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.uv); + const half3 normalTS = UnpackNormal(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.uv)); + + SurfaceData2D surfaceData; + InputData2D inputData; + + InitializeSurfaceData(main.rgb, main.a, mask, normalTS, surfaceData); + InitializeInputData(input.uv, input.lightingUV, inputData); + +#if defined(DEBUG_DISPLAY) + SETUP_DEBUG_TEXTURE_DATA_2D_NO_TS(inputData, input.positionWS, input.positionCS, _MainTex); + surfaceData.normalWS = input.normalWS; +#endif + + return CombinedShapeLightShared2(surfaceData, inputData); +} + + //---------------------------------------------------------------------------------------------------------------------- half4 LitFragment(Varyings input) : SV_Target { @@ -172,10 +293,10 @@ half3 ShadeSH9(half4 normal) // float3 Set_FinalBaseColor = lerp(Set_BaseColor,lerp(Set_1st_ShadeColor,Set_2nd_ShadeColor,saturate((1.0 + ( (_HalfLambert_var - (_ShadeColor_Step-_1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0) ) / (_ShadeColor_Step - (_ShadeColor_Step-_1st2nd_Shades_Feather))))),Set_FinalShadowMask); // Final Color - return float4(Set_BaseColor,1); + //return float4(Set_BaseColor,1); - return CommonLitFragment(input, _White); + return CommonLitFragment2(input, _White); } ENDHLSL } From 820fa309d20c1f12e580fbdd2b638c3920806c0d Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 21:04:20 +0900 Subject: [PATCH 154/290] save scene --- .../Assets/ScenesDev/test.unity | 119 +++++++++++++++++- 1 file changed, 116 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index 65a99497b..fadb3f7d4 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -343,6 +343,118 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 360142871} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &361997359 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 361997360} + - component: {fileID: 361997363} + - component: {fileID: 361997362} + - component: {fileID: 361997361} + m_Layer: 6 + m_Name: SphereToon2D + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &361997360 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 361997359} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -8.49, y: 1.38, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 372493292} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &361997361 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 361997359} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &361997362 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 361997359} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 2bcd5ea8a27e2684b83133920ea644e5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &361997363 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 361997359} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &372493291 GameObject: m_ObjectHideFlags: 0 @@ -373,6 +485,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 360142872} + - {fileID: 361997360} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &391645602 @@ -446,8 +559,8 @@ Camera: m_GameObject: {fileID: 391645602} m_Enabled: 1 serializedVersion: 2 - m_ClearFlags: 4 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.5471698, g: 0.18892841, b: 0.22273886, a: 0} m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 @@ -742,7 +855,7 @@ Transform: m_GameObject: {fileID: 1873556968} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -14.84, y: 0, z: 0} + m_LocalPosition: {x: -15.5, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] From ecd8e69d2f8a1dc7046aed6a6ed85daadcec7a80 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 17 Oct 2025 21:04:32 +0900 Subject: [PATCH 155/290] save mat --- Toonshader_ProjectURP/Assets/Materials/Toon2D.mat | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat index 190f3b4df..52bd75e7b 100644 --- a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat @@ -49,7 +49,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MainTex: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _MaskTex: @@ -108,6 +108,8 @@ Material: - _GlossMapScale: 0 - _Glossiness: 0 - _GlossyReflections: 0 + - _Is_Filter_LightColor: 1 + - _Is_LightColor_Base: 1 - _Metallic: 0 - _OcclusionStrength: 1 - _Parallax: 0.005 @@ -119,6 +121,7 @@ Material: - _SrcBlend: 1 - _SrcBlendAlpha: 1 - _Surface: 0 + - _Unlit_Intensity: 0 - _WorkflowMode: 1 - _XRMotionVectorsPass: 1 - _ZWrite: 1 From 51ca3079ee2b604b7e9894b69d3ae57d8f10be53 Mon Sep 17 00:00:00 2001 From: sin Date: Tue, 21 Oct 2025 10:58:33 +0900 Subject: [PATCH 156/290] works. needs cleanup --- .../Assets/RP_Assets/Renderer2D.asset | 67 +++++---- Toonshader_ProjectURP/Assets/Samples.meta | 8 ++ .../Assets/ScenesDev/test.unity | 24 ++-- .../ScenesDev/test3DOutput.renderTexture | 39 ++++++ .../ScenesDev/test3DOutput.renderTexture.meta | 8 ++ .../ScriptsDev/BackgroundBlitFeature.cs | 118 ++++++++++++++++ .../ScriptsDev/BackgroundBlitFeature.cs.meta | 2 + .../Assets/ScriptsDev/Blit.cs | 70 ++++++++++ .../Assets/ScriptsDev/Blit.cs.meta | 2 + .../ScriptsDev/BlitFromExternalTexture.cs | 128 ++++++++++++++++++ .../BlitFromExternalTexture.cs.meta | 2 + 11 files changed, 430 insertions(+), 38 deletions(-) create mode 100644 Toonshader_ProjectURP/Assets/Samples.meta create mode 100644 Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture create mode 100644 Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture.meta create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs.meta create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs.meta create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs.meta diff --git a/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset b/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset index aca5e7059..637de30ef 100644 --- a/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset +++ b/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset @@ -13,19 +13,32 @@ MonoBehaviour: m_Name: Renderer2D m_EditorClassIdentifier: debugShaders: - debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, type: 3} + debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, + type: 3} hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} - probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, type: 3} + probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, + type: 3} probeVolumeResources: - probeVolumeDebugShader: {fileID: 4800000, guid: e5c6678ed2aaa91408dd3df699057aae, type: 3} - probeVolumeFragmentationDebugShader: {fileID: 4800000, guid: 03cfc4915c15d504a9ed85ecc404e607, type: 3} - probeVolumeOffsetDebugShader: {fileID: 4800000, guid: 53a11f4ebaebf4049b3638ef78dc9664, type: 3} - probeVolumeSamplingDebugShader: {fileID: 4800000, guid: 8f96cd657dc40064aa21efcc7e50a2e7, type: 3} - probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 57d7c4c16e2765b47a4d2069b311bffe, type: 3} - probeSamplingDebugTexture: {fileID: 2800000, guid: 24ec0e140fb444a44ab96ee80844e18e, type: 3} - m_RendererFeatures: [] - m_RendererFeatureMap: + probeVolumeDebugShader: {fileID: 4800000, guid: e5c6678ed2aaa91408dd3df699057aae, + type: 3} + probeVolumeFragmentationDebugShader: {fileID: 4800000, guid: 03cfc4915c15d504a9ed85ecc404e607, + type: 3} + probeVolumeOffsetDebugShader: {fileID: 4800000, guid: 53a11f4ebaebf4049b3638ef78dc9664, + type: 3} + probeVolumeSamplingDebugShader: {fileID: 4800000, guid: 8f96cd657dc40064aa21efcc7e50a2e7, + type: 3} + probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 57d7c4c16e2765b47a4d2069b311bffe, + type: 3} + probeSamplingDebugTexture: {fileID: 2800000, guid: 24ec0e140fb444a44ab96ee80844e18e, + type: 3} + probeVolumeBlendStatesCS: {fileID: 0} + m_RendererFeatures: + - {fileID: 90138282318566881} + m_RendererFeatureMap: e115434a4a3c4001 m_UseNativeRenderPass: 0 + m_LayerMask: + serializedVersion: 2 + m_Bits: 4294967295 m_TransparencySortMode: 0 m_TransparencySortAxis: {x: 0, y: 1, z: 0} m_HDREmulationScale: 1 @@ -49,21 +62,23 @@ MonoBehaviour: m_CameraSortingLayerDownsamplingMethod: 0 m_MaxLightRenderTextureCount: 16 m_MaxShadowRenderTextureCount: 1 - m_LightShader: {fileID: 4800000, guid: 3f6c848ca3d7bca4bbe846546ac701a1, type: 3} - m_CoreBlitShader: {fileID: 4800000, guid: 93446b5c5339d4f00b85c159e1159b7c, type: 3} - m_CoreBlitColorAndDepthPS: {fileID: 4800000, guid: d104b2fc1ca6445babb8e90b0758136b, type: 3} - m_BlitHDROverlay: {fileID: 4800000, guid: a89bee29cffa951418fc1e2da94d1959, type: 3} - m_SamplingShader: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3} - m_ProjectedShadowShader: {fileID: 4800000, guid: ce09d4a80b88c5a4eb9768fab4f1ee00, type: 3} - m_SpriteShadowShader: {fileID: 4800000, guid: 44fc62292b65ab04eabcf310e799ccf6, type: 3} - m_SpriteUnshadowShader: {fileID: 4800000, guid: de02b375720b5c445afe83cd483bedf3, type: 3} - m_GeometryShadowShader: {fileID: 4800000, guid: 19349a0f9a7ed4c48a27445bcf92e5e1, type: 3} - m_GeometryUnshadowShader: {fileID: 4800000, guid: 77774d9009bb81447b048c907d4c6273, type: 3} - m_FallbackErrorShader: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3} m_PostProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} - m_FallOffLookup: {fileID: 2800000, guid: 5688ab254e4c0634f8d6c8e0792331ca, type: 3} m_DefaultMaterialType: 0 - m_DefaultCustomMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} - m_DefaultLitMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} - m_DefaultUnlitMaterial: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2} - m_DefaultMaskMaterial: {fileID: 2100000, guid: 15d0c3709176029428a0da2f8cecf0b5, type: 2} + m_DefaultCustomMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, + type: 2} +--- !u!114 &90138282318566881 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 60eefc24acbf4f3448929f044cdd8ae8, type: 3} + m_Name: BlitFromExternalTexture + m_EditorClassIdentifier: Assembly-CSharp::BlitFromExternalTexture + m_Active: 1 + textureToUse: {fileID: 8400000, guid: 67ad705e569ea6c4492980f61418d902, type: 2} + texture2DToUse: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + renderPassEvent: 210 diff --git a/Toonshader_ProjectURP/Assets/Samples.meta b/Toonshader_ProjectURP/Assets/Samples.meta new file mode 100644 index 000000000..34bd6165f --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Samples.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7fd12dfadcd915441a5df9453615a65d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index fadb3f7d4..749ca01e2 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -470,7 +470,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!4 &372493292 Transform: m_ObjectHideFlags: 0 @@ -486,6 +486,8 @@ Transform: m_Children: - {fileID: 360142872} - {fileID: 361997360} + - {fileID: 2080296074} + - {fileID: 1873556970} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &391645602 @@ -505,7 +507,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!114 &391645603 MonoBehaviour: m_ObjectHideFlags: 0 @@ -591,7 +593,7 @@ Camera: serializedVersion: 2 m_Bits: 128 m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} + m_TargetTexture: {fileID: 8400000, guid: 67ad705e569ea6c4492980f61418d902, type: 2} m_TargetDisplay: 0 m_TargetEye: 3 m_HDR: 1 @@ -720,7 +722,7 @@ Camera: m_GameObject: {fileID: 1733474739} m_Enabled: 1 serializedVersion: 2 - m_ClearFlags: 2 + m_ClearFlags: 4 m_BackGroundColor: {r: 0.5622641, g: 0.5622641, b: 0.5622641, a: 0} m_projectionMatrixMode: 1 m_GateFitMode: 2 @@ -747,7 +749,7 @@ Camera: field of view: 60 orthographic: 1 orthographic size: 5 - m_Depth: -1 + m_Depth: 10 m_CullingMask: serializedVersion: 2 m_Bits: 64 @@ -854,12 +856,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1873556968} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -15.5, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 372493292} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1896131351 GameObject: @@ -1073,19 +1075,17 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2080296072} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -18.3, y: 0, z: -0} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -18.3, y: 0, z: 0} m_LocalScale: {x: 10, y: 10, z: 10} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 372493292} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 m_Roots: - - {fileID: 2080296074} - - {fileID: 1873556970} - {fileID: 116300326} - {fileID: 534897190} - {fileID: 1896131354} diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture b/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture new file mode 100644 index 000000000..457daac7d --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture @@ -0,0 +1,39 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: test3DOutput + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_IsAlphaChannelOptional: 0 + serializedVersion: 6 + m_Width: 256 + m_Height: 256 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthStencilFormat: 94 + m_ColorFormat: 8 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_UseDynamicScaleExplicit: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_EnableRandomWrite: 0 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 + m_ShadowSamplingMode: 2 diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture.meta b/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture.meta new file mode 100644 index 000000000..c61915547 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 395bbc419b3737341b46a8a4c1c96f86 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs new file mode 100644 index 000000000..b066142ca --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs @@ -0,0 +1,118 @@ +// using System; +// using UnityEditor; +// using UnityEngine; +// using UnityEngine.Rendering.Universal; +// using UnityEngine.Rendering; +// +// public class BlurRenderPass : ScriptableRenderPass +// { +// private static readonly int horizontalBlurId = Shader.PropertyToID("_HorizontalBlur"); +// private static readonly int verticalBlurId = Shader.PropertyToID("_VerticalBlur"); +// +// private BlurSettings defaultSettings; +// private Material material; +// +// private RenderTexture m_rt; +// +// public BlurRenderPass(RenderTexture rt) { +// m_rt = rt; +// } +// +// public override void Configure(CommandBuffer cmd, +// RenderTextureDescriptor cameraTextureDescriptor) +// { +// } +// +// +// public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) +// { +// +// CommandBuffer cmd = CommandBufferPool.Get(); +// +// RTHandle cameraTargetHandle = renderingData.cameraData.renderer.cameraColorTargetHandle; +// +// +// // Blit from the camera target to the temporary render texture, +// // using the first shader pass. +// Blit(cmd, m_rt, cameraTargetHandle, material, 0); +// +// //Execute the command buffer and release it back to the pool. +// context.ExecuteCommandBuffer(cmd); +// CommandBufferPool.Release(cmd); +// } +// +// public void Dispose() +// { +// #if UNITY_EDITOR +// if (EditorApplication.isPlaying) +// { +// Object.Destroy(material); +// } +// else +// { +// Object.DestroyImmediate(material); +// } +// #else +// Object.Destroy(material); +// #endif +// +// if (blurTextureHandle != null) blurTextureHandle.Release(); +// } +// } +// +// //-------------------------------------------------------------------------------------------------------------------------------------------------------------- +// +// +// public class BlurRendererFeature : ScriptableRendererFeature +// { +// [SerializeField] private BlurSettings settings; +// private BlurRenderPass blurRenderPass; +// +// +// [SerializeField] private RenderTexture m_renderTexture; +// +// +// public override void Create() +// { +// if (m_renderTexture == null) +// { +// return; +// } +// blurRenderPass = new BlurRenderPass(m_renderTexture); +// +// blurRenderPass.renderPassEvent = RenderPassEvent.AfterRenderingSkybox; +// } +// +// public override void AddRenderPasses(ScriptableRenderer renderer, +// ref RenderingData renderingData) +// { +// if (renderingData.cameraData.cameraType == CameraType.Game) +// { +// renderer.EnqueuePass(blurRenderPass); +// } +// } +// +// protected override void Dispose(bool disposing) +// { +// blurRenderPass.Dispose(); +// #if UNITY_EDITOR +// if (EditorApplication.isPlaying) +// { +// Destroy(material); +// } +// else +// { +// DestroyImmediate(material); +// } +// #else +// Destroy(material); +// #endif +// } +// } +// +// [Serializable] +// public class BlurSettings +// { +// [Range(0, 0.4f)] public float horizontalBlur; +// [Range(0, 0.4f)] public float verticalBlur; +// } \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs.meta new file mode 100644 index 000000000..1e57b9d56 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 03319a84511cc694e89b2e8b6d940726 \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs new file mode 100644 index 000000000..6c7056e0b --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; + +[RequireComponent(typeof(Camera))] +[ExecuteAlways] +public class Blit : MonoBehaviour +{ + // Start is called once before the first execution of Update after the MonoBehaviour is created + void OnEnable() { + //RenderPipelineManager.beginContextRendering += OnBeginContextRendering; + RenderPipelineManager.beginCameraRendering += OnBeginCameraRendering; + + } + + void OnDisable() { + //RenderPipelineManager.beginContextRendering -= OnBeginContextRendering; + RenderPipelineManager.beginCameraRendering -= OnBeginCameraRendering; + } + + + private void OnBeginContextRendering(ScriptableRenderContext context, List cams) { + foreach (Camera cam in cams) { + if (cam == m_camera) { + Debug.Log("Doing Blit"); + Graphics.Blit(m_tex, cam.targetTexture); + return; + } + } + } + + void OnBeginCameraRendering(ScriptableRenderContext context, Camera camera) + { + + if (camera.cameraType != CameraType.Game) + return; + + // Filter which cameras should receive the background + if (camera!= m_camera) + return; + + if (m_tex == null) + return; + + // For URP, the current camera target is an internal RT. We can blit to it at the start + // to "prime" the background, then URP will draw opaque/transparent on top (depending on clear flags). + // Ensure the camera Clear Flags are set to Don't Clear or Depth Only if you want to keep the background. + var cmd = CommandBufferPool.Get("Blit Background"); + + // Try to ensure we're drawing into the camera's current color target. + CoreUtils.SetRenderTarget(cmd, BuiltinRenderTextureType.CameraTarget); + cmd.Blit(m_tex, BuiltinRenderTextureType.CameraTarget); + + context.ExecuteCommandBuffer(cmd); + CommandBufferPool.Release(cmd); + } + + private void OnValidate() { + m_camera = GetComponent(); + } + +//-------------------------------------------------------------------------------------------------------------------------------------------------------------- + + + + [SerializeField] private RenderTexture m_tex; + [SerializeField] Camera m_camera = null; + +} diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs.meta new file mode 100644 index 000000000..a961de407 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 37b5ca99ee37d9c4dbccfaeb63fe78f9 \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs new file mode 100644 index 000000000..1f68da9a4 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs @@ -0,0 +1,128 @@ +using UnityEngine; +using UnityEngine.Experimental.Rendering; +using UnityEngine.Rendering.Universal; +using UnityEngine.Rendering.RenderGraphModule; +using UnityEngine.Rendering; + +public class BlitFromExternalTexture : ScriptableRendererFeature +{ + // The texture to use as input + public RenderTexture textureToUse; + public Texture2D texture2DToUse; + + BlitFromTexture customPass; + public RenderPassEvent renderPassEvent = RenderPassEvent.BeforeRendering; + + + public override void Create() + { + // Create an instance of the render pass, and pass in the input texture + customPass = new BlitFromTexture(textureToUse, texture2DToUse); + + customPass.renderPassEvent = renderPassEvent; + } + + public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) + { + renderer.EnqueuePass(customPass); + } + + class BlitFromTexture : ScriptableRenderPass + { + class PassData + { + internal TextureHandle textureToRead; + internal RenderTexture tempColorTexture; + } + + private RenderTexture texturePassedIn; + private Texture2D texture2D; + + public BlitFromTexture(RenderTexture textureIn, Texture2D tex2d) + { + // In the render pass's constructor, set the input texture + texturePassedIn = textureIn; + texture2D = tex2d; + } + + public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameContext) + { + + Debug.Log("RecordRenderGraph"); + + using (var builder = renderGraph.AddRasterRenderPass("Blit from external textures", out var passData)) + { + // Create a temporary texture and set it as the render target + RenderTextureDescriptor textureProperties = new RenderTextureDescriptor(Screen.width, Screen.height, RenderTextureFormat.Default, 0); + textureProperties.graphicsFormat = GraphicsFormat.R8G8B8A8_UNorm; + textureProperties.depthStencilFormat = GraphicsFormat.None; + + // TextureHandle texture = UniversalRenderer.CreateRenderGraphTexture(renderGraph, textureProperties, "My texture", false); + // Import the camera's color target + + UniversalResourceData resourceData = frameContext.Get(); + //UniversalCameraData cameraData = frameContext.Get(); + + TextureHandle cameraColor = resourceData.activeColorTexture; + builder.SetRenderAttachment(cameraColor, 0, AccessFlags.Write); + + // Create a render texture from the input texture + // RTHandle rtHandle = RTHandles.Alloc(texture2D); + // TextureHandle textureToRead = renderGraph.ImportTexture(rtHandle); + + // Import with explicit RenderTargetInfo to override any depth/stencil format + RenderTargetInfo rtInfo = new RenderTargetInfo(); + rtInfo.width = texturePassedIn.width; + rtInfo.height = texturePassedIn.height; + rtInfo.volumeDepth = 1; + rtInfo.msaaSamples = 1; + rtInfo.format = GraphicsFormat.R8G8B8A8_UNorm; + + // Create a temporary RenderTexture with only color format + RenderTextureDescriptor colorOnlyDesc = new RenderTextureDescriptor( + texturePassedIn.width, + texturePassedIn.height + ); + colorOnlyDesc.graphicsFormat = texturePassedIn.graphicsFormat; + colorOnlyDesc.depthStencilFormat = GraphicsFormat.None; + colorOnlyDesc.msaaSamples = texturePassedIn.antiAliasing; + + passData.tempColorTexture = RenderTexture.GetTemporary(colorOnlyDesc); + Graphics.Blit(texturePassedIn, passData.tempColorTexture); + + //RTHandle rtHandle = RTHandles.Alloc(width:texturePassedIn.width, height: texturePassedIn.height, format: GraphicsFormat.R8G8B8A8_UNorm); + RTHandle rtHandle = RTHandles.Alloc(passData.tempColorTexture); + TextureHandle textureToRead = renderGraph.ImportTexture(rtHandle); + + //public static RTHandle Alloc(int width, int height, int slices = 1, DepthBits depthBufferBits = DepthBits.None, GraphicsFormat colorFormat = GraphicsFormat.R8G8B8A8_SRGB, FilterMode filterMode = FilterMode.Point, TextureWrapMode wrapMode = TextureWrapMode.Repeat, TextureDimension dimension = TextureDimension.Tex2D, bool enableRandomWrite = false, bool useMipMap = false, bool autoGenerateMips = true, bool isShadowMap = false, int anisoLevel = 1, float mipMapBias = 0, MSAASamples msaaSamples = MSAASamples.None, bool bindTextureMS = false, bool useDynamicScale = false, bool useDynamicScaleExplicit = false, RenderTextureMemoryless memoryless = RenderTextureMemoryless.None, VRTextureUsage vrUsage = VRTextureUsage.None, string name = "") + //Alloc(int, int, GraphicsFormat, int, FilterMode, TextureWrapMode, TextureDimension, bool, bool, bool, bool, int, float, MSAASamples, bool, bool, bool, RenderTextureMemoryless, VRTextureUsage, string) + //Alloc(int, int, TextureWrapMode, TextureWrapMode, TextureWrapMode, int, DepthBits, GraphicsFormat, FilterMode, TextureDimension, bool, bool, bool, bool, int, float, MSAASamples, bool, bool, bool, RenderTextureMemoryless, VRTextureUsage, string) + + + + // Add the texture to the pass data + + passData.textureToRead = textureToRead; + + // Set the texture as readable + builder.UseTexture(passData.textureToRead, AccessFlags.Read); + + builder.AllowPassCulling(false); + + builder.SetRenderFunc((PassData data, RasterGraphContext context) => ExecutePass(data, context)); + } + } + + static void ExecutePass(PassData data, RasterGraphContext context) + { + // Copy the imported texture to the render target + Blitter.BlitTexture(context.cmd, data.textureToRead, new Vector4(1.0f,1.0f,0,0), 0, false); + + Debug.Log("a"); + + // Dispose of the texture + RTHandles.Release(data.textureToRead); + RenderTexture.ReleaseTemporary(data.tempColorTexture); + } + } +} diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs.meta new file mode 100644 index 000000000..72df1b659 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 60eefc24acbf4f3448929f044cdd8ae8 From 83a5bc05c456bcad6c703f14ddb489405181132c Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 22 Oct 2025 13:51:25 +0900 Subject: [PATCH 157/290] Cleanup --- .../ScriptsDev/BackgroundBlitFeature.cs | 118 ---------------- .../ScriptsDev/BackgroundBlitFeature.cs.meta | 2 - .../Assets/ScriptsDev/Blit.cs | 70 ---------- .../Assets/ScriptsDev/Blit.cs.meta | 2 - .../ScriptsDev/BlitFromExternalTexture.cs | 128 ------------------ .../BlitFromExternalTexture.cs.meta | 2 - 6 files changed, 322 deletions(-) delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs.meta diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs deleted file mode 100644 index b066142ca..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs +++ /dev/null @@ -1,118 +0,0 @@ -// using System; -// using UnityEditor; -// using UnityEngine; -// using UnityEngine.Rendering.Universal; -// using UnityEngine.Rendering; -// -// public class BlurRenderPass : ScriptableRenderPass -// { -// private static readonly int horizontalBlurId = Shader.PropertyToID("_HorizontalBlur"); -// private static readonly int verticalBlurId = Shader.PropertyToID("_VerticalBlur"); -// -// private BlurSettings defaultSettings; -// private Material material; -// -// private RenderTexture m_rt; -// -// public BlurRenderPass(RenderTexture rt) { -// m_rt = rt; -// } -// -// public override void Configure(CommandBuffer cmd, -// RenderTextureDescriptor cameraTextureDescriptor) -// { -// } -// -// -// public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) -// { -// -// CommandBuffer cmd = CommandBufferPool.Get(); -// -// RTHandle cameraTargetHandle = renderingData.cameraData.renderer.cameraColorTargetHandle; -// -// -// // Blit from the camera target to the temporary render texture, -// // using the first shader pass. -// Blit(cmd, m_rt, cameraTargetHandle, material, 0); -// -// //Execute the command buffer and release it back to the pool. -// context.ExecuteCommandBuffer(cmd); -// CommandBufferPool.Release(cmd); -// } -// -// public void Dispose() -// { -// #if UNITY_EDITOR -// if (EditorApplication.isPlaying) -// { -// Object.Destroy(material); -// } -// else -// { -// Object.DestroyImmediate(material); -// } -// #else -// Object.Destroy(material); -// #endif -// -// if (blurTextureHandle != null) blurTextureHandle.Release(); -// } -// } -// -// //-------------------------------------------------------------------------------------------------------------------------------------------------------------- -// -// -// public class BlurRendererFeature : ScriptableRendererFeature -// { -// [SerializeField] private BlurSettings settings; -// private BlurRenderPass blurRenderPass; -// -// -// [SerializeField] private RenderTexture m_renderTexture; -// -// -// public override void Create() -// { -// if (m_renderTexture == null) -// { -// return; -// } -// blurRenderPass = new BlurRenderPass(m_renderTexture); -// -// blurRenderPass.renderPassEvent = RenderPassEvent.AfterRenderingSkybox; -// } -// -// public override void AddRenderPasses(ScriptableRenderer renderer, -// ref RenderingData renderingData) -// { -// if (renderingData.cameraData.cameraType == CameraType.Game) -// { -// renderer.EnqueuePass(blurRenderPass); -// } -// } -// -// protected override void Dispose(bool disposing) -// { -// blurRenderPass.Dispose(); -// #if UNITY_EDITOR -// if (EditorApplication.isPlaying) -// { -// Destroy(material); -// } -// else -// { -// DestroyImmediate(material); -// } -// #else -// Destroy(material); -// #endif -// } -// } -// -// [Serializable] -// public class BlurSettings -// { -// [Range(0, 0.4f)] public float horizontalBlur; -// [Range(0, 0.4f)] public float verticalBlur; -// } \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs.meta deleted file mode 100644 index 1e57b9d56..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/BackgroundBlitFeature.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 03319a84511cc694e89b2e8b6d940726 \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs deleted file mode 100644 index 6c7056e0b..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Rendering; - -[RequireComponent(typeof(Camera))] -[ExecuteAlways] -public class Blit : MonoBehaviour -{ - // Start is called once before the first execution of Update after the MonoBehaviour is created - void OnEnable() { - //RenderPipelineManager.beginContextRendering += OnBeginContextRendering; - RenderPipelineManager.beginCameraRendering += OnBeginCameraRendering; - - } - - void OnDisable() { - //RenderPipelineManager.beginContextRendering -= OnBeginContextRendering; - RenderPipelineManager.beginCameraRendering -= OnBeginCameraRendering; - } - - - private void OnBeginContextRendering(ScriptableRenderContext context, List cams) { - foreach (Camera cam in cams) { - if (cam == m_camera) { - Debug.Log("Doing Blit"); - Graphics.Blit(m_tex, cam.targetTexture); - return; - } - } - } - - void OnBeginCameraRendering(ScriptableRenderContext context, Camera camera) - { - - if (camera.cameraType != CameraType.Game) - return; - - // Filter which cameras should receive the background - if (camera!= m_camera) - return; - - if (m_tex == null) - return; - - // For URP, the current camera target is an internal RT. We can blit to it at the start - // to "prime" the background, then URP will draw opaque/transparent on top (depending on clear flags). - // Ensure the camera Clear Flags are set to Don't Clear or Depth Only if you want to keep the background. - var cmd = CommandBufferPool.Get("Blit Background"); - - // Try to ensure we're drawing into the camera's current color target. - CoreUtils.SetRenderTarget(cmd, BuiltinRenderTextureType.CameraTarget); - cmd.Blit(m_tex, BuiltinRenderTextureType.CameraTarget); - - context.ExecuteCommandBuffer(cmd); - CommandBufferPool.Release(cmd); - } - - private void OnValidate() { - m_camera = GetComponent(); - } - -//-------------------------------------------------------------------------------------------------------------------------------------------------------------- - - - - [SerializeField] private RenderTexture m_tex; - [SerializeField] Camera m_camera = null; - -} diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs.meta deleted file mode 100644 index a961de407..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/Blit.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 37b5ca99ee37d9c4dbccfaeb63fe78f9 \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs deleted file mode 100644 index 1f68da9a4..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs +++ /dev/null @@ -1,128 +0,0 @@ -using UnityEngine; -using UnityEngine.Experimental.Rendering; -using UnityEngine.Rendering.Universal; -using UnityEngine.Rendering.RenderGraphModule; -using UnityEngine.Rendering; - -public class BlitFromExternalTexture : ScriptableRendererFeature -{ - // The texture to use as input - public RenderTexture textureToUse; - public Texture2D texture2DToUse; - - BlitFromTexture customPass; - public RenderPassEvent renderPassEvent = RenderPassEvent.BeforeRendering; - - - public override void Create() - { - // Create an instance of the render pass, and pass in the input texture - customPass = new BlitFromTexture(textureToUse, texture2DToUse); - - customPass.renderPassEvent = renderPassEvent; - } - - public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) - { - renderer.EnqueuePass(customPass); - } - - class BlitFromTexture : ScriptableRenderPass - { - class PassData - { - internal TextureHandle textureToRead; - internal RenderTexture tempColorTexture; - } - - private RenderTexture texturePassedIn; - private Texture2D texture2D; - - public BlitFromTexture(RenderTexture textureIn, Texture2D tex2d) - { - // In the render pass's constructor, set the input texture - texturePassedIn = textureIn; - texture2D = tex2d; - } - - public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameContext) - { - - Debug.Log("RecordRenderGraph"); - - using (var builder = renderGraph.AddRasterRenderPass("Blit from external textures", out var passData)) - { - // Create a temporary texture and set it as the render target - RenderTextureDescriptor textureProperties = new RenderTextureDescriptor(Screen.width, Screen.height, RenderTextureFormat.Default, 0); - textureProperties.graphicsFormat = GraphicsFormat.R8G8B8A8_UNorm; - textureProperties.depthStencilFormat = GraphicsFormat.None; - - // TextureHandle texture = UniversalRenderer.CreateRenderGraphTexture(renderGraph, textureProperties, "My texture", false); - // Import the camera's color target - - UniversalResourceData resourceData = frameContext.Get(); - //UniversalCameraData cameraData = frameContext.Get(); - - TextureHandle cameraColor = resourceData.activeColorTexture; - builder.SetRenderAttachment(cameraColor, 0, AccessFlags.Write); - - // Create a render texture from the input texture - // RTHandle rtHandle = RTHandles.Alloc(texture2D); - // TextureHandle textureToRead = renderGraph.ImportTexture(rtHandle); - - // Import with explicit RenderTargetInfo to override any depth/stencil format - RenderTargetInfo rtInfo = new RenderTargetInfo(); - rtInfo.width = texturePassedIn.width; - rtInfo.height = texturePassedIn.height; - rtInfo.volumeDepth = 1; - rtInfo.msaaSamples = 1; - rtInfo.format = GraphicsFormat.R8G8B8A8_UNorm; - - // Create a temporary RenderTexture with only color format - RenderTextureDescriptor colorOnlyDesc = new RenderTextureDescriptor( - texturePassedIn.width, - texturePassedIn.height - ); - colorOnlyDesc.graphicsFormat = texturePassedIn.graphicsFormat; - colorOnlyDesc.depthStencilFormat = GraphicsFormat.None; - colorOnlyDesc.msaaSamples = texturePassedIn.antiAliasing; - - passData.tempColorTexture = RenderTexture.GetTemporary(colorOnlyDesc); - Graphics.Blit(texturePassedIn, passData.tempColorTexture); - - //RTHandle rtHandle = RTHandles.Alloc(width:texturePassedIn.width, height: texturePassedIn.height, format: GraphicsFormat.R8G8B8A8_UNorm); - RTHandle rtHandle = RTHandles.Alloc(passData.tempColorTexture); - TextureHandle textureToRead = renderGraph.ImportTexture(rtHandle); - - //public static RTHandle Alloc(int width, int height, int slices = 1, DepthBits depthBufferBits = DepthBits.None, GraphicsFormat colorFormat = GraphicsFormat.R8G8B8A8_SRGB, FilterMode filterMode = FilterMode.Point, TextureWrapMode wrapMode = TextureWrapMode.Repeat, TextureDimension dimension = TextureDimension.Tex2D, bool enableRandomWrite = false, bool useMipMap = false, bool autoGenerateMips = true, bool isShadowMap = false, int anisoLevel = 1, float mipMapBias = 0, MSAASamples msaaSamples = MSAASamples.None, bool bindTextureMS = false, bool useDynamicScale = false, bool useDynamicScaleExplicit = false, RenderTextureMemoryless memoryless = RenderTextureMemoryless.None, VRTextureUsage vrUsage = VRTextureUsage.None, string name = "") - //Alloc(int, int, GraphicsFormat, int, FilterMode, TextureWrapMode, TextureDimension, bool, bool, bool, bool, int, float, MSAASamples, bool, bool, bool, RenderTextureMemoryless, VRTextureUsage, string) - //Alloc(int, int, TextureWrapMode, TextureWrapMode, TextureWrapMode, int, DepthBits, GraphicsFormat, FilterMode, TextureDimension, bool, bool, bool, bool, int, float, MSAASamples, bool, bool, bool, RenderTextureMemoryless, VRTextureUsage, string) - - - - // Add the texture to the pass data - - passData.textureToRead = textureToRead; - - // Set the texture as readable - builder.UseTexture(passData.textureToRead, AccessFlags.Read); - - builder.AllowPassCulling(false); - - builder.SetRenderFunc((PassData data, RasterGraphContext context) => ExecutePass(data, context)); - } - } - - static void ExecutePass(PassData data, RasterGraphContext context) - { - // Copy the imported texture to the render target - Blitter.BlitTexture(context.cmd, data.textureToRead, new Vector4(1.0f,1.0f,0,0), 0, false); - - Debug.Log("a"); - - // Dispose of the texture - RTHandles.Release(data.textureToRead); - RenderTexture.ReleaseTemporary(data.tempColorTexture); - } - } -} diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs.meta deleted file mode 100644 index 72df1b659..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/BlitFromExternalTexture.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 60eefc24acbf4f3448929f044cdd8ae8 From 27a1d5f5cbe5abbc8149d729c8a03831f5abd5d4 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 22 Oct 2025 15:11:31 +0900 Subject: [PATCH 158/290] remove unused RT --- .../ScenesDev/test3DOutput.renderTexture | 39 ------------------- .../ScenesDev/test3DOutput.renderTexture.meta | 8 ---- 2 files changed, 47 deletions(-) delete mode 100644 Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture delete mode 100644 Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture.meta diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture b/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture deleted file mode 100644 index 457daac7d..000000000 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture +++ /dev/null @@ -1,39 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!84 &8400000 -RenderTexture: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: test3DOutput - m_ImageContentsHash: - serializedVersion: 2 - Hash: 00000000000000000000000000000000 - m_IsAlphaChannelOptional: 0 - serializedVersion: 6 - m_Width: 256 - m_Height: 256 - m_AntiAliasing: 1 - m_MipCount: -1 - m_DepthStencilFormat: 94 - m_ColorFormat: 8 - m_MipMap: 0 - m_GenerateMips: 1 - m_SRGB: 0 - m_UseDynamicScale: 0 - m_UseDynamicScaleExplicit: 0 - m_BindMS: 0 - m_EnableCompatibleFormat: 1 - m_EnableRandomWrite: 0 - m_TextureSettings: - serializedVersion: 2 - m_FilterMode: 1 - m_Aniso: 0 - m_MipBias: 0 - m_WrapU: 1 - m_WrapV: 1 - m_WrapW: 1 - m_Dimension: 2 - m_VolumeDepth: 1 - m_ShadowSamplingMode: 2 diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture.meta b/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture.meta deleted file mode 100644 index c61915547..000000000 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test3DOutput.renderTexture.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 395bbc419b3737341b46a8a4c1c96f86 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 8400000 - userData: - assetBundleName: - assetBundleVariant: From 66e8151384f05818e886700b6fb82c1aff9d2e33 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 22 Oct 2025 15:11:42 +0900 Subject: [PATCH 159/290] rename 2D Renderer --- .../Assets/RP_Assets/Renderer2D.asset | 84 ------------------- .../Assets/RP_Assets/Renderer2D.asset.meta | 8 -- 2 files changed, 92 deletions(-) delete mode 100644 Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset delete mode 100644 Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset.meta diff --git a/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset b/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset deleted file mode 100644 index 637de30ef..000000000 --- a/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset +++ /dev/null @@ -1,84 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 11145981673336645838492a2d98e247, type: 3} - m_Name: Renderer2D - m_EditorClassIdentifier: - debugShaders: - debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, - type: 3} - hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} - probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, - type: 3} - probeVolumeResources: - probeVolumeDebugShader: {fileID: 4800000, guid: e5c6678ed2aaa91408dd3df699057aae, - type: 3} - probeVolumeFragmentationDebugShader: {fileID: 4800000, guid: 03cfc4915c15d504a9ed85ecc404e607, - type: 3} - probeVolumeOffsetDebugShader: {fileID: 4800000, guid: 53a11f4ebaebf4049b3638ef78dc9664, - type: 3} - probeVolumeSamplingDebugShader: {fileID: 4800000, guid: 8f96cd657dc40064aa21efcc7e50a2e7, - type: 3} - probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 57d7c4c16e2765b47a4d2069b311bffe, - type: 3} - probeSamplingDebugTexture: {fileID: 2800000, guid: 24ec0e140fb444a44ab96ee80844e18e, - type: 3} - probeVolumeBlendStatesCS: {fileID: 0} - m_RendererFeatures: - - {fileID: 90138282318566881} - m_RendererFeatureMap: e115434a4a3c4001 - m_UseNativeRenderPass: 0 - m_LayerMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_TransparencySortMode: 0 - m_TransparencySortAxis: {x: 0, y: 1, z: 0} - m_HDREmulationScale: 1 - m_LightRenderTextureScale: 0.5 - m_LightBlendStyles: - - name: Multiply - maskTextureChannel: 0 - blendMode: 1 - - name: Additive - maskTextureChannel: 0 - blendMode: 0 - - name: Multiply with Mask - maskTextureChannel: 1 - blendMode: 1 - - name: Additive with Mask - maskTextureChannel: 1 - blendMode: 0 - m_UseDepthStencilBuffer: 1 - m_UseCameraSortingLayersTexture: 0 - m_CameraSortingLayersTextureBound: -1 - m_CameraSortingLayerDownsamplingMethod: 0 - m_MaxLightRenderTextureCount: 16 - m_MaxShadowRenderTextureCount: 1 - m_PostProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} - m_DefaultMaterialType: 0 - m_DefaultCustomMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, - type: 2} ---- !u!114 &90138282318566881 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 60eefc24acbf4f3448929f044cdd8ae8, type: 3} - m_Name: BlitFromExternalTexture - m_EditorClassIdentifier: Assembly-CSharp::BlitFromExternalTexture - m_Active: 1 - textureToUse: {fileID: 8400000, guid: 67ad705e569ea6c4492980f61418d902, type: 2} - texture2DToUse: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} - renderPassEvent: 210 diff --git a/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset.meta b/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset.meta deleted file mode 100644 index a5c42b240..000000000 --- a/Toonshader_ProjectURP/Assets/RP_Assets/Renderer2D.asset.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: aec34135564b84745baffe07fc9f7d4c -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: From 8bced6f59b09f42b66ce4445ba4274888ca13db3 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 22 Oct 2025 15:19:19 +0900 Subject: [PATCH 160/290] save scene --- .../Assets/ScenesDev/test.unity | 216 +++++++++++++++--- 1 file changed, 188 insertions(+), 28 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index 749ca01e2..e637ddd99 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -132,7 +132,7 @@ GameObject: - component: {fileID: 116300324} - component: {fileID: 116300323} m_Layer: 7 - m_Name: Sphere + m_Name: SphereToon3D m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -184,7 +184,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + - {fileID: 2100000, guid: c51bf9755171c064f84a96b73079c4c9, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -224,12 +224,13 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 116300322} serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -3.7} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 3.57, y: 1.23, z: -3.7} + m_LocalScale: {x: 3, y: 3, z: 3} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 397058299} + m_Father: {fileID: 1390602298} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &360142871 GameObject: @@ -371,10 +372,11 @@ Transform: m_GameObject: {fileID: 361997359} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -8.49, y: 1.38, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalPosition: {x: -10.38, y: 1.38, z: 0} + m_LocalScale: {x: 3, y: 3, z: 3} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 1873556970} m_Father: {fileID: 372493292} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!135 &361997361 @@ -470,7 +472,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!4 &372493292 Transform: m_ObjectHideFlags: 0 @@ -487,7 +489,6 @@ Transform: - {fileID: 360142872} - {fileID: 361997360} - {fileID: 2080296074} - - {fileID: 1873556970} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &391645602 @@ -586,14 +587,14 @@ Camera: near clip plane: 0.3 far clip plane: 1000 field of view: 60 - orthographic: 0 + orthographic: 1 orthographic size: 5 m_Depth: -1 m_CullingMask: serializedVersion: 2 m_Bits: 128 m_RenderingPath: -1 - m_TargetTexture: {fileID: 8400000, guid: 67ad705e569ea6c4492980f61418d902, type: 2} + m_TargetTexture: {fileID: 8400000, guid: 05daaa774e709ff4cae5d7b4d4c8e9be, type: 2} m_TargetDisplay: 0 m_TargetEye: 3 m_HDR: 1 @@ -618,6 +619,133 @@ Transform: m_Children: [] m_Father: {fileID: 534897190} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &397058298 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 397058299} + - component: {fileID: 397058301} + - component: {fileID: 397058300} + m_Layer: 0 + m_Name: Spot Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &397058299 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 397058298} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0.029999971, y: 1.5433334, z: 0} + m_LocalScale: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 116300326} + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!114 &397058300 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 397058298} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_CustomShadowLayers: 0 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 0 + m_RenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_ShadowRenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_Version: 4 + m_LightLayerMask: 1 + m_ShadowLayerMask: 1 + m_RenderingLayers: 1 + m_ShadowRenderingLayers: 1 +--- !u!108 &397058301 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 397058298} + m_Enabled: 1 + serializedVersion: 12 + m_Type: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 8.05 + m_Range: 10.42 + m_SpotAngle: 47.9236 + m_InnerSpotAngle: 39.725677 + m_CookieSize2D: {x: 10, y: 10} + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!1 &534897189 GameObject: m_ObjectHideFlags: 0 @@ -651,6 +779,38 @@ Transform: - {fileID: 391645606} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1390602297 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1390602298} + m_Layer: 0 + m_Name: 3D Objects + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1390602298 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1390602297} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 116300326} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1733474739 GameObject: m_ObjectHideFlags: 0 @@ -686,7 +846,7 @@ MonoBehaviour: m_RequiresOpaqueTextureOption: 2 m_CameraType: 0 m_Cameras: [] - m_RendererIndex: 1 + m_RendererIndex: 2 m_VolumeLayerMask: serializedVersion: 2 m_Bits: 1 @@ -811,7 +971,7 @@ MonoBehaviour: m_ComponentVersion: 2 m_LightType: 3 m_BlendStyleIndex: 0 - m_FalloffIntensity: 0.5 + m_FalloffIntensity: 0.573 m_Color: {r: 1, g: 1, b: 1, a: 1} m_Intensity: 1 m_LightVolumeIntensity: 1 @@ -834,10 +994,10 @@ MonoBehaviour: m_LocalBounds: m_Center: {x: 0, y: -0.00000011920929, z: 0} m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} - m_PointLightInnerAngle: 360 - m_PointLightOuterAngle: 360 + m_PointLightInnerAngle: 38.718567 + m_PointLightOuterAngle: 112.86046 m_PointLightInnerRadius: 0 - m_PointLightOuterRadius: 8.81 + m_PointLightOuterRadius: 6.85 m_ShapeLightParametricSides: 5 m_ShapeLightParametricAngleOffset: 0 m_ShapeLightParametricRadius: 1 @@ -856,13 +1016,13 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1873556968} serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -15.5, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} + m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} + m_LocalPosition: {x: 0.04, y: 0.896, z: 0} + m_LocalScale: {x: 0.33333334, y: 0.33333334, z: 0.33333334} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 372493292} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_Father: {fileID: 361997360} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} --- !u!1 &1896131351 GameObject: m_ObjectHideFlags: 0 @@ -880,7 +1040,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!114 &1896131352 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1006,7 +1166,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!212 &2080296073 SpriteRenderer: serializedVersion: 2 @@ -1086,7 +1246,7 @@ Transform: SceneRoots: m_ObjectHideFlags: 0 m_Roots: - - {fileID: 116300326} + - {fileID: 1390602298} - {fileID: 534897190} - {fileID: 1896131354} - {fileID: 372493292} From 64e3417daf51ad4000aa050da621572dc2053489 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 29 Oct 2025 20:29:17 +0900 Subject: [PATCH 161/290] keep only light_0 in the toon2d shader --- .../Assets/Shaders/Toon2D.shader | 54 ------------------- 1 file changed, 54 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 0a79505b0..8c72c5ba8 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -167,62 +167,8 @@ half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inp half4 shapeLight0Additive = 0; #endif -#if USE_SHAPE_LIGHT_TYPE_1 - half4 shapeLight1 = SAMPLE_TEXTURE2D(_ShapeLightTexture1, sampler_ShapeLightTexture1, lightingUV); - - if (any(_ShapeLightMaskFilter1)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter1) * mask + _ShapeLightInvertedFilter1 * (1 - mask); - shapeLight1 *= dot(processedMask, _ShapeLightMaskFilter1); - } - - half4 shapeLight1Modulate = shapeLight1 * _ShapeLightBlendFactors1.x; - half4 shapeLight1Additive = shapeLight1 * _ShapeLightBlendFactors1.y; -#else - half4 shapeLight1Modulate = 0; - half4 shapeLight1Additive = 0; -#endif - -#if USE_SHAPE_LIGHT_TYPE_2 - half4 shapeLight2 = SAMPLE_TEXTURE2D(_ShapeLightTexture2, sampler_ShapeLightTexture2, lightingUV); - - if (any(_ShapeLightMaskFilter2)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter2) * mask + _ShapeLightInvertedFilter2 * (1 - mask); - shapeLight2 *= dot(processedMask, _ShapeLightMaskFilter2); - } - - half4 shapeLight2Modulate = shapeLight2 * _ShapeLightBlendFactors2.x; - half4 shapeLight2Additive = shapeLight2 * _ShapeLightBlendFactors2.y; -#else - half4 shapeLight2Modulate = 0; - half4 shapeLight2Additive = 0; -#endif - -#if USE_SHAPE_LIGHT_TYPE_3 - half4 shapeLight3 = SAMPLE_TEXTURE2D(_ShapeLightTexture3, sampler_ShapeLightTexture3, lightingUV); - - if (any(_ShapeLightMaskFilter3)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter3) * mask + _ShapeLightInvertedFilter3 * (1 - mask); - shapeLight3 *= dot(processedMask, _ShapeLightMaskFilter3); - } - - half4 shapeLight3Modulate = shapeLight3 * _ShapeLightBlendFactors3.x; - half4 shapeLight3Additive = shapeLight3 * _ShapeLightBlendFactors3.y; -#else - half4 shapeLight3Modulate = 0; - half4 shapeLight3Additive = 0; -#endif half4 finalOutput; -#if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 - finalOutput = color; -#else - half4 finalModulate = shapeLight0Modulate + shapeLight1Modulate + shapeLight2Modulate + shapeLight3Modulate; - half4 finalAdditve = shapeLight0Additive + shapeLight1Additive + shapeLight2Additive + shapeLight3Additive; - finalOutput = _HDREmulationScale * (color * finalModulate + finalAdditve); -#endif finalOutput.a = alpha; From 717b4d62e5b466247d16e547b9649337b6536cf4 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 29 Oct 2025 20:42:20 +0900 Subject: [PATCH 162/290] Revert "keep only light_0 in the toon2d shader" This reverts commit 91c31c235749c76089cbc561a0421bf75035bf2e. --- .../Assets/Shaders/Toon2D.shader | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 8c72c5ba8..0a79505b0 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -167,8 +167,62 @@ half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inp half4 shapeLight0Additive = 0; #endif +#if USE_SHAPE_LIGHT_TYPE_1 + half4 shapeLight1 = SAMPLE_TEXTURE2D(_ShapeLightTexture1, sampler_ShapeLightTexture1, lightingUV); + + if (any(_ShapeLightMaskFilter1)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter1) * mask + _ShapeLightInvertedFilter1 * (1 - mask); + shapeLight1 *= dot(processedMask, _ShapeLightMaskFilter1); + } + + half4 shapeLight1Modulate = shapeLight1 * _ShapeLightBlendFactors1.x; + half4 shapeLight1Additive = shapeLight1 * _ShapeLightBlendFactors1.y; +#else + half4 shapeLight1Modulate = 0; + half4 shapeLight1Additive = 0; +#endif + +#if USE_SHAPE_LIGHT_TYPE_2 + half4 shapeLight2 = SAMPLE_TEXTURE2D(_ShapeLightTexture2, sampler_ShapeLightTexture2, lightingUV); + + if (any(_ShapeLightMaskFilter2)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter2) * mask + _ShapeLightInvertedFilter2 * (1 - mask); + shapeLight2 *= dot(processedMask, _ShapeLightMaskFilter2); + } + + half4 shapeLight2Modulate = shapeLight2 * _ShapeLightBlendFactors2.x; + half4 shapeLight2Additive = shapeLight2 * _ShapeLightBlendFactors2.y; +#else + half4 shapeLight2Modulate = 0; + half4 shapeLight2Additive = 0; +#endif + +#if USE_SHAPE_LIGHT_TYPE_3 + half4 shapeLight3 = SAMPLE_TEXTURE2D(_ShapeLightTexture3, sampler_ShapeLightTexture3, lightingUV); + + if (any(_ShapeLightMaskFilter3)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter3) * mask + _ShapeLightInvertedFilter3 * (1 - mask); + shapeLight3 *= dot(processedMask, _ShapeLightMaskFilter3); + } + + half4 shapeLight3Modulate = shapeLight3 * _ShapeLightBlendFactors3.x; + half4 shapeLight3Additive = shapeLight3 * _ShapeLightBlendFactors3.y; +#else + half4 shapeLight3Modulate = 0; + half4 shapeLight3Additive = 0; +#endif half4 finalOutput; +#if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 + finalOutput = color; +#else + half4 finalModulate = shapeLight0Modulate + shapeLight1Modulate + shapeLight2Modulate + shapeLight3Modulate; + half4 finalAdditve = shapeLight0Additive + shapeLight1Additive + shapeLight2Additive + shapeLight3Additive; + finalOutput = _HDREmulationScale * (color * finalModulate + finalAdditve); +#endif finalOutput.a = alpha; From db47a760d0142fb8c4886a52dacf097f58d54247 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 29 Oct 2025 20:42:46 +0900 Subject: [PATCH 163/290] remove light 1,2,3 --- .../Assets/Shaders/Toon2D.shader | 48 ------------------- 1 file changed, 48 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 0a79505b0..89e6a783a 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -167,54 +167,6 @@ half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inp half4 shapeLight0Additive = 0; #endif -#if USE_SHAPE_LIGHT_TYPE_1 - half4 shapeLight1 = SAMPLE_TEXTURE2D(_ShapeLightTexture1, sampler_ShapeLightTexture1, lightingUV); - - if (any(_ShapeLightMaskFilter1)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter1) * mask + _ShapeLightInvertedFilter1 * (1 - mask); - shapeLight1 *= dot(processedMask, _ShapeLightMaskFilter1); - } - - half4 shapeLight1Modulate = shapeLight1 * _ShapeLightBlendFactors1.x; - half4 shapeLight1Additive = shapeLight1 * _ShapeLightBlendFactors1.y; -#else - half4 shapeLight1Modulate = 0; - half4 shapeLight1Additive = 0; -#endif - -#if USE_SHAPE_LIGHT_TYPE_2 - half4 shapeLight2 = SAMPLE_TEXTURE2D(_ShapeLightTexture2, sampler_ShapeLightTexture2, lightingUV); - - if (any(_ShapeLightMaskFilter2)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter2) * mask + _ShapeLightInvertedFilter2 * (1 - mask); - shapeLight2 *= dot(processedMask, _ShapeLightMaskFilter2); - } - - half4 shapeLight2Modulate = shapeLight2 * _ShapeLightBlendFactors2.x; - half4 shapeLight2Additive = shapeLight2 * _ShapeLightBlendFactors2.y; -#else - half4 shapeLight2Modulate = 0; - half4 shapeLight2Additive = 0; -#endif - -#if USE_SHAPE_LIGHT_TYPE_3 - half4 shapeLight3 = SAMPLE_TEXTURE2D(_ShapeLightTexture3, sampler_ShapeLightTexture3, lightingUV); - - if (any(_ShapeLightMaskFilter3)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter3) * mask + _ShapeLightInvertedFilter3 * (1 - mask); - shapeLight3 *= dot(processedMask, _ShapeLightMaskFilter3); - } - - half4 shapeLight3Modulate = shapeLight3 * _ShapeLightBlendFactors3.x; - half4 shapeLight3Additive = shapeLight3 * _ShapeLightBlendFactors3.y; -#else - half4 shapeLight3Modulate = 0; - half4 shapeLight3Additive = 0; -#endif - half4 finalOutput; #if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 finalOutput = color; From bed3a5cffeb14077c8d83089b17a6a1c94746d34 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 29 Oct 2025 20:47:17 +0900 Subject: [PATCH 164/290] base color --- .../Assets/Shaders/Toon2D.shader | 43 ++++++++++++++++--- 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 89e6a783a..7d2f9b05b 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -132,7 +132,7 @@ half3 ShadeSH9(half4 normal) //---------------------------------------------------------------------------------------------------------------------- -half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData) +half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv) { #if defined(DEBUG_DISPLAY) half4 debugColor = 0; @@ -151,6 +151,31 @@ half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inp if (alpha == 0.0) discard; + + + + // //v.2.0.5 + // float4 _1st_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_1st_ShadeMap,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_MainTex_var,_Use_BaseAs1st); + // float3 Set_1st_ShadeColor = lerp( (_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb), ((_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_1st_Shade ); + // //v.2.0.5 + // float4 _2nd_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_1st_ShadeMap_var,_Use_1stAs2nd); + // float3 Set_2nd_ShadeColor = lerp( (_2nd_ShadeColor.rgb*_2nd_ShadeMap_var.rgb), ((_2nd_ShadeColor.rgb*_2nd_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_2nd_Shade ); + // float _HalfLambert_var = 0.5*dot(lerp( i.normalDir, normalDirection, _Is_NormalMapToBase ),lightDirection)+0.5; + // + // float4 _Set_2nd_ShadePosition_var = tex2D(_Set_2nd_ShadePosition, TRANSFORM_TEX(Set_UV0, _Set_2nd_ShadePosition)); + // float4 _Set_1st_ShadePosition_var = tex2D(_Set_1st_ShadePosition, TRANSFORM_TEX(Set_UV0, _Set_1st_ShadePosition)); + // //v.2.0.6 + // //Minmimum value is same as the Minimum Feather's value with the Minimum Step's value as threshold. + // float _SystemShadowsLevel_var = (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel > 0.001 ? (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel : 0.0001; + // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var*saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); + // // + // //Composition: 3 Basic Colors as Set_FinalBaseColor + // float3 Set_FinalBaseColor = lerp(Set_BaseColor,lerp(Set_1st_ShadeColor,Set_2nd_ShadeColor,saturate((1.0 + ( (_HalfLambert_var - (_ShadeColor_Step-_1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0) ) / (_ShadeColor_Step - (_ShadeColor_Step-_1st2nd_Shades_Feather))))),Set_FinalShadowMask); // Final Color + + + //return float4(Set_BaseColor,1); + + #if USE_SHAPE_LIGHT_TYPE_0 half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); @@ -160,8 +185,14 @@ half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inp shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); } - half4 shapeLight0Modulate = shapeLight0 * _ShapeLightBlendFactors0.x; + + + float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); + float3 baseColor = surfaceData.albedo.rgb * shapeLight0 * _ShapeLightBlendFactors0.x; + + half4 shapeLight0Modulate = half4(baseColor, alpha); half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; + #else half4 shapeLight0Modulate = 0; half4 shapeLight0Additive = 0; @@ -171,9 +202,9 @@ half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inp #if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 finalOutput = color; #else - half4 finalModulate = shapeLight0Modulate + shapeLight1Modulate + shapeLight2Modulate + shapeLight3Modulate; - half4 finalAdditve = shapeLight0Additive + shapeLight1Additive + shapeLight2Additive + shapeLight3Additive; - finalOutput = _HDREmulationScale * (color * finalModulate + finalAdditve); + half4 finalModulate = shapeLight0Modulate; + half4 finalAdditve = shapeLight0Additive; + finalOutput = _HDREmulationScale * ( finalModulate + finalAdditve); #endif finalOutput.a = alpha; @@ -198,7 +229,7 @@ half4 CommonLitFragment2(Varyings input, half4 color) surfaceData.normalWS = input.normalWS; #endif - return CombinedShapeLightShared2(surfaceData, inputData); + return CombinedShapeLightShared2(surfaceData, inputData, input.uv); } From c7b2c0a45843c980346d79bd63690f1bb062de58 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 29 Oct 2025 21:13:30 +0900 Subject: [PATCH 165/290] all colors --- .../Assets/Shaders/Toon2D.shader | 396 ++++++++++-------- 1 file changed, 225 insertions(+), 171 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 7d2f9b05b..72b823605 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -1,20 +1,36 @@ -Shader "Toon2D" { - Properties { +Shader "Toon2D" +{ + Properties + { _BaseColor ("BaseColor", Color) = (1,1,1,1) _MainTex ("BaseMap", 2D) = "white" {} + + _1st_ShadeMap ("1st_ShadeMap", 2D) = "white" {} + [Toggle(_)] _Use_BaseAs1st ("Use BaseMap as 1st_ShadeMap", Float ) = 0 + _1st_ShadeColor ("1st_ShadeColor", Color) = (1,1,1,1) + [Toggle(_)] _Is_LightColor_1st_Shade ("Is_LightColor_1st_Shade", Float ) = 1 + _2nd_ShadeMap ("2nd_ShadeMap", 2D) = "white" {} + [Toggle(_)] _Use_1stAs2nd ("Use 1st_ShadeMap as 2nd_ShadeMap", Float ) = 0 + _2nd_ShadeColor ("2nd_ShadeColor", Color) = (1,1,1,1) + + + _MaskTex("Mask", 2D) = "white" {} _NormalMap("Normal Map", 2D) = "bump" {} _Unlit_Intensity ("Unlit_Intensity", Range(0, 4)) = 0 - + [Toggle(_)] _Is_Filter_LightColor ("VRChat : SceneLights HiCut_Filter", Float ) = 1 [Toggle(_)] _Is_LightColor_Base ("Is_LightColor_Base", Float ) = 1 - - [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching + + [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching } SubShader { - Tags {"Queue" = "Transparent" "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" } + Tags + { + "Queue" = "Transparent" "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" + } Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha Cull Back @@ -22,7 +38,8 @@ Shader "Toon2D" { - Stencil { + Stencil + { Ref 128 // Put this in the last bit of our stencil value for maximum compatibility with sprite mask Comp always Pass replace @@ -30,7 +47,10 @@ Shader "Toon2D" { Pass { - Tags { "LightMode" = "Universal2D" } + Tags + { + "LightMode" = "Universal2D" + } HLSLPROGRAM #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" @@ -59,204 +79,232 @@ Shader "Toon2D" { #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Lit2DCommon.hlsl" CBUFFER_START(UnityPerMaterial) - half4 _BaseColor; - float _Unlit_Intensity; - float _Is_Filter_LightColor; - float _Is_LightColor_Base; + half4 _BaseColor; + float _Unlit_Intensity; + float _Is_Filter_LightColor; + float _Is_LightColor_Base; + + float _Use_BaseAs1st; + float _Use_1stAs2nd; + + float4 _1st_ShadeColor; + float4 _2nd_ShadeColor; + + float _ShadeColor_Step; + float _1st2nd_Shades_Feather; - CBUFFER_END -//---------------------------------------------------------------------------------------------------------------------- + //---------------------------------------------------------------------------------------------------------------------- float4 _MainTex_ST; //TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex); + TEXTURE2D(_1st_ShadeMap); + TEXTURE2D(_2nd_ShadeMap); + - Varyings LitVertex(Attributes input) { return CommonLitVertex(input); } -//---------------------------------------------------------------------------------------------------------------------- - -// normal should be normalized, w=1.0 -half3 SHEvalLinearL0L1(half4 normal) -{ - half3 x; + //---------------------------------------------------------------------------------------------------------------------- - // Linear (L1) + constant (L0) polynomial terms - x.r = dot(unity_SHAr, normal); - x.g = dot(unity_SHAg, normal); - x.b = dot(unity_SHAb, normal); + // normal should be normalized, w=1.0 + half3 SHEvalLinearL0L1(half4 normal) + { + half3 x; - return x; -} + // Linear (L1) + constant (L0) polynomial terms + x.r = dot(unity_SHAr, normal); + x.g = dot(unity_SHAg, normal); + x.b = dot(unity_SHAb, normal); -// normal should be normalized, w=1.0 -half3 SHEvalLinearL2(half4 normal) -{ - half3 x1, x2; - // 4 of the quadratic (L2) polynomials - half4 vB = normal.xyzz * normal.yzzx; - x1.r = dot(unity_SHBr, vB); - x1.g = dot(unity_SHBg, vB); - x1.b = dot(unity_SHBb, vB); - - // Final (5th) quadratic (L2) polynomial - half vC = normal.x*normal.x - normal.y*normal.y; - x2 = unity_SHC.rgb * vC; - - return x1 + x2; -} - - -// normal should be normalized, w=1.0 -// output in active color space -half3 ShadeSH9(half4 normal) -{ - // Linear + constant polynomial terms - half3 res = SHEvalLinearL0L1(normal); + return x; + } - // Quadratic polynomials - res += SHEvalLinearL2(normal); + // normal should be normalized, w=1.0 + half3 SHEvalLinearL2(half4 normal) + { + half3 x1, x2; + // 4 of the quadratic (L2) polynomials + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(unity_SHBr, vB); + x1.g = dot(unity_SHBg, vB); + x1.b = dot(unity_SHBb, vB); + + // Final (5th) quadratic (L2) polynomial + half vC = normal.x * normal.x - normal.y * normal.y; + x2 = unity_SHC.rgb * vC; + + return x1 + x2; + } -# ifdef UNITY_COLORSPACE_GAMMA - res = LinearToGammaSpace(res); -# endif - return res; -} + // normal should be normalized, w=1.0 + // output in active color space + half3 ShadeSH9(half4 normal) + { + // Linear + constant polynomial terms + half3 res = SHEvalLinearL0L1(normal); + // Quadratic polynomials + res += SHEvalLinearL2(normal); -//---------------------------------------------------------------------------------------------------------------------- + # ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + # endif -half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv) -{ - #if defined(DEBUG_DISPLAY) - half4 debugColor = 0; + return res; + } - if (CanDebugOverrideOutputColor(surfaceData, inputData, debugColor)) - { - return debugColor; - } - #endif - - half alpha = surfaceData.alpha; - half4 color = half4(surfaceData.albedo, alpha); - const half4 mask = surfaceData.mask; - const half2 lightingUV = inputData.lightingUV; - - if (alpha == 0.0) - discard; - - - - - // //v.2.0.5 - // float4 _1st_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_1st_ShadeMap,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_MainTex_var,_Use_BaseAs1st); - // float3 Set_1st_ShadeColor = lerp( (_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb), ((_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_1st_Shade ); - // //v.2.0.5 - // float4 _2nd_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_1st_ShadeMap_var,_Use_1stAs2nd); - // float3 Set_2nd_ShadeColor = lerp( (_2nd_ShadeColor.rgb*_2nd_ShadeMap_var.rgb), ((_2nd_ShadeColor.rgb*_2nd_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_2nd_Shade ); - // float _HalfLambert_var = 0.5*dot(lerp( i.normalDir, normalDirection, _Is_NormalMapToBase ),lightDirection)+0.5; - // - // float4 _Set_2nd_ShadePosition_var = tex2D(_Set_2nd_ShadePosition, TRANSFORM_TEX(Set_UV0, _Set_2nd_ShadePosition)); - // float4 _Set_1st_ShadePosition_var = tex2D(_Set_1st_ShadePosition, TRANSFORM_TEX(Set_UV0, _Set_1st_ShadePosition)); - // //v.2.0.6 - // //Minmimum value is same as the Minimum Feather's value with the Minimum Step's value as threshold. - // float _SystemShadowsLevel_var = (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel > 0.001 ? (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel : 0.0001; - // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var*saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); - // // - // //Composition: 3 Basic Colors as Set_FinalBaseColor - // float3 Set_FinalBaseColor = lerp(Set_BaseColor,lerp(Set_1st_ShadeColor,Set_2nd_ShadeColor,saturate((1.0 + ( (_HalfLambert_var - (_ShadeColor_Step-_1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0) ) / (_ShadeColor_Step - (_ShadeColor_Step-_1st2nd_Shades_Feather))))),Set_FinalShadowMask); // Final Color - - - //return float4(Set_BaseColor,1); - - -#if USE_SHAPE_LIGHT_TYPE_0 - half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); - - if (any(_ShapeLightMaskFilter0)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter0) * mask + _ShapeLightInvertedFilter0 * (1 - mask); - shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); - } + //---------------------------------------------------------------------------------------------------------------------- - - float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); - float3 baseColor = surfaceData.albedo.rgb * shapeLight0 * _ShapeLightBlendFactors0.x; - - half4 shapeLight0Modulate = half4(baseColor, alpha); - half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; - -#else - half4 shapeLight0Modulate = 0; - half4 shapeLight0Additive = 0; -#endif - - half4 finalOutput; -#if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 - finalOutput = color; -#else - half4 finalModulate = shapeLight0Modulate; - half4 finalAdditve = shapeLight0Additive; - finalOutput = _HDREmulationScale * ( finalModulate + finalAdditve); -#endif - - finalOutput.a = alpha; - - return max(0, finalOutput); -} - -half4 CommonLitFragment2(Varyings input, half4 color) -{ - const half4 main = color * SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv); - const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.uv); - const half3 normalTS = UnpackNormal(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.uv)); - - SurfaceData2D surfaceData; - InputData2D inputData; - - InitializeSurfaceData(main.rgb, main.a, mask, normalTS, surfaceData); - InitializeInputData(input.uv, input.lightingUV, inputData); - -#if defined(DEBUG_DISPLAY) - SETUP_DEBUG_TEXTURE_DATA_2D_NO_TS(inputData, input.positionWS, input.positionCS, _MainTex); - surfaceData.normalWS = input.normalWS; -#endif - - return CombinedShapeLightShared2(surfaceData, inputData, input.uv); -} - - -//---------------------------------------------------------------------------------------------------------------------- - half4 LitFragment(Varyings input) : SV_Target + half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv) { + #if defined(DEBUG_DISPLAY) + half4 debugColor = 0; + + if (CanDebugOverrideOutputColor(surfaceData, inputData, debugColor)) + { + return debugColor; + } + #endif + + half alpha = surfaceData.alpha; + half4 color = half4(surfaceData.albedo, alpha); + const half4 mask = surfaceData.mask; + const half2 lightingUV = inputData.lightingUV; + + if (alpha == 0.0) + discard; + + + //return float4(Set_BaseColor,1); + + + #if USE_SHAPE_LIGHT_TYPE_0 + half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); + + if (any(_ShapeLightMaskFilter0)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter0) * mask + _ShapeLightInvertedFilter0 * (1 - + mask); + shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); + } + + float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); + float3 baseColor = surfaceData.albedo.rgb * shapeLight0 * _ShapeLightBlendFactors0.x; + + // //v.2.0.5 + float4 _1st_ShadeMap_var = lerp( + SAMPLE_TEXTURE2D(_1st_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _MainTex_var, + _Use_BaseAs1st); + float3 firstShadeColor = _1st_ShadeColor.rgb * _1st_ShadeMap_var.rgb; + + float4 _2nd_ShadeMap_var = lerp( + SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _1st_ShadeMap_var, + _Use_1stAs2nd); + float3 secondShadeColor = _2nd_ShadeColor.rgb * _2nd_ShadeMap_var.rgb; + + float _HalfLambert_var = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + + //float _HalfLambert_var = 0.5*dot(lerp( i.normalDir, normalDirection, _Is_NormalMapToBase ),lightDirection)+0.5; + // + // float4 _Set_2nd_ShadePosition_var = tex2D(_Set_2nd_ShadePosition, TRANSFORM_TEX(uv, _Set_2nd_ShadePosition)); + // float4 _Set_1st_ShadePosition_var = tex2D(_Set_1st_ShadePosition, TRANSFORM_TEX(uv, _Set_1st_ShadePosition)); + // //v.2.0.6 + // //Minmimum value is same as the Minimum Feather's value with the Minimum Step's value as threshold. + // float _SystemShadowsLevel_var = (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel > 0.001 ? (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel : 0.0001; + // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var*saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); + // // + // //Composition: 3 Basic Colors as Set_FinalBaseColor + + float4 _Set_2nd_ShadePosition_var = float4(1, 1, 1, 1); + float Set_FinalShadowMask = 1; + + float3 Set_FinalBaseColor = lerp(baseColor, lerp(firstShadeColor, secondShadeColor, + saturate( + (1.0 + ((_HalfLambert_var - (_ShadeColor_Step - _1st2nd_Shades_Feather)) * ((1.0 + - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / (_ShadeColor_Step - ( + _ShadeColor_Step - _1st2nd_Shades_Feather))))), Set_FinalShadowMask); + + + half4 shapeLight0Modulate = half4(Set_FinalBaseColor, alpha); + half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; + + #else + half4 shapeLight0Modulate = 0; + half4 shapeLight0Additive = 0; + #endif + + half4 finalOutput; + #if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 + finalOutput = color; + #else + half4 finalModulate = shapeLight0Modulate; + half4 finalAdditve = shapeLight0Additive; + finalOutput = _HDREmulationScale * (finalModulate + finalAdditve); + #endif + + finalOutput.a = alpha; + + return max(0, finalOutput); + } + + half4 CommonLitFragment2(Varyings input, half4 color) + { + const half4 main = color * SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv); + const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.uv); + const half3 normalTS = UnpackNormal(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.uv)); + + SurfaceData2D surfaceData; + InputData2D inputData; + + InitializeSurfaceData(main.rgb, main.a, mask, normalTS, surfaceData); + InitializeInputData(input.uv, input.lightingUV, inputData); + + #if defined(DEBUG_DISPLAY) + SETUP_DEBUG_TEXTURE_DATA_2D_NO_TS(inputData, input.positionWS, input.positionCS, _MainTex); + surfaceData.normalWS = input.normalWS; + #endif + + return CombinedShapeLightShared2(surfaceData, inputData, input.uv); + } + + + //---------------------------------------------------------------------------------------------------------------------- + half4 LitFragment(Varyings input) : SV_Target + { float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); float2 Set_UV0 = input.uv; - float3 mainLightColor = float3(1,1,1); + float3 mainLightColor = float3(1, 1, 1); + - // //v.2.0.5 - float3 defaultLightColor = saturate(max(half3(0.05,0.05,0.05)*_Unlit_Intensity,max(ShadeSH9(half4(0.0, 0.0, 0.0, 1.0)),ShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb)*_Unlit_Intensity)); + float3 defaultLightColor = saturate(max(half3(0.05, 0.05, 0.05) * _Unlit_Intensity, + max(ShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), + ShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * + _Unlit_Intensity)); // float3 customLightDirection = normalize(mul( GetObjectToWorldMatrix(), float4(((float3(1.0,0.0,0.0)*_Offset_X_Axis_BLD*10)+(float3(0.0,1.0,0.0)*_Offset_Y_Axis_BLD*10)+(float3(0.0,0.0,-1.0)*lerp(-1.0,1.0,_Inverse_Z_Axis_BLD))),0)).xyz); // float3 lightDirection = normalize(lerp(defaultLightDirection, mainLight.direction.xyz,any(mainLight.direction.xyz))); // lightDirection = lerp(lightDirection, customLightDirection, _Is_BLD); // //v.2.0.5: // half3 originalLightColor = mainLightColor.rgb; - float3 lightColor = lerp(max(defaultLightColor, originalLightColor), max(defaultLightColor, saturate(originalLightColor)), _Is_Filter_LightColor); + float3 lightColor = lerp(max(defaultLightColor, originalLightColor), + max(defaultLightColor, saturate(originalLightColor)), + _Is_Filter_LightColor); float3 Set_LightColor = lightColor.rgb; - + float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); - float3 Set_BaseColor = lerp( (_BaseColor.rgb*_MainTex_var.rgb), ((_BaseColor.rgb*_MainTex_var.rgb)*Set_LightColor), _Is_LightColor_Base ); + float3 Set_BaseColor = lerp((_BaseColor.rgb * _MainTex_var.rgb), + ((_BaseColor.rgb * _MainTex_var.rgb) * Set_LightColor), _Is_LightColor_Base); + - // //v.2.0.5 // float4 _1st_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_1st_ShadeMap,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_MainTex_var,_Use_BaseAs1st); // float3 Set_1st_ShadeColor = lerp( (_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb), ((_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_1st_Shade ); @@ -278,7 +326,7 @@ half4 CommonLitFragment2(Varyings input, half4 color) //return float4(Set_BaseColor,1); - + return CommonLitFragment2(input, _White); } ENDHLSL @@ -286,7 +334,10 @@ half4 CommonLitFragment2(Varyings input, half4 color) Pass { - Tags { "LightMode" = "NormalsRendering"} + Tags + { + "LightMode" = "NormalsRendering" + } HLSLPROGRAM #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" @@ -313,7 +364,7 @@ half4 CommonLitFragment2(Varyings input, half4 color) Varyings NormalsRenderingVertex(Attributes input) { - return CommonNormalsVertex(input); + return CommonNormalsVertex(input); } half4 NormalsRenderingFragment(Varyings input) : SV_Target @@ -325,7 +376,10 @@ half4 CommonLitFragment2(Varyings input, half4 color) Pass { - Tags { "LightMode" = "UniversalForward" "Queue"="Transparent" "RenderType"="Transparent"} + Tags + { + "LightMode" = "UniversalForward" "Queue"="Transparent" "RenderType"="Transparent" + } HLSLPROGRAM #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" @@ -362,4 +416,4 @@ half4 CommonLitFragment2(Varyings input, half4 color) ENDHLSL } } -} +} \ No newline at end of file From 65fa003a54602ee4d0e0d8e7f0e5a260b5435a7e Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 29 Oct 2025 21:14:11 +0900 Subject: [PATCH 166/290] reformat code --- .../Assets/Shaders/Toon2D.shader | 58 +++++++++---------- 1 file changed, 26 insertions(+), 32 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 72b823605..ef5fbcada 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -1,7 +1,5 @@ -Shader "Toon2D" -{ - Properties - { +Shader "Toon2D"{ + Properties{ _BaseColor ("BaseColor", Color) = (1,1,1,1) _MainTex ("BaseMap", 2D) = "white" {} @@ -25,10 +23,8 @@ Shader "Toon2D" [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching } - SubShader - { - Tags - { + SubShader{ + Tags{ "Queue" = "Transparent" "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" } @@ -38,17 +34,14 @@ Shader "Toon2D" - Stencil - { + Stencil{ Ref 128 // Put this in the last bit of our stencil value for maximum compatibility with sprite mask Comp always Pass replace } - Pass - { - Tags - { + Pass{ + Tags{ "LightMode" = "Universal2D" } @@ -227,10 +220,14 @@ Shader "Toon2D" float Set_FinalShadowMask = 1; float3 Set_FinalBaseColor = lerp(baseColor, lerp(firstShadeColor, secondShadeColor, - saturate( - (1.0 + ((_HalfLambert_var - (_ShadeColor_Step - _1st2nd_Shades_Feather)) * ((1.0 - - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / (_ShadeColor_Step - ( - _ShadeColor_Step - _1st2nd_Shades_Feather))))), Set_FinalShadowMask); + saturate( + (1.0 + ((_HalfLambert_var - (_ShadeColor_Step - + _1st2nd_Shades_Feather)) * ((1.0 + - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / ( + _ShadeColor_Step - ( + _ShadeColor_Step - + _1st2nd_Shades_Feather))))), + Set_FinalShadowMask); half4 shapeLight0Modulate = half4(Set_FinalBaseColor, alpha); @@ -286,9 +283,9 @@ Shader "Toon2D" // //v.2.0.5 float3 defaultLightColor = saturate(max(half3(0.05, 0.05, 0.05) * _Unlit_Intensity, - max(ShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), - ShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * - _Unlit_Intensity)); + max(ShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), + ShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * + _Unlit_Intensity)); // float3 customLightDirection = normalize(mul( GetObjectToWorldMatrix(), float4(((float3(1.0,0.0,0.0)*_Offset_X_Axis_BLD*10)+(float3(0.0,1.0,0.0)*_Offset_Y_Axis_BLD*10)+(float3(0.0,0.0,-1.0)*lerp(-1.0,1.0,_Inverse_Z_Axis_BLD))),0)).xyz); // float3 lightDirection = normalize(lerp(defaultLightDirection, mainLight.direction.xyz,any(mainLight.direction.xyz))); // lightDirection = lerp(lightDirection, customLightDirection, _Is_BLD); @@ -296,13 +293,14 @@ Shader "Toon2D" // half3 originalLightColor = mainLightColor.rgb; float3 lightColor = lerp(max(defaultLightColor, originalLightColor), - max(defaultLightColor, saturate(originalLightColor)), - _Is_Filter_LightColor); + max(defaultLightColor, saturate(originalLightColor)), + _Is_Filter_LightColor); float3 Set_LightColor = lightColor.rgb; float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); float3 Set_BaseColor = lerp((_BaseColor.rgb * _MainTex_var.rgb), - ((_BaseColor.rgb * _MainTex_var.rgb) * Set_LightColor), _Is_LightColor_Base); + ((_BaseColor.rgb * _MainTex_var.rgb) * Set_LightColor), + _Is_LightColor_Base); // //v.2.0.5 @@ -332,10 +330,8 @@ Shader "Toon2D" ENDHLSL } - Pass - { - Tags - { + Pass{ + Tags{ "LightMode" = "NormalsRendering" } @@ -374,10 +370,8 @@ Shader "Toon2D" ENDHLSL } - Pass - { - Tags - { + Pass{ + Tags{ "LightMode" = "UniversalForward" "Queue"="Transparent" "RenderType"="Transparent" } From 12d0f143789470eaf27f6a524a443cef76dcd8d8 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 29 Oct 2025 21:18:47 +0900 Subject: [PATCH 167/290] cleanup --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index ef5fbcada..7bd2573e4 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -219,17 +219,12 @@ Shader "Toon2D"{ float4 _Set_2nd_ShadePosition_var = float4(1, 1, 1, 1); float Set_FinalShadowMask = 1; + float innerLerpOp = saturate((1.0 + ((_HalfLambert_var - (_ShadeColor_Step - _1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / ( _ShadeColor_Step - ( _ShadeColor_Step - _1st2nd_Shades_Feather)))); + float3 Set_FinalBaseColor = lerp(baseColor, lerp(firstShadeColor, secondShadeColor, - saturate( - (1.0 + ((_HalfLambert_var - (_ShadeColor_Step - - _1st2nd_Shades_Feather)) * ((1.0 - - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / ( - _ShadeColor_Step - ( - _ShadeColor_Step - - _1st2nd_Shades_Feather))))), + innerLerpOp), Set_FinalShadowMask); - half4 shapeLight0Modulate = half4(Set_FinalBaseColor, alpha); half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; From 6baf70af78420f6095b0484534ae4dfba2bbf920 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 29 Oct 2025 21:33:09 +0900 Subject: [PATCH 168/290] 3 colors --- .../Assets/Shaders/Toon2D.shader | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 7bd2573e4..397e53ff4 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -2,24 +2,25 @@ Shader "Toon2D"{ Properties{ _BaseColor ("BaseColor", Color) = (1,1,1,1) _MainTex ("BaseMap", 2D) = "white" {} + _BaseColor_Step ("BaseColor_Step", Range(0, 1)) = 0.5 + _BaseShade_Feather ("Base/Shade_Feather", Range(0.0001, 1)) = 0.0001 _1st_ShadeMap ("1st_ShadeMap", 2D) = "white" {} [Toggle(_)] _Use_BaseAs1st ("Use BaseMap as 1st_ShadeMap", Float ) = 0 _1st_ShadeColor ("1st_ShadeColor", Color) = (1,1,1,1) - [Toggle(_)] _Is_LightColor_1st_Shade ("Is_LightColor_1st_Shade", Float ) = 1 + _2nd_ShadeMap ("2nd_ShadeMap", 2D) = "white" {} [Toggle(_)] _Use_1stAs2nd ("Use 1st_ShadeMap as 2nd_ShadeMap", Float ) = 0 _2nd_ShadeColor ("2nd_ShadeColor", Color) = (1,1,1,1) + _ShadeColor_Step ("ShadeColor_Step", Range(0, 1)) = 0 + _1st2nd_Shades_Feather ("1st/2nd_Shades_Feather", Range(0.0001, 1)) = 0.0001 _MaskTex("Mask", 2D) = "white" {} _NormalMap("Normal Map", 2D) = "bump" {} _Unlit_Intensity ("Unlit_Intensity", Range(0, 4)) = 0 - - [Toggle(_)] _Is_Filter_LightColor ("VRChat : SceneLights HiCut_Filter", Float ) = 1 - [Toggle(_)] _Is_LightColor_Base ("Is_LightColor_Base", Float ) = 1 - + [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching } @@ -74,8 +75,6 @@ Shader "Toon2D"{ CBUFFER_START(UnityPerMaterial) half4 _BaseColor; float _Unlit_Intensity; - float _Is_Filter_LightColor; - float _Is_LightColor_Base; float _Use_BaseAs1st; float _Use_1stAs2nd; @@ -83,6 +82,9 @@ Shader "Toon2D"{ float4 _1st_ShadeColor; float4 _2nd_ShadeColor; + float _BaseColor_Step; + float _BaseShade_Feather; + float _ShadeColor_Step; float _1st2nd_Shades_Feather; @@ -190,7 +192,7 @@ Shader "Toon2D"{ float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); - float3 baseColor = surfaceData.albedo.rgb * shapeLight0 * _ShapeLightBlendFactors0.x; + float3 baseColor = surfaceData.albedo.rgb; // //v.2.0.5 float4 _1st_ShadeMap_var = lerp( @@ -216,8 +218,14 @@ Shader "Toon2D"{ // // // //Composition: 3 Basic Colors as Set_FinalBaseColor + float4 _Set_1st_ShadePosition_var = float4(1, 1, 1, 1); float4 _Set_2nd_ShadePosition_var = float4(1, 1, 1, 1); - float Set_FinalShadowMask = 1; + + + float _SystemShadowsLevel_var = 0.5f; + float _Set_SystemShadowsToBase = 1.0f; + float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var*saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); + float innerLerpOp = saturate((1.0 + ((_HalfLambert_var - (_ShadeColor_Step - _1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / ( _ShadeColor_Step - ( _ShadeColor_Step - _1st2nd_Shades_Feather)))); @@ -225,6 +233,10 @@ Shader "Toon2D"{ innerLerpOp), Set_FinalShadowMask); + //test + //Set_FinalBaseColor = firstShadeColor; + + Set_FinalBaseColor = Set_FinalBaseColor * shapeLight0 * _ShapeLightBlendFactors0.x; half4 shapeLight0Modulate = half4(Set_FinalBaseColor, alpha); half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; @@ -287,15 +299,11 @@ Shader "Toon2D"{ // //v.2.0.5: // half3 originalLightColor = mainLightColor.rgb; - float3 lightColor = lerp(max(defaultLightColor, originalLightColor), - max(defaultLightColor, saturate(originalLightColor)), - _Is_Filter_LightColor); + float3 lightColor = max(defaultLightColor, saturate(originalLightColor)); float3 Set_LightColor = lightColor.rgb; float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); - float3 Set_BaseColor = lerp((_BaseColor.rgb * _MainTex_var.rgb), - ((_BaseColor.rgb * _MainTex_var.rgb) * Set_LightColor), - _Is_LightColor_Base); + float3 Set_BaseColor = ((_BaseColor.rgb * _MainTex_var.rgb) * Set_LightColor); // //v.2.0.5 From 89f22ee962a57140f9eb8518241343ebf2da5457 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 29 Oct 2025 21:33:20 +0900 Subject: [PATCH 169/290] update material --- .../Assets/Materials/Toon2D.mat | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat index 52bd75e7b..5f079f708 100644 --- a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat @@ -12,7 +12,8 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: [] - m_InvalidKeywords: [] + m_InvalidKeywords: + - _ m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -24,6 +25,14 @@ Material: m_SavedProperties: serializedVersion: 3 m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _BaseMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -90,9 +99,12 @@ Material: m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: + - _1st2nd_Shades_Feather: 0.0001 - _AddPrecomputedVelocity: 0 - _AlphaClip: 0 - _AlphaToMask: 0 + - _BaseColor_Step: 0.161 + - _BaseShade_Feather: 0.0001 - _Blend: 0 - _BlendModePreserveSpecular: 1 - _BumpScale: 1 @@ -109,12 +121,14 @@ Material: - _Glossiness: 0 - _GlossyReflections: 0 - _Is_Filter_LightColor: 1 + - _Is_LightColor_1st_Shade: 1 - _Is_LightColor_Base: 1 - _Metallic: 0 - _OcclusionStrength: 1 - _Parallax: 0.005 - _QueueOffset: 0 - _ReceiveShadows: 1 + - _ShadeColor_Step: 0.256 - _Smoothness: 0.5 - _SmoothnessTextureChannel: 0 - _SpecularHighlights: 1 @@ -122,10 +136,14 @@ Material: - _SrcBlendAlpha: 1 - _Surface: 0 - _Unlit_Intensity: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 - _WorkflowMode: 1 - _XRMotionVectorsPass: 1 - _ZWrite: 1 m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeColor: {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} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} From 2d63abf9be6cbff24ebf82e93075be846995c9b0 Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 30 Oct 2025 22:55:52 +0900 Subject: [PATCH 170/290] update scene --- Toonshader_ProjectURP/Assets/ScenesDev/test.unity | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index e637ddd99..8a98168aa 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -973,7 +973,7 @@ MonoBehaviour: m_BlendStyleIndex: 0 m_FalloffIntensity: 0.573 m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1 + m_Intensity: 1.05 m_LightVolumeIntensity: 1 m_LightVolumeEnabled: 0 m_ApplyToSortingLayers: 00000000 @@ -995,7 +995,7 @@ MonoBehaviour: m_Center: {x: 0, y: -0.00000011920929, z: 0} m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} m_PointLightInnerAngle: 38.718567 - m_PointLightOuterAngle: 112.86046 + m_PointLightOuterAngle: 112.86043 m_PointLightInnerRadius: 0 m_PointLightOuterRadius: 6.85 m_ShapeLightParametricSides: 5 @@ -1017,7 +1017,7 @@ Transform: m_GameObject: {fileID: 1873556968} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} - m_LocalPosition: {x: 0.04, y: 0.896, z: 0} + m_LocalPosition: {x: 0.04, y: 0.5, z: 0} m_LocalScale: {x: 0.33333334, y: 0.33333334, z: 0.33333334} m_ConstrainProportionsScale: 0 m_Children: [] From a9e3e312aac65b900cc4c25e4861f503de7d4b3b Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 7 Nov 2025 15:04:44 +0900 Subject: [PATCH 171/290] save scene --- .../Assets/ScenesDev/test.unity | 1675 +++++++++++++++-- 1 file changed, 1544 insertions(+), 131 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index 8a98168aa..b1ae74ca8 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -225,7 +225,7 @@ Transform: m_GameObject: {fileID: 116300322} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 3.57, y: 1.23, z: -3.7} + m_LocalPosition: {x: 3.57, y: -2.13, z: 0} m_LocalScale: {x: 3, y: 3, z: 3} m_ConstrainProportionsScale: 1 m_Children: @@ -260,7 +260,7 @@ Transform: m_GameObject: {fileID: 360142871} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -8.49, y: 0, z: 0} + m_LocalPosition: {x: -17.54, y: -2.64, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -372,7 +372,7 @@ Transform: m_GameObject: {fileID: 361997359} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -10.38, y: 1.38, z: 0} + m_LocalPosition: {x: -12.9, y: -2.08, z: 0} m_LocalScale: {x: 3, y: 3, z: 3} m_ConstrainProportionsScale: 0 m_Children: @@ -489,6 +489,8 @@ Transform: - {fileID: 360142872} - {fileID: 361997360} - {fileID: 2080296074} + - {fileID: 1604474281} + - {fileID: 698815737} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &391645602 @@ -746,6 +748,161 @@ Light: m_LightUnit: 1 m_LuxAtDistance: 1 m_EnableSpotReflector: 1 +--- !u!1 &443363985 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 443363986} + - component: {fileID: 443363989} + - component: {fileID: 443363988} + - component: {fileID: 443363987} + m_Layer: 7 + m_Name: SD_unitychan_SpotLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &443363986 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443363985} + serializedVersion: 2 + m_LocalRotation: {x: 0.70693415, y: -0, z: -0, w: 0.70727944} + m_LocalPosition: {x: 3.42, y: 5.94, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1390602298} + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!1773428102 &443363987 +ParentConstraint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443363985} + m_Enabled: 1 + serializedVersion: 2 + m_Weight: 1 + m_TranslationAtRest: {x: 4.01, y: 5.94, z: 0} + m_RotationAtRest: {x: 90, y: 0, z: 0} + m_TranslationOffsets: + - {x: 0, y: 5.94, z: 0} + m_RotationOffsets: + - {x: 89.96574, y: 0, z: 0} + m_AffectTranslationX: 1 + m_AffectTranslationY: 1 + m_AffectTranslationZ: 1 + m_AffectRotationX: 1 + m_AffectRotationY: 1 + m_AffectRotationZ: 1 + m_Active: 1 + m_IsLocked: 1 + m_Sources: + - sourceTransform: {fileID: 1244320234} + weight: 1 +--- !u!114 &443363988 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443363985} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_CustomShadowLayers: 0 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 0 + m_RenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_ShadowRenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_Version: 4 + m_LightLayerMask: 1 + m_ShadowLayerMask: 1 + m_RenderingLayers: 1 + m_ShadowRenderingLayers: 1 +--- !u!108 &443363989 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443363985} + m_Enabled: 1 + serializedVersion: 12 + m_Type: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize2D: {x: 10, y: 10} + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!1 &534897189 GameObject: m_ObjectHideFlags: 0 @@ -779,6 +936,1276 @@ Transform: - {fileID: 391645606} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &698815736 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 372493292} + m_Modifications: + - target: {fileID: 1025244651238594, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1031049429299390, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1038304654105518, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1038751768196858, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1040044800356794, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1063701416513114, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1063868608222774, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1065498295618508, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1069576648996808, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1078084150985738, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1091797832412850, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1098024166760060, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1102047112770606, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1105159104447082, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1125603392952280, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1125860869633868, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1128491059852054, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1130474008640776, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1140630574250782, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1162146222940456, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1170746558143010, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1194107140697288, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1197966203967084, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1198934625214546, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1206067171589070, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1208213621900506, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1214969600266656, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1217124357004236, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1219800904870850, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1223358658578486, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1223374721408506, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1236300484350226, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1271787047284964, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1278049638797196, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1280046579228956, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1281537742100296, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1286448014453930, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1287173137530738, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1292768973908290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1292833104906710, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1307116819125582, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1307489971821996, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1321412499244326, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1323434032099006, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1326036900243284, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1328744177047542, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1329268915565002, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1350238526883678, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1350408333047334, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1359038283206806, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1369177650637978, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1376117059700300, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1388057785280880, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1406556487093126, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1407909072411612, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1408667435323488, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1415184850193686, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1419367928666846, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1436358261692382, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1443099190161700, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1462098738833496, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1466530220579554, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1474489502322402, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1484012554352254, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1503663994606306, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1505748638266464, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1505896528405314, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Name + value: SD_unitychan_humanoid_Illust_2D + objectReference: {fileID: 0} + - target: {fileID: 1505896528405314, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1513887399499058, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1522912269294054, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1525555943385534, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1535358548011682, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1549057578213852, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1565494773210628, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1573907217323908, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1580058542510638, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1584797461545012, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1585078752082954, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1588659492380392, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1602163089907470, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1602230138126072, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1615675350333256, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1617001605247478, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1618529994812702, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1621715937626580, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1630560272439572, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1630843500434854, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1640698100262648, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1646063310124850, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1659733529702970, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1661606833523374, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1665699328775098, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1673344980180398, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1675247041364914, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1682835125172212, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1694886804508302, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1706584965393338, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1720079496016812, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1720341513809680, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1722507114898672, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1722901517778440, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1723427313739648, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1726610371288012, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1737643744773396, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1740772994473930, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1740934017469314, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1746143250394490, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1757387616596722, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1765851627911212, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1767403594436446, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1771238959578864, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1779208853477212, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1802377718743004, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1804382221510298, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1806923141207916, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1814872513669390, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1821099166111286, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1821550471586244, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1821661077023726, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1833386117034816, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1847597482086218, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1848465628881516, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1849902694912136, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1871769496186142, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1873069944514380, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1873671209204896, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1876290136638650, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1879520269350040, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1894165532265948, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1921414032322446, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1934828991224172, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1944247079471848, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1945409927541026, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1949782900329542, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1952355653899426, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1960222167546662, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1968392348425146, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1972134292196834, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1975382071937512, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 1985982371203012, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalScale.x + value: 3.96 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalScale.y + value: 3.96 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalScale.z + value: 3.96 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalPosition.x + value: -12.32 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_ConstrainProportionsScale + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} +--- !u!4 &698815737 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + m_PrefabInstance: {fileID: 698815736} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1244320233 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1390602298} + m_Modifications: + - target: {fileID: 1025244651238594, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1031049429299390, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1038304654105518, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1038751768196858, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1040044800356794, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1063701416513114, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1063868608222774, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1065498295618508, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1069576648996808, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1078084150985738, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1091797832412850, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1098024166760060, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1102047112770606, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1105159104447082, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1125603392952280, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1125860869633868, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1128491059852054, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1130474008640776, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1140630574250782, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1162146222940456, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1170746558143010, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1194107140697288, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1197966203967084, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1198934625214546, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1206067171589070, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1208213621900506, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1214969600266656, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1217124357004236, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1219800904870850, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1223358658578486, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1223374721408506, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1236300484350226, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1271787047284964, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1278049638797196, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1280046579228956, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1281537742100296, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1286448014453930, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1287173137530738, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1292768973908290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1292833104906710, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1307116819125582, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1307489971821996, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1321412499244326, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1323434032099006, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1326036900243284, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1328744177047542, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1329268915565002, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1350238526883678, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1350408333047334, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1359038283206806, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1369177650637978, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1376117059700300, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1388057785280880, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1406556487093126, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1407909072411612, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1408667435323488, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1415184850193686, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1419367928666846, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1436358261692382, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1443099190161700, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1462098738833496, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1466530220579554, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1474489502322402, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1484012554352254, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1503663994606306, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1505748638266464, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1505896528405314, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Name + value: SD_unitychan_humanoid_Illust + objectReference: {fileID: 0} + - target: {fileID: 1505896528405314, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1513887399499058, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1522912269294054, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1525555943385534, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1535358548011682, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1549057578213852, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1565494773210628, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1573907217323908, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1580058542510638, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1584797461545012, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1585078752082954, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1588659492380392, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1602163089907470, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1602230138126072, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1615675350333256, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1617001605247478, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1618529994812702, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1621715937626580, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1630560272439572, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1630843500434854, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1640698100262648, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1646063310124850, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1659733529702970, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1661606833523374, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1665699328775098, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1673344980180398, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1675247041364914, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1682835125172212, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1694886804508302, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1706584965393338, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1720079496016812, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1720341513809680, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1722507114898672, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1722901517778440, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1723427313739648, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1726610371288012, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1737643744773396, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1740772994473930, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1740934017469314, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1746143250394490, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1757387616596722, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1765851627911212, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1767403594436446, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1771238959578864, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1779208853477212, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1802377718743004, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1804382221510298, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1806923141207916, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1814872513669390, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1821099166111286, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1821550471586244, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1821661077023726, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1833386117034816, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1847597482086218, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1848465628881516, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1849902694912136, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1871769496186142, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1873069944514380, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1873671209204896, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1876290136638650, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1879520269350040, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1894165532265948, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1921414032322446, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1934828991224172, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1944247079471848, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1945409927541026, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1949782900329542, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1952355653899426, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1960222167546662, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1968392348425146, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1972134292196834, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1975382071937512, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 1985982371203012, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_Layer + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalScale.x + value: 3.96 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalScale.y + value: 3.96 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalScale.z + value: 3.96 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalPosition.x + value: 3.42 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} + propertyPath: m_ConstrainProportionsScale + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} +--- !u!4 &1244320234 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + m_PrefabInstance: {fileID: 1244320233} + m_PrefabAsset: {fileID: 0} --- !u!1 &1390602297 GameObject: m_ObjectHideFlags: 0 @@ -809,8 +2236,122 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 116300326} + - {fileID: 443363986} + - {fileID: 1244320234} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1604474280 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1604474281} + - component: {fileID: 1604474283} + - component: {fileID: 1604474282} + m_Layer: 6 + m_Name: SD_unitychan_2D_SpotLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1604474281 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1604474280} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: 1, w: 0} + m_LocalPosition: {x: -12.32, y: 5.26, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 372493292} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} +--- !u!1773428102 &1604474282 +ParentConstraint: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1604474280} + m_Enabled: 1 + serializedVersion: 2 + m_Weight: 1 + m_TranslationAtRest: {x: -12.32, y: 5.26, z: 0} + m_RotationAtRest: {x: 0, y: 0, z: 180} + m_TranslationOffsets: + - {x: 0, y: 5.26, z: 0} + m_RotationOffsets: + - {x: 0, y: 0, z: 180} + m_AffectTranslationX: 1 + m_AffectTranslationY: 1 + m_AffectTranslationZ: 1 + m_AffectRotationX: 1 + m_AffectRotationY: 1 + m_AffectRotationZ: 1 + m_Active: 1 + m_IsLocked: 1 + m_Sources: + - sourceTransform: {fileID: 698815737} + weight: 1 +--- !u!114 &1604474283 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1604474280} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.2D.Runtime::UnityEngine.Rendering.Universal.Light2D + m_ComponentVersion: 2 + m_LightType: 3 + m_BlendStyleIndex: 0 + m_FalloffIntensity: 0.573 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1.05 + m_LightVolumeIntensity: 1 + m_LightVolumeEnabled: 0 + m_ApplyToSortingLayers: 00000000 + m_LightCookieSprite: {fileID: 0} + m_DeprecatedPointLightCookieSprite: {fileID: 0} + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 + m_OverlapOperation: 0 + m_NormalMapDistance: 3 + m_NormalMapQuality: 2 + m_UseNormalMap: 0 + m_ShadowsEnabled: 1 + m_ShadowIntensity: 0.75 + m_ShadowSoftness: 0.3 + m_ShadowSoftnessFalloffIntensity: 0.5 + m_ShadowVolumeIntensityEnabled: 0 + m_ShadowVolumeIntensity: 0.75 + m_LocalBounds: + m_Center: {x: 0, y: -0.00000011920929, z: 0} + m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} + m_PointLightInnerAngle: 38.718567 + m_PointLightOuterAngle: 112.86043 + m_PointLightInnerRadius: 0 + m_PointLightOuterRadius: 6.85 + m_ShapeLightParametricSides: 5 + m_ShapeLightParametricAngleOffset: 0 + m_ShapeLightParametricRadius: 1 + m_ShapeLightFalloffSize: 0.5 + m_ShapeLightFalloffOffset: {x: 0, y: 0} + m_ShapePath: + - {x: -0.5, y: -0.5, z: 0} + - {x: 0.5, y: -0.5, z: 0} + - {x: 0.5, y: 0.5, z: 0} + - {x: -0.5, y: 0.5, z: 0} --- !u!1 &1733474739 GameObject: m_ObjectHideFlags: 0 @@ -1023,133 +2564,6 @@ Transform: m_Children: [] m_Father: {fileID: 361997360} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} ---- !u!1 &1896131351 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1896131354} - - component: {fileID: 1896131353} - - component: {fileID: 1896131352} - m_Layer: 7 - m_Name: Directional Light - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 0 ---- !u!114 &1896131352 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1896131351} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData - m_UsePipelineSettings: 1 - m_AdditionalLightsShadowResolutionTier: 2 - m_CustomShadowLayers: 0 - m_LightCookieSize: {x: 1, y: 1} - m_LightCookieOffset: {x: 0, y: 0} - m_SoftShadowQuality: 0 - m_RenderingLayersMask: - serializedVersion: 0 - m_Bits: 1 - m_ShadowRenderingLayersMask: - serializedVersion: 0 - m_Bits: 1 - m_Version: 4 - m_LightLayerMask: 1 - m_ShadowLayerMask: 1 - m_RenderingLayers: 1 - m_ShadowRenderingLayers: 1 ---- !u!108 &1896131353 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1896131351} - m_Enabled: 1 - serializedVersion: 12 - m_Type: 1 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.80208 - m_CookieSize2D: {x: 10, y: 10} - m_Shadows: - m_Type: 0 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 128 - m_RenderingLayerMask: 1 - m_Lightmapping: 4 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 - m_ForceVisible: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 0 - m_LightUnit: 1 - m_LuxAtDistance: 1 - m_EnableSpotReflector: 1 ---- !u!4 &1896131354 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1896131351} - serializedVersion: 2 - m_LocalRotation: {x: 0.6262405, y: -0.25520658, z: 0.043091897, w: 0.7354153} - m_LocalPosition: {x: 3.7, y: 0, z: -11.11} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 70.577, y: -75.122, z: -50.409} --- !u!1 &2080296072 GameObject: m_ObjectHideFlags: 0 @@ -1248,5 +2662,4 @@ SceneRoots: m_Roots: - {fileID: 1390602298} - {fileID: 534897190} - - {fileID: 1896131354} - {fileID: 372493292} From 41b1e1ebf9c1216d6b442d0906c48da9831b9a28 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 7 Nov 2025 19:33:31 +0900 Subject: [PATCH 172/290] two passes --- .../Assets/Shaders/Toon2D.shader | 98 ++++++++++++++++++- 1 file changed, 95 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 397e53ff4..c01aff5e7 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -22,6 +22,9 @@ Shader "Toon2D"{ _Unlit_Intensity ("Unlit_Intensity", Range(0, 4)) = 0 [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching + + _OutlineExtrusion("Outline Extrusion", float) = 0.02 + } SubShader{ @@ -91,7 +94,7 @@ Shader "Toon2D"{ CBUFFER_END - //---------------------------------------------------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- float4 _MainTex_ST; //TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex); @@ -104,7 +107,7 @@ Shader "Toon2D"{ return CommonLitVertex(input); } - //---------------------------------------------------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- // normal should be normalized, w=1.0 half3 SHEvalLinearL0L1(half4 normal) @@ -280,7 +283,7 @@ Shader "Toon2D"{ } - //---------------------------------------------------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- half4 LitFragment(Varyings input) : SV_Target { float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); @@ -333,6 +336,94 @@ Shader "Toon2D"{ ENDHLSL } +//---------------------------------------------------------------------------------------------------------------------- + Pass { + Name "Outline" + Tags { +// "LightMode" = "Universal2D" + } +// Cull [_SRPDefaultUnlitColMode] +// ColorMask [_SPRDefaultUnlitColorMask] +// Blend SrcAlpha OneMinusSrcAlpha +// Stencil +// { +// Ref[_StencilNo] +// Comp[_StencilComp] +// Pass[_StencilOpPass] +// Fail[_StencilOpFail] +// +// } +// + HLSLPROGRAM + #pragma target 2.0 + #pragma vertex OutlineVertex + #pragma fragment OutlineFragment + + + #pragma multi_compile _IS_OUTLINE_CLIPPING_NO _IS_OUTLINE_CLIPPING_YES + #pragma multi_compile _OUTLINE_NML _OUTLINE_POS + // Outline is implemented in UniversalToonOutline.hlsl. + // #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + // #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" + + struct Attributes + { + COMMON_2D_INPUTS + }; + + struct Varyings + { + COMMON_2D_LIT_OUTPUTS + }; + + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + float _OutlineExtrusion; + +// #ifdef UNIVERSAL_PIPELINE_CORE_INCLUDED +// #include "../../UniversalRP/Shaders/UniversalToonInput.hlsl" +// #include "../../UniversalRP/Shaders/UniversalToonHead.hlsl" +// #include "../../UniversalRP/Shaders/UniversalToonOutline.hlsl" +// #endif + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Lit2DCommon.hlsl" + + Varyings CommonLitVertex2(Attributes input) + { + Varyings o = (Varyings) 0; + UNITY_SETUP_INSTANCE_ID(input); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + + float3 newPos = input.positionOS; + + // normal extrusion technique + float3 normal = normalize(input.normal); + newPos += float3(normal) * _OutlineExtrusion; + + + o.positionCS = TransformObjectToHClip(newPos); + o.uv = input.uv; + o.lightingUV = half2(ComputeScreenPos(o.positionCS / o.positionCS.w).xy); + return o; + } + + + Varyings OutlineVertex(Attributes input) + { + + return CommonLitVertex2(input); + } + + half4 OutlineFragment(Varyings input) : SV_Target { + return float4(1,0,1,1); + } + + + ENDHLSL + } + + +//---------------------------------------------------------------------------------------------------------------------- Pass{ Tags{ "LightMode" = "NormalsRendering" @@ -412,5 +503,6 @@ Shader "Toon2D"{ } ENDHLSL } + } } \ No newline at end of file From 5bbec865debb014be174f972a8bf83d3d36f9d4b Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 7 Nov 2025 21:40:37 +0900 Subject: [PATCH 173/290] update toon shader --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index c01aff5e7..52b6a160b 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -415,7 +415,7 @@ Shader "Toon2D"{ } half4 OutlineFragment(Varyings input) : SV_Target { - return float4(1,0,1,1); + return float4(0,0,1,1); } From d69a7361276d2c384a4288993de90af6160c1395 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 14 Nov 2025 20:22:49 +0900 Subject: [PATCH 174/290] add GUI --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 125 ++++++++++++++++++ .../Editor/Scripts/UnityToon3Das2DGUI.cs.meta | 2 + 2 files changed, 127 insertions(+) create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs.meta diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs new file mode 100644 index 000000000..929628978 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -0,0 +1,125 @@ +using UnityEditor; +using UnityEngine; + +class UnityToon3Das2DGUI : UnityEditor.ShaderGUI { + + + public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] props) { + + Material material = materialEditor.target as Material; + if (material == null) + return; + + FindProperties(props); + EditorGUI.BeginChangeCheck(); + GUI_BasicThreeColors(materialEditor, material); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.PropertiesChanged(); + } + } + +//---------------------------------------------------------------------------------------------------------------------- + + void GUI_BasicThreeColors(MaterialEditor materialEditor, Material material) { + materialEditor.TexturePropertySingleLine(Styles.baseColorText, mainTex, baseColor); + + if (material.HasProperty("_Color")) { + material.SetColor("_Color", material.GetColor("_BaseColor")); + } + + EditorGUI.indentLevel += 2; + bool applyTo1st = GUI_Toggle(materialEditor, material, Styles.applyTo1stShademapText, ShaderPropUse_BaseAs1st, + MaterialGetInt(material, ShaderPropUse_BaseAs1st) != 0); + EditorGUI.indentLevel -= 2; + + + if (applyTo1st) { + EditorGUI.indentLevel += 2; + materialEditor.ColorProperty(firstShadeColor, Styles.firstShadeColorText.text); + EditorGUI.indentLevel -= 2; + } + else { + materialEditor.TexturePropertySingleLine(Styles.firstShadeColorText, firstShadeMap, firstShadeColor); + } + + EditorGUI.indentLevel += 2; + bool applyTo2nd = GUI_Toggle(materialEditor, material, Styles.applyTo2ndShademapText, ShaderPropUse_1stAs2nd, MaterialGetInt(material, ShaderPropUse_1stAs2nd) != 0); + EditorGUI.indentLevel -= 2; + + + if (applyTo2nd) { + EditorGUI.indentLevel += 2; + materialEditor.ColorProperty(secondShadeColor, Styles.secondShadeColorText.text); + EditorGUI.indentLevel -= 2; + } + else { + materialEditor.TexturePropertySingleLine(Styles.secondShadeColorText, secondShadeMap, secondShadeColor); + } + } + + void FindProperties(MaterialProperty[] props) { + + mainTex = FindProperty(ShaderPropMainTex, props); + baseColor = FindProperty("_BaseColor", props); + firstShadeMap = FindProperty("_1st_ShadeMap", props); + firstShadeColor = FindProperty("_1st_ShadeColor", props); + secondShadeMap = FindProperty("_2nd_ShadeMap", props); + secondShadeColor = FindProperty("_2nd_ShadeColor", props); + + + } + + +//---------------------------------------------------------------------------------------------------------------------- + bool GUI_Toggle(MaterialEditor materialEditor, Material material, GUIContent guiContent, string prop, bool value) { + EditorGUI.BeginChangeCheck(); + bool ret = EditorGUILayout.Toggle(guiContent, value); + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(guiContent.text); + MaterialSetInt(material, prop, ret ? 1 : 0); + } + + return ret; + } + + internal static int MaterialGetInt(Material material, string prop) { + return (int)material.GetFloat(prop); + } + + internal static void MaterialSetInt(Material material, string prop, int value) { + material.SetFloat(prop, value); + } + + +//---------------------------------------------------------------------------------------------------------------------- + + + //Common constants + private static class Styles { + public static readonly GUIContent baseColorText = new GUIContent("Base Map", "Base Color : Texture(sRGB) × Color(RGB) Default:White"); + public static readonly GUIContent firstShadeColorText = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."); + public static readonly GUIContent secondShadeColorText = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."); + public static readonly GUIContent applyTo1stShademapText = new GUIContent("Apply to 1st shading map", "Apply Base map to the 1st shading map."); + + public static readonly GUIContent applyTo2ndShademapText = + new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."); + } + + internal const string ShaderPropMainTex = "_MainTex"; + internal const string ShaderPropUse_BaseAs1st = "_Use_BaseAs1st"; + internal const string ShaderPropUse_1stAs2nd = "_Use_1stAs2nd"; + + //Common properties + protected MaterialProperty mainTex = null; + protected MaterialProperty baseColor = null; + protected MaterialProperty firstShadeMap = null; + protected MaterialProperty firstShadeColor = null; + protected MaterialProperty secondShadeMap = null; + protected MaterialProperty secondShadeColor = null; + + //materialEditor.TexturePropertySingleLine(Styles.secondShadeColorText, secondShadeMap, secondShadeColor); + + +} + diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs.meta new file mode 100644 index 000000000..ce543e820 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 90970b66b10259d49ba803d27ee33afc From 7bf84dacc8a4de40a270731544d04275c5d8d19d Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 14 Nov 2025 21:58:52 +0900 Subject: [PATCH 175/290] refactor GUI --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 181 ++++++++++++------ 1 file changed, 124 insertions(+), 57 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 929628978..5b0407791 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using UnityEditor; using UnityEngine; @@ -9,8 +10,9 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro Material material = materialEditor.target as Material; if (material == null) return; - - FindProperties(props); + + something2(props); + EditorGUI.BeginChangeCheck(); GUI_BasicThreeColors(materialEditor, material); @@ -22,104 +24,169 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro //---------------------------------------------------------------------------------------------------------------------- void GUI_BasicThreeColors(MaterialEditor materialEditor, Material material) { - materialEditor.TexturePropertySingleLine(Styles.baseColorText, mainTex, baseColor); - - if (material.HasProperty("_Color")) { - material.SetColor("_Color", material.GetColor("_BaseColor")); - } + + DrawTexturePropertySingleLineGUI(materialEditor, propertyInfos[ShaderPropMainTex]); EditorGUI.indentLevel += 2; - bool applyTo1st = GUI_Toggle(materialEditor, material, Styles.applyTo1stShademapText, ShaderPropUse_BaseAs1st, - MaterialGetInt(material, ShaderPropUse_BaseAs1st) != 0); + bool applyTo1st = DrawToggleGUI(materialEditor, material, propertyInfos[ShaderPropUse_BaseAs1st]); EditorGUI.indentLevel -= 2; - if (applyTo1st) { EditorGUI.indentLevel += 2; - materialEditor.ColorProperty(firstShadeColor, Styles.firstShadeColorText.text); + DrawColorPropertyGUI(materialEditor, propertyInfos[ShaderProp_1st_ShadeColor]); EditorGUI.indentLevel -= 2; } else { - materialEditor.TexturePropertySingleLine(Styles.firstShadeColorText, firstShadeMap, firstShadeColor); + DrawTexturePropertySingleLineGUI(materialEditor, propertyInfos[ShaderProp_1st_ShadeMap]); } EditorGUI.indentLevel += 2; - bool applyTo2nd = GUI_Toggle(materialEditor, material, Styles.applyTo2ndShademapText, ShaderPropUse_1stAs2nd, MaterialGetInt(material, ShaderPropUse_1stAs2nd) != 0); + bool applyTo2nd = DrawToggleGUI(materialEditor, material, propertyInfos[ShaderPropUse_1stAs2nd]); EditorGUI.indentLevel -= 2; if (applyTo2nd) { EditorGUI.indentLevel += 2; - materialEditor.ColorProperty(secondShadeColor, Styles.secondShadeColorText.text); + DrawColorPropertyGUI(materialEditor, propertyInfos[ShaderProp_2nd_ShadeColor]); EditorGUI.indentLevel -= 2; } else { - materialEditor.TexturePropertySingleLine(Styles.secondShadeColorText, secondShadeMap, secondShadeColor); + DrawTexturePropertySingleLineGUI(materialEditor, propertyInfos[ShaderProp_2nd_ShadeMap]); } } + + void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, something element) { + if (null!= element.extraProperty2) + materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop, element.extraProperty2.prop); + else if (null!= element.extraProperty1) + materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop); + else + materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop); + } - void FindProperties(MaterialProperty[] props) { - - mainTex = FindProperty(ShaderPropMainTex, props); - baseColor = FindProperty("_BaseColor", props); - firstShadeMap = FindProperty("_1st_ShadeMap", props); - firstShadeColor = FindProperty("_1st_ShadeColor", props); - secondShadeMap = FindProperty("_2nd_ShadeMap", props); - secondShadeColor = FindProperty("_2nd_ShadeColor", props); - + void DrawColorPropertyGUI(MaterialEditor materialEditor, something element) { + materialEditor.ColorProperty(element.mainProperty.prop, element.label.text); } - - -//---------------------------------------------------------------------------------------------------------------------- - bool GUI_Toggle(MaterialEditor materialEditor, Material material, GUIContent guiContent, string prop, bool value) { + + bool DrawToggleGUI(MaterialEditor materialEditor, Material material, something element) { EditorGUI.BeginChangeCheck(); - bool ret = EditorGUILayout.Toggle(guiContent, value); + bool ret = EditorGUILayout.Toggle(element.label, material.GetInteger(element.mainProperty.id) !=0); if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(guiContent.text); - MaterialSetInt(material, prop, ret ? 1 : 0); + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetInteger(element.mainProperty.id, ret ? 1 : 0); } return ret; } - internal static int MaterialGetInt(Material material, string prop) { - return (int)material.GetFloat(prop); + +//---------------------------------------------------------------------------------------------------------------------- + + void something2(MaterialProperty[] allProps) { + int numProperties = propertyList.Count; + for (int i = 0; i < numProperties; ++i) { + haha propInfo = propertyList[i]; + + MaterialPropertyWithID mainProp = new MaterialPropertyWithID(propInfo.mainPropertyName, allProps); + MaterialPropertyWithID extraProperty1 = null!= propInfo.extraPropertyName1 ? + new MaterialPropertyWithID(propInfo.extraPropertyName1, allProps) : null; + + MaterialPropertyWithID extraProperty2 = null!= propInfo.extraPropertyName2 ? + new MaterialPropertyWithID(propInfo.extraPropertyName2, allProps) : null; + + + something newElement10 = new something { + label = propInfo.label, + mainProperty = mainProp, + extraProperty1 = extraProperty1, + extraProperty2 = extraProperty2, + }; + + propertyInfos[propInfo.mainPropertyName.name] = newElement10; + } + + } + +//---------------------------------------------------------------------------------------------------------------------- + + class MaterialPropertyWithID { + public MaterialProperty prop; + public int id; + + public MaterialPropertyWithID(MaterialNameWithID m, MaterialProperty[] allProps) { + prop = FindProperty(m.name, allProps); id = m.id; + } } + + class something { + public GUIContent label; + public MaterialPropertyWithID mainProperty; + public MaterialPropertyWithID extraProperty1; + public MaterialPropertyWithID extraProperty2; + } + + class MaterialNameWithID { + public string name; + public int id; + public MaterialNameWithID(string s) { name = s; id = Shader.PropertyToID(s); } + } + - internal static void MaterialSetInt(Material material, string prop, int value) { - material.SetFloat(prop, value); + struct haha { + public MaterialNameWithID mainPropertyName; + + public GUIContent label; + public MaterialNameWithID extraPropertyName1; + public MaterialNameWithID extraPropertyName2; } + Dictionary propertyInfos = new Dictionary(); -//---------------------------------------------------------------------------------------------------------------------- + static List propertyList = new List() { + new haha { + mainPropertyName = new MaterialNameWithID(ShaderPropMainTex), + label = new GUIContent("Base Map", "Base Color : Texture(sRGB) × Color(RGB) Default:White"), + extraPropertyName1 = new MaterialNameWithID(ShaderProp_BaseColor), + }, + new haha { + mainPropertyName = new MaterialNameWithID(ShaderProp_1st_ShadeMap), + label = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."), + extraPropertyName1 = new MaterialNameWithID(ShaderProp_1st_ShadeColor), + }, + new haha { + mainPropertyName = new MaterialNameWithID(ShaderProp_2nd_ShadeMap), + label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), + extraPropertyName1 = new MaterialNameWithID(ShaderProp_2nd_ShadeColor) + }, + new haha { + mainPropertyName = new MaterialNameWithID(ShaderPropUse_BaseAs1st), + label = new GUIContent("Apply to 1st shading map", "Apply Base map to the 1st shading map."), + }, + new haha { + mainPropertyName = new MaterialNameWithID(ShaderPropUse_1stAs2nd), + label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), + }, + new haha { + mainPropertyName = new MaterialNameWithID(ShaderPropUse_1stAs2nd), + label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), + }, + new haha { + mainPropertyName = new MaterialNameWithID(ShaderPropUse_1stAs2nd), + label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), + }, + }; //Common constants - private static class Styles { - public static readonly GUIContent baseColorText = new GUIContent("Base Map", "Base Color : Texture(sRGB) × Color(RGB) Default:White"); - public static readonly GUIContent firstShadeColorText = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."); - public static readonly GUIContent secondShadeColorText = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."); - public static readonly GUIContent applyTo1stShademapText = new GUIContent("Apply to 1st shading map", "Apply Base map to the 1st shading map."); - - public static readonly GUIContent applyTo2ndShademapText = - new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."); - } - internal const string ShaderPropMainTex = "_MainTex"; internal const string ShaderPropUse_BaseAs1st = "_Use_BaseAs1st"; internal const string ShaderPropUse_1stAs2nd = "_Use_1stAs2nd"; - - //Common properties - protected MaterialProperty mainTex = null; - protected MaterialProperty baseColor = null; - protected MaterialProperty firstShadeMap = null; - protected MaterialProperty firstShadeColor = null; - protected MaterialProperty secondShadeMap = null; - protected MaterialProperty secondShadeColor = null; - - //materialEditor.TexturePropertySingleLine(Styles.secondShadeColorText, secondShadeMap, secondShadeColor); - + internal const string ShaderProp_BaseColor = "_BaseColor"; + internal const string ShaderProp_1st_ShadeMap = "_1st_ShadeMap"; + internal const string ShaderProp_1st_ShadeColor = "_1st_ShadeColor"; + internal const string ShaderProp_2nd_ShadeMap = "_2nd_ShadeMap"; + internal const string ShaderProp_2nd_ShadeColor = "_2nd_ShadeColor"; } From 1952e135f02c8a9bceed47d85bc9e5991d754f4c Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 14 Nov 2025 22:13:48 +0900 Subject: [PATCH 176/290] clean up code --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 126 +++++++++--------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 5b0407791..23b52c96a 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -11,10 +11,10 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro if (material == null) return; - something2(props); + InitMaterialPropertyUIElements(props); EditorGUI.BeginChangeCheck(); - GUI_BasicThreeColors(materialEditor, material); + GUI_BasicThreeColors(materialEditor, material, m_materialPropertyUIElements); if (EditorGUI.EndChangeCheck()) { materialEditor.PropertiesChanged(); @@ -23,39 +23,40 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro //---------------------------------------------------------------------------------------------------------------------- - void GUI_BasicThreeColors(MaterialEditor materialEditor, Material material) { - - DrawTexturePropertySingleLineGUI(materialEditor, propertyInfos[ShaderPropMainTex]); + static void GUI_BasicThreeColors(MaterialEditor materialEditor, Material material, + Dictionary uiElements) + { + DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderPropMainTex]); EditorGUI.indentLevel += 2; - bool applyTo1st = DrawToggleGUI(materialEditor, material, propertyInfos[ShaderPropUse_BaseAs1st]); + bool applyTo1st = DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_BaseAs1st]); EditorGUI.indentLevel -= 2; if (applyTo1st) { EditorGUI.indentLevel += 2; - DrawColorPropertyGUI(materialEditor, propertyInfos[ShaderProp_1st_ShadeColor]); + DrawColorPropertyGUI(materialEditor, uiElements[ShaderProp_1st_ShadeColor]); EditorGUI.indentLevel -= 2; } else { - DrawTexturePropertySingleLineGUI(materialEditor, propertyInfos[ShaderProp_1st_ShadeMap]); + DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_1st_ShadeMap]); } EditorGUI.indentLevel += 2; - bool applyTo2nd = DrawToggleGUI(materialEditor, material, propertyInfos[ShaderPropUse_1stAs2nd]); + bool applyTo2nd = DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_1stAs2nd]); EditorGUI.indentLevel -= 2; if (applyTo2nd) { EditorGUI.indentLevel += 2; - DrawColorPropertyGUI(materialEditor, propertyInfos[ShaderProp_2nd_ShadeColor]); + DrawColorPropertyGUI(materialEditor, uiElements[ShaderProp_2nd_ShadeColor]); EditorGUI.indentLevel -= 2; } else { - DrawTexturePropertySingleLineGUI(materialEditor, propertyInfos[ShaderProp_2nd_ShadeMap]); + DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_2nd_ShadeMap]); } } - void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, something element) { + static void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { if (null!= element.extraProperty2) materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop, element.extraProperty2.prop); else if (null!= element.extraProperty1) @@ -64,12 +65,12 @@ void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, something e materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop); } - void DrawColorPropertyGUI(MaterialEditor materialEditor, something element) { + static void DrawColorPropertyGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { materialEditor.ColorProperty(element.mainProperty.prop, element.label.text); } - bool DrawToggleGUI(MaterialEditor materialEditor, Material material, something element) { + static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { EditorGUI.BeginChangeCheck(); bool ret = EditorGUILayout.Toggle(element.label, material.GetInteger(element.mainProperty.id) !=0); if (EditorGUI.EndChangeCheck()) { @@ -83,96 +84,95 @@ bool DrawToggleGUI(MaterialEditor materialEditor, Material material, something e //---------------------------------------------------------------------------------------------------------------------- - void something2(MaterialProperty[] allProps) { - int numProperties = propertyList.Count; + void InitMaterialPropertyUIElements(MaterialProperty[] allProps) { + int numProperties = m_materialUIElements.Count; for (int i = 0; i < numProperties; ++i) { - haha propInfo = propertyList[i]; + MaterialUIElement propInfo = m_materialUIElements[i]; - MaterialPropertyWithID mainProp = new MaterialPropertyWithID(propInfo.mainPropertyName, allProps); - MaterialPropertyWithID extraProperty1 = null!= propInfo.extraPropertyName1 ? - new MaterialPropertyWithID(propInfo.extraPropertyName1, allProps) : null; + MaterialPropertyInfo mainProp = new MaterialPropertyInfo(propInfo.mainPropertyName, allProps); + MaterialPropertyInfo extraProperty1 = null!= propInfo.extraPropertyName1 ? + new MaterialPropertyInfo(propInfo.extraPropertyName1, allProps) : null; - MaterialPropertyWithID extraProperty2 = null!= propInfo.extraPropertyName2 ? - new MaterialPropertyWithID(propInfo.extraPropertyName2, allProps) : null; + MaterialPropertyInfo extraProperty2 = null!= propInfo.extraPropertyName2 ? + new MaterialPropertyInfo(propInfo.extraPropertyName2, allProps) : null; - something newElement10 = new something { + MaterialPropertyUIElement newElement10 = new MaterialPropertyUIElement { label = propInfo.label, mainProperty = mainProp, extraProperty1 = extraProperty1, extraProperty2 = extraProperty2, }; - propertyInfos[propInfo.mainPropertyName.name] = newElement10; + m_materialPropertyUIElements[propInfo.mainPropertyName.name] = newElement10; } } //---------------------------------------------------------------------------------------------------------------------- - class MaterialPropertyWithID { - public MaterialProperty prop; - public int id; + class MaterialPropertyInfo { + public readonly MaterialProperty prop; + public readonly int id; - public MaterialPropertyWithID(MaterialNameWithID m, MaterialProperty[] allProps) { - prop = FindProperty(m.name, allProps); id = m.id; + public MaterialPropertyInfo(MaterialName m, MaterialProperty[] allProps) { + prop = FindProperty(m.name, allProps); id = m.nameID; } } - class something { + class MaterialPropertyUIElement { public GUIContent label; - public MaterialPropertyWithID mainProperty; - public MaterialPropertyWithID extraProperty1; - public MaterialPropertyWithID extraProperty2; + public MaterialPropertyInfo mainProperty; + public MaterialPropertyInfo extraProperty1; + public MaterialPropertyInfo extraProperty2; } - class MaterialNameWithID { - public string name; - public int id; - public MaterialNameWithID(string s) { name = s; id = Shader.PropertyToID(s); } + class MaterialName { + public readonly string name; + public readonly int nameID; + public MaterialName(string s) { name = s; nameID = Shader.PropertyToID(s); } } - struct haha { - public MaterialNameWithID mainPropertyName; - + struct MaterialUIElement { public GUIContent label; - public MaterialNameWithID extraPropertyName1; - public MaterialNameWithID extraPropertyName2; + public MaterialName mainPropertyName; + public MaterialName extraPropertyName1; + public MaterialName extraPropertyName2; } - - Dictionary propertyInfos = new Dictionary(); - - static List propertyList = new List() { - new haha { - mainPropertyName = new MaterialNameWithID(ShaderPropMainTex), + + private readonly Dictionary m_materialPropertyUIElements = new Dictionary(); + + private static readonly List m_materialUIElements = new List() { + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropMainTex), label = new GUIContent("Base Map", "Base Color : Texture(sRGB) × Color(RGB) Default:White"), - extraPropertyName1 = new MaterialNameWithID(ShaderProp_BaseColor), + extraPropertyName1 = new MaterialName(ShaderProp_BaseColor), }, - new haha { - mainPropertyName = new MaterialNameWithID(ShaderProp_1st_ShadeMap), + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_1st_ShadeMap), label = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."), - extraPropertyName1 = new MaterialNameWithID(ShaderProp_1st_ShadeColor), + extraPropertyName1 = new MaterialName(ShaderProp_1st_ShadeColor), }, - new haha { - mainPropertyName = new MaterialNameWithID(ShaderProp_2nd_ShadeMap), + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_2nd_ShadeMap), label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), - extraPropertyName1 = new MaterialNameWithID(ShaderProp_2nd_ShadeColor) + extraPropertyName1 = new MaterialName(ShaderProp_2nd_ShadeColor) }, - new haha { - mainPropertyName = new MaterialNameWithID(ShaderPropUse_BaseAs1st), + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUse_BaseAs1st), label = new GUIContent("Apply to 1st shading map", "Apply Base map to the 1st shading map."), }, - new haha { - mainPropertyName = new MaterialNameWithID(ShaderPropUse_1stAs2nd), + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUse_1stAs2nd), label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), }, - new haha { - mainPropertyName = new MaterialNameWithID(ShaderPropUse_1stAs2nd), + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUse_1stAs2nd), label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), }, - new haha { - mainPropertyName = new MaterialNameWithID(ShaderPropUse_1stAs2nd), + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUse_1stAs2nd), label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), }, }; From 64f709ed8ffdb786d2e8eb1474b0837d06259051 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 14 Nov 2025 22:24:09 +0900 Subject: [PATCH 177/290] separate classes --- .../Assets/Editor/Scripts/MaterialName.cs | 8 ++++ .../Editor/Scripts/MaterialName.cs.meta | 2 + .../Editor/Scripts/MaterialPropertyInfo.cs | 7 ++++ .../Scripts/MaterialPropertyInfo.cs.meta | 2 + .../Scripts/MaterialPropertyUIElement.cs | 10 +++++ .../Scripts/MaterialPropertyUIElement.cs.meta | 2 + .../Editor/Scripts/MaterialUIElement.cs | 9 +++++ .../Editor/Scripts/MaterialUIElement.cs.meta | 2 + .../Editor/Scripts/UnityToon3Das2DGUI.cs | 39 +++++-------------- 9 files changed, 51 insertions(+), 30 deletions(-) create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs.meta create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs.meta create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs.meta create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs.meta diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs new file mode 100644 index 000000000..1e94c2866 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +internal class MaterialName { + internal readonly string name; + internal readonly int nameID; + internal MaterialName(string s) { name = s; nameID = Shader.PropertyToID(s); } +} + diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs.meta new file mode 100644 index 000000000..30a5deef4 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0428cf2e3aaf4c54ba04d9e9949d9cc7 diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs new file mode 100644 index 000000000..953cbd63c --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs @@ -0,0 +1,7 @@ +using UnityEditor; + +internal class MaterialPropertyInfo { + internal MaterialProperty prop; + internal int id; +} + diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs.meta new file mode 100644 index 000000000..a7c43105c --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a233b827442dc9d4fada0418da91533a diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs new file mode 100644 index 000000000..c4973aaea --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs @@ -0,0 +1,10 @@ + +using UnityEngine; + +internal class MaterialPropertyUIElement { + internal GUIContent label; + internal MaterialPropertyInfo mainProperty; + internal MaterialPropertyInfo extraProperty1; + internal MaterialPropertyInfo extraProperty2; +} + diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs.meta new file mode 100644 index 000000000..516a4595b --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0926110c81ecaf64a877cafc3ae63176 diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs new file mode 100644 index 000000000..336294798 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs @@ -0,0 +1,9 @@ +using UnityEngine; + +internal class MaterialUIElement { + internal GUIContent label; + internal MaterialName mainPropertyName; + internal MaterialName extraPropertyName1; + internal MaterialName extraPropertyName2; +} + diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs.meta new file mode 100644 index 000000000..e76c14724 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 66ff40605a2055e4cab580db1e179d1b diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 23b52c96a..e35924a75 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -89,12 +89,12 @@ void InitMaterialPropertyUIElements(MaterialProperty[] allProps) { for (int i = 0; i < numProperties; ++i) { MaterialUIElement propInfo = m_materialUIElements[i]; - MaterialPropertyInfo mainProp = new MaterialPropertyInfo(propInfo.mainPropertyName, allProps); + MaterialPropertyInfo mainProp = MaterialNameToPropertyInfo(propInfo.mainPropertyName, allProps); MaterialPropertyInfo extraProperty1 = null!= propInfo.extraPropertyName1 ? - new MaterialPropertyInfo(propInfo.extraPropertyName1, allProps) : null; + MaterialNameToPropertyInfo(propInfo.extraPropertyName1, allProps) : null; MaterialPropertyInfo extraProperty2 = null!= propInfo.extraPropertyName2 ? - new MaterialPropertyInfo(propInfo.extraPropertyName2, allProps) : null; + MaterialNameToPropertyInfo(propInfo.extraPropertyName2, allProps) : null; MaterialPropertyUIElement newElement10 = new MaterialPropertyUIElement { @@ -111,35 +111,14 @@ void InitMaterialPropertyUIElements(MaterialProperty[] allProps) { //---------------------------------------------------------------------------------------------------------------------- - class MaterialPropertyInfo { - public readonly MaterialProperty prop; - public readonly int id; - - public MaterialPropertyInfo(MaterialName m, MaterialProperty[] allProps) { - prop = FindProperty(m.name, allProps); id = m.nameID; - } + MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty[] allProps) { + MaterialPropertyInfo info = new MaterialPropertyInfo(); + info.prop = FindProperty(m.name, allProps); + info.id = m.nameID; + return info; } - class MaterialPropertyUIElement { - public GUIContent label; - public MaterialPropertyInfo mainProperty; - public MaterialPropertyInfo extraProperty1; - public MaterialPropertyInfo extraProperty2; - } - - class MaterialName { - public readonly string name; - public readonly int nameID; - public MaterialName(string s) { name = s; nameID = Shader.PropertyToID(s); } - } - - - struct MaterialUIElement { - public GUIContent label; - public MaterialName mainPropertyName; - public MaterialName extraPropertyName1; - public MaterialName extraPropertyName2; - } +//---------------------------------------------------------------------------------------------------------------------- private readonly Dictionary m_materialPropertyUIElements = new Dictionary(); From 1e70446c7e149e90df1019e6a27b7a8804c71cbe Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 14 Nov 2025 22:30:31 +0900 Subject: [PATCH 178/290] add code to enable/disable outline --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 12 ++++++++++++ .../Assets/Shaders/Toon2D.shader | 17 ++++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index e35924a75..56fcf5c88 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -15,6 +15,18 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro EditorGUI.BeginChangeCheck(); GUI_BasicThreeColors(materialEditor, material, m_materialPropertyUIElements); + + //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. + string lightModeName = "SRPDefaultUnlit"; + bool enabled = material.GetShaderPassEnabled(lightModeName); + EditorGUI.BeginChangeCheck(); + bool newEnabled = EditorGUILayout.Toggle("Outline", enabled); + if (EditorGUI.EndChangeCheck()) + { + material.SetShaderPassEnabled(lightModeName, newEnabled); + EditorUtility.SetDirty(material); + } + if (EditorGUI.EndChangeCheck()) { materialEditor.PropertiesChanged(); diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 52b6a160b..21b80cef9 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -6,11 +6,11 @@ Shader "Toon2D"{ _BaseShade_Feather ("Base/Shade_Feather", Range(0.0001, 1)) = 0.0001 _1st_ShadeMap ("1st_ShadeMap", 2D) = "white" {} - [Toggle(_)] _Use_BaseAs1st ("Use BaseMap as 1st_ShadeMap", Float ) = 0 + [Toggle(_)] _Use_BaseAs1st ("Use BaseMap as 1st_ShadeMap", Integer ) = 0 _1st_ShadeColor ("1st_ShadeColor", Color) = (1,1,1,1) _2nd_ShadeMap ("2nd_ShadeMap", 2D) = "white" {} - [Toggle(_)] _Use_1stAs2nd ("Use 1st_ShadeMap as 2nd_ShadeMap", Float ) = 0 + [Toggle(_)] _Use_1stAs2nd ("Use 1st_ShadeMap as 2nd_ShadeMap", Integer ) = 0 _2nd_ShadeColor ("2nd_ShadeColor", Color) = (1,1,1,1) _ShadeColor_Step ("ShadeColor_Step", Range(0, 1)) = 0 @@ -79,8 +79,8 @@ Shader "Toon2D"{ half4 _BaseColor; float _Unlit_Intensity; - float _Use_BaseAs1st; - float _Use_1stAs2nd; + int _Use_BaseAs1st; + int _Use_1stAs2nd; float4 _1st_ShadeColor; float4 _2nd_ShadeColor; @@ -340,7 +340,7 @@ Shader "Toon2D"{ Pass { Name "Outline" Tags { -// "LightMode" = "Universal2D" + "LightMode" = "SRPDefaultUnlit" } // Cull [_SRPDefaultUnlitColMode] // ColorMask [_SPRDefaultUnlitColorMask] @@ -353,7 +353,7 @@ Shader "Toon2D"{ // Fail[_StencilOpFail] // // } -// + HLSLPROGRAM #pragma target 2.0 #pragma vertex OutlineVertex @@ -395,7 +395,7 @@ Shader "Toon2D"{ float3 newPos = input.positionOS; - + newPos.x += 0.1; // normal extrusion technique float3 normal = normalize(input.normal); newPos += float3(normal) * _OutlineExtrusion; @@ -505,4 +505,7 @@ Shader "Toon2D"{ } } + + CustomEditor "UnityToon3Das2DGUI" + } \ No newline at end of file From cc523c75aa90e300884beac98c6356080a18a034 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 14 Nov 2025 22:30:47 +0900 Subject: [PATCH 179/290] update materials --- .../Assets/Materials/SphereAs2D.mat | 168 ++++++++++++++++++ .../Assets/Materials/SphereAs2D.mat.meta | 8 + .../Assets/Materials/Toon2D.mat | 12 +- 3 files changed, 183 insertions(+), 5 deletions(-) create mode 100644 Toonshader_ProjectURP/Assets/Materials/SphereAs2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/SphereAs2D.mat.meta diff --git a/Toonshader_ProjectURP/Assets/Materials/SphereAs2D.mat b/Toonshader_ProjectURP/Assets/Materials/SphereAs2D.mat new file mode 100644 index 000000000..4c7b98f16 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/SphereAs2D.mat @@ -0,0 +1,168 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SphereAs2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + m_Floats: + - _1st2nd_Shades_Feather: 0.0001 + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _BaseColor_Step: 0.161 + - _BaseShade_Feather: 0.0001 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Is_Filter_LightColor: 1 + - _Is_LightColor_1st_Shade: 1 + - _Is_LightColor_Base: 1 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _OutlineExtrusion: 0.02 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _ShadeColor_Step: 0.256 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _Unlit_Intensity: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _1st_ShadeColor: {r: 0.8490566, g: 0.120149404, b: 0.120149404, a: 1} + - _2nd_ShadeColor: {r: 0, g: 0, b: 0, a: 1} + - _BaseColor: {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} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &5791580664690647399 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 diff --git a/Toonshader_ProjectURP/Assets/Materials/SphereAs2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/SphereAs2D.mat.meta new file mode 100644 index 000000000..0dee3e071 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/SphereAs2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d76793af01b01074ca9aa1a0f51d3875 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat index 5f079f708..214010db1 100644 --- a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat @@ -12,8 +12,7 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: [] - m_InvalidKeywords: - - _ + m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -97,7 +96,9 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - m_Ints: [] + m_Ints: + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.0001 - _AddPrecomputedVelocity: 0 @@ -125,6 +126,7 @@ Material: - _Is_LightColor_Base: 1 - _Metallic: 0 - _OcclusionStrength: 1 + - _OutlineExtrusion: 0.02 - _Parallax: 0.005 - _QueueOffset: 0 - _ReceiveShadows: 1 @@ -142,8 +144,8 @@ Material: - _XRMotionVectorsPass: 1 - _ZWrite: 1 m_Colors: - - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _1st_ShadeColor: {r: 0.8490566, g: 0.120149404, b: 0.120149404, a: 1} + - _2nd_ShadeColor: {r: 0, g: 0, b: 0, a: 1} - _BaseColor: {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} From a2406e862a60b4591de0595b130a35ec2e3ef1d8 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 14 Nov 2025 22:30:55 +0900 Subject: [PATCH 180/290] add scene --- .../Assets/ScenesDev/Test2D.unity | 504 ++++++++++++++++++ .../Assets/ScenesDev/Test2D.unity.meta | 7 + 2 files changed, 511 insertions(+) create mode 100644 Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity create mode 100644 Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity.meta diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity b/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity new file mode 100644 index 000000000..7e1f7ec2b --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity @@ -0,0 +1,504 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &203844586 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 203844589} + - component: {fileID: 203844588} + - component: {fileID: 203844587} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &203844587 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203844586} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_CustomShadowLayers: 0 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 0 + m_RenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_ShadowRenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_Version: 4 + m_LightLayerMask: 1 + m_ShadowLayerMask: 1 + m_RenderingLayers: 1 + m_ShadowRenderingLayers: 1 +--- !u!108 &203844588 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203844586} + m_Enabled: 1 + serializedVersion: 12 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize2D: {x: 10, y: 10} + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &203844589 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203844586} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &961739749 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 961739753} + - component: {fileID: 961739752} + - component: {fileID: 961739751} + - component: {fileID: 961739750} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &961739750 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 961739749} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 + m_Version: 2 +--- !u!81 &961739751 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 961739749} + m_Enabled: 1 +--- !u!20 &961739752 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 961739749} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &961739753 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 961739749} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1043487611 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1043487615} + - component: {fileID: 1043487614} + - component: {fileID: 1043487613} + - component: {fileID: 1043487612} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!135 &1043487612 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043487611} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1043487613 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043487611} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 793b4e578451ec94bb365b36ac119c22, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1043487614 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043487611} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1043487615 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043487611} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2.52189, y: 0, z: 11.20516} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 961739753} + - {fileID: 203844589} + - {fileID: 1043487615} diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity.meta b/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity.meta new file mode 100644 index 000000000..497bef513 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0e2d7af2fdb9c364c9b2d5750cefc433 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From 5080204ac31764ca38a1ac3c97def7607eba257d Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 14 Nov 2025 22:36:45 +0900 Subject: [PATCH 181/290] update scene --- Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity b/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity index 7e1f7ec2b..eece1ae19 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity @@ -448,7 +448,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: 793b4e578451ec94bb365b36ac119c22, type: 2} + - {fileID: 2100000, guid: d76793af01b01074ca9aa1a0f51d3875, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 From fcf61fb47b103ed11209c43751c92adaae1a28aa Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 17 Nov 2025 14:57:21 +0900 Subject: [PATCH 182/290] add EnumUtility --- .../Assets/ScriptsDev/EnumUtility.cs | 22 +++++++++++++++++++ .../Assets/ScriptsDev/EnumUtility.cs.meta | 2 ++ 2 files changed, 24 insertions(+) create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs.meta diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs new file mode 100644 index 000000000..5a1e9ab09 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs @@ -0,0 +1,22 @@ + +using System; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; + +internal static class EnumUtility { + internal static List ToInspectorNames(Type t) { + List ret = new List(); + foreach (MemberInfo mi in t.GetMembers( BindingFlags.Static | BindingFlags.Public)) { + InspectorNameAttribute inspectorNameAttribute = (InspectorNameAttribute) Attribute.GetCustomAttribute(mi, typeof(InspectorNameAttribute)); + if (null == inspectorNameAttribute) { + ret.Add(new GUIContent(mi.Name)); + continue; + } + + ret.Add(new GUIContent(inspectorNameAttribute.displayName)); + } + + return ret; + } +} diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs.meta new file mode 100644 index 000000000..cb73a5ca9 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 05528202f03325348a70db7be3aa1271 From 897917a9e0a2f569246eb2331fd0a336b8c744bb Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 17 Nov 2025 15:08:57 +0900 Subject: [PATCH 183/290] move and improve EnumEtility --- .../Assets/Editor/Scripts/Utilities.meta | 8 ++++ .../Editor/Scripts/Utilities/EnumUtility.cs | 37 +++++++++++++++++++ .../Scripts/Utilities}/EnumUtility.cs.meta | 0 .../Assets/ScriptsDev/EnumUtility.cs | 22 ----------- 4 files changed, 45 insertions(+), 22 deletions(-) create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities.meta create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs rename Toonshader_ProjectURP/Assets/{ScriptsDev => Editor/Scripts/Utilities}/EnumUtility.cs.meta (100%) delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities.meta new file mode 100644 index 000000000..c05e4929b --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 090af0a94f53c7a4fb6cdf6254373deb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs new file mode 100644 index 000000000..49a7018da --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs @@ -0,0 +1,37 @@ + +using System; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; + +internal static class EnumUtility { + internal static GUIContent[] ToInspectorNamesAsGUIContent(Type t) { + MemberInfo[] members = t.GetMembers(BindingFlags.Static | BindingFlags.Public); + + int numMembers = members.Length; + GUIContent[] ret = new GUIContent[numMembers]; + for (int i = 0; i < numMembers; i++) { + InspectorNameAttribute inspectorNameAttribute = (InspectorNameAttribute) Attribute.GetCustomAttribute( + members[i], typeof(InspectorNameAttribute)); + if (inspectorNameAttribute == null) { + ret[i] = new GUIContent(members[i].Name); + } else { + ret[i] = new GUIContent(inspectorNameAttribute.displayName); + } + } + return ret; + } + + internal static int[] ToIndices(Type t) { + + MemberInfo[] members = t.GetMembers(BindingFlags.Static | BindingFlags.Public); + int numMembers = members.Length; + int[] indices = new int[numMembers]; + for (int i = 0; i < numMembers; ++i) { + indices[i] = i; + } + return indices; + + } + +} diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs.meta similarity index 100% rename from Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs.meta rename to Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs.meta diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs deleted file mode 100644 index 5a1e9ab09..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/EnumUtility.cs +++ /dev/null @@ -1,22 +0,0 @@ - -using System; -using System.Collections.Generic; -using System.Reflection; -using UnityEngine; - -internal static class EnumUtility { - internal static List ToInspectorNames(Type t) { - List ret = new List(); - foreach (MemberInfo mi in t.GetMembers( BindingFlags.Static | BindingFlags.Public)) { - InspectorNameAttribute inspectorNameAttribute = (InspectorNameAttribute) Attribute.GetCustomAttribute(mi, typeof(InspectorNameAttribute)); - if (null == inspectorNameAttribute) { - ret.Add(new GUIContent(mi.Name)); - continue; - } - - ret.Add(new GUIContent(inspectorNameAttribute.displayName)); - } - - return ret; - } -} From e8b4b20b9fbf855dbdb534b16f6ffe903e5558ba Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 17 Nov 2025 15:59:27 +0900 Subject: [PATCH 184/290] add static helper functions --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 56fcf5c88..036587a37 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -92,8 +92,50 @@ static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, Mate return ret; } - + static float DrawFloatFieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + + float ret = material.GetFloat(element.mainProperty.id); + EditorGUI.BeginChangeCheck(); + ret = EditorGUILayout.FloatField(element.label, ret); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetFloat(element.mainProperty.id, ret); + } + return ret; + } + + static Color DrawColorFieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + + Color ret = material.GetColor(element.mainProperty.id); + EditorGUI.BeginChangeCheck(); + ret = EditorGUILayout.ColorField(element.label, ret); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetColor(element.mainProperty.id, ret); + } + return ret; + } + + //Return the index + static int DrawIntPopupGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element, + GUIContent[] displayedOptions, int[] optionValues) + { + int propValue = material.GetInteger(element.mainProperty.id); + + EditorGUI.BeginChangeCheck(); + int ret = EditorGUILayout.IntPopup(element.label, propValue, displayedOptions, optionValues); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetInteger(element.mainProperty.id, ret); + } + + return ret; + } + //---------------------------------------------------------------------------------------------------------------------- void InitMaterialPropertyUIElements(MaterialProperty[] allProps) { From dfa2c7719d8f31dc4ff70db8374ae0977e18c0f1 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 17 Nov 2025 16:00:12 +0900 Subject: [PATCH 185/290] register uiElements --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 81 +++++++++++++++++-- 1 file changed, 75 insertions(+), 6 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 036587a37..e97d1d85c 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -200,17 +200,63 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty mainPropertyName = new MaterialName(ShaderPropUse_1stAs2nd), label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), }, + + //Outline Start new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUse_1stAs2nd), - label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), + mainPropertyName = new MaterialName(ShaderProp_OutlineWidth), + label = new GUIContent("Outline Width", + "The width of the outline."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUse_1stAs2nd), - label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), + mainPropertyName = new MaterialName(ShaderProp_OutlineWidthMap), + label = new GUIContent("Outline Width Map", + "Outline Width Map (grayscale, linear): White = full width, Black = 0 width."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_OutlineColor), + label = new GUIContent("Outline Color", + "The color of outline."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_Outline_BlendBaseColor), + label = new GUIContent("Blend Base Color to Outline", + "Blend base color to outline color."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_OutlineOffsetZ), + label = new GUIContent("Z Offset", + "Offsets the outline in the depth (Z) direction of the camera."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_OutlineNear), + label = new GUIContent("Near", + "Nearest distance for maximum outline width."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_OutlineFar), + label = new GUIContent("Far", + "Furthest distance where outline fades to zero width."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_OutlineMode), + label = new GUIContent("Outline Mode", + "Specifies how the outline is generated."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_Outline_UseCustomNormalMap), + label = new GUIContent("Use Custom Normal Map", + "Use a custom normal map for outline."), + }, + + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_Outline_CustomNormalMap), + label = new GUIContent("Custom Normal Map", + "Custom normal map (linear) for outline. "), }, + //Outline End + }; - - + //Common constants internal const string ShaderPropMainTex = "_MainTex"; internal const string ShaderPropUse_BaseAs1st = "_Use_BaseAs1st"; @@ -221,5 +267,28 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string ShaderProp_2nd_ShadeMap = "_2nd_ShadeMap"; internal const string ShaderProp_2nd_ShadeColor = "_2nd_ShadeColor"; + internal const string ShaderProp_OutlineWidthMap = "_OutlineSampler"; + internal const string ShaderProp_OutlineWidth = "_OutlineWidth"; + internal const string ShaderProp_OutlineColor = "_OutlineColor"; + internal const string ShaderProp_Outline_BlendBaseColor = "_Outline_BlendBaseColor"; + internal const string ShaderProp_OutlineOffsetZ = "_OutlineOffsetZ"; + internal const string ShaderProp_OutlineNear = "_OutlineNear"; + internal const string ShaderProp_OutlineFar = "_OutlineFar"; + internal const string ShaderProp_OutlineMode = "_OutlineMode"; + + internal const string ShaderProp_Outline_UseCustomNormalMap = "_Outline_UseCustomNormalMap"; + internal const string ShaderProp_Outline_CustomNormalMap = "_Outline_CustomNormalMap"; + + + internal enum OutlineMode { + NormalDirection, + PositionScaling + } + + private static readonly GUIContent[] m_outlineModeEnums= EnumUtility.ToInspectorNamesAsGUIContent(typeof(OutlineMode)); + private static readonly int[] m_outlineModeIndices = EnumUtility.ToIndices(typeof(OutlineMode)); + + bool m_outlineFoldout = false; + } From 4d3f14b43347470c190fec6eecf8a472e04798ec Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 17 Nov 2025 16:00:33 +0900 Subject: [PATCH 186/290] minor --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index e97d1d85c..d99140a03 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -79,7 +79,6 @@ static void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, Mate static void DrawColorPropertyGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { materialEditor.ColorProperty(element.mainProperty.prop, element.label.text); - } static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { @@ -179,7 +178,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty private static readonly List m_materialUIElements = new List() { new MaterialUIElement { mainPropertyName = new MaterialName(ShaderPropMainTex), - label = new GUIContent("Base Map", "Base Color : Texture(sRGB) × Color(RGB) Default:White"), + label = new GUIContent("Base Map", "Base Color : Texture(sRGB) × Color(RGB)."), extraPropertyName1 = new MaterialName(ShaderProp_BaseColor), }, new MaterialUIElement { From 22b338e8da44056195046e8a68e9d5221b1314e0 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 17 Nov 2025 16:13:32 +0900 Subject: [PATCH 187/290] Draw outline controls --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 102 ++++++++++++++++-- .../Assets/Shaders/Toon2D.shader | 17 +++ 2 files changed, 113 insertions(+), 6 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index d99140a03..73097bb13 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -25,13 +25,101 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro { material.SetShaderPassEnabled(lightModeName, newEnabled); EditorUtility.SetDirty(material); - } + } + + DrawOutlineGUI(materialEditor, material, m_materialPropertyUIElements); if (EditorGUI.EndChangeCheck()) { materialEditor.PropertiesChanged(); } } + + + void DrawOutlineGUI(MaterialEditor materialEditor, Material material, + Dictionary uiElements) + { + const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; + bool isOutlineEnabled = material.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); + + EditorGUI.BeginChangeCheck(); +// isOutlineEnabled = EditorGUILayout.Toggle(kOutline, isOutlineEnabled); + +// Get a horizontal rect for all controls + GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); + Rect lineRect = EditorGUILayout.GetControlRect(false, 16); + +// Calculate rects for each control + Rect foldoutRect = new Rect(lineRect.x, lineRect.y, 16, lineRect.height); + Rect toggleRect = new Rect(foldoutRect.xMax, lineRect.y, 16, lineRect.height); + Rect labelRect = new Rect(toggleRect.xMax + 2, lineRect.y, lineRect.width - 34, lineRect.height); + + m_outlineFoldout = EditorGUI.Foldout(foldoutRect, m_outlineFoldout, GUIContent.none, true, foldoutStyle); + isOutlineEnabled = EditorGUI.Toggle(toggleRect, isOutlineEnabled); + EditorGUI.LabelField(labelRect, "Outline"); + + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo("Outline"); + material.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); + } + + //Outline Settings + EditorGUI.BeginDisabledGroup(!isOutlineEnabled); + + int outlineMode = DrawIntPopupGUI(materialEditor, material, uiElements[ShaderProp_OutlineMode], + m_outlineModeEnums, m_outlineModeIndices); + + const string OUTLINE_NORMAL_KEYWORD = "_OUTLINE_NML";; + const string OUTLINE_POSITION_KEYWORD = "_OUTLINE_POS"; + + switch (outlineMode) { + case (int) OutlineMode.NormalDirection: + material.EnableKeyword(OUTLINE_NORMAL_KEYWORD); + material.DisableKeyword(OUTLINE_POSITION_KEYWORD); + break; + case (int) OutlineMode.PositionScaling: + material.EnableKeyword(OUTLINE_POSITION_KEYWORD); + material.DisableKeyword(OUTLINE_NORMAL_KEYWORD); + break; + } + + + EditorGUI.BeginDisabledGroup(outlineMode != (int) OutlineMode.NormalDirection); + { + bool useCustom = DrawToggleGUI(materialEditor, material, uiElements[ShaderProp_Outline_UseCustomNormalMap]); + EditorGUI.BeginDisabledGroup(!useCustom); + DrawTexturePropertySingleLineGUI(materialEditor,uiElements[ShaderProp_Outline_CustomNormalMap]); + EditorGUI.EndDisabledGroup(); + } + EditorGUI.EndDisabledGroup(); + + + DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineWidth]); + + DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_OutlineTex]); + DrawToggleGUI(materialEditor, material, uiElements[ShaderProp_Outline_BlendBaseColor]); + + DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_OutlineWidthMap]); + + DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineOffsetZ]); + + + EditorGUILayout.Space(); + { + EditorGUILayout.LabelField("Camera Distance for Outline Width"); + EditorGUI.indentLevel++; + DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineNear]); + DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineFar]); + EditorGUI.indentLevel--; + + + } + EditorGUI.EndDisabledGroup(); //!isOutlineEnabled + + EditorGUILayout.Space(); + } + //---------------------------------------------------------------------------------------------------------------------- @@ -68,6 +156,7 @@ static void GUI_BasicThreeColors(MaterialEditor materialEditor, Material materia } } +//---------------------------------------------------------------------------------------------------------------------- static void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { if (null!= element.extraProperty2) materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop, element.extraProperty2.prop); @@ -212,9 +301,9 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "Outline Width Map (grayscale, linear): White = full width, Black = 0 width."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_OutlineColor), - label = new GUIContent("Outline Color", - "The color of outline."), + mainPropertyName = new MaterialName(ShaderProp_OutlineTex), + label = new GUIContent("Outline Color", "The color of outline."), + extraPropertyName1 = new MaterialName(ShaderProp_OutlineColor), }, new MaterialUIElement { mainPropertyName = new MaterialName(ShaderProp_Outline_BlendBaseColor), @@ -266,14 +355,15 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string ShaderProp_2nd_ShadeMap = "_2nd_ShadeMap"; internal const string ShaderProp_2nd_ShadeColor = "_2nd_ShadeColor"; - internal const string ShaderProp_OutlineWidthMap = "_OutlineSampler"; + internal const string ShaderProp_OutlineMode = "_OutlineMode"; internal const string ShaderProp_OutlineWidth = "_OutlineWidth"; + internal const string ShaderProp_OutlineWidthMap = "_OutlineWidthMap"; + internal const string ShaderProp_OutlineTex = "_OutlineTex"; internal const string ShaderProp_OutlineColor = "_OutlineColor"; internal const string ShaderProp_Outline_BlendBaseColor = "_Outline_BlendBaseColor"; internal const string ShaderProp_OutlineOffsetZ = "_OutlineOffsetZ"; internal const string ShaderProp_OutlineNear = "_OutlineNear"; internal const string ShaderProp_OutlineFar = "_OutlineFar"; - internal const string ShaderProp_OutlineMode = "_OutlineMode"; internal const string ShaderProp_Outline_UseCustomNormalMap = "_Outline_UseCustomNormalMap"; internal const string ShaderProp_Outline_CustomNormalMap = "_Outline_CustomNormalMap"; diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 21b80cef9..155b5bbeb 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -23,8 +23,25 @@ Shader "Toon2D"{ [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching + + //Outline + _OutlineMode("Outline Mode", Integer) = 0 + _OutlineWidth ("Outline Width", Float ) = 0 + _OutlineWidthMap ("Outline Width Map", 2D) = "white" {} + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _OutlineTex ("Outline Tex", 2D) = "black" {} + _Outline_BlendBaseColor ("Blend Base Color to Outline", Integer ) = 0 + _OutlineOffsetZ ("Outline Z Offset", Float) = 0 + _OutlineNear ("Outline Near", Float ) = 0.5 + _OutlineFar ("Outline Far", Float ) = 100 + _Outline_UseCustomNormalMap ("Use Custom Normal Map", Integer ) = 0 + _Outline_CustomNormalMap ("Custom Normal Map", 2D) = "white" {} + + //Test _OutlineExtrusion("Outline Extrusion", float) = 0.02 + + } SubShader{ From ca1e434366d19be215e6a6273d2b45035e3aac44 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 17 Nov 2025 18:09:43 +0900 Subject: [PATCH 188/290] foldout --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 73097bb13..169070797 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -63,6 +63,9 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, materialEditor.RegisterPropertyChangeUndo("Outline"); material.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); } + + if (!m_outlineFoldout) + return; //Outline Settings EditorGUI.BeginDisabledGroup(!isOutlineEnabled); From 1bdb7fe2848d2d8aaff510756996c63c4cf7311b Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 17 Nov 2025 18:10:12 +0900 Subject: [PATCH 189/290] save material --- .../Assets/Materials/Toon2D.mat | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat index 214010db1..97056b837 100644 --- a/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/Toon2D.mat @@ -11,7 +11,8 @@ Material: m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _OUTLINE_NML m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -20,6 +21,7 @@ Material: stringTagMap: {} disabledShaderPasses: - MOTIONVECTORS + - SRPDEFAULTUNLIT m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -76,6 +78,18 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineWidthMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Outline_CustomNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _ParallaxMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -97,6 +111,9 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: + - _OutlineMode: 0 + - _Outline_BlendBaseColor: 0 + - _Outline_UseCustomNormalMap: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 m_Floats: @@ -127,6 +144,10 @@ Material: - _Metallic: 0 - _OcclusionStrength: 1 - _OutlineExtrusion: 0.02 + - _OutlineFar: 100 + - _OutlineNear: 0.5 + - _OutlineOffsetZ: 0 + - _OutlineWidth: 0 - _Parallax: 0.005 - _QueueOffset: 0 - _ReceiveShadows: 1 @@ -149,6 +170,7 @@ Material: - _BaseColor: {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} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} - _White: {r: 1, g: 1, b: 1, a: 1} m_BuildTextureStacks: [] From 820d3d77f85157dc7f0347e61280971117ce79f4 Mon Sep 17 00:00:00 2001 From: sin Date: Tue, 18 Nov 2025 00:10:37 +0900 Subject: [PATCH 190/290] cleanup --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 56 ++++++++++--------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 169070797..04aed35b8 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -16,17 +16,6 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro EditorGUI.BeginChangeCheck(); GUI_BasicThreeColors(materialEditor, material, m_materialPropertyUIElements); - //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. - string lightModeName = "SRPDefaultUnlit"; - bool enabled = material.GetShaderPassEnabled(lightModeName); - EditorGUI.BeginChangeCheck(); - bool newEnabled = EditorGUILayout.Toggle("Outline", enabled); - if (EditorGUI.EndChangeCheck()) - { - material.SetShaderPassEnabled(lightModeName, newEnabled); - EditorUtility.SetDirty(material); - } - DrawOutlineGUI(materialEditor, material, m_materialPropertyUIElements); @@ -39,35 +28,25 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro void DrawOutlineGUI(MaterialEditor materialEditor, Material material, Dictionary uiElements) { + //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; bool isOutlineEnabled = material.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); EditorGUI.BeginChangeCheck(); -// isOutlineEnabled = EditorGUILayout.Toggle(kOutline, isOutlineEnabled); -// Get a horizontal rect for all controls - GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); - Rect lineRect = EditorGUILayout.GetControlRect(false, 16); + //Draw custom foldout with toggle -// Calculate rects for each control - Rect foldoutRect = new Rect(lineRect.x, lineRect.y, 16, lineRect.height); - Rect toggleRect = new Rect(foldoutRect.xMax, lineRect.y, 16, lineRect.height); - Rect labelRect = new Rect(toggleRect.xMax + 2, lineRect.y, lineRect.width - 34, lineRect.height); - - m_outlineFoldout = EditorGUI.Foldout(foldoutRect, m_outlineFoldout, GUIContent.none, true, foldoutStyle); - isOutlineEnabled = EditorGUI.Toggle(toggleRect, isOutlineEnabled); - EditorGUI.LabelField(labelRect, "Outline"); - - - if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo("Outline"); + if (DrawFoldoutWithToggleGUI(materialEditor, material, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) + { material.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); } + if (!m_outlineFoldout) return; //Outline Settings + EditorGUI.indentLevel++; EditorGUI.BeginDisabledGroup(!isOutlineEnabled); int outlineMode = DrawIntPopupGUI(materialEditor, material, uiElements[ShaderProp_OutlineMode], @@ -119,6 +98,7 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, } EditorGUI.EndDisabledGroup(); //!isOutlineEnabled + EditorGUI.indentLevel--; EditorGUILayout.Space(); } @@ -226,6 +206,28 @@ static int DrawIntPopupGUI(MaterialEditor materialEditor, Material material, Mat return ret; } + + //return true if changed, false otherwise + static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material material, + ref bool foldoutState, ref bool toggleEnabled, string label) + { + GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); + Rect lineRect = EditorGUILayout.GetControlRect(false, 16); + Rect foldoutRect = new Rect(lineRect.x, lineRect.y, 16, lineRect.height); + Rect toggleRect = new Rect(foldoutRect.xMax, lineRect.y, 16, lineRect.height); + Rect labelRect = new Rect(toggleRect.xMax + 2, lineRect.y, lineRect.width - 34, lineRect.height); + + foldoutState = EditorGUI.Foldout(foldoutRect, foldoutState, GUIContent.none, true, foldoutStyle); + toggleEnabled = EditorGUI.Toggle(toggleRect, toggleEnabled); + EditorGUI.LabelField(labelRect, label); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(label); + return true; + } + + return false; + } //---------------------------------------------------------------------------------------------------------------------- From 2df99a6ff4b5c6f6d017151c4071f090959e8c67 Mon Sep 17 00:00:00 2001 From: sin Date: Tue, 18 Nov 2025 00:24:57 +0900 Subject: [PATCH 191/290] add background --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 04aed35b8..c3cbefba0 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -217,6 +217,14 @@ static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material mat Rect toggleRect = new Rect(foldoutRect.xMax, lineRect.y, 16, lineRect.height); Rect labelRect = new Rect(toggleRect.xMax + 2, lineRect.y, lineRect.width - 34, lineRect.height); + const float BG_COLOR = 0.20f; + EditorGUI.DrawRect(lineRect, new Color(BG_COLOR, BG_COLOR, BG_COLOR, 1f)); //BG + + // Draw top border + Rect topBorderRect = new Rect(lineRect.x, lineRect.y, lineRect.width, 1); + EditorGUI.DrawRect(topBorderRect, new Color(0.12f, 0.12f, 0.12f, 1f)); + + foldoutState = EditorGUI.Foldout(foldoutRect, foldoutState, GUIContent.none, true, foldoutStyle); toggleEnabled = EditorGUI.Toggle(toggleRect, toggleEnabled); EditorGUI.LabelField(labelRect, label); From c54b03b72794e5e04af2e03532ce2761abaaebff Mon Sep 17 00:00:00 2001 From: sin Date: Tue, 18 Nov 2025 00:54:08 +0900 Subject: [PATCH 192/290] DrawNormalMap --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 59 +++++++++++++++++-- 1 file changed, 54 insertions(+), 5 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index c3cbefba0..a9bd01f43 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using UnityEditor; +using UnityEditor.Rendering; using UnityEngine; class UnityToon3Das2DGUI : UnityEditor.ShaderGUI { @@ -15,7 +16,8 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro EditorGUI.BeginChangeCheck(); GUI_BasicThreeColors(materialEditor, material, m_materialPropertyUIElements); - + + DrawNormalMapGUI(materialEditor, m_materialPropertyUIElements); DrawOutlineGUI(materialEditor, material, m_materialPropertyUIElements); @@ -23,7 +25,22 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro materialEditor.PropertiesChanged(); } } + public static readonly GUIContent normalMapFoldout = EditorGUIUtility.TrTextContent("Normal Map Settings", + "Normal Map settings. Normal Map itself and its effectiveness to some areas."); + + void DrawNormalMapGUI(MaterialEditor materialEditor, + Dictionary uiElements) { + DrawFoldoutGUI(ref m_normalMapFoldout, normalMapFoldout); + if (!m_normalMapFoldout) + return; + + DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_NormalMap]); + materialEditor.TextureScaleOffsetProperty(uiElements[ShaderProp_NormalMap].mainProperty.prop); + + EditorGUILayout.Space(); + } + void DrawOutlineGUI(MaterialEditor materialEditor, Material material, Dictionary uiElements) @@ -32,9 +49,6 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; bool isOutlineEnabled = material.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); - EditorGUI.BeginChangeCheck(); - - //Draw custom foldout with toggle if (DrawFoldoutWithToggleGUI(materialEditor, material, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) { @@ -207,6 +221,32 @@ static int DrawIntPopupGUI(MaterialEditor materialEditor, Material material, Mat return ret; } + + //return true if changed, false otherwise + static bool DrawFoldoutGUI(ref bool state, GUIContent label) { + + Rect lineRect = EditorGUILayout.GetControlRect(false, 16); + + float initialPadding = lineRect.x; + Rect bgRect = new Rect(0, lineRect.y, lineRect.width + initialPadding, lineRect.height); + + const float BG_COLOR = 0.20f; + EditorGUI.DrawRect(bgRect, new Color(BG_COLOR, BG_COLOR, BG_COLOR, 1f)); //BG + + // Draw top border + Rect topBorderRect = new Rect(bgRect.x, bgRect.y, bgRect.width, 1); + EditorGUI.DrawRect(topBorderRect, new Color(0.12f, 0.12f, 0.12f, 1f)); + + EditorGUI.BeginChangeCheck(); + state = EditorGUI.Foldout(lineRect, state, label); + if (EditorGUI.EndChangeCheck()) { + return true; + } + + return false; + + } + //return true if changed, false otherwise static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material material, ref bool foldoutState, ref bool toggleEnabled, string label) @@ -224,7 +264,7 @@ static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material mat Rect topBorderRect = new Rect(lineRect.x, lineRect.y, lineRect.width, 1); EditorGUI.DrawRect(topBorderRect, new Color(0.12f, 0.12f, 0.12f, 1f)); - + EditorGUI.BeginChangeCheck(); foldoutState = EditorGUI.Foldout(foldoutRect, foldoutState, GUIContent.none, true, foldoutStyle); toggleEnabled = EditorGUI.Toggle(toggleRect, toggleEnabled); EditorGUI.LabelField(labelRect, label); @@ -302,6 +342,12 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), }, + //Normal Map + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_NormalMap), + label = new GUIContent("Normal Map", "A texture that specifies the bumpiness of the material."), + }, + //Outline Start new MaterialUIElement { mainPropertyName = new MaterialName(ShaderProp_OutlineWidth), @@ -367,6 +413,8 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string ShaderProp_1st_ShadeColor = "_1st_ShadeColor"; internal const string ShaderProp_2nd_ShadeMap = "_2nd_ShadeMap"; internal const string ShaderProp_2nd_ShadeColor = "_2nd_ShadeColor"; + + internal const string ShaderProp_NormalMap = "_NormalMap"; internal const string ShaderProp_OutlineMode = "_OutlineMode"; internal const string ShaderProp_OutlineWidth = "_OutlineWidth"; @@ -390,6 +438,7 @@ internal enum OutlineMode { private static readonly GUIContent[] m_outlineModeEnums= EnumUtility.ToInspectorNamesAsGUIContent(typeof(OutlineMode)); private static readonly int[] m_outlineModeIndices = EnumUtility.ToIndices(typeof(OutlineMode)); + bool m_normalMapFoldout = false; bool m_outlineFoldout = false; } From ca09349aecf178fafc054dede4218c56308e85ac Mon Sep 17 00:00:00 2001 From: sin Date: Tue, 18 Nov 2025 00:56:45 +0900 Subject: [PATCH 193/290] BumpScale --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 2 ++ Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index a9bd01f43..cdbf0711d 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -346,6 +346,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty new MaterialUIElement { mainPropertyName = new MaterialName(ShaderProp_NormalMap), label = new GUIContent("Normal Map", "A texture that specifies the bumpiness of the material."), + extraPropertyName1 = new MaterialName(ShaderProp_BumpScale), }, //Outline Start @@ -415,6 +416,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string ShaderProp_2nd_ShadeColor = "_2nd_ShadeColor"; internal const string ShaderProp_NormalMap = "_NormalMap"; + internal const string ShaderProp_BumpScale = "_BumpScale"; internal const string ShaderProp_OutlineMode = "_OutlineMode"; internal const string ShaderProp_OutlineWidth = "_OutlineWidth"; diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 155b5bbeb..814a992f7 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -19,6 +19,8 @@ Shader "Toon2D"{ _MaskTex("Mask", 2D) = "white" {} _NormalMap("Normal Map", 2D) = "bump" {} + _BumpScale ("Normal Scale", Range(0, 1)) = 1 + _Unlit_Intensity ("Unlit_Intensity", Range(0, 4)) = 0 [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching From de9920dfd08eec3eb42b2fd0674a25396f645100 Mon Sep 17 00:00:00 2001 From: sin Date: Tue, 18 Nov 2025 01:02:16 +0900 Subject: [PATCH 194/290] refactor bg rect --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index cdbf0711d..830804332 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -227,15 +227,7 @@ static bool DrawFoldoutGUI(ref bool state, GUIContent label) { Rect lineRect = EditorGUILayout.GetControlRect(false, 16); - float initialPadding = lineRect.x; - Rect bgRect = new Rect(0, lineRect.y, lineRect.width + initialPadding, lineRect.height); - - const float BG_COLOR = 0.20f; - EditorGUI.DrawRect(bgRect, new Color(BG_COLOR, BG_COLOR, BG_COLOR, 1f)); //BG - - // Draw top border - Rect topBorderRect = new Rect(bgRect.x, bgRect.y, bgRect.width, 1); - EditorGUI.DrawRect(topBorderRect, new Color(0.12f, 0.12f, 0.12f, 1f)); + DrawBGRect(lineRect); EditorGUI.BeginChangeCheck(); state = EditorGUI.Foldout(lineRect, state, label); @@ -257,12 +249,7 @@ static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material mat Rect toggleRect = new Rect(foldoutRect.xMax, lineRect.y, 16, lineRect.height); Rect labelRect = new Rect(toggleRect.xMax + 2, lineRect.y, lineRect.width - 34, lineRect.height); - const float BG_COLOR = 0.20f; - EditorGUI.DrawRect(lineRect, new Color(BG_COLOR, BG_COLOR, BG_COLOR, 1f)); //BG - - // Draw top border - Rect topBorderRect = new Rect(lineRect.x, lineRect.y, lineRect.width, 1); - EditorGUI.DrawRect(topBorderRect, new Color(0.12f, 0.12f, 0.12f, 1f)); + DrawBGRect(lineRect); EditorGUI.BeginChangeCheck(); foldoutState = EditorGUI.Foldout(foldoutRect, foldoutState, GUIContent.none, true, foldoutStyle); @@ -277,6 +264,26 @@ static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material mat return false; } + static void DrawBGRect(Rect lineRect) { + + float initialPadding = lineRect.x; + Rect bgRect = new Rect(0, lineRect.y, lineRect.width + initialPadding, lineRect.height); + + Color bgColor = GetBGColor(); + EditorGUI.DrawRect(bgRect, bgColor); + + // Draw top border + Rect topBorderRect = new Rect(bgRect.x, bgRect.y, bgRect.width, 1); + EditorGUI.DrawRect(topBorderRect, new Color(0.12f, 0.12f, 0.12f, 1f)); + } + + static Color GetBGColor() { + + return !EditorGUIUtility.isProSkin + ? new Color(0.6f, 0.6f, 0.6f, 1.0f) + : new Color(0.20f, 0.20f, 0.20f, 1.0f); + } + //---------------------------------------------------------------------------------------------------------------------- void InitMaterialPropertyUIElements(MaterialProperty[] allProps) { From cedf341a68891edacf3b5153299ea78a5c08e620 Mon Sep 17 00:00:00 2001 From: sin Date: Tue, 18 Nov 2025 01:39:56 +0900 Subject: [PATCH 195/290] specular --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 87 ++++++++++++++++++- .../Assets/Shaders/Toon2D.shader | 8 +- 2 files changed, 90 insertions(+), 5 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 830804332..2a550d4e8 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -19,6 +19,7 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro DrawNormalMapGUI(materialEditor, m_materialPropertyUIElements); DrawOutlineGUI(materialEditor, material, m_materialPropertyUIElements); + DrawSpecularGUI(materialEditor, material, m_materialPropertyUIElements); if (EditorGUI.EndChangeCheck()) { @@ -50,7 +51,7 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, bool isOutlineEnabled = material.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); - if (DrawFoldoutWithToggleGUI(materialEditor, material, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) + if (DrawFoldoutWithToggleGUI(materialEditor, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) { material.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); } @@ -153,6 +154,22 @@ static void GUI_BasicThreeColors(MaterialEditor materialEditor, Material materia } } + void DrawSpecularGUI(MaterialEditor materialEditor, Material material, + Dictionary uiElements) { + + DrawFoldoutWithToggleGUI(materialEditor, material, uiElements[ShaderPropUnlit_Specular_UseDirectionalLight], + ref m_specularFoldout); + + + if (!m_specularFoldout) + return; + + DrawColorFieldGUI(materialEditor, material, uiElements[ShaderPropUnlit_Specular_Color]); + DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderPropUnlit_Specular_Intensity]); + DrawVector3FieldGUI(materialEditor, material, uiElements[ShaderPropUnlit_Specular_LightDirection]); + } + + //---------------------------------------------------------------------------------------------------------------------- static void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { if (null!= element.extraProperty2) @@ -204,6 +221,19 @@ static Color DrawColorFieldGUI(MaterialEditor materialEditor, Material material, return ret; } + static Vector3 DrawVector3FieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + + Vector3 ret = material.GetVector(element.mainProperty.id); + EditorGUI.BeginChangeCheck(); + ret = EditorGUILayout.Vector3Field(element.label, ret); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetVector(element.mainProperty.id, ret); + } + return ret; + } + //Return the index static int DrawIntPopupGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element, GUIContent[] displayedOptions, int[] optionValues) @@ -240,7 +270,7 @@ static bool DrawFoldoutGUI(ref bool state, GUIContent label) { } //return true if changed, false otherwise - static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material material, + static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, ref bool foldoutState, ref bool toggleEnabled, string label) { GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); @@ -264,6 +294,20 @@ static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material mat return false; } + static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element, + ref bool foldoutState) + { + bool enabled = material.GetInteger(element.mainProperty.id) !=0; + bool ret = DrawFoldoutWithToggleGUI(materialEditor, ref foldoutState, ref enabled, element.label.text); + if (ret) { + material.SetInteger(element.mainProperty.id, enabled ? 1 : 0); + } + + return ret; + + } + + static void DrawBGRect(Rect lineRect) { float initialPadding = lineRect.x; @@ -409,9 +453,31 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "Custom normal map (linear) for outline. "), }, //Outline End - + + //Custom Directional Light + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUnlit_Specular_UseDirectionalLight), + label = new GUIContent("Specular", + "Applies specular color by using a custom directional light."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUnlit_Specular_Color), + label = new GUIContent("Specular Color", + "The specular color. "), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUnlit_Specular_Intensity), + label = new GUIContent("Specular Intensity", + "The specular intensity. "), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUnlit_Specular_LightDirection), + label = new GUIContent("Light Direction", + "The direction of the light for specular. "), + }, }; - + + //Common constants internal const string ShaderPropMainTex = "_MainTex"; internal const string ShaderPropUse_BaseAs1st = "_Use_BaseAs1st"; @@ -438,6 +504,18 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string ShaderProp_Outline_UseCustomNormalMap = "_Outline_UseCustomNormalMap"; internal const string ShaderProp_Outline_CustomNormalMap = "_Outline_CustomNormalMap"; + internal const string ShaderPropUnlit_Specular_UseDirectionalLight = "_Specular_UseDirectionalLight"; + internal const string ShaderPropUnlit_Specular_Color = "_Specular_Color"; + internal const string ShaderPropUnlit_Specular_Intensity = "_Specular_Intensity"; + internal const string ShaderPropUnlit_Specular_LightDirection = "_Specular_LightDirection"; + + // GUI_RangeProperty(material, Styles.metaverseOffsettXaxisText); + // GUI_RangeProperty(material, Styles.metaverseOffsettYaxisText); + // + // GUI_Toggle(material, Styles.invertZaxisDirection, ShaderPropInverse_Z_Axis_BLD, MaterialGetInt(material, ShaderPropInverse_Z_Axis_BLD) != 0); + + + internal enum OutlineMode { NormalDirection, @@ -449,6 +527,7 @@ internal enum OutlineMode { bool m_normalMapFoldout = false; bool m_outlineFoldout = false; + bool m_specularFoldout = false; } diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 814a992f7..ae6021511 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -21,7 +21,6 @@ Shader "Toon2D"{ _NormalMap("Normal Map", 2D) = "bump" {} _BumpScale ("Normal Scale", Range(0, 1)) = 1 - _Unlit_Intensity ("Unlit_Intensity", Range(0, 4)) = 0 [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching @@ -39,11 +38,18 @@ Shader "Toon2D"{ _Outline_UseCustomNormalMap ("Use Custom Normal Map", Integer ) = 0 _Outline_CustomNormalMap ("Custom Normal Map", 2D) = "white" {} + //Specular + _Specular_UseDirectionalLight ("Specular Intensity", Integer) = 0 + _Specular_Color ("Specular Color", Color) = (1,1,1,1) + _Specular_Intensity ("Specular Intensity", float) = 0 + _Specular_LightDirection ("Specular Light Direction", Vector) = (0,-1,0,0) + //Test _OutlineExtrusion("Outline Extrusion", float) = 0.02 + } SubShader{ From 36525a9bed2116edee95a00c335865ba72dca67c Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 13:52:40 +0900 Subject: [PATCH 196/290] save scene --- .../Assets/ScenesDev/test.unity | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index b1ae74ca8..4d5891d06 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -775,13 +775,13 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 443363985} serializedVersion: 2 - m_LocalRotation: {x: 0.70693415, y: -0, z: -0, w: 0.70727944} - m_LocalPosition: {x: 3.42, y: 5.94, z: 0} + m_LocalRotation: {x: -0.12823418, y: 0.548527, z: -0.79870117, w: 0.21154352} + m_LocalPosition: {x: 3.42, y: 5.94, z: -0.77} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1390602298} - m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} + m_LocalEulerAnglesHint: {x: 55.282, y: 50.098, z: -122.825} --- !u!1773428102 &443363987 ParentConstraint: m_ObjectHideFlags: 0 @@ -789,7 +789,7 @@ ParentConstraint: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 443363985} - m_Enabled: 1 + m_Enabled: 0 serializedVersion: 2 m_Weight: 1 m_TranslationAtRest: {x: 4.01, y: 5.94, z: 0} @@ -847,9 +847,9 @@ Light: m_GameObject: {fileID: 443363985} m_Enabled: 1 serializedVersion: 12 - m_Type: 0 + m_Type: 1 m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1 + m_Intensity: 0.6 m_Range: 10 m_SpotAngle: 30 m_InnerSpotAngle: 21.80208 @@ -1530,19 +1530,19 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalRotation.w - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalRotation.x - value: -0 + value: 0 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalRotation.y - value: -0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalRotation.z - value: -0 + value: 0 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalEulerAnglesHint.x @@ -1550,7 +1550,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalEulerAnglesHint.y - value: 0 + value: 180 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalEulerAnglesHint.z @@ -2165,19 +2165,19 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalRotation.w - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalRotation.x - value: -0 + value: 0 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalRotation.y - value: -0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalRotation.z - value: -0 + value: 0 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalEulerAnglesHint.x @@ -2185,7 +2185,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalEulerAnglesHint.y - value: 0 + value: 180 objectReference: {fileID: 0} - target: {fileID: 4485053995679290, guid: 7031be6ceda342c8a3854d3a674ee636, type: 3} propertyPath: m_LocalEulerAnglesHint.z @@ -2266,7 +2266,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1604474280} serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: 1, w: 0} + m_LocalRotation: {x: 1, y: -0, z: -0, w: 0} m_LocalPosition: {x: -12.32, y: 5.26, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 From e285a71935951c4e6748065b54377c04044b94be Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 13:56:06 +0900 Subject: [PATCH 197/290] minor --- .../Assets/Shaders/Toon2D.shader | 30 +++++-------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index ae6021511..6332def62 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -46,10 +46,6 @@ Shader "Toon2D"{ //Test _OutlineExtrusion("Outline Extrusion", float) = 0.02 - - - - } SubShader{ @@ -61,8 +57,6 @@ Shader "Toon2D"{ Cull Back ZWrite On - - Stencil{ Ref 128 // Put this in the last bit of our stencil value for maximum compatibility with sprite mask Comp always @@ -86,13 +80,11 @@ Shader "Toon2D"{ #pragma multi_compile_instancing #pragma multi_compile _ DEBUG_DISPLAY - struct Attributes - { + struct Attributes { COMMON_2D_INPUTS }; - struct Varyings - { + struct Varyings { COMMON_2D_LIT_OUTPUTS }; @@ -115,20 +107,15 @@ Shader "Toon2D"{ float _ShadeColor_Step; float _1st2nd_Shades_Feather; - - CBUFFER_END //---------------------------------------------------------------------------------------------------------------------- float4 _MainTex_ST; - //TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex); TEXTURE2D(_1st_ShadeMap); TEXTURE2D(_2nd_ShadeMap); - - Varyings LitVertex(Attributes input) - { + Varyings LitVertex(Attributes input) { return CommonLitVertex(input); } @@ -183,15 +170,14 @@ Shader "Toon2D"{ } - //---------------------------------------------------------------------------------------------------------------------- +//---------------------------------------------------------------------------------------------------------------------- half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv) { #if defined(DEBUG_DISPLAY) half4 debugColor = 0; - if (CanDebugOverrideOutputColor(surfaceData, inputData, debugColor)) - { + if (CanDebugOverrideOutputColor(surfaceData, inputData, debugColor)) { return debugColor; } #endif @@ -503,13 +489,11 @@ Shader "Toon2D"{ // GPU Instancing #pragma multi_compile_instancing - struct Attributes - { + struct Attributes { COMMON_2D_INPUTS }; - struct Varyings - { + struct Varyings { COMMON_2D_OUTPUTS }; From 360d09d23b8fd55a8092facca55532d0a1a3acfd Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 14:06:11 +0900 Subject: [PATCH 198/290] 3D as 2D materials --- .../Assets/Materials/UnityChan_3Das2D.meta | 8 ++ ...Shader_Eye_Clipping_StencilMask_3Das2D.mat | 86 +++++++++++++++++++ ...r_Eye_Clipping_StencilMask_3Das2D.mat.meta | 8 ++ .../ToonShader_Eyebrow_StencilMask_3Das2D.mat | 86 +++++++++++++++++++ ...Shader_Eyebrow_StencilMask_3Das2D.mat.meta | 8 ++ .../ToonShader_Face_3Das2D.mat | 86 +++++++++++++++++++ .../ToonShader_Face_3Das2D.mat.meta | 8 ++ .../ToonShader_Fhair2_3Das2D.mat | 86 +++++++++++++++++++ .../ToonShader_Fhair2_3Das2D.mat.meta | 8 ++ .../ToonShader_Fhair_StencilOut_3Das2D.mat | 86 +++++++++++++++++++ ...oonShader_Fhair_StencilOut_3Das2D.mat.meta | 8 ++ .../ToonShader_Hair_Clipping_3Das2D.mat | 86 +++++++++++++++++++ .../ToonShader_Hair_Clipping_3Das2D.mat.meta | 8 ++ .../ToonShader_Head_Clipping_3Das2D.mat | 86 +++++++++++++++++++ .../ToonShader_Head_Clipping_3Das2D.mat.meta | 8 ++ .../ToonShader_Main_3Das2D.mat | 86 +++++++++++++++++++ .../ToonShader_Main_3Das2D.mat.meta | 8 ++ 17 files changed, 760 insertions(+) create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D.meta create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat.meta create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat.meta create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat.meta create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat.meta create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat.meta create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat.meta create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat.meta create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat create mode 100644 Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat.meta diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D.meta b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D.meta new file mode 100644 index 000000000..286ca230a --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3c997cd6ed2854f458999ce40fb6f9d3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat new file mode 100644 index 000000000..cad702722 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ToonShader_Eye_Clipping_StencilMask_3Das2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: b5e42375dca74b929795cf09ed8a6d66, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineWidthMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Outline_CustomNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _OutlineMode: 0 + - _Outline_BlendBaseColor: 0 + - _Outline_UseCustomNormalMap: 0 + - _Specular_UseDirectionalLight: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + m_Floats: + - _1st2nd_Shades_Feather: 0 + - _BaseColor_Step: 0.393 + - _BaseShade_Feather: 0.629 + - _BumpScale: 1 + - _OutlineExtrusion: 0.02 + - _OutlineFar: 100 + - _OutlineNear: 0.5 + - _OutlineOffsetZ: 0 + - _OutlineWidth: 0 + - _ShadeColor_Step: 0 + - _Specular_Intensity: 0 + m_Colors: + - _1st_ShadeColor: {r: 0.4338235, g: 0.4338235, b: 0.4338235, a: 1} + - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} + - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat.meta new file mode 100644 index 000000000..03bf73ba7 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3f9d94f5fe986d041a6ec19968d86f1d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat new file mode 100644 index 000000000..3d3ce6cc9 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ToonShader_Eyebrow_StencilMask_3Das2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: b5e42375dca74b929795cf09ed8a6d66, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineWidthMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Outline_CustomNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _OutlineMode: 0 + - _Outline_BlendBaseColor: 0 + - _Outline_UseCustomNormalMap: 0 + - _Specular_UseDirectionalLight: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + m_Floats: + - _1st2nd_Shades_Feather: 0.0001 + - _BaseColor_Step: 0.507 + - _BaseShade_Feather: 0.08 + - _BumpScale: 1 + - _OutlineExtrusion: 0.02 + - _OutlineFar: 100 + - _OutlineNear: 0.5 + - _OutlineOffsetZ: 0 + - _OutlineWidth: 0 + - _ShadeColor_Step: 0 + - _Specular_Intensity: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} + - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat.meta new file mode 100644 index 000000000..cfe589507 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1d19f1d638a5ffb449e3a32dd4d5986d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat new file mode 100644 index 000000000..af116aaec --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ToonShader_Face_3Das2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: b5e42375dca74b929795cf09ed8a6d66, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineWidthMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Outline_CustomNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _OutlineMode: 0 + - _Outline_BlendBaseColor: 0 + - _Outline_UseCustomNormalMap: 0 + - _Specular_UseDirectionalLight: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + m_Floats: + - _1st2nd_Shades_Feather: 0.0001 + - _BaseColor_Step: 0.353 + - _BaseShade_Feather: 0.121 + - _BumpScale: 1 + - _OutlineExtrusion: 0.02 + - _OutlineFar: 100 + - _OutlineNear: 0.5 + - _OutlineOffsetZ: 0 + - _OutlineWidth: 0 + - _ShadeColor_Step: 0 + - _Specular_Intensity: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeColor: {r: 0.7490196, g: 0.69411767, b: 0.88235295, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} + - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat.meta new file mode 100644 index 000000000..510d77d95 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 77410fc82598c414fbb68f41d4df2bba +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat new file mode 100644 index 000000000..f05afac88 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ToonShader_Fhair2_3Das2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: b5e42375dca74b929795cf09ed8a6d66, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineWidthMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Outline_CustomNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _OutlineMode: 0 + - _Outline_BlendBaseColor: 0 + - _Outline_UseCustomNormalMap: 0 + - _Specular_UseDirectionalLight: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + m_Floats: + - _1st2nd_Shades_Feather: 0.236 + - _BaseColor_Step: 0.801 + - _BaseShade_Feather: 0.062 + - _BumpScale: 1 + - _OutlineExtrusion: 0.02 + - _OutlineFar: 100 + - _OutlineNear: 0.5 + - _OutlineOffsetZ: 0 + - _OutlineWidth: 0 + - _ShadeColor_Step: 0.727 + - _Specular_Intensity: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} + - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat.meta new file mode 100644 index 000000000..9e57d1802 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 603cf7ef4659af5439a575075bf3ca95 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat new file mode 100644 index 000000000..13e44553f --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ToonShader_Fhair_StencilOut_3Das2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: b5e42375dca74b929795cf09ed8a6d66, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineWidthMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Outline_CustomNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _OutlineMode: 0 + - _Outline_BlendBaseColor: 0 + - _Outline_UseCustomNormalMap: 0 + - _Specular_UseDirectionalLight: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + m_Floats: + - _1st2nd_Shades_Feather: 0.236 + - _BaseColor_Step: 0.801 + - _BaseShade_Feather: 0.062 + - _BumpScale: 1 + - _OutlineExtrusion: 0.02 + - _OutlineFar: 100 + - _OutlineNear: 0.5 + - _OutlineOffsetZ: 0 + - _OutlineWidth: 0 + - _ShadeColor_Step: 0.727 + - _Specular_Intensity: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} + - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat.meta new file mode 100644 index 000000000..af408b6f2 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 66ecb67261a5bed49b4e9f4734178c7e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat new file mode 100644 index 000000000..eaf04cb0c --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ToonShader_Hair_Clipping_3Das2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: b5e42375dca74b929795cf09ed8a6d66, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineWidthMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Outline_CustomNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _OutlineMode: 0 + - _Outline_BlendBaseColor: 0 + - _Outline_UseCustomNormalMap: 0 + - _Specular_UseDirectionalLight: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + m_Floats: + - _1st2nd_Shades_Feather: 0.064 + - _BaseColor_Step: 0.815 + - _BaseShade_Feather: 0.13 + - _BumpScale: 1 + - _OutlineExtrusion: 0.02 + - _OutlineFar: 100 + - _OutlineNear: 0.5 + - _OutlineOffsetZ: 0 + - _OutlineWidth: 0 + - _ShadeColor_Step: 0.722 + - _Specular_Intensity: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} + - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat.meta new file mode 100644 index 000000000..787d36e6d --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 96545c3995189d647accdbd148fa2c3d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat new file mode 100644 index 000000000..82340acf7 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ToonShader_Head_Clipping_3Das2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineWidthMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Outline_CustomNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _OutlineMode: 0 + - _Outline_BlendBaseColor: 0 + - _Outline_UseCustomNormalMap: 0 + - _Specular_UseDirectionalLight: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + m_Floats: + - _1st2nd_Shades_Feather: 0.064 + - _BaseColor_Step: 0.815 + - _BaseShade_Feather: 0.13 + - _BumpScale: 1 + - _OutlineExtrusion: 0.02 + - _OutlineFar: 100 + - _OutlineNear: 0.5 + - _OutlineOffsetZ: 0 + - _OutlineWidth: 0 + - _ShadeColor_Step: 0.722 + - _Specular_Intensity: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeColor: {r: 0.6691177, g: 0.47672933, b: 0.27059904, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} + - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat.meta new file mode 100644 index 000000000..b8141735f --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0f5c320d996610448ab3be5c087d2544 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat new file mode 100644 index 000000000..db9cde33d --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ToonShader_Main_3Das2D + m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _1st_ShadeMap: + m_Texture: {fileID: 2800000, guid: cec083feb1104e9bb3e282339acfe384, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _2nd_ShadeMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: b5e42375dca74b929795cf09ed8a6d66, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineWidthMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Outline_CustomNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: + - _OutlineMode: 0 + - _Outline_BlendBaseColor: 0 + - _Outline_UseCustomNormalMap: 0 + - _Specular_UseDirectionalLight: 0 + - _Use_1stAs2nd: 0 + - _Use_BaseAs1st: 0 + m_Floats: + - _1st2nd_Shades_Feather: 0.08 + - _BaseColor_Step: 0.841 + - _BaseShade_Feather: 0.074 + - _BumpScale: 1 + - _OutlineExtrusion: 0.02 + - _OutlineFar: 100 + - _OutlineNear: 0.5 + - _OutlineOffsetZ: 0 + - _OutlineWidth: 0 + - _ShadeColor_Step: 0 + - _Specular_Intensity: 0 + m_Colors: + - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} + - _2nd_ShadeColor: {r: 0.7490196, g: 0.69411767, b: 0.88235295, a: 1} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} + - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} + - _White: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat.meta b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat.meta new file mode 100644 index 000000000..274952f7d --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9b9cc9e24bdb5804b9009ba59c8957fe +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: From 8f7c04af06829f4097d30d5aa1e19430634b8aad Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 14:15:30 +0900 Subject: [PATCH 199/290] add ToonEditorGUIUtility --- .../Scripts/Utilities/ToonEditorGUIUtility.cs | 164 ++++++++++++++++++ .../Utilities/ToonEditorGUIUtility.cs.meta | 2 + 2 files changed, 166 insertions(+) create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs create mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs.meta diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs new file mode 100644 index 000000000..369147f54 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs @@ -0,0 +1,164 @@ + +using UnityEditor; +using UnityEngine; + +internal static class ToonEditorGUIUtility { + + internal static void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { + if (null!= element.extraProperty2) + materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop, element.extraProperty2.prop); + else if (null!= element.extraProperty1) + materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop); + else + materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop); + } + + internal static void DrawColorPropertyGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { + materialEditor.ColorProperty(element.mainProperty.prop, element.label.text); + } + + internal static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + EditorGUI.BeginChangeCheck(); + bool ret = EditorGUILayout.Toggle(element.label, material.GetInteger(element.mainProperty.id) !=0); + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetInteger(element.mainProperty.id, ret ? 1 : 0); + } + + return ret; + } + + internal static float DrawFloatFieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + + float ret = material.GetFloat(element.mainProperty.id); + EditorGUI.BeginChangeCheck(); + ret = EditorGUILayout.FloatField(element.label, ret); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetFloat(element.mainProperty.id, ret); + } + return ret; + } + + internal static Color DrawColorFieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + + Color ret = material.GetColor(element.mainProperty.id); + EditorGUI.BeginChangeCheck(); + ret = EditorGUILayout.ColorField(element.label, ret); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetColor(element.mainProperty.id, ret); + } + return ret; + } + + internal static Vector3 DrawVector3FieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + + Vector3 ret = material.GetVector(element.mainProperty.id); + EditorGUI.BeginChangeCheck(); + ret = EditorGUILayout.Vector3Field(element.label, ret); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetVector(element.mainProperty.id, ret); + } + return ret; + } + + //Return the index + internal static int DrawIntPopupGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element, + GUIContent[] displayedOptions, int[] optionValues) + { + int propValue = material.GetInteger(element.mainProperty.id); + + EditorGUI.BeginChangeCheck(); + int ret = EditorGUILayout.IntPopup(element.label, propValue, displayedOptions, optionValues); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(element.label.text); + material.SetInteger(element.mainProperty.id, ret); + } + + return ret; + } + + + //return true if changed, false otherwise + internal static bool DrawFoldoutGUI(ref bool state, GUIContent label) { + + Rect lineRect = EditorGUILayout.GetControlRect(false, 16); + + DrawBGRect(lineRect); + + EditorGUI.BeginChangeCheck(); + state = EditorGUI.Foldout(lineRect, state, label); + if (EditorGUI.EndChangeCheck()) { + return true; + } + + return false; + + } + + //return true if changed, false otherwise + internal static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, + ref bool foldoutState, ref bool toggleEnabled, string label) + { + GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); + Rect lineRect = EditorGUILayout.GetControlRect(false, 16); + Rect foldoutRect = new Rect(lineRect.x, lineRect.y, 16, lineRect.height); + Rect toggleRect = new Rect(foldoutRect.xMax, lineRect.y, 16, lineRect.height); + Rect labelRect = new Rect(toggleRect.xMax + 2, lineRect.y, lineRect.width - 34, lineRect.height); + + DrawBGRect(lineRect); + + EditorGUI.BeginChangeCheck(); + foldoutState = EditorGUI.Foldout(foldoutRect, foldoutState, GUIContent.none, true, foldoutStyle); + toggleEnabled = EditorGUI.Toggle(toggleRect, toggleEnabled); + EditorGUI.LabelField(labelRect, label); + + if (EditorGUI.EndChangeCheck()) { + materialEditor.RegisterPropertyChangeUndo(label); + return true; + } + + return false; + } + + internal static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element, + ref bool foldoutState) + { + bool enabled = material.GetInteger(element.mainProperty.id) !=0; + bool ret = DrawFoldoutWithToggleGUI(materialEditor, ref foldoutState, ref enabled, element.label.text); + if (ret) { + material.SetInteger(element.mainProperty.id, enabled ? 1 : 0); + } + + return ret; + + } + + + static void DrawBGRect(Rect lineRect) { + + float initialPadding = lineRect.x; + Rect bgRect = new Rect(0, lineRect.y, lineRect.width + initialPadding, lineRect.height); + + Color bgColor = GetBGColor(); + EditorGUI.DrawRect(bgRect, bgColor); + + // Draw top border + Rect topBorderRect = new Rect(bgRect.x, bgRect.y, bgRect.width, 1); + EditorGUI.DrawRect(topBorderRect, new Color(0.12f, 0.12f, 0.12f, 1f)); + } + + static Color GetBGColor() { + return !EditorGUIUtility.isProSkin + ? new Color(0.6f, 0.6f, 0.6f, 1.0f) + : new Color(0.20f, 0.20f, 0.20f, 1.0f); + } + + +} diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs.meta new file mode 100644 index 000000000..c1469258d --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: fe63760a0f620a142a80e4a239dbc7f8 From d84279697bc878112cdfc90b1c86401825c024cc Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 14:38:58 +0900 Subject: [PATCH 200/290] * make sure all editor funcitons return true if changed, false otherwise * move editor utility functions to ToonEditorGUIUtility class --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 222 +++--------------- .../Scripts/Utilities/ToonEditorGUIUtility.cs | 86 ++++--- 2 files changed, 86 insertions(+), 222 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 2a550d4e8..f531c7f66 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -4,7 +4,6 @@ using UnityEngine; class UnityToon3Das2DGUI : UnityEditor.ShaderGUI { - public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] props) { @@ -26,17 +25,15 @@ public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] pro materialEditor.PropertiesChanged(); } } - public static readonly GUIContent normalMapFoldout = EditorGUIUtility.TrTextContent("Normal Map Settings", - "Normal Map settings. Normal Map itself and its effectiveness to some areas."); void DrawNormalMapGUI(MaterialEditor materialEditor, Dictionary uiElements) { - DrawFoldoutGUI(ref m_normalMapFoldout, normalMapFoldout); + ToonEditorGUIUtility.DrawFoldoutGUI(ref m_normalMapFoldout, uiElements[ShaderProp_NormalMap].label); if (!m_normalMapFoldout) return; - DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_NormalMap]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_NormalMap]); materialEditor.TextureScaleOffsetProperty(uiElements[ShaderProp_NormalMap].mainProperty.prop); EditorGUILayout.Space(); @@ -51,7 +48,7 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, bool isOutlineEnabled = material.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); - if (DrawFoldoutWithToggleGUI(materialEditor, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) + if (ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(materialEditor, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) { material.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); } @@ -64,8 +61,8 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, EditorGUI.indentLevel++; EditorGUI.BeginDisabledGroup(!isOutlineEnabled); - int outlineMode = DrawIntPopupGUI(materialEditor, material, uiElements[ShaderProp_OutlineMode], - m_outlineModeEnums, m_outlineModeIndices); + ToonEditorGUIUtility.DrawIntPopupGUI(materialEditor, material, uiElements[ShaderProp_OutlineMode], + m_outlineModeEnums, m_outlineModeIndices, out int outlineMode); const string OUTLINE_NORMAL_KEYWORD = "_OUTLINE_NML";; const string OUTLINE_POSITION_KEYWORD = "_OUTLINE_POS"; @@ -84,30 +81,31 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, EditorGUI.BeginDisabledGroup(outlineMode != (int) OutlineMode.NormalDirection); { - bool useCustom = DrawToggleGUI(materialEditor, material, uiElements[ShaderProp_Outline_UseCustomNormalMap]); + ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderProp_Outline_UseCustomNormalMap], + out bool useCustom); EditorGUI.BeginDisabledGroup(!useCustom); - DrawTexturePropertySingleLineGUI(materialEditor,uiElements[ShaderProp_Outline_CustomNormalMap]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor,uiElements[ShaderProp_Outline_CustomNormalMap]); EditorGUI.EndDisabledGroup(); } EditorGUI.EndDisabledGroup(); - DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineWidth]); + ToonEditorGUIUtility.DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineWidth]); - DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_OutlineTex]); - DrawToggleGUI(materialEditor, material, uiElements[ShaderProp_Outline_BlendBaseColor]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_OutlineTex]); + ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderProp_Outline_BlendBaseColor]); - DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_OutlineWidthMap]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_OutlineWidthMap]); - DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineOffsetZ]); + ToonEditorGUIUtility.DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineOffsetZ]); EditorGUILayout.Space(); { EditorGUILayout.LabelField("Camera Distance for Outline Width"); EditorGUI.indentLevel++; - DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineNear]); - DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineFar]); + ToonEditorGUIUtility.DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineNear]); + ToonEditorGUIUtility.DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineFar]); EditorGUI.indentLevel--; @@ -124,208 +122,46 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, static void GUI_BasicThreeColors(MaterialEditor materialEditor, Material material, Dictionary uiElements) { - DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderPropMainTex]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderPropMainTex]); EditorGUI.indentLevel += 2; - bool applyTo1st = DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_BaseAs1st]); + ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_BaseAs1st], out bool applyTo1st ); EditorGUI.indentLevel -= 2; if (applyTo1st) { EditorGUI.indentLevel += 2; - DrawColorPropertyGUI(materialEditor, uiElements[ShaderProp_1st_ShadeColor]); + ToonEditorGUIUtility.DrawColorPropertyGUI(materialEditor, uiElements[ShaderProp_1st_ShadeColor]); EditorGUI.indentLevel -= 2; - } - else { - DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_1st_ShadeMap]); + } else { + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_1st_ShadeMap]); } EditorGUI.indentLevel += 2; - bool applyTo2nd = DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_1stAs2nd]); + ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_1stAs2nd], out bool applyTo2nd); EditorGUI.indentLevel -= 2; if (applyTo2nd) { EditorGUI.indentLevel += 2; - DrawColorPropertyGUI(materialEditor, uiElements[ShaderProp_2nd_ShadeColor]); + ToonEditorGUIUtility.DrawColorPropertyGUI(materialEditor, uiElements[ShaderProp_2nd_ShadeColor]); EditorGUI.indentLevel -= 2; - } - else { - DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_2nd_ShadeMap]); + } else { + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_2nd_ShadeMap]); } } - void DrawSpecularGUI(MaterialEditor materialEditor, Material material, - Dictionary uiElements) { + void DrawSpecularGUI(MaterialEditor mEditor, Material m, Dictionary uiElements) { - DrawFoldoutWithToggleGUI(materialEditor, material, uiElements[ShaderPropUnlit_Specular_UseDirectionalLight], + ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, m, uiElements[ShaderPropUnlit_Specular_UseDirectionalLight], ref m_specularFoldout); if (!m_specularFoldout) return; - DrawColorFieldGUI(materialEditor, material, uiElements[ShaderPropUnlit_Specular_Color]); - DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderPropUnlit_Specular_Intensity]); - DrawVector3FieldGUI(materialEditor, material, uiElements[ShaderPropUnlit_Specular_LightDirection]); - } - - -//---------------------------------------------------------------------------------------------------------------------- - static void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { - if (null!= element.extraProperty2) - materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop, element.extraProperty2.prop); - else if (null!= element.extraProperty1) - materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop); - else - materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop); - } - - static void DrawColorPropertyGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { - materialEditor.ColorProperty(element.mainProperty.prop, element.label.text); - } - - static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { - EditorGUI.BeginChangeCheck(); - bool ret = EditorGUILayout.Toggle(element.label, material.GetInteger(element.mainProperty.id) !=0); - if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetInteger(element.mainProperty.id, ret ? 1 : 0); - } - - return ret; - } - - static float DrawFloatFieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { - - float ret = material.GetFloat(element.mainProperty.id); - EditorGUI.BeginChangeCheck(); - ret = EditorGUILayout.FloatField(element.label, ret); - - if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetFloat(element.mainProperty.id, ret); - } - return ret; - } - - static Color DrawColorFieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { - - Color ret = material.GetColor(element.mainProperty.id); - EditorGUI.BeginChangeCheck(); - ret = EditorGUILayout.ColorField(element.label, ret); - - if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetColor(element.mainProperty.id, ret); - } - return ret; - } - - static Vector3 DrawVector3FieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { - - Vector3 ret = material.GetVector(element.mainProperty.id); - EditorGUI.BeginChangeCheck(); - ret = EditorGUILayout.Vector3Field(element.label, ret); - - if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetVector(element.mainProperty.id, ret); - } - return ret; - } - - //Return the index - static int DrawIntPopupGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element, - GUIContent[] displayedOptions, int[] optionValues) - { - int propValue = material.GetInteger(element.mainProperty.id); - - EditorGUI.BeginChangeCheck(); - int ret = EditorGUILayout.IntPopup(element.label, propValue, displayedOptions, optionValues); - - if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetInteger(element.mainProperty.id, ret); - } - - return ret; - } - - - //return true if changed, false otherwise - static bool DrawFoldoutGUI(ref bool state, GUIContent label) { - - Rect lineRect = EditorGUILayout.GetControlRect(false, 16); - - DrawBGRect(lineRect); - - EditorGUI.BeginChangeCheck(); - state = EditorGUI.Foldout(lineRect, state, label); - if (EditorGUI.EndChangeCheck()) { - return true; - } - - return false; - - } - - //return true if changed, false otherwise - static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, - ref bool foldoutState, ref bool toggleEnabled, string label) - { - GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); - Rect lineRect = EditorGUILayout.GetControlRect(false, 16); - Rect foldoutRect = new Rect(lineRect.x, lineRect.y, 16, lineRect.height); - Rect toggleRect = new Rect(foldoutRect.xMax, lineRect.y, 16, lineRect.height); - Rect labelRect = new Rect(toggleRect.xMax + 2, lineRect.y, lineRect.width - 34, lineRect.height); - - DrawBGRect(lineRect); - - EditorGUI.BeginChangeCheck(); - foldoutState = EditorGUI.Foldout(foldoutRect, foldoutState, GUIContent.none, true, foldoutStyle); - toggleEnabled = EditorGUI.Toggle(toggleRect, toggleEnabled); - EditorGUI.LabelField(labelRect, label); - - if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(label); - return true; - } - - return false; - } - - static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element, - ref bool foldoutState) - { - bool enabled = material.GetInteger(element.mainProperty.id) !=0; - bool ret = DrawFoldoutWithToggleGUI(materialEditor, ref foldoutState, ref enabled, element.label.text); - if (ret) { - material.SetInteger(element.mainProperty.id, enabled ? 1 : 0); - } - - return ret; - - } - - - static void DrawBGRect(Rect lineRect) { - - float initialPadding = lineRect.x; - Rect bgRect = new Rect(0, lineRect.y, lineRect.width + initialPadding, lineRect.height); - - Color bgColor = GetBGColor(); - EditorGUI.DrawRect(bgRect, bgColor); - - // Draw top border - Rect topBorderRect = new Rect(bgRect.x, bgRect.y, bgRect.width, 1); - EditorGUI.DrawRect(topBorderRect, new Color(0.12f, 0.12f, 0.12f, 1f)); - } - - static Color GetBGColor() { - - return !EditorGUIUtility.isProSkin - ? new Color(0.6f, 0.6f, 0.6f, 1.0f) - : new Color(0.20f, 0.20f, 0.20f, 1.0f); + ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, m, uiElements[ShaderPropUnlit_Specular_Color], out Color _); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, m, uiElements[ShaderPropUnlit_Specular_Intensity], out float _); + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, m, uiElements[ShaderPropUnlit_Specular_LightDirection], out Vector3 _); } //---------------------------------------------------------------------------------------------------------------------- diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs index 369147f54..3a64fa3fc 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs @@ -17,71 +17,98 @@ internal static void DrawColorPropertyGUI(MaterialEditor materialEditor, Materia materialEditor.ColorProperty(element.mainProperty.prop, element.label.text); } - internal static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + internal static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, + MaterialPropertyUIElement element) + { + return DrawToggleGUI(materialEditor, material, element, out bool _); + } + + internal static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, + MaterialPropertyUIElement element, out bool newValue) + { + bool prevValue = material.GetInteger(element.mainProperty.id) !=0; EditorGUI.BeginChangeCheck(); - bool ret = EditorGUILayout.Toggle(element.label, material.GetInteger(element.mainProperty.id) !=0); + newValue = EditorGUILayout.Toggle(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetInteger(element.mainProperty.id, ret ? 1 : 0); + material.SetInteger(element.mainProperty.id, newValue ? 1 : 0); + return true; } - - return ret; + return false; } - internal static float DrawFloatFieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + internal static bool DrawFloatFieldGUI(MaterialEditor materialEditor, Material material, + MaterialPropertyUIElement element) + { + + return DrawFloatFieldGUI(materialEditor, material, element, out float _); + } + + internal static bool DrawFloatFieldGUI(MaterialEditor materialEditor, Material material, + MaterialPropertyUIElement element, out float newValue) { - float ret = material.GetFloat(element.mainProperty.id); + float prevValue = material.GetFloat(element.mainProperty.id); EditorGUI.BeginChangeCheck(); - ret = EditorGUILayout.FloatField(element.label, ret); + newValue = EditorGUILayout.FloatField(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetFloat(element.mainProperty.id, ret); + material.SetFloat(element.mainProperty.id, newValue); + return true; } - return ret; + return false; } - internal static Color DrawColorFieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + internal static bool DrawColorFieldGUI(MaterialEditor materialEditor, Material material, + MaterialPropertyUIElement element, out Color newValue) { - Color ret = material.GetColor(element.mainProperty.id); + Color prevValue = material.GetColor(element.mainProperty.id); EditorGUI.BeginChangeCheck(); - ret = EditorGUILayout.ColorField(element.label, ret); + newValue = EditorGUILayout.ColorField(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetColor(element.mainProperty.id, ret); + material.SetColor(element.mainProperty.id, newValue); + return true; } - return ret; + + return false; } - internal static Vector3 DrawVector3FieldGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element) { + //return true if changed, false otherwise + internal static bool DrawVector3FieldGUI(MaterialEditor materialEditor, Material material, + MaterialPropertyUIElement element, out Vector3 newValue) { - Vector3 ret = material.GetVector(element.mainProperty.id); + Vector3 prevValue = material.GetVector(element.mainProperty.id); EditorGUI.BeginChangeCheck(); - ret = EditorGUILayout.Vector3Field(element.label, ret); + newValue = EditorGUILayout.Vector3Field(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetVector(element.mainProperty.id, ret); + material.SetVector(element.mainProperty.id, newValue); + return true; } - return ret; + + return false; } - //Return the index - internal static int DrawIntPopupGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element, - GUIContent[] displayedOptions, int[] optionValues) + //return true if changed, false otherwise + internal static bool DrawIntPopupGUI(MaterialEditor materialEditor, Material material, + MaterialPropertyUIElement element, GUIContent[] displayedOptions, int[] optionValues, out int newValue) { - int propValue = material.GetInteger(element.mainProperty.id); + int prevValue = material.GetInteger(element.mainProperty.id); EditorGUI.BeginChangeCheck(); - int ret = EditorGUILayout.IntPopup(element.label, propValue, displayedOptions, optionValues); + newValue = EditorGUILayout.IntPopup(element.label, prevValue, displayedOptions, optionValues); if (EditorGUI.EndChangeCheck()) { materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetInteger(element.mainProperty.id, ret); + material.SetInteger(element.mainProperty.id, newValue); + return true; } - return ret; + return false; + } @@ -127,8 +154,9 @@ internal static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, return false; } - internal static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material material, MaterialPropertyUIElement element, - ref bool foldoutState) + //return true if changed, false otherwise + internal static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material material, + MaterialPropertyUIElement element, ref bool foldoutState) { bool enabled = material.GetInteger(element.mainProperty.id) !=0; bool ret = DrawFoldoutWithToggleGUI(materialEditor, ref foldoutState, ref enabled, element.label.text); From c28089f8afe51aecbffa0c1a10324967e156252f Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 14:43:15 +0900 Subject: [PATCH 201/290] fix errors when apply toggle are checked --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index f531c7f66..5d4f3f56e 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -215,11 +215,19 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty label = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."), extraPropertyName1 = new MaterialName(ShaderProp_1st_ShadeColor), }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_1st_ShadeColor), + label = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."), + }, new MaterialUIElement { mainPropertyName = new MaterialName(ShaderProp_2nd_ShadeMap), label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), extraPropertyName1 = new MaterialName(ShaderProp_2nd_ShadeColor) }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderProp_2nd_ShadeColor), + label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), + }, new MaterialUIElement { mainPropertyName = new MaterialName(ShaderPropUse_BaseAs1st), label = new GUIContent("Apply to 1st shading map", "Apply Base map to the 1st shading map."), From f65d216542ebf7b569c9e07d136936b46e826932 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 14:43:25 +0900 Subject: [PATCH 202/290] minor --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 5d4f3f56e..1bd009a91 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -137,7 +137,7 @@ static void GUI_BasicThreeColors(MaterialEditor materialEditor, Material materia } EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_1stAs2nd], out bool applyTo2nd); + ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_1stAs2nd], out bool applyTo2nd); EditorGUI.indentLevel -= 2; From 92a814703b8f1776c2a5062abc761914b06a298c Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 14:48:14 +0900 Subject: [PATCH 203/290] rename variables --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 74 +++++++++---------- .../Scripts/Utilities/ToonEditorGUIUtility.cs | 69 +++++++++-------- 2 files changed, 70 insertions(+), 73 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 1bd009a91..27bd8116c 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -5,52 +5,50 @@ class UnityToon3Das2DGUI : UnityEditor.ShaderGUI { - public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] props) { + public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { - Material material = materialEditor.target as Material; + Material material = mEditor.target as Material; if (material == null) return; InitMaterialPropertyUIElements(props); EditorGUI.BeginChangeCheck(); - GUI_BasicThreeColors(materialEditor, material, m_materialPropertyUIElements); + GUI_BasicThreeColors(mEditor, material, m_materialPropertyUIElements); - DrawNormalMapGUI(materialEditor, m_materialPropertyUIElements); - DrawOutlineGUI(materialEditor, material, m_materialPropertyUIElements); - DrawSpecularGUI(materialEditor, material, m_materialPropertyUIElements); + DrawNormalMapGUI(mEditor, m_materialPropertyUIElements); + DrawOutlineGUI(mEditor, material, m_materialPropertyUIElements); + DrawSpecularGUI(mEditor, material, m_materialPropertyUIElements); if (EditorGUI.EndChangeCheck()) { - materialEditor.PropertiesChanged(); + mEditor.PropertiesChanged(); } } - void DrawNormalMapGUI(MaterialEditor materialEditor, - Dictionary uiElements) { + void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements) { ToonEditorGUIUtility.DrawFoldoutGUI(ref m_normalMapFoldout, uiElements[ShaderProp_NormalMap].label); if (!m_normalMapFoldout) return; - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_NormalMap]); - materialEditor.TextureScaleOffsetProperty(uiElements[ShaderProp_NormalMap].mainProperty.prop); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderProp_NormalMap]); + mEditor.TextureScaleOffsetProperty(uiElements[ShaderProp_NormalMap].mainProperty.prop); EditorGUILayout.Space(); } - void DrawOutlineGUI(MaterialEditor materialEditor, Material material, - Dictionary uiElements) + void DrawOutlineGUI(MaterialEditor mEditor, Material m, Dictionary uiElements) { //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; - bool isOutlineEnabled = material.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); + bool isOutlineEnabled = m.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); - if (ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(materialEditor, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) + if (ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) { - material.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); + m.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); } @@ -61,7 +59,7 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, EditorGUI.indentLevel++; EditorGUI.BeginDisabledGroup(!isOutlineEnabled); - ToonEditorGUIUtility.DrawIntPopupGUI(materialEditor, material, uiElements[ShaderProp_OutlineMode], + ToonEditorGUIUtility.DrawIntPopupGUI(mEditor, m, uiElements[ShaderProp_OutlineMode], m_outlineModeEnums, m_outlineModeIndices, out int outlineMode); const string OUTLINE_NORMAL_KEYWORD = "_OUTLINE_NML";; @@ -69,43 +67,43 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, switch (outlineMode) { case (int) OutlineMode.NormalDirection: - material.EnableKeyword(OUTLINE_NORMAL_KEYWORD); - material.DisableKeyword(OUTLINE_POSITION_KEYWORD); + m.EnableKeyword(OUTLINE_NORMAL_KEYWORD); + m.DisableKeyword(OUTLINE_POSITION_KEYWORD); break; case (int) OutlineMode.PositionScaling: - material.EnableKeyword(OUTLINE_POSITION_KEYWORD); - material.DisableKeyword(OUTLINE_NORMAL_KEYWORD); + m.EnableKeyword(OUTLINE_POSITION_KEYWORD); + m.DisableKeyword(OUTLINE_NORMAL_KEYWORD); break; } EditorGUI.BeginDisabledGroup(outlineMode != (int) OutlineMode.NormalDirection); { - ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderProp_Outline_UseCustomNormalMap], + ToonEditorGUIUtility.DrawToggleGUI(mEditor, m, uiElements[ShaderProp_Outline_UseCustomNormalMap], out bool useCustom); EditorGUI.BeginDisabledGroup(!useCustom); - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor,uiElements[ShaderProp_Outline_CustomNormalMap]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor,uiElements[ShaderProp_Outline_CustomNormalMap]); EditorGUI.EndDisabledGroup(); } EditorGUI.EndDisabledGroup(); - ToonEditorGUIUtility.DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineWidth]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, m, uiElements[ShaderProp_OutlineWidth]); - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_OutlineTex]); - ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderProp_Outline_BlendBaseColor]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderProp_OutlineTex]); + ToonEditorGUIUtility.DrawToggleGUI(mEditor, m, uiElements[ShaderProp_Outline_BlendBaseColor]); - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_OutlineWidthMap]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderProp_OutlineWidthMap]); - ToonEditorGUIUtility.DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineOffsetZ]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, m, uiElements[ShaderProp_OutlineOffsetZ]); EditorGUILayout.Space(); { EditorGUILayout.LabelField("Camera Distance for Outline Width"); EditorGUI.indentLevel++; - ToonEditorGUIUtility.DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineNear]); - ToonEditorGUIUtility.DrawFloatFieldGUI(materialEditor, material, uiElements[ShaderProp_OutlineFar]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, m, uiElements[ShaderProp_OutlineNear]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, m, uiElements[ShaderProp_OutlineFar]); EditorGUI.indentLevel--; @@ -119,34 +117,34 @@ void DrawOutlineGUI(MaterialEditor materialEditor, Material material, //---------------------------------------------------------------------------------------------------------------------- - static void GUI_BasicThreeColors(MaterialEditor materialEditor, Material material, + static void GUI_BasicThreeColors(MaterialEditor mEditor, Material m, Dictionary uiElements) { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderPropMainTex]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderPropMainTex]); EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_BaseAs1st], out bool applyTo1st ); + ToonEditorGUIUtility.DrawToggleGUI(mEditor, m, uiElements[ShaderPropUse_BaseAs1st], out bool applyTo1st ); EditorGUI.indentLevel -= 2; if (applyTo1st) { EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawColorPropertyGUI(materialEditor, uiElements[ShaderProp_1st_ShadeColor]); + ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[ShaderProp_1st_ShadeColor]); EditorGUI.indentLevel -= 2; } else { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_1st_ShadeMap]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderProp_1st_ShadeMap]); } EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(materialEditor, material, uiElements[ShaderPropUse_1stAs2nd], out bool applyTo2nd); + ToonEditorGUIUtility.DrawToggleGUI(mEditor, m, uiElements[ShaderPropUse_1stAs2nd], out bool applyTo2nd); EditorGUI.indentLevel -= 2; if (applyTo2nd) { EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawColorPropertyGUI(materialEditor, uiElements[ShaderProp_2nd_ShadeColor]); + ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[ShaderProp_2nd_ShadeColor]); EditorGUI.indentLevel -= 2; } else { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(materialEditor, uiElements[ShaderProp_2nd_ShadeMap]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderProp_2nd_ShadeMap]); } } diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs index 3a64fa3fc..ebba04745 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs @@ -4,56 +4,55 @@ internal static class ToonEditorGUIUtility { - internal static void DrawTexturePropertySingleLineGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { + internal static void DrawTexturePropertySingleLineGUI(MaterialEditor mEditor, MaterialPropertyUIElement element) { if (null!= element.extraProperty2) - materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop, element.extraProperty2.prop); + mEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop, element.extraProperty2.prop); else if (null!= element.extraProperty1) - materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop); + mEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop); else - materialEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop); + mEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop); } - internal static void DrawColorPropertyGUI(MaterialEditor materialEditor, MaterialPropertyUIElement element) { - materialEditor.ColorProperty(element.mainProperty.prop, element.label.text); + internal static void DrawColorPropertyGUI(MaterialEditor mEditor, MaterialPropertyUIElement element) { + mEditor.ColorProperty(element.mainProperty.prop, element.label.text); } - internal static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, + internal static bool DrawToggleGUI(MaterialEditor mEditor, Material m, MaterialPropertyUIElement element) { - return DrawToggleGUI(materialEditor, material, element, out bool _); + return DrawToggleGUI(mEditor, m, element, out bool _); } - internal static bool DrawToggleGUI(MaterialEditor materialEditor, Material material, + internal static bool DrawToggleGUI(MaterialEditor mEditor, Material m, MaterialPropertyUIElement element, out bool newValue) { - bool prevValue = material.GetInteger(element.mainProperty.id) !=0; + bool prevValue = m.GetInteger(element.mainProperty.id) !=0; EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.Toggle(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetInteger(element.mainProperty.id, newValue ? 1 : 0); + mEditor.RegisterPropertyChangeUndo(element.label.text); + m.SetInteger(element.mainProperty.id, newValue ? 1 : 0); return true; } return false; } - internal static bool DrawFloatFieldGUI(MaterialEditor materialEditor, Material material, - MaterialPropertyUIElement element) + internal static bool DrawFloatFieldGUI(MaterialEditor mEditor, Material m, MaterialPropertyUIElement element) { - return DrawFloatFieldGUI(materialEditor, material, element, out float _); + return DrawFloatFieldGUI(mEditor, m, element, out float _); } - internal static bool DrawFloatFieldGUI(MaterialEditor materialEditor, Material material, - MaterialPropertyUIElement element, out float newValue) { - - float prevValue = material.GetFloat(element.mainProperty.id); + internal static bool DrawFloatFieldGUI(MaterialEditor mEditor, Material m, + MaterialPropertyUIElement element, out float newValue) + { + float prevValue = m.GetFloat(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.FloatField(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetFloat(element.mainProperty.id, newValue); + mEditor.RegisterPropertyChangeUndo(element.label.text); + m.SetFloat(element.mainProperty.id, newValue); return true; } return false; @@ -76,16 +75,16 @@ internal static bool DrawColorFieldGUI(MaterialEditor materialEditor, Material m } //return true if changed, false otherwise - internal static bool DrawVector3FieldGUI(MaterialEditor materialEditor, Material material, + internal static bool DrawVector3FieldGUI(MaterialEditor mEditor, Material m, MaterialPropertyUIElement element, out Vector3 newValue) { - Vector3 prevValue = material.GetVector(element.mainProperty.id); + Vector3 prevValue = m.GetVector(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.Vector3Field(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetVector(element.mainProperty.id, newValue); + mEditor.RegisterPropertyChangeUndo(element.label.text); + m.SetVector(element.mainProperty.id, newValue); return true; } @@ -93,17 +92,17 @@ internal static bool DrawVector3FieldGUI(MaterialEditor materialEditor, Material } //return true if changed, false otherwise - internal static bool DrawIntPopupGUI(MaterialEditor materialEditor, Material material, + internal static bool DrawIntPopupGUI(MaterialEditor mEditor, Material m, MaterialPropertyUIElement element, GUIContent[] displayedOptions, int[] optionValues, out int newValue) { - int prevValue = material.GetInteger(element.mainProperty.id); + int prevValue = m.GetInteger(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.IntPopup(element.label, prevValue, displayedOptions, optionValues); if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetInteger(element.mainProperty.id, newValue); + mEditor.RegisterPropertyChangeUndo(element.label.text); + m.SetInteger(element.mainProperty.id, newValue); return true; } @@ -130,7 +129,7 @@ internal static bool DrawFoldoutGUI(ref bool state, GUIContent label) { } //return true if changed, false otherwise - internal static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, + internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, ref bool foldoutState, ref bool toggleEnabled, string label) { GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); @@ -147,7 +146,7 @@ internal static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, EditorGUI.LabelField(labelRect, label); if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(label); + mEditor.RegisterPropertyChangeUndo(label); return true; } @@ -155,13 +154,13 @@ internal static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, } //return true if changed, false otherwise - internal static bool DrawFoldoutWithToggleGUI(MaterialEditor materialEditor, Material material, + internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, Material m, MaterialPropertyUIElement element, ref bool foldoutState) { - bool enabled = material.GetInteger(element.mainProperty.id) !=0; - bool ret = DrawFoldoutWithToggleGUI(materialEditor, ref foldoutState, ref enabled, element.label.text); + bool enabled = m.GetInteger(element.mainProperty.id) !=0; + bool ret = DrawFoldoutWithToggleGUI(mEditor, ref foldoutState, ref enabled, element.label.text); if (ret) { - material.SetInteger(element.mainProperty.id, enabled ? 1 : 0); + m.SetInteger(element.mainProperty.id, enabled ? 1 : 0); } return ret; From 3c3507395354d04c01e5fa299ff5182d89816ebe Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 14:49:06 +0900 Subject: [PATCH 204/290] rename --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 27bd8116c..70f80d861 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -14,7 +14,7 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { InitMaterialPropertyUIElements(props); EditorGUI.BeginChangeCheck(); - GUI_BasicThreeColors(mEditor, material, m_materialPropertyUIElements); + DrawThreeColorsGUI(mEditor, material, m_materialPropertyUIElements); DrawNormalMapGUI(mEditor, m_materialPropertyUIElements); DrawOutlineGUI(mEditor, material, m_materialPropertyUIElements); @@ -117,7 +117,7 @@ void DrawOutlineGUI(MaterialEditor mEditor, Material m, Dictionary uiElements) { ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderPropMainTex]); From 9fca0f0f5209728f624cdfa510f93d505b7ccc88 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 15:06:00 +0900 Subject: [PATCH 205/290] support editing multiple materials --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 65 ++++++++++++------- .../Scripts/Utilities/ToonEditorGUIUtility.cs | 52 ++++++++------- 2 files changed, 70 insertions(+), 47 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 70f80d861..94d5bcb2d 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -6,6 +6,16 @@ class UnityToon3Das2DGUI : UnityEditor.ShaderGUI { public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { + + if (null == mEditor.targets || mEditor.targets.Length == 0) { + return; + } + + int numTargets = mEditor.targets.Length; + Material[] mats = new Material[numTargets]; + for (int i = 0; i < numTargets; ++i) { + mats[i] = mEditor.targets[i] as Material; + } Material material = mEditor.target as Material; if (material == null) @@ -14,11 +24,11 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { InitMaterialPropertyUIElements(props); EditorGUI.BeginChangeCheck(); - DrawThreeColorsGUI(mEditor, material, m_materialPropertyUIElements); + DrawThreeColorsGUI(mEditor, mats, m_materialPropertyUIElements); DrawNormalMapGUI(mEditor, m_materialPropertyUIElements); - DrawOutlineGUI(mEditor, material, m_materialPropertyUIElements); - DrawSpecularGUI(mEditor, material, m_materialPropertyUIElements); + DrawOutlineGUI(mEditor, mats, m_materialPropertyUIElements); + DrawSpecularGUI(mEditor, mats, m_materialPropertyUIElements); if (EditorGUI.EndChangeCheck()) { @@ -39,16 +49,17 @@ void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements) + void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements) { //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; - bool isOutlineEnabled = m.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); + bool isOutlineEnabled = mats[0].GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); if (ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) { - m.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); + foreach (Material m in mats) + m.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); } @@ -59,7 +70,7 @@ void DrawOutlineGUI(MaterialEditor mEditor, Material m, Dictionary uiElements) { ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderPropMainTex]); EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(mEditor, m, uiElements[ShaderPropUse_BaseAs1st], out bool applyTo1st ); + ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[ShaderPropUse_BaseAs1st], out bool applyTo1st ); EditorGUI.indentLevel -= 2; if (applyTo1st) { @@ -135,7 +150,7 @@ static void DrawThreeColorsGUI(MaterialEditor mEditor, Material m, } EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(mEditor, m, uiElements[ShaderPropUse_1stAs2nd], out bool applyTo2nd); + ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[ShaderPropUse_1stAs2nd], out bool applyTo2nd); EditorGUI.indentLevel -= 2; @@ -148,18 +163,18 @@ static void DrawThreeColorsGUI(MaterialEditor mEditor, Material m, } } - void DrawSpecularGUI(MaterialEditor mEditor, Material m, Dictionary uiElements) { + void DrawSpecularGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements) { - ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, m, uiElements[ShaderPropUnlit_Specular_UseDirectionalLight], + ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, mats, uiElements[ShaderPropUnlit_Specular_UseDirectionalLight], ref m_specularFoldout); if (!m_specularFoldout) return; - ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, m, uiElements[ShaderPropUnlit_Specular_Color], out Color _); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, m, uiElements[ShaderPropUnlit_Specular_Intensity], out float _); - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, m, uiElements[ShaderPropUnlit_Specular_LightDirection], out Vector3 _); + ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, mats, uiElements[ShaderPropUnlit_Specular_Color], out Color _); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, mats, uiElements[ShaderPropUnlit_Specular_Intensity], out float _); + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[ShaderPropUnlit_Specular_LightDirection], out Vector3 _); } //---------------------------------------------------------------------------------------------------------------------- diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs index ebba04745..c9025701d 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs @@ -17,57 +17,62 @@ internal static void DrawColorPropertyGUI(MaterialEditor mEditor, MaterialProper mEditor.ColorProperty(element.mainProperty.prop, element.label.text); } - internal static bool DrawToggleGUI(MaterialEditor mEditor, Material m, + internal static bool DrawToggleGUI(MaterialEditor mEditor, Material[] mats, MaterialPropertyUIElement element) { - return DrawToggleGUI(mEditor, m, element, out bool _); + return DrawToggleGUI(mEditor, mats, element, out bool _); } - internal static bool DrawToggleGUI(MaterialEditor mEditor, Material m, + internal static bool DrawToggleGUI(MaterialEditor mEditor, Material[] mats, MaterialPropertyUIElement element, out bool newValue) { - bool prevValue = m.GetInteger(element.mainProperty.id) !=0; + + + bool prevValue = mats[0].GetInteger(element.mainProperty.id) !=0; EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.Toggle(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { mEditor.RegisterPropertyChangeUndo(element.label.text); - m.SetInteger(element.mainProperty.id, newValue ? 1 : 0); + foreach (Material m in mats) + m.SetInteger(element.mainProperty.id, newValue ? 1 : 0); return true; } return false; } - internal static bool DrawFloatFieldGUI(MaterialEditor mEditor, Material m, MaterialPropertyUIElement element) + internal static bool DrawFloatFieldGUI(MaterialEditor mEditor, Material[] mats, MaterialPropertyUIElement element) { - return DrawFloatFieldGUI(mEditor, m, element, out float _); + return DrawFloatFieldGUI(mEditor, mats, element, out float _); } - internal static bool DrawFloatFieldGUI(MaterialEditor mEditor, Material m, + internal static bool DrawFloatFieldGUI(MaterialEditor mEditor, Material[] mats, MaterialPropertyUIElement element, out float newValue) { - float prevValue = m.GetFloat(element.mainProperty.id); + float prevValue = mats[0].GetFloat(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.FloatField(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { mEditor.RegisterPropertyChangeUndo(element.label.text); - m.SetFloat(element.mainProperty.id, newValue); + foreach (Material m in mats) + m.SetFloat(element.mainProperty.id, newValue); return true; } return false; } - internal static bool DrawColorFieldGUI(MaterialEditor materialEditor, Material material, + internal static bool DrawColorFieldGUI(MaterialEditor materialEditor, Material[] mats, MaterialPropertyUIElement element, out Color newValue) { - Color prevValue = material.GetColor(element.mainProperty.id); + Color prevValue = mats[0].GetColor(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.ColorField(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { materialEditor.RegisterPropertyChangeUndo(element.label.text); - material.SetColor(element.mainProperty.id, newValue); + foreach (Material m in mats) + m.SetColor(element.mainProperty.id, newValue); return true; } @@ -75,16 +80,17 @@ internal static bool DrawColorFieldGUI(MaterialEditor materialEditor, Material m } //return true if changed, false otherwise - internal static bool DrawVector3FieldGUI(MaterialEditor mEditor, Material m, + internal static bool DrawVector3FieldGUI(MaterialEditor mEditor, Material[] mats, MaterialPropertyUIElement element, out Vector3 newValue) { - Vector3 prevValue = m.GetVector(element.mainProperty.id); + Vector3 prevValue = mats[0].GetVector(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.Vector3Field(element.label, prevValue); if (EditorGUI.EndChangeCheck()) { mEditor.RegisterPropertyChangeUndo(element.label.text); - m.SetVector(element.mainProperty.id, newValue); + foreach (Material m in mats) + m.SetVector(element.mainProperty.id, newValue); return true; } @@ -92,17 +98,18 @@ internal static bool DrawVector3FieldGUI(MaterialEditor mEditor, Material m, } //return true if changed, false otherwise - internal static bool DrawIntPopupGUI(MaterialEditor mEditor, Material m, + internal static bool DrawIntPopupGUI(MaterialEditor mEditor, Material[] mats, MaterialPropertyUIElement element, GUIContent[] displayedOptions, int[] optionValues, out int newValue) { - int prevValue = m.GetInteger(element.mainProperty.id); + int prevValue = mats[0].GetInteger(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.IntPopup(element.label, prevValue, displayedOptions, optionValues); if (EditorGUI.EndChangeCheck()) { mEditor.RegisterPropertyChangeUndo(element.label.text); - m.SetInteger(element.mainProperty.id, newValue); + foreach (Material m in mats) + m.SetInteger(element.mainProperty.id, newValue); return true; } @@ -154,13 +161,14 @@ internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, } //return true if changed, false otherwise - internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, Material m, + internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, Material[] mats, MaterialPropertyUIElement element, ref bool foldoutState) { - bool enabled = m.GetInteger(element.mainProperty.id) !=0; + bool enabled = mats[0].GetInteger(element.mainProperty.id) !=0; bool ret = DrawFoldoutWithToggleGUI(mEditor, ref foldoutState, ref enabled, element.label.text); if (ret) { - m.SetInteger(element.mainProperty.id, enabled ? 1 : 0); + foreach (Material m in mats) + m.SetInteger(element.mainProperty.id, enabled ? 1 : 0); } return ret; From 15968d77756f787a7f3c62d8145ecafc1a1c33a0 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 15:09:40 +0900 Subject: [PATCH 206/290] invert if --- .../Scripts/Utilities/ToonEditorGUIUtility.cs | 105 ++++++++---------- 1 file changed, 49 insertions(+), 56 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs index c9025701d..5384daa47 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs @@ -31,13 +31,13 @@ internal static bool DrawToggleGUI(MaterialEditor mEditor, Material[] mats, bool prevValue = mats[0].GetInteger(element.mainProperty.id) !=0; EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.Toggle(element.label, prevValue); - if (EditorGUI.EndChangeCheck()) { - mEditor.RegisterPropertyChangeUndo(element.label.text); - foreach (Material m in mats) - m.SetInteger(element.mainProperty.id, newValue ? 1 : 0); - return true; - } - return false; + if (!EditorGUI.EndChangeCheck()) + return false; + + mEditor.RegisterPropertyChangeUndo(element.label.text); + foreach (Material m in mats) + m.SetInteger(element.mainProperty.id, newValue ? 1 : 0); + return true; } internal static bool DrawFloatFieldGUI(MaterialEditor mEditor, Material[] mats, MaterialPropertyUIElement element) @@ -52,14 +52,14 @@ internal static bool DrawFloatFieldGUI(MaterialEditor mEditor, Material[] mats, float prevValue = mats[0].GetFloat(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.FloatField(element.label, prevValue); + + if (!EditorGUI.EndChangeCheck()) + return false; - if (EditorGUI.EndChangeCheck()) { - mEditor.RegisterPropertyChangeUndo(element.label.text); - foreach (Material m in mats) - m.SetFloat(element.mainProperty.id, newValue); - return true; - } - return false; + mEditor.RegisterPropertyChangeUndo(element.label.text); + foreach (Material m in mats) + m.SetFloat(element.mainProperty.id, newValue); + return true; } internal static bool DrawColorFieldGUI(MaterialEditor materialEditor, Material[] mats, @@ -68,15 +68,15 @@ internal static bool DrawColorFieldGUI(MaterialEditor materialEditor, Material[] Color prevValue = mats[0].GetColor(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.ColorField(element.label, prevValue); + + if (!EditorGUI.EndChangeCheck()) + return false; - if (EditorGUI.EndChangeCheck()) { - materialEditor.RegisterPropertyChangeUndo(element.label.text); - foreach (Material m in mats) - m.SetColor(element.mainProperty.id, newValue); - return true; - } - - return false; + materialEditor.RegisterPropertyChangeUndo(element.label.text); + foreach (Material m in mats) + m.SetColor(element.mainProperty.id, newValue); + return true; + } //return true if changed, false otherwise @@ -86,15 +86,15 @@ internal static bool DrawVector3FieldGUI(MaterialEditor mEditor, Material[] mats Vector3 prevValue = mats[0].GetVector(element.mainProperty.id); EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.Vector3Field(element.label, prevValue); + + if (!EditorGUI.EndChangeCheck()) + return false; - if (EditorGUI.EndChangeCheck()) { - mEditor.RegisterPropertyChangeUndo(element.label.text); - foreach (Material m in mats) - m.SetVector(element.mainProperty.id, newValue); - return true; - } - - return false; + mEditor.RegisterPropertyChangeUndo(element.label.text); + foreach (Material m in mats) + m.SetVector(element.mainProperty.id, newValue); + return true; + } //return true if changed, false otherwise @@ -105,16 +105,15 @@ internal static bool DrawIntPopupGUI(MaterialEditor mEditor, Material[] mats, EditorGUI.BeginChangeCheck(); newValue = EditorGUILayout.IntPopup(element.label, prevValue, displayedOptions, optionValues); + + if (!EditorGUI.EndChangeCheck()) + return false; - if (EditorGUI.EndChangeCheck()) { - mEditor.RegisterPropertyChangeUndo(element.label.text); - foreach (Material m in mats) - m.SetInteger(element.mainProperty.id, newValue); - return true; - } - - return false; - + mEditor.RegisterPropertyChangeUndo(element.label.text); + foreach (Material m in mats) + m.SetInteger(element.mainProperty.id, newValue); + return true; + } @@ -127,12 +126,7 @@ internal static bool DrawFoldoutGUI(ref bool state, GUIContent label) { EditorGUI.BeginChangeCheck(); state = EditorGUI.Foldout(lineRect, state, label); - if (EditorGUI.EndChangeCheck()) { - return true; - } - - return false; - + return EditorGUI.EndChangeCheck(); } //return true if changed, false otherwise @@ -151,13 +145,13 @@ internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, foldoutState = EditorGUI.Foldout(foldoutRect, foldoutState, GUIContent.none, true, foldoutStyle); toggleEnabled = EditorGUI.Toggle(toggleRect, toggleEnabled); EditorGUI.LabelField(labelRect, label); + + if (!EditorGUI.EndChangeCheck()) + return false; - if (EditorGUI.EndChangeCheck()) { - mEditor.RegisterPropertyChangeUndo(label); - return true; - } + mEditor.RegisterPropertyChangeUndo(label); + return true; - return false; } //return true if changed, false otherwise @@ -166,13 +160,12 @@ internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, Material[] { bool enabled = mats[0].GetInteger(element.mainProperty.id) !=0; bool ret = DrawFoldoutWithToggleGUI(mEditor, ref foldoutState, ref enabled, element.label.text); - if (ret) { - foreach (Material m in mats) - m.SetInteger(element.mainProperty.id, enabled ? 1 : 0); - } - - return ret; + if (!ret) + return false; + foreach (Material m in mats) + m.SetInteger(element.mainProperty.id, enabled ? 1 : 0); + return true; } From d174ee11da14bae4bbf2981681d4257902de53e5 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 15:17:54 +0900 Subject: [PATCH 207/290] use MaterialEditor.FloatProperty --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 10 ++++----- .../Scripts/Utilities/ToonEditorGUIUtility.cs | 22 ++----------------- 2 files changed, 7 insertions(+), 25 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 94d5bcb2d..a03ae674b 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -103,22 +103,22 @@ void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary Date: Wed, 19 Nov 2025 15:23:45 +0900 Subject: [PATCH 208/290] Colorfield --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 2 +- .../Scripts/Utilities/ToonEditorGUIUtility.cs | 23 ++++--------------- 2 files changed, 5 insertions(+), 20 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index a03ae674b..52ca00ebc 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -172,7 +172,7 @@ void DrawSpecularGUI(MaterialEditor mEditor, Material[] mats, Dictionary Date: Wed, 19 Nov 2025 15:32:48 +0900 Subject: [PATCH 209/290] turn all to static --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 52ca00ebc..ec5cb71d9 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -26,9 +26,9 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { EditorGUI.BeginChangeCheck(); DrawThreeColorsGUI(mEditor, mats, m_materialPropertyUIElements); - DrawNormalMapGUI(mEditor, m_materialPropertyUIElements); - DrawOutlineGUI(mEditor, mats, m_materialPropertyUIElements); - DrawSpecularGUI(mEditor, mats, m_materialPropertyUIElements); + DrawNormalMapGUI(mEditor, m_materialPropertyUIElements, ref m_normalMapFoldout); + DrawOutlineGUI(mEditor, mats, m_materialPropertyUIElements, ref m_outlineFoldout); + DrawSpecularGUI(mEditor, mats, m_materialPropertyUIElements, ref m_specularFoldout); if (EditorGUI.EndChangeCheck()) { @@ -36,10 +36,11 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { } } - void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements) { + static void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements, + ref bool foldout) { - ToonEditorGUIUtility.DrawFoldoutGUI(ref m_normalMapFoldout, uiElements[ShaderProp_NormalMap].label); - if (!m_normalMapFoldout) + ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, uiElements[ShaderProp_NormalMap].label); + if (!foldout) return; ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderProp_NormalMap]); @@ -49,21 +50,22 @@ void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements) + static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements, ref bool foldout) { //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; bool isOutlineEnabled = mats[0].GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); - if (ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, ref m_outlineFoldout, ref isOutlineEnabled, "Outline")) + if (ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, ref foldout, ref isOutlineEnabled, "Outline")) { foreach (Material m in mats) m.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); } - if (!m_outlineFoldout) + if (!foldout) return; //Outline Settings @@ -163,13 +165,14 @@ static void DrawThreeColorsGUI(MaterialEditor mEditor, Material[] mats, } } - void DrawSpecularGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements) { + static void DrawSpecularGUI(MaterialEditor mEditor, Material[] mats, + Dictionary uiElements, ref bool foldout) { ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, mats, uiElements[ShaderPropUnlit_Specular_UseDirectionalLight], - ref m_specularFoldout); + ref foldout); - if (!m_specularFoldout) + if (!foldout) return; ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[ShaderPropUnlit_Specular_Color]); From 6a53064b4327cc80ddfe2dc9275ea755d149e511 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 16:56:09 +0900 Subject: [PATCH 210/290] refresh foldouts for outline --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index ec5cb71d9..7cc43802a 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -4,6 +4,7 @@ using UnityEngine; class UnityToon3Das2DGUI : UnityEditor.ShaderGUI { + private Material m_lastMaterial; public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { @@ -16,11 +17,11 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { for (int i = 0; i < numTargets; ++i) { mats[i] = mEditor.targets[i] as Material; } - - Material material = mEditor.target as Material; - if (material == null) - return; - + + if (mats[0] != m_lastMaterial) { + RefreshFoldouts(mats[0]); + } + InitMaterialPropertyUIElements(props); EditorGUI.BeginChangeCheck(); @@ -34,8 +35,18 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { if (EditorGUI.EndChangeCheck()) { mEditor.PropertiesChanged(); } - } + m_lastMaterial = mats[0]; + } + + void RefreshFoldouts(Material mat) { + + m_normalMapFoldout = false; + m_outlineFoldout = mat.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); + m_specularFoldout = false; + } + +//---------------------------------------------------------------------------------------------------------------------- static void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements, ref bool foldout) { @@ -53,8 +64,6 @@ static void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements, ref bool foldout) { - //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. - const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; bool isOutlineEnabled = mats[0].GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); @@ -369,13 +378,8 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string ShaderPropUnlit_Specular_Intensity = "_Specular_Intensity"; internal const string ShaderPropUnlit_Specular_LightDirection = "_Specular_LightDirection"; - // GUI_RangeProperty(material, Styles.metaverseOffsettXaxisText); - // GUI_RangeProperty(material, Styles.metaverseOffsettYaxisText); - // - // GUI_Toggle(material, Styles.invertZaxisDirection, ShaderPropInverse_Z_Axis_BLD, MaterialGetInt(material, ShaderPropInverse_Z_Axis_BLD) != 0); - - - + //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. + const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; internal enum OutlineMode { NormalDirection, From 55cea7da2f3929ae37a18e3b138bb52ec119e578 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 17:42:47 +0900 Subject: [PATCH 211/290] add commented out outline code for vertex --- .../Assets/Shaders/Toon2D.shader | 109 +++++++++++++++--- 1 file changed, 92 insertions(+), 17 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 6332def62..2282ba956 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -378,19 +378,49 @@ Shader "Toon2D"{ // #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" - struct Attributes - { + struct Attributes { COMMON_2D_INPUTS }; - - struct Varyings - { + + struct Varyings { COMMON_2D_LIT_OUTPUTS }; + + // struct Attributes { + // float4 vertex : POSITION; + // float3 normal : NORMAL; + // float4 tangent : TANGENT; + // float2 texcoord0 : TEXCOORD0; + // + // UNITY_VERTEX_INPUT_INSTANCE_ID + // }; + // struct Varyings { + // float4 pos : SV_POSITION; + // float2 uv0 : TEXCOORD0; + // float3 normalDir : TEXCOORD1; + // float3 tangentDir : TEXCOORD2; + // float3 bitangentDir : TEXCOORD3; + // + // UNITY_VERTEX_OUTPUT_STEREO + // }; #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" float _OutlineExtrusion; + TEXTURE2D(_OutlineTex); + SAMPLER(sampler_OutlineTex); + float4 _OutlineTex_ST; + + TEXTURE2D(_Outline_CustomNormalMap); + SAMPLER(sampler_Outline_CustomNormalMap); + float4 _Outline_CustomNormalMap_ST; + int _Outline_UseCustomNormalMap; + + float _OutlineOffsetZ; + float _OutlineWidth; + float _OutlineNear; + float _OutlineFar; + // #ifdef UNIVERSAL_PIPELINE_CORE_INCLUDED // #include "../../UniversalRP/Shaders/UniversalToonInput.hlsl" // #include "../../UniversalRP/Shaders/UniversalToonHead.hlsl" @@ -398,35 +428,80 @@ Shader "Toon2D"{ // #endif #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Lit2DCommon.hlsl" - Varyings CommonLitVertex2(Attributes input) - { + +inline float4 UnityObjectToClipPosInstanced(in float3 pos) { + return mul(UNITY_MATRIX_VP, mul(GetObjectToWorldMatrix(), float4(pos, 1.0))); +} +#define UnityObjectToClipPos UnityObjectToClipPosInstanced + + + +inline float3 UnityObjectToWorldNormal(in float3 norm) +{ +#ifdef UNITY_ASSUME_UNIFORM_SCALING + return UnityObjectToWorldDir(norm); +#else + // mul(IT_M, norm) => mul(norm, I_M) => {dot(norm, I_M.col0), dot(norm, I_M.col1), dot(norm, I_M.col2)} + return normalize(mul(norm, (float3x3)GetWorldToObjectMatrix())); +#endif +} + + Varyings OutlineVertex(Attributes v) { Varyings o = (Varyings) 0; UNITY_SETUP_INSTANCE_ID(input); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); - float3 newPos = input.positionOS; + float3 newPos = v.positionOS; newPos.x += 0.1; // normal extrusion technique - float3 normal = normalize(input.normal); + float3 normal = normalize(v.normal); newPos += float3(normal) * _OutlineExtrusion; - + o.positionCS = TransformObjectToHClip(newPos); - o.uv = input.uv; + o.uv = v.uv; o.lightingUV = half2(ComputeScreenPos(o.positionCS / o.positionCS.w).xy); + +// const float2 uv = v.texcoord0; +// o.uv0 = v.texcoord0; +// +// float4 objPos = mul (GetObjectToWorldMatrix(), float4(0,0,0,1) ); +// float4 _Outline_Sampler_var = tex2Dlod(sampler_OutlineTex,float4(TRANSFORM_TEX(uv, _OutlineTex),0.0,0)); +// o.normalDir = UnityObjectToWorldNormal(v.normal); +// o.tangentDir = normalize( mul( GetObjectToWorldMatrix(), float4( v.tangent.xyz, 0.0 ) ).xyz ); +// o.bitangentDir = normalize(cross(o.normalDir, o.tangentDir) * v.tangent.w); +// float3x3 tangentTransform = float3x3( o.tangentDir, o.bitangentDir, o.normalDir); +// +// //UnpackNormal() can't be used, and so as follows. Do not specify a bump for the texture to be used. +// float4 _BakedNormal_var = (tex2Dlod(sampler_Outline_CustomNormalMap,float4(TRANSFORM_TEX(uv, _Outline_CustomNormalMap),0.0,0)) * 2 - 1); +// float3 _BakedNormalDir = normalize(mul(_BakedNormal_var.rgb, tangentTransform)); +// +// float Set_Outline_Width = (_OutlineWidth*0.001*smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) )*_Outline_Sampler_var.rgb).r; +// float4 _ClipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); +// _OutlineOffsetZ = _OutlineOffsetZ * -0.01; +// +// #ifdef _OUTLINE_NML +// o.pos = UnityObjectToClipPos(lerp(float4(v.vertex.xyz + v.normal*Set_Outline_Width,1), float4(v.vertex.xyz + _BakedNormalDir*Set_Outline_Width,1),_Outline_UseCustomNormalMap)); +// #elif _OUTLINE_POS +// Set_Outline_Width = Set_Outline_Width*2; +// float signVar = dot(normalize(v.vertex.xyz),normalize(v.normal))<0 ? -1 : 1; +// o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signVar*normalize(v.vertex)*Set_Outline_Width, 1)); +// #endif +// o.pos.z = o.pos.z + _OutlineOffsetZ * _ClipCameraPos.z; return o; } - Varyings OutlineVertex(Attributes input) - { - - return CommonLitVertex2(input); - } half4 OutlineFragment(Varyings input) : SV_Target { - return float4(0,0,1,1); + + +#if (UNITY_VERSION >= 202230) + return float4(0,1,1,1); +#else + return float4(1,0,0,1); +#endif } From 9b80fe09263fb725d4efd75d617bbe1400fe2bd7 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 17:55:19 +0900 Subject: [PATCH 212/290] rename vars, etc --- .../Assets/Shaders/Toon2D.shader | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 2282ba956..b8113f774 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -378,13 +378,19 @@ Shader "Toon2D"{ // #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" - struct Attributes { - COMMON_2D_INPUTS - }; + + struct OutlineVertexInput { + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float2 texcoord0 : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; - struct Varyings { - COMMON_2D_LIT_OUTPUTS - }; + struct OutlineVertexOutput { + float4 pos : SV_POSITION; + float2 uv0 : TEXCOORD0; + }; // struct Attributes { // float4 vertex : POSITION; @@ -426,7 +432,6 @@ Shader "Toon2D"{ // #include "../../UniversalRP/Shaders/UniversalToonHead.hlsl" // #include "../../UniversalRP/Shaders/UniversalToonOutline.hlsl" // #endif - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Lit2DCommon.hlsl" inline float4 UnityObjectToClipPosInstanced(in float3 pos) { @@ -446,22 +451,21 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) #endif } - Varyings OutlineVertex(Attributes v) { - Varyings o = (Varyings) 0; + OutlineVertexOutput OutlineVertex(OutlineVertexInput v) { + OutlineVertexOutput o = (OutlineVertexOutput) 0; UNITY_SETUP_INSTANCE_ID(input); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); - float3 newPos = v.positionOS; + float3 newPos = v.vertex; newPos.x += 0.1; // normal extrusion technique float3 normal = normalize(v.normal); newPos += float3(normal) * _OutlineExtrusion; - o.positionCS = TransformObjectToHClip(newPos); - o.uv = v.uv; - o.lightingUV = half2(ComputeScreenPos(o.positionCS / o.positionCS.w).xy); + o.pos = TransformObjectToHClip(newPos); + o.uv0 = v.texcoord0; // const float2 uv = v.texcoord0; // o.uv0 = v.texcoord0; @@ -494,7 +498,7 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) - half4 OutlineFragment(Varyings input) : SV_Target { + half4 OutlineFragment(OutlineVertexOutput input) : SV_Target { #if (UNITY_VERSION >= 202230) From 641ae81fdd57f140e4f90a28f17ae622fe9fc44d Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 18:15:04 +0900 Subject: [PATCH 213/290] make outline appear --- .../Assets/Shaders/Toon2D.shader | 85 +++++++------------ 1 file changed, 31 insertions(+), 54 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index b8113f774..53aa89aa2 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -388,27 +388,11 @@ Shader "Toon2D"{ }; struct OutlineVertexOutput { - float4 pos : SV_POSITION; - float2 uv0 : TEXCOORD0; + float4 pos : SV_POSITION; + float2 uv0 : TEXCOORD0; + float3 normalDir : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO }; - - // struct Attributes { - // float4 vertex : POSITION; - // float3 normal : NORMAL; - // float4 tangent : TANGENT; - // float2 texcoord0 : TEXCOORD0; - // - // UNITY_VERTEX_INPUT_INSTANCE_ID - // }; - // struct Varyings { - // float4 pos : SV_POSITION; - // float2 uv0 : TEXCOORD0; - // float3 normalDir : TEXCOORD1; - // float3 tangentDir : TEXCOORD2; - // float3 bitangentDir : TEXCOORD3; - // - // UNITY_VERTEX_OUTPUT_STEREO - // }; #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" float _OutlineExtrusion; @@ -456,43 +440,36 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) UNITY_SETUP_INSTANCE_ID(input); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + const float2 uv = v.texcoord0; + o.uv0 = v.texcoord0; - float3 newPos = v.vertex; - newPos.x += 0.1; - // normal extrusion technique - float3 normal = normalize(v.normal); - newPos += float3(normal) * _OutlineExtrusion; - + float4 objPos = mul (GetObjectToWorldMatrix(), float4(0,0,0,1) ); + float4 _Outline_Sampler_var = tex2Dlod(sampler_OutlineTex,float4(TRANSFORM_TEX(uv, _OutlineTex),0.0,0)); + o.normalDir = UnityObjectToWorldNormal(v.normal); + + const float3 tangentDir = normalize( mul( GetObjectToWorldMatrix(), float4( v.tangent.xyz, 0.0 ) ).xyz ); + const float3 bitangentDir = normalize(cross(o.normalDir, tangentDir) * v.tangent.w); + float3x3 tangentTransform = float3x3(tangentDir, bitangentDir, o.normalDir); + + //UnpackNormal() can't be used, and so as follows. Do not specify a bump for the texture to be used. + float4 _BakedNormal_var = (tex2Dlod(sampler_Outline_CustomNormalMap,float4(TRANSFORM_TEX(uv, _Outline_CustomNormalMap),0.0,0)) * 2 - 1); + float3 _BakedNormalDir = normalize(mul(_BakedNormal_var.rgb, tangentTransform)); - o.pos = TransformObjectToHClip(newPos); - o.uv0 = v.texcoord0; + float Set_Outline_Width = (_OutlineWidth*0.001*smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) )*_Outline_Sampler_var.rgb).r; + float4 _ClipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); + _OutlineOffsetZ = _OutlineOffsetZ * -0.01; -// const float2 uv = v.texcoord0; -// o.uv0 = v.texcoord0; -// -// float4 objPos = mul (GetObjectToWorldMatrix(), float4(0,0,0,1) ); -// float4 _Outline_Sampler_var = tex2Dlod(sampler_OutlineTex,float4(TRANSFORM_TEX(uv, _OutlineTex),0.0,0)); -// o.normalDir = UnityObjectToWorldNormal(v.normal); -// o.tangentDir = normalize( mul( GetObjectToWorldMatrix(), float4( v.tangent.xyz, 0.0 ) ).xyz ); -// o.bitangentDir = normalize(cross(o.normalDir, o.tangentDir) * v.tangent.w); -// float3x3 tangentTransform = float3x3( o.tangentDir, o.bitangentDir, o.normalDir); -// -// //UnpackNormal() can't be used, and so as follows. Do not specify a bump for the texture to be used. -// float4 _BakedNormal_var = (tex2Dlod(sampler_Outline_CustomNormalMap,float4(TRANSFORM_TEX(uv, _Outline_CustomNormalMap),0.0,0)) * 2 - 1); -// float3 _BakedNormalDir = normalize(mul(_BakedNormal_var.rgb, tangentTransform)); -// -// float Set_Outline_Width = (_OutlineWidth*0.001*smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) )*_Outline_Sampler_var.rgb).r; -// float4 _ClipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); -// _OutlineOffsetZ = _OutlineOffsetZ * -0.01; -// -// #ifdef _OUTLINE_NML -// o.pos = UnityObjectToClipPos(lerp(float4(v.vertex.xyz + v.normal*Set_Outline_Width,1), float4(v.vertex.xyz + _BakedNormalDir*Set_Outline_Width,1),_Outline_UseCustomNormalMap)); -// #elif _OUTLINE_POS -// Set_Outline_Width = Set_Outline_Width*2; -// float signVar = dot(normalize(v.vertex.xyz),normalize(v.normal))<0 ? -1 : 1; -// o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signVar*normalize(v.vertex)*Set_Outline_Width, 1)); -// #endif -// o.pos.z = o.pos.z + _OutlineOffsetZ * _ClipCameraPos.z; + float3 newPos; +#ifdef _OUTLINE_NML + newPos = lerp(float4(v.vertex.xyz + v.normal*Set_Outline_Width,1), float4(v.vertex.xyz + _BakedNormalDir*Set_Outline_Width,1),_Outline_UseCustomNormalMap); + o.pos = TransformObjectToHClip(newPos); +#elif _OUTLINE_POS + Set_Outline_Width = Set_Outline_Width*2; + float signVar = dot(normalize(v.vertex.xyz),normalize(v.normal))<0 ? -1 : 1; + o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signVar*normalize(v.vertex)*Set_Outline_Width, 1)); +#endif + o.pos.z = o.pos.z + _OutlineOffsetZ * _ClipCameraPos.z; + return o; } From 93f96acb8f342dae02662be20aab6377547b1cad Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 18:38:56 +0900 Subject: [PATCH 214/290] add more functions --- .../Assets/Shaders/Toon2D.shader | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 53aa89aa2..45bc07065 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -424,6 +424,51 @@ inline float4 UnityObjectToClipPosInstanced(in float3 pos) { #define UnityObjectToClipPos UnityObjectToClipPosInstanced + // normal should be normalized, w=1.0 + half3 SHEvalLinearL0L1(half4 normal) + { + half3 x; + + // Linear (L1) + constant (L0) polynomial terms + x.r = dot(unity_SHAr, normal); + x.g = dot(unity_SHAg, normal); + x.b = dot(unity_SHAb, normal); + + return x; + } + + // normal should be normalized, w=1.0 + half3 SHEvalLinearL2(half4 normal) + { + half3 x1, x2; + // 4 of the quadratic (L2) polynomials + half4 vB = normal.xyzz * normal.yzzx; + x1.r = dot(unity_SHBr, vB); + x1.g = dot(unity_SHBg, vB); + x1.b = dot(unity_SHBb, vB); + + // Final (5th) quadratic (L2) polynomial + half vC = normal.x * normal.x - normal.y * normal.y; + x2 = unity_SHC.rgb * vC; + + return x1 + x2; + } + + half3 ShadeSH9(half4 normal) + { + // Linear + constant polynomial terms + half3 res = SHEvalLinearL0L1(normal); + + // Quadratic polynomials + res += SHEvalLinearL2(normal); + + # ifdef UNITY_COLORSPACE_GAMMA + res = LinearToGammaSpace(res); + # endif + + return res; + } + inline float3 UnityObjectToWorldNormal(in float3 norm) { From b71d59571ea93ff0f0d65b4f3b7568e02a1d1234 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 18:39:46 +0900 Subject: [PATCH 215/290] start outputing fragment color for outline --- .../Assets/Shaders/Toon2D.shader | 56 ++++++++++++++++--- 1 file changed, 48 insertions(+), 8 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 45bc07065..e7781bda5 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -27,10 +27,10 @@ Shader "Toon2D"{ //Outline _OutlineMode("Outline Mode", Integer) = 0 - _OutlineWidth ("Outline Width", Float ) = 0 + _OutlineWidth ("Outline Width", Float ) = 5 _OutlineWidthMap ("Outline Width Map", 2D) = "white" {} _OutlineColor ("Outline Color", Color) = (0,0,0,1) - _OutlineTex ("Outline Tex", 2D) = "black" {} + _OutlineTex ("Outline Tex", 2D) = "white" {} _Outline_BlendBaseColor ("Blend Base Color to Outline", Integer ) = 0 _OutlineOffsetZ ("Outline Z Offset", Float) = 0 _OutlineNear ("Outline Near", Float ) = 0.5 @@ -397,6 +397,10 @@ Shader "Toon2D"{ #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" float _OutlineExtrusion; + TEXTURE2D(_MainTex); + SAMPLER(sampler_MainTex); + float4 _MainTex_ST; + TEXTURE2D(_OutlineTex); SAMPLER(sampler_OutlineTex); float4 _OutlineTex_ST; @@ -406,11 +410,17 @@ Shader "Toon2D"{ float4 _Outline_CustomNormalMap_ST; int _Outline_UseCustomNormalMap; - float _OutlineOffsetZ; - float _OutlineWidth; - float _OutlineNear; - float _OutlineFar; - + CBUFFER_START(UnityPerMaterial) + half4 _BaseColor; + float _OutlineOffsetZ; + float _OutlineWidth; + float _OutlineNear; + float _OutlineFar; + float4 _OutlineColor; + int _Outline_BlendBaseColor; + + CBUFFER_END + // #ifdef UNIVERSAL_PIPELINE_CORE_INCLUDED // #include "../../UniversalRP/Shaders/UniversalToonInput.hlsl" // #include "../../UniversalRP/Shaders/UniversalToonHead.hlsl" @@ -520,9 +530,39 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) - half4 OutlineFragment(OutlineVertexOutput input) : SV_Target { + half4 OutlineFragment(OutlineVertexOutput i) : SV_Target { + //find lightColor + //half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); + //lightColor = lerp(half3(1.0,1.0,1.0), lightColor, _Is_LightColor_Outline); + + float3 lightColor = float3(0,0,0); + + + const float2 Set_UV0 = i.uv0; + float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); + float3 Set_BaseColor = _BaseColor.rgb*_MainTex_var.rgb; + float3 _Is_BlendBaseColor_var = lerp( _OutlineColor.rgb*lightColor, (_OutlineColor.rgb*Set_BaseColor*Set_BaseColor*lightColor), _Outline_BlendBaseColor ); + // + float3 _OutlineTex_var = tex2D(sampler_OutlineTex,TRANSFORM_TEX(Set_UV0, _OutlineTex)).rgb; + +#ifdef _IS_OUTLINE_CLIPPING_NO + float3 Set_Outline_Color = _OutlineTex_var.rgb * _OutlineColor.rgb * lightColor; + return float4(Set_Outline_Color,1.0); +#elif _IS_OUTLINE_CLIPPING_YES + float4 _ClippingMask_var = SAMPLE_TEXTURE2D(_ClippingMask, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); + float Set_MainTexAlpha = _MainTex_var.a; + float _IsBaseMapAlphaAsClippingMask_var = lerp( _ClippingMask_var.r, Set_MainTexAlpha, _IsBaseMapAlphaAsClippingMask ); + float _Inverse_Clipping_var = lerp( _IsBaseMapAlphaAsClippingMask_var, (1.0 - _IsBaseMapAlphaAsClippingMask_var), _Inverse_Clipping ); + float Set_Clipping = saturate((_Inverse_Clipping_var+_Clipping_Level)); + clip(Set_Clipping - 0.5); + float4 Set_Outline_Color = lerp( float4(_Is_BlendBaseColor_var,Set_Clipping), float4((_OutlineTex_var.rgb*_Outline_Color.rgb*lightColor),Set_Clipping), _Is_OutlineTex ); + return Set_Outline_Color; +#endif + + + #if (UNITY_VERSION >= 202230) return float4(0,1,1,1); #else From eb35960d0ffd4347eabb501897793e10b0983707 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 19:13:56 +0900 Subject: [PATCH 216/290] Can sample shapeLight in the outline pass --- .../Assets/Shaders/Toon2D.shader | 53 +++++++++++++------ 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index e7781bda5..e7052d478 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -191,9 +191,6 @@ Shader "Toon2D"{ discard; - //return float4(Set_BaseColor,1); - - #if USE_SHAPE_LIGHT_TYPE_0 half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); @@ -204,7 +201,6 @@ Shader "Toon2D"{ shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); } - float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); float3 baseColor = surfaceData.albedo.rgb; @@ -378,28 +374,29 @@ Shader "Toon2D"{ // #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" - struct OutlineVertexInput { + struct OutlineVertexInput { float4 vertex : POSITION; float3 normal : NORMAL; float4 tangent : TANGENT; float2 texcoord0 : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID - }; + }; struct OutlineVertexOutput { float4 pos : SV_POSITION; float2 uv0 : TEXCOORD0; - float3 normalDir : TEXCOORD1; + half2 lightingUV : TEXCOORD1; UNITY_VERTEX_OUTPUT_STEREO }; - - #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" - float _OutlineExtrusion; TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex); float4 _MainTex_ST; + + TEXTURE2D(_MaskTex); + SAMPLER(sampler_MaskTex); TEXTURE2D(_OutlineTex); SAMPLER(sampler_OutlineTex); @@ -524,25 +521,51 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signVar*normalize(v.vertex)*Set_Outline_Width, 1)); #endif o.pos.z = o.pos.z + _OutlineOffsetZ * _ClipCameraPos.z; + + o.lightingUV = half2(ComputeScreenPos(o.pos / o.pos.w).xy); + return o; } - + //SHAPE_LIGHT macros + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" + half4 OutlineFragment(OutlineVertexOutput i) : SV_Target { //find lightColor - //half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); - //lightColor = lerp(half3(1.0,1.0,1.0), lightColor, _Is_LightColor_Outline); - - float3 lightColor = float3(0,0,0); + InputData2D inputData; + + InitializeInputData(i.uv0, i.lightingUV, inputData); + + half4 shapeLight0 = half4(0,0,0,0); + + const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, i.uv0); + const half2 lightingUV = inputData.lightingUV; + + #if USE_SHAPE_LIGHT_TYPE_0 + shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); + if (any(_ShapeLightMaskFilter0)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter0) * mask + _ShapeLightInvertedFilter0 * (1 - + mask); + shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); + } + #endif + + float3 lightColor = shapeLight0.rgb; const float2 Set_UV0 = i.uv0; float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); float3 Set_BaseColor = _BaseColor.rgb*_MainTex_var.rgb; + + //blend base color + //blend lightColor + float3 _Is_BlendBaseColor_var = lerp( _OutlineColor.rgb*lightColor, (_OutlineColor.rgb*Set_BaseColor*Set_BaseColor*lightColor), _Outline_BlendBaseColor ); // float3 _OutlineTex_var = tex2D(sampler_OutlineTex,TRANSFORM_TEX(Set_UV0, _OutlineTex)).rgb; From 876fedf33f04a9f2adb40bea2c7e82a0438d69dc Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 19:14:09 +0900 Subject: [PATCH 217/290] optimize --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index e7052d478..d346907df 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -497,11 +497,11 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) float4 objPos = mul (GetObjectToWorldMatrix(), float4(0,0,0,1) ); float4 _Outline_Sampler_var = tex2Dlod(sampler_OutlineTex,float4(TRANSFORM_TEX(uv, _OutlineTex),0.0,0)); - o.normalDir = UnityObjectToWorldNormal(v.normal); + const float3 normalDir = UnityObjectToWorldNormal(v.normal); const float3 tangentDir = normalize( mul( GetObjectToWorldMatrix(), float4( v.tangent.xyz, 0.0 ) ).xyz ); - const float3 bitangentDir = normalize(cross(o.normalDir, tangentDir) * v.tangent.w); - float3x3 tangentTransform = float3x3(tangentDir, bitangentDir, o.normalDir); + const float3 bitangentDir = normalize(cross(normalDir, tangentDir) * v.tangent.w); + float3x3 tangentTransform = float3x3(tangentDir, bitangentDir, normalDir); //UnpackNormal() can't be used, and so as follows. Do not specify a bump for the texture to be used. float4 _BakedNormal_var = (tex2Dlod(sampler_Outline_CustomNormalMap,float4(TRANSFORM_TEX(uv, _Outline_CustomNormalMap),0.0,0)) * 2 - 1); From 19c43d759339a1ad5c6a990fa10018af6dbadd14 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 19:35:04 +0900 Subject: [PATCH 218/290] blend baseColor and lightColor to outline --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 13 +++++++-- .../Assets/Shaders/Toon2D.shader | 29 +++++++++---------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 7cc43802a..87537d557 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -117,7 +117,8 @@ static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary Date: Wed, 19 Nov 2025 19:41:33 +0900 Subject: [PATCH 219/290] use range for blending outline --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 4 ++-- .../Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs | 5 +++++ Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 5 ++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 87537d557..52d507831 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -117,8 +117,8 @@ static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary Date: Wed, 19 Nov 2025 19:47:25 +0900 Subject: [PATCH 220/290] remove unused functions --- .../Assets/Shaders/Toon2D.shader | 108 +----------------- 1 file changed, 5 insertions(+), 103 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 7f78dc66c..60a020768 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -120,58 +120,6 @@ Shader "Toon2D"{ return CommonLitVertex(input); } -//---------------------------------------------------------------------------------------------------------------------- - - // normal should be normalized, w=1.0 - half3 SHEvalLinearL0L1(half4 normal) - { - half3 x; - - // Linear (L1) + constant (L0) polynomial terms - x.r = dot(unity_SHAr, normal); - x.g = dot(unity_SHAg, normal); - x.b = dot(unity_SHAb, normal); - - return x; - } - - // normal should be normalized, w=1.0 - half3 SHEvalLinearL2(half4 normal) - { - half3 x1, x2; - // 4 of the quadratic (L2) polynomials - half4 vB = normal.xyzz * normal.yzzx; - x1.r = dot(unity_SHBr, vB); - x1.g = dot(unity_SHBg, vB); - x1.b = dot(unity_SHBb, vB); - - // Final (5th) quadratic (L2) polynomial - half vC = normal.x * normal.x - normal.y * normal.y; - x2 = unity_SHC.rgb * vC; - - return x1 + x2; - } - - - // normal should be normalized, w=1.0 - // output in active color space - half3 ShadeSH9(half4 normal) - { - // Linear + constant polynomial terms - half3 res = SHEvalLinearL0L1(normal); - - // Quadratic polynomials - res += SHEvalLinearL2(normal); - - # ifdef UNITY_COLORSPACE_GAMMA - res = LinearToGammaSpace(res); - # endif - - return res; - } - - -//---------------------------------------------------------------------------------------------------------------------- half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv) { @@ -297,13 +245,13 @@ Shader "Toon2D"{ float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); float2 Set_UV0 = input.uv; float3 mainLightColor = float3(1, 1, 1); - + float3 defaultLightColor = float3(1, 1, 1); // //v.2.0.5 - float3 defaultLightColor = saturate(max(half3(0.05, 0.05, 0.05) * _Unlit_Intensity, - max(ShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), - ShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * - _Unlit_Intensity)); + // float3 defaultLightColor = saturate(max(half3(0.05, 0.05, 0.05) * _Unlit_Intensity, + // max(ShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), + // ShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * + // _Unlit_Intensity)); // float3 customLightDirection = normalize(mul( GetObjectToWorldMatrix(), float4(((float3(1.0,0.0,0.0)*_Offset_X_Axis_BLD*10)+(float3(0.0,1.0,0.0)*_Offset_Y_Axis_BLD*10)+(float3(0.0,0.0,-1.0)*lerp(-1.0,1.0,_Inverse_Z_Axis_BLD))),0)).xyz); // float3 lightDirection = normalize(lerp(defaultLightDirection, mainLight.direction.xyz,any(mainLight.direction.xyz))); // lightDirection = lerp(lightDirection, customLightDirection, _Is_BLD); @@ -432,52 +380,6 @@ inline float4 UnityObjectToClipPosInstanced(in float3 pos) { } #define UnityObjectToClipPos UnityObjectToClipPosInstanced - - // normal should be normalized, w=1.0 - half3 SHEvalLinearL0L1(half4 normal) - { - half3 x; - - // Linear (L1) + constant (L0) polynomial terms - x.r = dot(unity_SHAr, normal); - x.g = dot(unity_SHAg, normal); - x.b = dot(unity_SHAb, normal); - - return x; - } - - // normal should be normalized, w=1.0 - half3 SHEvalLinearL2(half4 normal) - { - half3 x1, x2; - // 4 of the quadratic (L2) polynomials - half4 vB = normal.xyzz * normal.yzzx; - x1.r = dot(unity_SHBr, vB); - x1.g = dot(unity_SHBg, vB); - x1.b = dot(unity_SHBb, vB); - - // Final (5th) quadratic (L2) polynomial - half vC = normal.x * normal.x - normal.y * normal.y; - x2 = unity_SHC.rgb * vC; - - return x1 + x2; - } - - half3 ShadeSH9(half4 normal) - { - // Linear + constant polynomial terms - half3 res = SHEvalLinearL0L1(normal); - - // Quadratic polynomials - res += SHEvalLinearL2(normal); - - # ifdef UNITY_COLORSPACE_GAMMA - res = LinearToGammaSpace(res); - # endif - - return res; - } - inline float3 UnityObjectToWorldNormal(in float3 norm) { From a2d0f67a12475e1fc3d6ec4c964b62886f0ca720 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 20:59:02 +0900 Subject: [PATCH 221/290] default normalmap to true --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 52d507831..d0628cadd 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -41,7 +41,7 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { void RefreshFoldouts(Material mat) { - m_normalMapFoldout = false; + m_normalMapFoldout = true; m_outlineFoldout = mat.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); m_specularFoldout = false; } From 1ff442160f1bd92e9d85e1c4d55f329719f84d1b Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 22:19:30 +0900 Subject: [PATCH 222/290] pass TBN matrix --- .../Assets/Shaders/Toon2D.shader | 73 ++++++++++++++++--- 1 file changed, 63 insertions(+), 10 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 60a020768..3e8866fbb 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -1,4 +1,4 @@ -Shader "Toon2D"{ +Shader "Toon3Das2D"{ Properties{ _BaseColor ("BaseColor", Color) = (1,1,1,1) _MainTex ("BaseMap", 2D) = "white" {} @@ -82,11 +82,20 @@ Shader "Toon2D"{ #pragma multi_compile _ DEBUG_DISPLAY struct Attributes { - COMMON_2D_INPUTS + float3 positionOS : POSITION; + float2 uv : TEXCOORD0; + float3 normal : NORMAL; + float4 tangent : TANGENT; + UNITY_VERTEX_INPUT_INSTANCE_ID }; struct Varyings { - COMMON_2D_LIT_OUTPUTS + float4 positionCS : SV_POSITION; + float2 uv : TEXCOORD0; + half2 lightingUV : TEXCOORD1; + float3 normalWS : TEXCOORD2; + float4 tangentWS : TEXCOORD3; + UNITY_VERTEX_OUTPUT_STEREO }; float4 _White; @@ -95,7 +104,7 @@ Shader "Toon2D"{ CBUFFER_START(UnityPerMaterial) half4 _BaseColor; - float _Unlit_Intensity; + float _BumpScale; int _Use_BaseAs1st; int _Use_1stAs2nd; @@ -116,12 +125,42 @@ Shader "Toon2D"{ TEXTURE2D(_1st_ShadeMap); TEXTURE2D(_2nd_ShadeMap); +inline float3 UnityObjectToWorldNormal(in float3 norm) +{ +#ifdef UNITY_ASSUME_UNIFORM_SCALING + return UnityObjectToWorldDir(norm); +#else + // mul(IT_M, norm) => mul(norm, I_M) => {dot(norm, I_M.col0), dot(norm, I_M.col1), dot(norm, I_M.col2)} + return normalize(mul(norm, (float3x3)GetWorldToObjectMatrix())); +#endif +} + Varyings LitVertex(Attributes input) { - return CommonLitVertex(input); + + Varyings o = (Varyings) 0; + UNITY_SETUP_INSTANCE_ID(input); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + o.positionCS = TransformObjectToHClip(input.positionOS); + const float3 normalWS = TransformObjectToWorldDir(input.normal); + + #if defined(DEBUG_DISPLAY) + o.positionWS = TransformObjectToWorld(input.positionOS); + o.normalWS = normalWS; + #endif + o.uv = input.uv; + o.lightingUV = half2(ComputeScreenPos(o.positionCS / o.positionCS.w).xy); + o.normalWS = normalWS; + + const float3 tangentWS = normalize( mul( GetObjectToWorldMatrix(), float4( input.tangent.xyz, 0 ) ).xyz); + o.tangentWS = float4(tangentWS, input.tangent.w); + + return o; } - half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv) + half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv, + in float3 tangentWS, in float3 bitangentWS, in float3 normalWS) { #if defined(DEBUG_DISPLAY) half4 debugColor = 0; @@ -139,6 +178,11 @@ Shader "Toon2D"{ if (alpha == 0.0) discard; + float3x3 tangentTransform = float3x3( tangentWS, bitangentWS, normalWS); + const float3 normalTS = surfaceData.normalTS; + float3 perturbedNormalWS = normalize(mul( normalTS, tangentTransform )); // Perturbed normals + return float4(perturbedNormalWS,1); + #if USE_SHAPE_LIGHT_TYPE_0 half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); @@ -149,7 +193,8 @@ Shader "Toon2D"{ mask); shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); } - + + float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); float3 baseColor = surfaceData.albedo.rgb; @@ -166,6 +211,8 @@ Shader "Toon2D"{ float _HalfLambert_var = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + + //float _HalfLambert_var = 0.5*dot(lerp( i.normalDir, normalDirection, _Is_NormalMapToBase ),lightDirection)+0.5; // // float4 _Set_2nd_ShadePosition_var = tex2D(_Set_2nd_ShadePosition, TRANSFORM_TEX(uv, _Set_2nd_ShadePosition)); @@ -222,11 +269,16 @@ Shader "Toon2D"{ { const half4 main = color * SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv); const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.uv); - const half3 normalTS = UnpackNormal(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.uv)); + const half3 normalTS = UnpackNormalScale(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.uv), _BumpScale); + SurfaceData2D surfaceData; InputData2D inputData; + const float3 normalWS = normalize(input.normalWS); + const float3 tangentWS = normalize(input.tangentWS); + const float3 bitangentWS = normalize(cross(normalWS, tangentWS) * input.tangentWS.w); + InitializeSurfaceData(main.rgb, main.a, mask, normalTS, surfaceData); InitializeInputData(input.uv, input.lightingUV, inputData); @@ -235,12 +287,13 @@ Shader "Toon2D"{ surfaceData.normalWS = input.normalWS; #endif - return CombinedShapeLightShared2(surfaceData, inputData, input.uv); + return CombinedShapeLightShared2(surfaceData, inputData, input.uv, + normalWS, tangentWS, bitangentWS); } //---------------------------------------------------------------------------------------------------------------------- - half4 LitFragment(Varyings input) : SV_Target + float4 LitFragment(Varyings input) : SV_Target { float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); float2 Set_UV0 = input.uv; From 489693aeb6471727d03ae6720da2541cd0bc74af Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 22:36:38 +0900 Subject: [PATCH 223/290] update ToonEditorGUIUtility --- .../Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs index 579da969a..07f3c630a 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs @@ -51,6 +51,12 @@ internal static void DrawColorFieldGUI(MaterialEditor mEditor, MaterialPropertyU mEditor.ColorProperty(element.mainProperty.prop, element.label.text); } + internal static bool DrawVector3FieldGUI(MaterialEditor mEditor, Material[] mats, + MaterialPropertyUIElement element) + { + return DrawVector3FieldGUI(mEditor, mats, element, out Vector3 _); + } + //return true if changed, false otherwise internal static bool DrawVector3FieldGUI(MaterialEditor mEditor, Material[] mats, MaterialPropertyUIElement element, out Vector3 newValue) From 614f7d6156b70cddd707a5f30b4f8b07611101ef Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 22:37:32 +0900 Subject: [PATCH 224/290] Pass Directional Light instead of Specular --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 65 ++++++++++++------- .../Assets/Shaders/Toon2D.shader | 17 ++--- 2 files changed, 52 insertions(+), 30 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index d0628cadd..2fa5488bb 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -29,7 +29,7 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { DrawNormalMapGUI(mEditor, m_materialPropertyUIElements, ref m_normalMapFoldout); DrawOutlineGUI(mEditor, mats, m_materialPropertyUIElements, ref m_outlineFoldout); - DrawSpecularGUI(mEditor, mats, m_materialPropertyUIElements, ref m_specularFoldout); + DrawDirectionalLightGUI(mEditor, mats, m_materialPropertyUIElements, ref m_specularFoldout); if (EditorGUI.EndChangeCheck()) { @@ -175,19 +175,22 @@ static void DrawThreeColorsGUI(MaterialEditor mEditor, Material[] mats, } } - static void DrawSpecularGUI(MaterialEditor mEditor, Material[] mats, + static void DrawDirectionalLightGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements, ref bool foldout) { - ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, mats, uiElements[ShaderPropUnlit_Specular_UseDirectionalLight], + ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, mats, uiElements[ShaderPropUnlit_DirectionalLight_Use], ref foldout); if (!foldout) return; - ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[ShaderPropUnlit_Specular_Color]); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_Specular_Intensity]); - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[ShaderPropUnlit_Specular_LightDirection], out Vector3 _); + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[ShaderPropUnlit_DirectionalLight_Direction]); + ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_Color]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_Intensity]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_2DLightFactor]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_DiffuseFactor]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_SpecularFactor]); } //---------------------------------------------------------------------------------------------------------------------- @@ -331,24 +334,39 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty //Custom Directional Light new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_Specular_UseDirectionalLight), - label = new GUIContent("Specular", - "Applies specular color by using a custom directional light."), + mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_Use), + label = new GUIContent("Custom Directional Light", + "Apply a custom directional light."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_Specular_Color), - label = new GUIContent("Specular Color", - "The specular color. "), + mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_Direction), + label = new GUIContent("Light Direction", + "The direction of the custom directional light. "), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_Specular_Intensity), - label = new GUIContent("Specular Intensity", - "The specular intensity. "), + mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_Color), + label = new GUIContent("Light Color", + "The color of the custom directional light. "), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_Specular_LightDirection), - label = new GUIContent("Light Direction", - "The direction of the light for specular. "), + mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_Intensity), + label = new GUIContent("Light Intensity", + "The intensity of the custom directional light. "), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_2DLightFactor), + label = new GUIContent("2D Light Factor", + "Multiplier for the 2D light contribution."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_DiffuseFactor), + label = new GUIContent("Diffuse Factor", + "Multiplier for the diffuse lighting contribution."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_SpecularFactor), + label = new GUIContent("Specular Factor", + "Multiplier for the specular lighting contribution."), }, }; @@ -380,10 +398,13 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string ShaderProp_Outline_UseCustomNormalMap = "_Outline_UseCustomNormalMap"; internal const string ShaderProp_Outline_CustomNormalMap = "_Outline_CustomNormalMap"; - internal const string ShaderPropUnlit_Specular_UseDirectionalLight = "_Specular_UseDirectionalLight"; - internal const string ShaderPropUnlit_Specular_Color = "_Specular_Color"; - internal const string ShaderPropUnlit_Specular_Intensity = "_Specular_Intensity"; - internal const string ShaderPropUnlit_Specular_LightDirection = "_Specular_LightDirection"; + internal const string ShaderPropUnlit_DirectionalLight_Use = "_DirectionalLight_Use"; + internal const string ShaderPropUnlit_DirectionalLight_Direction = "_DirectionalLight_Direction"; + internal const string ShaderPropUnlit_DirectionalLight_Color = "_DirectionalLight_Color"; + internal const string ShaderPropUnlit_DirectionalLight_Intensity = "_DirectionalLight_Intensity"; + internal const string ShaderPropUnlit_DirectionalLight_2DLightFactor = "_DirectionalLight_2DLightFactor"; + internal const string ShaderPropUnlit_DirectionalLight_DiffuseFactor = "_DirectionalLight_DiffuseFactor"; + internal const string ShaderPropUnlit_DirectionalLight_SpecularFactor = "_DirectionalLight_SpecularFactor"; //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 3e8866fbb..546f2f3da 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -38,15 +38,16 @@ Shader "Toon3Das2D"{ _OutlineFar ("Outline Far", Float ) = 100 _Outline_UseCustomNormalMap ("Use Custom Normal Map", Integer ) = 0 _Outline_CustomNormalMap ("Custom Normal Map", 2D) = "white" {} - - //Specular - _Specular_UseDirectionalLight ("Specular Intensity", Integer) = 0 - _Specular_Color ("Specular Color", Color) = (1,1,1,1) - _Specular_Intensity ("Specular Intensity", float) = 0 - _Specular_LightDirection ("Specular Light Direction", Vector) = (0,-1,0,0) - //Test - _OutlineExtrusion("Outline Extrusion", float) = 0.02 + //Directional Light + _DirectionalLight_Use ("Use Directional Light", Integer) = 0 + _DirectionalLight_Direction ("Specular Light Direction", Vector) = (0,-1,0,0) + _DirectionalLight_Color("Directional Light Color", Color) = (1,1,1,1) + _DirectionalLight_Intensity ("Directional Light Intensity", float) = 0.5 + _DirectionalLight_2DLightFactor ("Directional Light: 2D Light Factor", Range(0,1)) = 1 + _DirectionalLight_DiffuseFactor ("Directional Light: Diffuse Factor", Range(0,1)) = 0.5 + _DirectionalLight_SpecularFactor ("Directional Light: Specular Factor", Range(0,1)) = 0.5 + } SubShader{ From 8dbda03a25574a2f3ddd5f1845ae31747a837cf2 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 19 Nov 2025 22:44:02 +0900 Subject: [PATCH 225/290] refresh foldout for directional light --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 2fa5488bb..45b384c28 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -18,18 +18,18 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { mats[i] = mEditor.targets[i] as Material; } + InitMaterialPropertyUIElements(props); + if (mats[0] != m_lastMaterial) { - RefreshFoldouts(mats[0]); + RefreshFoldouts(mats[0], m_materialPropertyUIElements); } - - InitMaterialPropertyUIElements(props); EditorGUI.BeginChangeCheck(); DrawThreeColorsGUI(mEditor, mats, m_materialPropertyUIElements); DrawNormalMapGUI(mEditor, m_materialPropertyUIElements, ref m_normalMapFoldout); DrawOutlineGUI(mEditor, mats, m_materialPropertyUIElements, ref m_outlineFoldout); - DrawDirectionalLightGUI(mEditor, mats, m_materialPropertyUIElements, ref m_specularFoldout); + DrawDirectionalLightGUI(mEditor, mats, m_materialPropertyUIElements, ref m_directionalLightFoldout); if (EditorGUI.EndChangeCheck()) { @@ -39,11 +39,14 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { m_lastMaterial = mats[0]; } - void RefreshFoldouts(Material mat) { + void RefreshFoldouts(Material mat, Dictionary uiElements) { m_normalMapFoldout = true; m_outlineFoldout = mat.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); - m_specularFoldout = false; + + bool lightEnabled = mat.GetInteger(uiElements[ShaderPropUnlit_DirectionalLight_Use].mainProperty.id) !=0; + m_directionalLightFoldout = lightEnabled; + } //---------------------------------------------------------------------------------------------------------------------- @@ -141,7 +144,6 @@ static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary Date: Thu, 20 Nov 2025 00:48:27 +0900 Subject: [PATCH 226/290] move directional light constants --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 15 ++++++--------- .../Assets/ScriptsDev/Toon3Das2DConstants.cs | 7 +++++++ .../Assets/ScriptsDev/Toon3Das2DConstants.cs.meta | 2 ++ 3 files changed, 15 insertions(+), 9 deletions(-) create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs.meta diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 45b384c28..984d86247 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -186,9 +186,9 @@ static void DrawDirectionalLightGUI(MaterialEditor mEditor, Material[] mats, if (!foldout) return; - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[ShaderPropUnlit_DirectionalLight_Direction]); - ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_Color]); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_Intensity]); + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction]); + ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_2DLightFactor]); ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_DiffuseFactor]); ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_SpecularFactor]); @@ -340,17 +340,17 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "Apply a custom directional light."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_Direction), + mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction), label = new GUIContent("Light Direction", "The direction of the custom directional light. "), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_Color), + mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color), label = new GUIContent("Light Color", "The color of the custom directional light. "), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_Intensity), + mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity), label = new GUIContent("Light Intensity", "The intensity of the custom directional light. "), }, @@ -400,9 +400,6 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string ShaderProp_Outline_CustomNormalMap = "_Outline_CustomNormalMap"; internal const string ShaderPropUnlit_DirectionalLight_Use = "_DirectionalLight_Use"; - internal const string ShaderPropUnlit_DirectionalLight_Direction = "_DirectionalLight_Direction"; - internal const string ShaderPropUnlit_DirectionalLight_Color = "_DirectionalLight_Color"; - internal const string ShaderPropUnlit_DirectionalLight_Intensity = "_DirectionalLight_Intensity"; internal const string ShaderPropUnlit_DirectionalLight_2DLightFactor = "_DirectionalLight_2DLightFactor"; internal const string ShaderPropUnlit_DirectionalLight_DiffuseFactor = "_DirectionalLight_DiffuseFactor"; internal const string ShaderPropUnlit_DirectionalLight_SpecularFactor = "_DirectionalLight_SpecularFactor"; diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs new file mode 100644 index 000000000..9f4d24187 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs @@ -0,0 +1,7 @@ + +public static class Toon3Das2DConstants { + public const string ShaderPropUnlit_DirectionalLight_Direction = "_DirectionalLight_Direction"; + public const string ShaderPropUnlit_DirectionalLight_Color = "_DirectionalLight_Color"; + public const string ShaderPropUnlit_DirectionalLight_Intensity = "_DirectionalLight_Intensity"; + +} \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs.meta new file mode 100644 index 000000000..20776ffa5 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: cd2d32aae3fd8c84699b3bd6812a496b From 56d54a1a356a11a7dc8163da7b4f9b7c657b4dba Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 20 Nov 2025 00:48:43 +0900 Subject: [PATCH 227/290] add ToonDirectionalLightController --- .../ToonDirectionalLightController.cs | 35 +++++++++++++++++++ .../ToonDirectionalLightController.cs.meta | 2 ++ 2 files changed, 37 insertions(+) create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs.meta diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs new file mode 100644 index 000000000..66a075a23 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using UnityEngine; + +[ExecuteAlways] +[RequireComponent(typeof(Light))] +internal class ToonDirectionalLightController : MonoBehaviour { + void OnEnable() { + m_light = GetComponent(); + } + + + void Update() { + if (m_light.type != LightType.Directional) { + return; + } + + Vector3 lightDir = -m_light.transform.forward; + Color lightColor = m_light.color; + float lightIntensity = m_light.intensity; + + foreach (Material mat in m_materials) { + if (mat == null) continue; + mat.SetVector(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction, lightDir); + mat.SetColor(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color, lightColor); + mat.SetFloat(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity, lightIntensity); + } + } + + +//---------------------------------------------------------------------------------------------------------------------- + [SerializeField] private List m_materials = new List(); + +//---------------------------------------------------------------------------------------------------------------------- + Light m_light; +} \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs.meta new file mode 100644 index 000000000..801eab182 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 95eb0866ac8fd424c8dfba8d023d36df \ No newline at end of file From cb889d6a2e1e094911528bfdd5541351fd8ebc76 Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 20 Nov 2025 00:49:54 +0900 Subject: [PATCH 228/290] show the results of directional light calculation --- .../Assets/Shaders/Toon2D.shader | 59 ++++++++++++------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 546f2f3da..32df5a316 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -21,7 +21,6 @@ Shader "Toon3Das2D"{ _NormalMap("Normal Map", 2D) = "bump" {} _BumpScale ("Normal Scale", Range(0, 1)) = 1 - [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching @@ -86,7 +85,7 @@ Shader "Toon3Das2D"{ float3 positionOS : POSITION; float2 uv : TEXCOORD0; float3 normal : NORMAL; - float4 tangent : TANGENT; + float4 tangent : TANGENT; UNITY_VERTEX_INPUT_INSTANCE_ID }; @@ -118,6 +117,14 @@ Shader "Toon3Das2D"{ float _ShadeColor_Step; float _1st2nd_Shades_Feather; + + float3 _DirectionalLight_Direction; + float4 _DirectionalLight_Color; + float _DirectionalLight_Intensity; + float _DirectionalLight_2DLightFactor; + float _DirectionalLight_DiffuseFactor; + float _DirectionalLight_SpecularFactor; + CBUFFER_END //---------------------------------------------------------------------------------------------------------------------- @@ -182,8 +189,6 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) float3x3 tangentTransform = float3x3( tangentWS, bitangentWS, normalWS); const float3 normalTS = surfaceData.normalTS; float3 perturbedNormalWS = normalize(mul( normalTS, tangentTransform )); // Perturbed normals - return float4(perturbedNormalWS,1); - #if USE_SHAPE_LIGHT_TYPE_0 half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); @@ -203,35 +208,37 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) float4 _1st_ShadeMap_var = lerp( SAMPLE_TEXTURE2D(_1st_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _MainTex_var, _Use_BaseAs1st); - float3 firstShadeColor = _1st_ShadeColor.rgb * _1st_ShadeMap_var.rgb; + float3 firstShadeColor = _1st_ShadeColor.rgb * _1st_ShadeMap_var.rgb * shapeLight0.rgb; float4 _2nd_ShadeMap_var = lerp( SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _1st_ShadeMap_var, _Use_1stAs2nd); - float3 secondShadeColor = _2nd_ShadeColor.rgb * _2nd_ShadeMap_var.rgb; + float3 secondShadeColor = _2nd_ShadeColor.rgb * _2nd_ShadeMap_var.rgb * shapeLight0.rgb; - float _HalfLambert_var = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + const float light2d_intensity = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + //float _HalfLambert_var = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + + float _HalfLambert_var = 0.5 * dot( perturbedNormalWS, _DirectionalLight_Direction) + 0.5; + + //return float4(_DirectionalLight_Direction.rgb,1); + float t = _HalfLambert_var; + + //float _HalfLambert_var = 0.5*dot(lerp( i.normalDir, normalDirection, _Is_NormalMapToBase ),lightDirection)+0.5; // - // float4 _Set_2nd_ShadePosition_var = tex2D(_Set_2nd_ShadePosition, TRANSFORM_TEX(uv, _Set_2nd_ShadePosition)); - // float4 _Set_1st_ShadePosition_var = tex2D(_Set_1st_ShadePosition, TRANSFORM_TEX(uv, _Set_1st_ShadePosition)); - // //v.2.0.6 // //Minmimum value is same as the Minimum Feather's value with the Minimum Step's value as threshold. - // float _SystemShadowsLevel_var = (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel > 0.001 ? (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel : 0.0001; - // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var*saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); + // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var * saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step - _BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); // // // //Composition: 3 Basic Colors as Set_FinalBaseColor - float4 _Set_1st_ShadePosition_var = float4(1, 1, 1, 1); - float4 _Set_2nd_ShadePosition_var = float4(1, 1, 1, 1); + float4 _Set_1st_ShadePosition_var = float4(1, 1, 1, 1); //used in DoubleShadeWithFeather, default: white + float4 _Set_2nd_ShadePosition_var = float4(1, 1, 1, 1); //used in DoubleShadeWithFeather, default: white - float _SystemShadowsLevel_var = 0.5f; - float _Set_SystemShadowsToBase = 1.0f; - float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var*saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); + float Set_FinalShadowMask = saturate((1.0 + ( ( _HalfLambert_var - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); float innerLerpOp = saturate((1.0 + ((_HalfLambert_var - (_ShadeColor_Step - _1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / ( _ShadeColor_Step - ( _ShadeColor_Step - _1st2nd_Shades_Feather)))); @@ -240,10 +247,22 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) innerLerpOp), Set_FinalShadowMask); - //test - //Set_FinalBaseColor = firstShadeColor; + // float4 _Set_HighColorMask_var = tex2D(_Set_HighColorMask, TRANSFORM_TEX(Set_UV0, _Set_HighColorMask)); + // + // float _Specular_var = 0.5*dot(halfDirection,lerp( i.normalDir, normalDirection, _Is_NormalMapToHighColor ))+0.5; // Specular + // float _TweakHighColorMask_var = (saturate((_Set_HighColorMask_var.g+_Tweak_HighColorMaskLevel))*lerp( (1.0 - step(_Specular_var,(1.0 - pow(abs(_HighColor_Power),5)))), pow(abs(_Specular_var),exp2(lerp(11,1,_HighColor_Power))), _Is_SpecularToHighColor )); + // + // float4 _HighColor_Tex_var = tex2D(_HighColor_Tex, TRANSFORM_TEX(Set_UV0, _HighColor_Tex)); + // + // float3 _HighColor_var = (lerp( (_HighColor_Tex_var.rgb*_HighColor.rgb), ((_HighColor_Tex_var.rgb*_HighColor.rgb)*Set_LightColor), _Is_LightColor_HighColor )*_TweakHighColorMask_var); + // //Composition: 3 Basic Colors and HighColor as Set_HighColor + // float3 Set_HighColor = (lerp(SATURATE_IF_SDR((Set_FinalBaseColor-_TweakHighColorMask_var)), Set_FinalBaseColor, lerp(_Is_BlendAddToHiColor,1.0,_Is_SpecularToHighColor) )+lerp( _HighColor_var, (_HighColor_var*((1.0 - Set_FinalShadowMask)+(Set_FinalShadowMask*_TweakHighColorOnShadow))), _Is_UseTweakHighColorOnShadow )); + + + Set_FinalBaseColor = Set_FinalBaseColor * _ShapeLightBlendFactors0.x; - Set_FinalBaseColor = Set_FinalBaseColor * shapeLight0 * _ShapeLightBlendFactors0.x; + + half4 shapeLight0Modulate = half4(Set_FinalBaseColor, alpha); half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; From 21a60f16f5a54a812b67c8dc6638e5ad10e839b2 Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 20 Nov 2025 00:50:15 +0900 Subject: [PATCH 229/290] fix parameter passing (tangent) --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 32df5a316..61fd851e2 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -308,7 +308,7 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) #endif return CombinedShapeLightShared2(surfaceData, inputData, input.uv, - normalWS, tangentWS, bitangentWS); + tangentWS, bitangentWS, normalWS); } From 35d5ad61f0d2fce97cd7edfd30164fd4ccb28182 Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 20 Nov 2025 01:13:06 +0900 Subject: [PATCH 230/290] use range property --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 984d86247..6b2fc777a 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -189,9 +189,9 @@ static void DrawDirectionalLightGUI(MaterialEditor mEditor, Material[] mats, ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction]); ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_2DLightFactor]); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_DiffuseFactor]); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_SpecularFactor]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_2DLightFactor]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_DiffuseFactor]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_SpecularFactor]); } //---------------------------------------------------------------------------------------------------------------------- From bcba6ce19238ab19ce6e92e4716497888a034f91 Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 20 Nov 2025 01:13:44 +0900 Subject: [PATCH 231/290] combine 2d light with directional light --- .../Assets/Shaders/Toon2D.shader | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 61fd851e2..61a7993cf 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -199,36 +199,33 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) mask); shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); } - + + const float3 diffuseLightFactor = (shapeLight0.rgb * _DirectionalLight_2DLightFactor) + + (_DirectionalLight_Color * _DirectionalLight_DiffuseFactor); float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); - float3 baseColor = surfaceData.albedo.rgb; + float3 baseColor = surfaceData.albedo.rgb * diffuseLightFactor; // //v.2.0.5 float4 _1st_ShadeMap_var = lerp( SAMPLE_TEXTURE2D(_1st_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _MainTex_var, _Use_BaseAs1st); - float3 firstShadeColor = _1st_ShadeColor.rgb * _1st_ShadeMap_var.rgb * shapeLight0.rgb; + const float3 firstShadeAlbedo = _1st_ShadeColor.rgb * _1st_ShadeMap_var.rgb; + float3 firstShadeColor = firstShadeAlbedo * diffuseLightFactor; float4 _2nd_ShadeMap_var = lerp( SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _1st_ShadeMap_var, _Use_1stAs2nd); - float3 secondShadeColor = _2nd_ShadeColor.rgb * _2nd_ShadeMap_var.rgb * shapeLight0.rgb; + const float3 secondShadeAlbedo = _2nd_ShadeColor.rgb * _2nd_ShadeMap_var.rgb; + float3 secondShadeColor = secondShadeAlbedo * diffuseLightFactor; - const float light2d_intensity = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + const float light2dDiffuse = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, _DirectionalLight_Direction) + 0.5; - - //float _HalfLambert_var = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + float _HalfLambert_var = (light2dDiffuse * _DirectionalLight_2DLightFactor) + + (directionalDiffuse * _DirectionalLight_DiffuseFactor); - float _HalfLambert_var = 0.5 * dot( perturbedNormalWS, _DirectionalLight_Direction) + 0.5; - //return float4(_DirectionalLight_Direction.rgb,1); - float t = _HalfLambert_var; - - - - //float _HalfLambert_var = 0.5*dot(lerp( i.normalDir, normalDirection, _Is_NormalMapToBase ),lightDirection)+0.5; - // // //Minmimum value is same as the Minimum Feather's value with the Minimum Step's value as threshold. // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var * saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step - _BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); // // From 0bed16d165969a4189272e7299b136fd6fa05ec9 Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 20 Nov 2025 01:17:05 +0900 Subject: [PATCH 232/290] save materials --- ...Shader_Eye_Clipping_StencilMask_3Das2D.mat | 19 +++++++++++++++---- .../ToonShader_Eyebrow_StencilMask_3Das2D.mat | 19 +++++++++++++++---- .../ToonShader_Face_3Das2D.mat | 19 +++++++++++++++---- .../ToonShader_Fhair2_3Das2D.mat | 19 +++++++++++++++---- .../ToonShader_Fhair_StencilOut_3Das2D.mat | 19 +++++++++++++++---- .../ToonShader_Hair_Clipping_3Das2D.mat | 19 +++++++++++++++---- .../ToonShader_Head_Clipping_3Das2D.mat | 19 +++++++++++++++---- .../ToonShader_Main_3Das2D.mat | 19 +++++++++++++++---- 8 files changed, 120 insertions(+), 32 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat index cad702722..08a7dae46 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat @@ -11,7 +11,8 @@ Material: m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _OUTLINE_NML m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -56,6 +57,8 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_Use: 0 + - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 @@ -67,18 +70,26 @@ Material: - _BaseColor_Step: 0.393 - _BaseShade_Feather: 0.629 - _BumpScale: 1 + - _DirectionalLight_2DLightFactor: 0 + - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_Intensity: 0.83 + - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 0 - - _OutlineWidth: 0 + - _OutlineOffsetZ: 1 + - _OutlineWidth: 24.95 + - _Outline_BaseColorBlend: 0.804 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: - _1st_ShadeColor: {r: 0.4338235, g: 0.4338235, b: 0.4338235, a: 1} - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} + - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat index 3d3ce6cc9..c43b9706b 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat @@ -11,7 +11,8 @@ Material: m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _OUTLINE_NML m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -56,6 +57,8 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_Use: 0 + - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 @@ -67,18 +70,26 @@ Material: - _BaseColor_Step: 0.507 - _BaseShade_Feather: 0.08 - _BumpScale: 1 + - _DirectionalLight_2DLightFactor: 0 + - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_Intensity: 0.83 + - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 0 - - _OutlineWidth: 0 + - _OutlineOffsetZ: 1 + - _OutlineWidth: 24.95 + - _Outline_BaseColorBlend: 0.804 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _2nd_ShadeColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} + - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat index af116aaec..c05d92c5e 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat @@ -11,7 +11,8 @@ Material: m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _OUTLINE_NML m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -56,6 +57,8 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_Use: 0 + - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 @@ -67,18 +70,26 @@ Material: - _BaseColor_Step: 0.353 - _BaseShade_Feather: 0.121 - _BumpScale: 1 + - _DirectionalLight_2DLightFactor: 0 + - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_Intensity: 0.83 + - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 0 - - _OutlineWidth: 0 + - _OutlineOffsetZ: 1 + - _OutlineWidth: 24.95 + - _Outline_BaseColorBlend: 0.804 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _2nd_ShadeColor: {r: 0.7490196, g: 0.69411767, b: 0.88235295, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} + - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat index f05afac88..53cbc2501 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat @@ -11,7 +11,8 @@ Material: m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _OUTLINE_NML m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -56,6 +57,8 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_Use: 0 + - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 @@ -67,18 +70,26 @@ Material: - _BaseColor_Step: 0.801 - _BaseShade_Feather: 0.062 - _BumpScale: 1 + - _DirectionalLight_2DLightFactor: 0 + - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_Intensity: 0.83 + - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 0 - - _OutlineWidth: 0 + - _OutlineOffsetZ: 1 + - _OutlineWidth: 24.95 + - _Outline_BaseColorBlend: 0.804 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0.727 - _Specular_Intensity: 0 m_Colors: - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} + - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat index 13e44553f..b2cd0c5f0 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat @@ -11,7 +11,8 @@ Material: m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _OUTLINE_NML m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -56,6 +57,8 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_Use: 0 + - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 @@ -67,18 +70,26 @@ Material: - _BaseColor_Step: 0.801 - _BaseShade_Feather: 0.062 - _BumpScale: 1 + - _DirectionalLight_2DLightFactor: 0 + - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_Intensity: 0.83 + - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 0 - - _OutlineWidth: 0 + - _OutlineOffsetZ: 1 + - _OutlineWidth: 24.95 + - _Outline_BaseColorBlend: 0.804 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0.727 - _Specular_Intensity: 0 m_Colors: - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} + - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat index eaf04cb0c..1dc502f32 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat @@ -11,7 +11,8 @@ Material: m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _OUTLINE_NML m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -56,6 +57,8 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_Use: 0 + - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 @@ -67,18 +70,26 @@ Material: - _BaseColor_Step: 0.815 - _BaseShade_Feather: 0.13 - _BumpScale: 1 + - _DirectionalLight_2DLightFactor: 0 + - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_Intensity: 0.83 + - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 0 - - _OutlineWidth: 0 + - _OutlineOffsetZ: 1 + - _OutlineWidth: 24.95 + - _Outline_BaseColorBlend: 0.804 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0.722 - _Specular_Intensity: 0 m_Colors: - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} + - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat index 82340acf7..080e50529 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat @@ -11,7 +11,8 @@ Material: m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _OUTLINE_NML m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -56,6 +57,8 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_Use: 0 + - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 @@ -67,18 +70,26 @@ Material: - _BaseColor_Step: 0.815 - _BaseShade_Feather: 0.13 - _BumpScale: 1 + - _DirectionalLight_2DLightFactor: 0 + - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_Intensity: 0.83 + - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 0 - - _OutlineWidth: 0 + - _OutlineOffsetZ: 1 + - _OutlineWidth: 24.95 + - _Outline_BaseColorBlend: 0.804 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0.722 - _Specular_Intensity: 0 m_Colors: - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _2nd_ShadeColor: {r: 0.6691177, g: 0.47672933, b: 0.27059904, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} + - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat index db9cde33d..a487004cf 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat @@ -11,7 +11,8 @@ Material: m_Shader: {fileID: 4800000, guid: 60d646244f75ab84f8eb12819a6d87ff, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] + m_ValidKeywords: + - _OUTLINE_NML m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 @@ -56,6 +57,8 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_Use: 0 + - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 @@ -67,18 +70,26 @@ Material: - _BaseColor_Step: 0.841 - _BaseShade_Feather: 0.074 - _BumpScale: 1 + - _DirectionalLight_2DLightFactor: 0 + - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_Intensity: 0.83 + - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 0 - - _OutlineWidth: 0 + - _OutlineOffsetZ: 1 + - _OutlineWidth: 24.95 + - _Outline_BaseColorBlend: 0.804 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: - _1st_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _2nd_ShadeColor: {r: 0.7490196, g: 0.69411767, b: 0.88235295, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} + - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} From 6bec6585ec7587d124d7b830572647e56e227be8 Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 20 Nov 2025 01:17:34 +0900 Subject: [PATCH 233/290] save test scene --- .../Assets/ScenesDev/Test2D.unity | 2 +- .../Assets/ScenesDev/test.unity | 519 +++++++++--------- 2 files changed, 256 insertions(+), 265 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity b/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity index eece1ae19..72a430f6c 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/Test2D.unity @@ -282,7 +282,7 @@ MonoBehaviour: m_RequiresOpaqueTextureOption: 2 m_CameraType: 0 m_Cameras: [] - m_RendererIndex: -1 + m_RendererIndex: 0 m_VolumeLayerMask: serializedVersion: 2 m_Bits: 1 diff --git a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity index 4d5891d06..c2e5b95f6 100644 --- a/Toonshader_ProjectURP/Assets/ScenesDev/test.unity +++ b/Toonshader_ProjectURP/Assets/ScenesDev/test.unity @@ -119,6 +119,155 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &11182605 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 11182606} + - component: {fileID: 11182608} + - component: {fileID: 11182607} + - component: {fileID: 11182609} + m_Layer: 7 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &11182606 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11182605} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: -16.22577, y: 0, z: 9.01071} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1390602298} + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!114 &11182607 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11182605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_CustomShadowLayers: 0 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 0 + m_RenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_ShadowRenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_Version: 4 + m_LightLayerMask: 1 + m_ShadowLayerMask: 1 + m_RenderingLayers: 1 + m_ShadowRenderingLayers: 1 +--- !u!108 &11182608 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11182605} + m_Enabled: 1 + serializedVersion: 12 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 0.83 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize2D: {x: 10, y: 10} + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!114 &11182609 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11182605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 95eb0866ac8fd424c8dfba8d023d36df, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::ToonDirectionalLightController + m_materials: + - {fileID: 2100000, guid: 3f9d94f5fe986d041a6ec19968d86f1d, type: 2} + - {fileID: 2100000, guid: 1d19f1d638a5ffb449e3a32dd4d5986d, type: 2} + - {fileID: 2100000, guid: 77410fc82598c414fbb68f41d4df2bba, type: 2} + - {fileID: 2100000, guid: 603cf7ef4659af5439a575075bf3ca95, type: 2} + - {fileID: 2100000, guid: 66ecb67261a5bed49b4e9f4734178c7e, type: 2} + - {fileID: 2100000, guid: 96545c3995189d647accdbd148fa2c3d, type: 2} + - {fileID: 2100000, guid: 0f5c320d996610448ab3be5c087d2544, type: 2} + - {fileID: 2100000, guid: 9b9cc9e24bdb5804b9009ba59c8957fe, type: 2} --- !u!1 &116300322 GameObject: m_ObjectHideFlags: 0 @@ -228,8 +377,7 @@ Transform: m_LocalPosition: {x: 3.57, y: -2.13, z: 0} m_LocalScale: {x: 3, y: 3, z: 3} m_ConstrainProportionsScale: 1 - m_Children: - - {fileID: 397058299} + m_Children: [] m_Father: {fileID: 1390602298} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &360142871 @@ -621,7 +769,7 @@ Transform: m_Children: [] m_Father: {fileID: 534897190} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &397058298 +--- !u!1 &406666495 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -629,280 +777,82 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 397058299} - - component: {fileID: 397058301} - - component: {fileID: 397058300} + - component: {fileID: 406666497} + - component: {fileID: 406666496} m_Layer: 0 - m_Name: Spot Light + m_Name: Global Light 2D m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &397058299 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 397058298} - serializedVersion: 2 - m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.029999971, y: 1.5433334, z: 0} - m_LocalScale: {x: 0.33333334, y: 0.33333334, z: 0.33333334} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 116300326} - m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} ---- !u!114 &397058300 + m_IsActive: 0 +--- !u!114 &406666496 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 397058298} + m_GameObject: {fileID: 406666495} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} m_Name: - m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData - m_UsePipelineSettings: 1 - m_AdditionalLightsShadowResolutionTier: 2 - m_CustomShadowLayers: 0 - m_LightCookieSize: {x: 1, y: 1} - m_LightCookieOffset: {x: 0, y: 0} - m_SoftShadowQuality: 0 - m_RenderingLayersMask: - serializedVersion: 0 - m_Bits: 1 - m_ShadowRenderingLayersMask: - serializedVersion: 0 - m_Bits: 1 - m_Version: 4 - m_LightLayerMask: 1 - m_ShadowLayerMask: 1 - m_RenderingLayers: 1 - m_ShadowRenderingLayers: 1 ---- !u!108 &397058301 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 397058298} - m_Enabled: 1 - serializedVersion: 12 - m_Type: 0 + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.2D.Runtime::UnityEngine.Rendering.Universal.Light2D + m_ComponentVersion: 2 + m_LightType: 4 + m_BlendStyleIndex: 0 + m_FalloffIntensity: 0.5 m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 8.05 - m_Range: 10.42 - m_SpotAngle: 47.9236 - m_InnerSpotAngle: 39.725677 - m_CookieSize2D: {x: 10, y: 10} - m_Shadows: - m_Type: 0 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingLayerMask: 1 - m_Lightmapping: 4 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 - m_ForceVisible: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 0 - m_LightUnit: 1 - m_LuxAtDistance: 1 - m_EnableSpotReflector: 1 ---- !u!1 &443363985 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 443363986} - - component: {fileID: 443363989} - - component: {fileID: 443363988} - - component: {fileID: 443363987} - m_Layer: 7 - m_Name: SD_unitychan_SpotLight - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &443363986 + m_Intensity: 1 + m_LightVolumeIntensity: 1 + m_LightVolumeEnabled: 0 + m_ApplyToSortingLayers: 00000000 + m_LightCookieSprite: {fileID: 0} + m_DeprecatedPointLightCookieSprite: {fileID: 0} + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 + m_OverlapOperation: 0 + m_NormalMapDistance: 3 + m_NormalMapQuality: 2 + m_UseNormalMap: 0 + m_ShadowsEnabled: 1 + m_ShadowIntensity: 0.75 + m_ShadowSoftness: 0.3 + m_ShadowSoftnessFalloffIntensity: 0.5 + m_ShadowVolumeIntensityEnabled: 0 + m_ShadowVolumeIntensity: 0.75 + m_LocalBounds: + m_Center: {x: 0, y: -0.00000011920929, z: 0} + m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} + m_PointLightInnerAngle: 360 + m_PointLightOuterAngle: 360 + m_PointLightInnerRadius: 0 + m_PointLightOuterRadius: 1 + m_ShapeLightParametricSides: 5 + m_ShapeLightParametricAngleOffset: 0 + m_ShapeLightParametricRadius: 1 + m_ShapeLightFalloffSize: 0.5 + m_ShapeLightFalloffOffset: {x: 0, y: 0} + m_ShapePath: + - {x: -0.5, y: -0.5, z: 0} + - {x: 0.5, y: -0.5, z: 0} + - {x: 0.5, y: 0.5, z: 0} + - {x: -0.5, y: 0.5, z: 0} +--- !u!4 &406666497 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 443363985} + m_GameObject: {fileID: 406666495} serializedVersion: 2 - m_LocalRotation: {x: -0.12823418, y: 0.548527, z: -0.79870117, w: 0.21154352} - m_LocalPosition: {x: 3.42, y: 5.94, z: -0.77} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -11.617657, y: 2.2903457, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 1390602298} - m_LocalEulerAnglesHint: {x: 55.282, y: 50.098, z: -122.825} ---- !u!1773428102 &443363987 -ParentConstraint: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 443363985} - m_Enabled: 0 - serializedVersion: 2 - m_Weight: 1 - m_TranslationAtRest: {x: 4.01, y: 5.94, z: 0} - m_RotationAtRest: {x: 90, y: 0, z: 0} - m_TranslationOffsets: - - {x: 0, y: 5.94, z: 0} - m_RotationOffsets: - - {x: 89.96574, y: 0, z: 0} - m_AffectTranslationX: 1 - m_AffectTranslationY: 1 - m_AffectTranslationZ: 1 - m_AffectRotationX: 1 - m_AffectRotationY: 1 - m_AffectRotationZ: 1 - m_Active: 1 - m_IsLocked: 1 - m_Sources: - - sourceTransform: {fileID: 1244320234} - weight: 1 ---- !u!114 &443363988 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 443363985} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} - m_Name: - m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData - m_UsePipelineSettings: 1 - m_AdditionalLightsShadowResolutionTier: 2 - m_CustomShadowLayers: 0 - m_LightCookieSize: {x: 1, y: 1} - m_LightCookieOffset: {x: 0, y: 0} - m_SoftShadowQuality: 0 - m_RenderingLayersMask: - serializedVersion: 0 - m_Bits: 1 - m_ShadowRenderingLayersMask: - serializedVersion: 0 - m_Bits: 1 - m_Version: 4 - m_LightLayerMask: 1 - m_ShadowLayerMask: 1 - m_RenderingLayers: 1 - m_ShadowRenderingLayers: 1 ---- !u!108 &443363989 -Light: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 443363985} - m_Enabled: 1 - serializedVersion: 12 - m_Type: 1 - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 0.6 - m_Range: 10 - m_SpotAngle: 30 - m_InnerSpotAngle: 21.80208 - m_CookieSize2D: {x: 10, y: 10} - m_Shadows: - m_Type: 0 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_CullingMatrixOverride: - e00: 1 - e01: 0 - e02: 0 - e03: 0 - e10: 0 - e11: 1 - e12: 0 - e13: 0 - e20: 0 - e21: 0 - e22: 1 - e23: 0 - e30: 0 - e31: 0 - e32: 0 - e33: 1 - m_UseCullingMatrixOverride: 0 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingLayerMask: 1 - m_Lightmapping: 4 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} - m_UseBoundingSphereOverride: 0 - m_UseViewFrustumForShadowCasterCull: 1 - m_ForceVisible: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 0 - m_LightUnit: 1 - m_LuxAtDistance: 1 - m_EnableSpotReflector: 1 + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &534897189 GameObject: m_ObjectHideFlags: 0 @@ -1560,6 +1510,46 @@ PrefabInstance: propertyPath: m_ConstrainProportionsScale value: 1 objectReference: {fileID: 0} + - target: {fileID: 137045927908760868, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: 77410fc82598c414fbb68f41d4df2bba, type: 2} + - target: {fileID: 137045927908760868, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + propertyPath: 'm_Materials.Array.data[1]' + value: + objectReference: {fileID: 2100000, guid: 1d19f1d638a5ffb449e3a32dd4d5986d, type: 2} + - target: {fileID: 137242737495624280, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: 603cf7ef4659af5439a575075bf3ca95, type: 2} + - target: {fileID: 137471627487125408, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: 3f9d94f5fe986d041a6ec19968d86f1d, type: 2} + - target: {fileID: 137500131347435080, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: 9b9cc9e24bdb5804b9009ba59c8957fe, type: 2} + - target: {fileID: 137731917670969218, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: 0f5c320d996610448ab3be5c087d2544, type: 2} + - target: {fileID: 137731917670969218, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + propertyPath: 'm_Materials.Array.data[1]' + value: + objectReference: {fileID: 2100000, guid: 96545c3995189d647accdbd148fa2c3d, type: 2} + - target: {fileID: 137965403754953122, guid: 7031be6ceda342c8a3854d3a674ee636, + type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: 66ecb67261a5bed49b4e9f4734178c7e, type: 2} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] @@ -2236,8 +2226,8 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 116300326} - - {fileID: 443363986} - {fileID: 1244320234} + - {fileID: 11182606} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1604474280 @@ -2266,13 +2256,13 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1604474280} serializedVersion: 2 - m_LocalRotation: {x: 1, y: -0, z: -0, w: 0} - m_LocalPosition: {x: -12.32, y: 5.26, z: 0} + m_LocalRotation: {x: -0.9111758, y: -0.39260286, z: 0.114785224, w: 0.04945808} + m_LocalPosition: {x: -14.18, y: 4.22, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 372493292} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} + m_LocalEulerAnglesHint: {x: 0, y: -165.64, z: 133.38} --- !u!1773428102 &1604474282 ParentConstraint: m_ObjectHideFlags: 0 @@ -2280,7 +2270,7 @@ ParentConstraint: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1604474280} - m_Enabled: 1 + m_Enabled: 0 serializedVersion: 2 m_Weight: 1 m_TranslationAtRest: {x: -12.32, y: 5.26, z: 0} @@ -2315,9 +2305,9 @@ MonoBehaviour: m_ComponentVersion: 2 m_LightType: 3 m_BlendStyleIndex: 0 - m_FalloffIntensity: 0.573 + m_FalloffIntensity: 0.535 m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Intensity: 1.05 + m_Intensity: 1 m_LightVolumeIntensity: 1 m_LightVolumeEnabled: 0 m_ApplyToSortingLayers: 00000000 @@ -2338,10 +2328,10 @@ MonoBehaviour: m_LocalBounds: m_Center: {x: 0, y: -0.00000011920929, z: 0} m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} - m_PointLightInnerAngle: 38.718567 - m_PointLightOuterAngle: 112.86043 + m_PointLightInnerAngle: 0 + m_PointLightOuterAngle: 157.95917 m_PointLightInnerRadius: 0 - m_PointLightOuterRadius: 6.85 + m_PointLightOuterRadius: 23.5 m_ShapeLightParametricSides: 5 m_ShapeLightParametricAngleOffset: 0 m_ShapeLightParametricRadius: 1 @@ -2663,3 +2653,4 @@ SceneRoots: - {fileID: 1390602298} - {fileID: 534897190} - {fileID: 372493292} + - {fileID: 406666497} From b2471da4c23be05875933b3445e2e111a70d8baf Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 17:05:20 +0900 Subject: [PATCH 234/290] Use ObjectTransform.hlsl --- .../Assets/Shaders/ObjectTransform.hlsl | 16 +++++++++ .../Assets/Shaders/ObjectTransform.hlsl.meta | 7 ++++ .../Assets/Shaders/Toon2D.shader | 33 ++----------------- 3 files changed, 25 insertions(+), 31 deletions(-) create mode 100644 Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl create mode 100644 Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl.meta diff --git a/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl b/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl new file mode 100644 index 000000000..b24abd2ff --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl @@ -0,0 +1,16 @@ + +inline float4 UnityObjectToClipPosInstanced(in float3 pos) { + return mul(UNITY_MATRIX_VP, mul(GetObjectToWorldMatrix(), float4(pos, 1.0))); +} +#define UnityObjectToClipPos UnityObjectToClipPosInstanced + + +inline float3 UnityObjectToWorldNormal(in float3 norm) +{ + #ifdef UNITY_ASSUME_UNIFORM_SCALING + return UnityObjectToWorldDir(norm); + #else + // mul(IT_M, norm) => mul(norm, I_M) => {dot(norm, I_M.col0), dot(norm, I_M.col1), dot(norm, I_M.col2)} + return normalize(mul(norm, (float3x3)GetWorldToObjectMatrix())); + #endif +} diff --git a/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl.meta b/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl.meta new file mode 100644 index 000000000..a1165fead --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9b41c14789eff344cb5a038c3548f99e +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 61a7993cf..695b751b9 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -133,15 +133,7 @@ Shader "Toon3Das2D"{ TEXTURE2D(_1st_ShadeMap); TEXTURE2D(_2nd_ShadeMap); -inline float3 UnityObjectToWorldNormal(in float3 norm) -{ -#ifdef UNITY_ASSUME_UNIFORM_SCALING - return UnityObjectToWorldDir(norm); -#else - // mul(IT_M, norm) => mul(norm, I_M) => {dot(norm, I_M.col0), dot(norm, I_M.col1), dot(norm, I_M.col2)} - return normalize(mul(norm, (float3x3)GetWorldToObjectMatrix())); -#endif -} + #include "ObjectTransform.hlsl" Varyings LitVertex(Attributes input) { @@ -437,29 +429,8 @@ inline float3 UnityObjectToWorldNormal(in float3 norm) float _Outline_LightColorBlend; CBUFFER_END - -// #ifdef UNIVERSAL_PIPELINE_CORE_INCLUDED -// #include "../../UniversalRP/Shaders/UniversalToonInput.hlsl" -// #include "../../UniversalRP/Shaders/UniversalToonHead.hlsl" -// #include "../../UniversalRP/Shaders/UniversalToonOutline.hlsl" -// #endif - -inline float4 UnityObjectToClipPosInstanced(in float3 pos) { - return mul(UNITY_MATRIX_VP, mul(GetObjectToWorldMatrix(), float4(pos, 1.0))); -} -#define UnityObjectToClipPos UnityObjectToClipPosInstanced - - -inline float3 UnityObjectToWorldNormal(in float3 norm) -{ -#ifdef UNITY_ASSUME_UNIFORM_SCALING - return UnityObjectToWorldDir(norm); -#else - // mul(IT_M, norm) => mul(norm, I_M) => {dot(norm, I_M.col0), dot(norm, I_M.col1), dot(norm, I_M.col2)} - return normalize(mul(norm, (float3x3)GetWorldToObjectMatrix())); -#endif -} + #include "ObjectTransform.hlsl" OutlineVertexOutput OutlineVertex(OutlineVertexInput v) { OutlineVertexOutput o = (OutlineVertexOutput) 0; From 30f7a92aec8d143d3257c57aae81ae955baa58c9 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 17:09:10 +0900 Subject: [PATCH 235/290] pragma --- Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl | 1 + 1 file changed, 1 insertion(+) diff --git a/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl b/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl index b24abd2ff..bc794b9e0 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl +++ b/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl @@ -1,3 +1,4 @@ +#pragma once inline float4 UnityObjectToClipPosInstanced(in float3 pos) { return mul(UNITY_MATRIX_VP, mul(GetObjectToWorldMatrix(), float4(pos, 1.0))); From b04cc89ae541bf0399ea5231a898ac9388edc7e8 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 17:09:20 +0900 Subject: [PATCH 236/290] cleanup --- .../Assets/Shaders/Toon2D.shader | 26 +++++-------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 695b751b9..8b9e39b5f 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -473,7 +473,6 @@ Shader "Toon3Das2D"{ return o; } - //SHAPE_LIGHT macros #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" @@ -525,13 +524,6 @@ Shader "Toon3Das2D"{ return Set_Outline_Color; #endif - - -#if (UNITY_VERSION >= 202230) - return float4(0,1,1,1); -#else - return float4(1,0,0,1); -#endif } @@ -554,13 +546,11 @@ Shader "Toon3Das2D"{ // GPU Instancing #pragma multi_compile_instancing - struct Attributes - { + struct Attributes { COMMON_2D_NORMALS_INPUTS }; - struct Varyings - { + struct Varyings { COMMON_2D_NORMALS_OUTPUTS }; @@ -568,13 +558,11 @@ Shader "Toon3Das2D"{ #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Normals2DCommon.hlsl" - Varyings NormalsRenderingVertex(Attributes input) - { + Varyings NormalsRenderingVertex(Attributes input) { return CommonNormalsVertex(input); } - half4 NormalsRenderingFragment(Varyings input) : SV_Target - { + half4 NormalsRenderingFragment(Varyings input) : SV_Target { return CommonNormalsFragment(input, _White); } ENDHLSL @@ -606,13 +594,11 @@ Shader "Toon3Das2D"{ #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/2DCommon.hlsl" - Varyings UnlitVertex(Attributes input) - { + Varyings UnlitVertex(Attributes input) { return CommonUnlitVertex(input); } - half4 UnlitFragment(Varyings input) : SV_Target - { + half4 UnlitFragment(Varyings input) : SV_Target { return CommonUnlitFragment(input, _White); } ENDHLSL From a657135b10907f654035e2127c0333e8e16722fb Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 17:12:13 +0900 Subject: [PATCH 237/290] Multiply --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 8b9e39b5f..8c2e68dcc 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -118,6 +118,7 @@ Shader "Toon3Das2D"{ float _ShadeColor_Step; float _1st2nd_Shades_Feather; + int _DirectionalLight_Use; float3 _DirectionalLight_Direction; float4 _DirectionalLight_Color; float _DirectionalLight_Intensity; @@ -193,7 +194,7 @@ Shader "Toon3Das2D"{ } const float3 diffuseLightFactor = (shapeLight0.rgb * _DirectionalLight_2DLightFactor) - + (_DirectionalLight_Color * _DirectionalLight_DiffuseFactor); + + (_DirectionalLight_Color * _DirectionalLight_DiffuseFactor * _DirectionalLight_Use); float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); float3 baseColor = surfaceData.albedo.rgb * diffuseLightFactor; From 0bab5d380d9c70e1f8e90a41a47f5ce935a2d6bf Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 17:17:20 +0900 Subject: [PATCH 238/290] rename constants --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 166 +++++++++--------- 1 file changed, 83 insertions(+), 83 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 6b2fc777a..81288b780 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -44,7 +44,7 @@ void RefreshFoldouts(Material mat, Dictionary m_normalMapFoldout = true; m_outlineFoldout = mat.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); - bool lightEnabled = mat.GetInteger(uiElements[ShaderPropUnlit_DirectionalLight_Use].mainProperty.id) !=0; + bool lightEnabled = mat.GetInteger(uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_USE].mainProperty.id) !=0; m_directionalLightFoldout = lightEnabled; } @@ -53,12 +53,12 @@ void RefreshFoldouts(Material mat, Dictionary static void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements, ref bool foldout) { - ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, uiElements[ShaderProp_NormalMap].label); + ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, uiElements[SHADER_PROP_NORMAL_MAP].label); if (!foldout) return; - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderProp_NormalMap]); - mEditor.TextureScaleOffsetProperty(uiElements[ShaderProp_NormalMap].mainProperty.prop); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_NORMAL_MAP]); + mEditor.TextureScaleOffsetProperty(uiElements[SHADER_PROP_NORMAL_MAP].mainProperty.prop); EditorGUILayout.Space(); } @@ -84,7 +84,7 @@ static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements) { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderPropMainTex]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_MAIN_TEX]); EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[ShaderPropUse_BaseAs1st], out bool applyTo1st ); + ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_USE_BASE_AS1_ST], out bool applyTo1st ); EditorGUI.indentLevel -= 2; if (applyTo1st) { EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[ShaderProp_1st_ShadeColor]); + ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[SHADER_PROP_1_ST_SHADE_COLOR]); EditorGUI.indentLevel -= 2; } else { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderProp_1st_ShadeMap]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_1_ST_SHADE_MAP]); } EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[ShaderPropUse_1stAs2nd], out bool applyTo2nd); + ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_USE_1_ST_AS2_ND], out bool applyTo2nd); EditorGUI.indentLevel -= 2; if (applyTo2nd) { EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[ShaderProp_2nd_ShadeColor]); + ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[SHADER_PROP_2_ND_SHADE_COLOR]); EditorGUI.indentLevel -= 2; } else { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[ShaderProp_2nd_ShadeMap]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_2_ND_SHADE_MAP]); } } static void DrawDirectionalLightGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements, ref bool foldout) { - ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, mats, uiElements[ShaderPropUnlit_DirectionalLight_Use], + ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_USE], ref foldout); if (!foldout) @@ -189,9 +189,9 @@ static void DrawDirectionalLightGUI(MaterialEditor mEditor, Material[] mats, ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction]); ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_2DLightFactor]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_DiffuseFactor]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[ShaderPropUnlit_DirectionalLight_SpecularFactor]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_2D_LIGHT_FACTOR]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR]); } //---------------------------------------------------------------------------------------------------------------------- @@ -236,98 +236,98 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty private static readonly List m_materialUIElements = new List() { new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropMainTex), + mainPropertyName = new MaterialName(SHADER_PROP_MAIN_TEX), label = new GUIContent("Base Map", "Base Color : Texture(sRGB) × Color(RGB)."), - extraPropertyName1 = new MaterialName(ShaderProp_BaseColor), + extraPropertyName1 = new MaterialName(SHADER_PROP_BASE_COLOR), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_1st_ShadeMap), + mainPropertyName = new MaterialName(SHADER_PROP_1_ST_SHADE_MAP), label = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."), - extraPropertyName1 = new MaterialName(ShaderProp_1st_ShadeColor), + extraPropertyName1 = new MaterialName(SHADER_PROP_1_ST_SHADE_COLOR), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_1st_ShadeColor), + mainPropertyName = new MaterialName(SHADER_PROP_1_ST_SHADE_COLOR), label = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_2nd_ShadeMap), + mainPropertyName = new MaterialName(SHADER_PROP_2_ND_SHADE_MAP), label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), - extraPropertyName1 = new MaterialName(ShaderProp_2nd_ShadeColor) + extraPropertyName1 = new MaterialName(SHADER_PROP_2_ND_SHADE_COLOR) }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_2nd_ShadeColor), + mainPropertyName = new MaterialName(SHADER_PROP_2_ND_SHADE_COLOR), label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUse_BaseAs1st), + mainPropertyName = new MaterialName(SHADER_PROP_USE_BASE_AS1_ST), label = new GUIContent("Apply to 1st shading map", "Apply Base map to the 1st shading map."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUse_1stAs2nd), + mainPropertyName = new MaterialName(SHADER_PROP_USE_1_ST_AS2_ND), label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), }, //Normal Map new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_NormalMap), + mainPropertyName = new MaterialName(SHADER_PROP_NORMAL_MAP), label = new GUIContent("Normal Map", "A texture that specifies the bumpiness of the material."), - extraPropertyName1 = new MaterialName(ShaderProp_BumpScale), + extraPropertyName1 = new MaterialName(SHADER_PROP_BUMP_SCALE), }, //Outline Start new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_OutlineWidth), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_WIDTH), label = new GUIContent("Outline Width", "The width of the outline."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_OutlineWidthMap), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_WIDTH_MAP), label = new GUIContent("Outline Width Map", "Outline Width Map (grayscale, linear): White = full width, Black = 0 width."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_OutlineTex), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_TEX), label = new GUIContent("Outline Color", "The color of outline."), - extraPropertyName1 = new MaterialName(ShaderProp_OutlineColor), + extraPropertyName1 = new MaterialName(SHADER_PROP_OUTLINE_COLOR), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_Outline_BaseColorBlend), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_BASE_COLOR_BLEND), label = new GUIContent("Blend Base Color to Outline", "Blend base color to outline color."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_Outline_LightColorBlend), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_LIGHT_COLOR_BLEND), label = new GUIContent("Blend Light Color to Outline", "Blend light color to outline color."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_OutlineOffsetZ), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_OFFSET_Z), label = new GUIContent("Z Offset", "Offsets the outline in the depth (Z) direction of the camera."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_OutlineNear), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_NEAR), label = new GUIContent("Near", "Nearest distance for maximum outline width."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_OutlineFar), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_FAR), label = new GUIContent("Far", "Furthest distance where outline fades to zero width."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_OutlineMode), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_MODE), label = new GUIContent("Outline Mode", "Specifies how the outline is generated."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_Outline_UseCustomNormalMap), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_USE_CUSTOM_NORMAL_MAP), label = new GUIContent("Use Custom Normal Map", "Use a custom normal map for outline."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderProp_Outline_CustomNormalMap), + mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_CUSTOM_NORMAL_MAP), label = new GUIContent("Custom Normal Map", "Custom normal map (linear) for outline. "), }, @@ -335,7 +335,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty //Custom Directional Light new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_Use), + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_USE), label = new GUIContent("Custom Directional Light", "Apply a custom directional light."), }, @@ -355,17 +355,17 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "The intensity of the custom directional light. "), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_2DLightFactor), + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_2D_LIGHT_FACTOR), label = new GUIContent("2D Light Factor", "Multiplier for the 2D light contribution."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_DiffuseFactor), + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR), label = new GUIContent("Diffuse Factor", "Multiplier for the diffuse lighting contribution."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(ShaderPropUnlit_DirectionalLight_SpecularFactor), + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR), label = new GUIContent("Specular Factor", "Multiplier for the specular lighting contribution."), }, @@ -373,36 +373,36 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty //Common constants - internal const string ShaderPropMainTex = "_MainTex"; - internal const string ShaderPropUse_BaseAs1st = "_Use_BaseAs1st"; - internal const string ShaderPropUse_1stAs2nd = "_Use_1stAs2nd"; - internal const string ShaderProp_BaseColor = "_BaseColor"; - internal const string ShaderProp_1st_ShadeMap = "_1st_ShadeMap"; - internal const string ShaderProp_1st_ShadeColor = "_1st_ShadeColor"; - internal const string ShaderProp_2nd_ShadeMap = "_2nd_ShadeMap"; - internal const string ShaderProp_2nd_ShadeColor = "_2nd_ShadeColor"; - - internal const string ShaderProp_NormalMap = "_NormalMap"; - internal const string ShaderProp_BumpScale = "_BumpScale"; + internal const string SHADER_PROP_MAIN_TEX = "_MainTex"; + internal const string SHADER_PROP_USE_BASE_AS1_ST = "_Use_BaseAs1st"; + internal const string SHADER_PROP_USE_1_ST_AS2_ND = "_Use_1stAs2nd"; + internal const string SHADER_PROP_BASE_COLOR = "_BaseColor"; + internal const string SHADER_PROP_1_ST_SHADE_MAP = "_1st_ShadeMap"; + internal const string SHADER_PROP_1_ST_SHADE_COLOR = "_1st_ShadeColor"; + internal const string SHADER_PROP_2_ND_SHADE_MAP = "_2nd_ShadeMap"; + internal const string SHADER_PROP_2_ND_SHADE_COLOR = "_2nd_ShadeColor"; + + internal const string SHADER_PROP_NORMAL_MAP = "_NormalMap"; + internal const string SHADER_PROP_BUMP_SCALE = "_BumpScale"; - internal const string ShaderProp_OutlineMode = "_OutlineMode"; - internal const string ShaderProp_OutlineWidth = "_OutlineWidth"; - internal const string ShaderProp_OutlineWidthMap = "_OutlineWidthMap"; - internal const string ShaderProp_OutlineTex = "_OutlineTex"; - internal const string ShaderProp_OutlineColor = "_OutlineColor"; - internal const string ShaderProp_Outline_BaseColorBlend = "_Outline_BaseColorBlend"; - internal const string ShaderProp_Outline_LightColorBlend = "_Outline_LightColorBlend"; - internal const string ShaderProp_OutlineOffsetZ = "_OutlineOffsetZ"; - internal const string ShaderProp_OutlineNear = "_OutlineNear"; - internal const string ShaderProp_OutlineFar = "_OutlineFar"; - - internal const string ShaderProp_Outline_UseCustomNormalMap = "_Outline_UseCustomNormalMap"; - internal const string ShaderProp_Outline_CustomNormalMap = "_Outline_CustomNormalMap"; - - internal const string ShaderPropUnlit_DirectionalLight_Use = "_DirectionalLight_Use"; - internal const string ShaderPropUnlit_DirectionalLight_2DLightFactor = "_DirectionalLight_2DLightFactor"; - internal const string ShaderPropUnlit_DirectionalLight_DiffuseFactor = "_DirectionalLight_DiffuseFactor"; - internal const string ShaderPropUnlit_DirectionalLight_SpecularFactor = "_DirectionalLight_SpecularFactor"; + internal const string SHADER_PROP_OUTLINE_MODE = "_OutlineMode"; + internal const string SHADER_PROP_OUTLINE_WIDTH = "_OutlineWidth"; + internal const string SHADER_PROP_OUTLINE_WIDTH_MAP = "_OutlineWidthMap"; + internal const string SHADER_PROP_OUTLINE_TEX = "_OutlineTex"; + internal const string SHADER_PROP_OUTLINE_COLOR = "_OutlineColor"; + internal const string SHADER_PROP_OUTLINE_BASE_COLOR_BLEND = "_Outline_BaseColorBlend"; + internal const string SHADER_PROP_OUTLINE_LIGHT_COLOR_BLEND = "_Outline_LightColorBlend"; + internal const string SHADER_PROP_OUTLINE_OFFSET_Z = "_OutlineOffsetZ"; + internal const string SHADER_PROP_OUTLINE_NEAR = "_OutlineNear"; + internal const string SHADER_PROP_OUTLINE_FAR = "_OutlineFar"; + + internal const string SHADER_PROP_OUTLINE_USE_CUSTOM_NORMAL_MAP = "_Outline_UseCustomNormalMap"; + internal const string SHADER_PROP_OUTLINE_CUSTOM_NORMAL_MAP = "_Outline_CustomNormalMap"; + + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_USE = "_DirectionalLight_Use"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_2D_LIGHT_FACTOR = "_DirectionalLight_2DLightFactor"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR = "_DirectionalLight_DiffuseFactor"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR = "_DirectionalLight_SpecularFactor"; //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; From 3fc09873cba74b125aab6b6ae18acce1386d8432 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 17:22:02 +0900 Subject: [PATCH 239/290] rename to 2DLightStrength --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 8 +++++--- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 8 ++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 81288b780..bf6e50d8d 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -175,6 +175,9 @@ static void DrawThreeColorsGUI(MaterialEditor mEditor, Material[] mats, } else { ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_2_ND_SHADE_MAP]); } + + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_2D_LIGHT_STRENGTH]); + } static void DrawDirectionalLightGUI(MaterialEditor mEditor, Material[] mats, @@ -189,7 +192,6 @@ static void DrawDirectionalLightGUI(MaterialEditor mEditor, Material[] mats, ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction]); ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_2D_LIGHT_FACTOR]); ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR]); ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR]); } @@ -355,7 +357,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "The intensity of the custom directional light. "), }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_2D_LIGHT_FACTOR), + mainPropertyName = new MaterialName(SHADER_PROP_2D_LIGHT_STRENGTH), label = new GUIContent("2D Light Factor", "Multiplier for the 2D light contribution."), }, @@ -381,6 +383,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_1_ST_SHADE_COLOR = "_1st_ShadeColor"; internal const string SHADER_PROP_2_ND_SHADE_MAP = "_2nd_ShadeMap"; internal const string SHADER_PROP_2_ND_SHADE_COLOR = "_2nd_ShadeColor"; + internal const string SHADER_PROP_2D_LIGHT_STRENGTH = "_2DLightStrength"; internal const string SHADER_PROP_NORMAL_MAP = "_NormalMap"; internal const string SHADER_PROP_BUMP_SCALE = "_BumpScale"; @@ -400,7 +403,6 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_OUTLINE_CUSTOM_NORMAL_MAP = "_Outline_CustomNormalMap"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_USE = "_DirectionalLight_Use"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_2D_LIGHT_FACTOR = "_DirectionalLight_2DLightFactor"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR = "_DirectionalLight_DiffuseFactor"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR = "_DirectionalLight_SpecularFactor"; diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 8c2e68dcc..a9dc1dad8 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -15,6 +15,7 @@ Shader "Toon3Das2D"{ _ShadeColor_Step ("ShadeColor_Step", Range(0, 1)) = 0 _1st2nd_Shades_Feather ("1st/2nd_Shades_Feather", Range(0.0001, 1)) = 0.0001 + _2DLightStrength ("2D Light Strength", Range(0,1)) = 1 _MaskTex("Mask", 2D) = "white" {} @@ -43,7 +44,6 @@ Shader "Toon3Das2D"{ _DirectionalLight_Direction ("Specular Light Direction", Vector) = (0,-1,0,0) _DirectionalLight_Color("Directional Light Color", Color) = (1,1,1,1) _DirectionalLight_Intensity ("Directional Light Intensity", float) = 0.5 - _DirectionalLight_2DLightFactor ("Directional Light: 2D Light Factor", Range(0,1)) = 1 _DirectionalLight_DiffuseFactor ("Directional Light: Diffuse Factor", Range(0,1)) = 0.5 _DirectionalLight_SpecularFactor ("Directional Light: Specular Factor", Range(0,1)) = 0.5 @@ -117,12 +117,12 @@ Shader "Toon3Das2D"{ float _ShadeColor_Step; float _1st2nd_Shades_Feather; + float _2DLightStrength; int _DirectionalLight_Use; float3 _DirectionalLight_Direction; float4 _DirectionalLight_Color; float _DirectionalLight_Intensity; - float _DirectionalLight_2DLightFactor; float _DirectionalLight_DiffuseFactor; float _DirectionalLight_SpecularFactor; @@ -193,7 +193,7 @@ Shader "Toon3Das2D"{ shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); } - const float3 diffuseLightFactor = (shapeLight0.rgb * _DirectionalLight_2DLightFactor) + const float3 diffuseLightFactor = (shapeLight0.rgb * _2DLightStrength) + (_DirectionalLight_Color * _DirectionalLight_DiffuseFactor * _DirectionalLight_Use); float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); @@ -215,7 +215,7 @@ Shader "Toon3Das2D"{ const float light2dDiffuse = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, _DirectionalLight_Direction) + 0.5; - float _HalfLambert_var = (light2dDiffuse * _DirectionalLight_2DLightFactor) + float _HalfLambert_var = (light2dDiffuse * _2DLightStrength) + (directionalDiffuse * _DirectionalLight_DiffuseFactor); From 8f38768e2edc5dc3a5274d5364fbb672e7df315b Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 17:27:27 +0900 Subject: [PATCH 240/290] Disable DirectionalGroup GUI elements if we are not using it --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index bf6e50d8d..5cfdac56e 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -26,10 +26,10 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { EditorGUI.BeginChangeCheck(); DrawThreeColorsGUI(mEditor, mats, m_materialPropertyUIElements); + DrawDirectionalLightGUI(mEditor, mats, m_materialPropertyUIElements, ref m_directionalLightFoldout); DrawNormalMapGUI(mEditor, m_materialPropertyUIElements, ref m_normalMapFoldout); DrawOutlineGUI(mEditor, mats, m_materialPropertyUIElements, ref m_outlineFoldout); - DrawDirectionalLightGUI(mEditor, mats, m_materialPropertyUIElements, ref m_directionalLightFoldout); if (EditorGUI.EndChangeCheck()) { @@ -183,17 +183,19 @@ static void DrawThreeColorsGUI(MaterialEditor mEditor, Material[] mats, static void DrawDirectionalLightGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements, ref bool foldout) { - ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_USE], - ref foldout); + ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, mats, + uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_USE], ref foldout, out bool toggleEnabled); if (!foldout) return; - + + EditorGUI.BeginDisabledGroup(!toggleEnabled); ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction]); ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR]); ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR]); + EditorGUI.EndDisabledGroup(); } //---------------------------------------------------------------------------------------------------------------------- From e32428f1263535a105ed16efe8dc3365e9a003a2 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 17:30:39 +0900 Subject: [PATCH 241/290] clean up unused code --- .../Assets/Shaders/Toon2D.shader | 63 ++----------------- 1 file changed, 5 insertions(+), 58 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index a9dc1dad8..63a709abe 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -72,8 +72,8 @@ Shader "Toon3Das2D"{ HLSLPROGRAM #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" - #pragma vertex LitVertex - #pragma fragment LitFragment + #pragma vertex ToonVertex + #pragma fragment ToonFragment #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" @@ -136,7 +136,7 @@ Shader "Toon3Das2D"{ #include "ObjectTransform.hlsl" - Varyings LitVertex(Attributes input) { + Varyings ToonVertex(Attributes input) { Varyings o = (Varyings) 0; UNITY_SETUP_INSTANCE_ID(input); @@ -251,8 +251,6 @@ Shader "Toon3Das2D"{ Set_FinalBaseColor = Set_FinalBaseColor * _ShapeLightBlendFactors0.x; - - half4 shapeLight0Modulate = half4(Set_FinalBaseColor, alpha); half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; @@ -275,9 +273,8 @@ Shader "Toon3Das2D"{ return max(0, finalOutput); } - half4 CommonLitFragment2(Varyings input, half4 color) - { - const half4 main = color * SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv); + half4 ToonFragment(Varyings input) : SV_Target { + const half4 main = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv); const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.uv); const half3 normalTS = UnpackNormalScale(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.uv), _BumpScale); @@ -302,56 +299,6 @@ Shader "Toon3Das2D"{ } -//---------------------------------------------------------------------------------------------------------------------- - float4 LitFragment(Varyings input) : SV_Target - { - float3 defaultLightDirection = normalize(UNITY_MATRIX_V[2].xyz + UNITY_MATRIX_V[1].xyz); - float2 Set_UV0 = input.uv; - float3 mainLightColor = float3(1, 1, 1); - float3 defaultLightColor = float3(1, 1, 1); - - // //v.2.0.5 - // float3 defaultLightColor = saturate(max(half3(0.05, 0.05, 0.05) * _Unlit_Intensity, - // max(ShadeSH9(half4(0.0, 0.0, 0.0, 1.0)), - // ShadeSH9(half4(0.0, -1.0, 0.0, 1.0)).rgb) * - // _Unlit_Intensity)); - // float3 customLightDirection = normalize(mul( GetObjectToWorldMatrix(), float4(((float3(1.0,0.0,0.0)*_Offset_X_Axis_BLD*10)+(float3(0.0,1.0,0.0)*_Offset_Y_Axis_BLD*10)+(float3(0.0,0.0,-1.0)*lerp(-1.0,1.0,_Inverse_Z_Axis_BLD))),0)).xyz); - // float3 lightDirection = normalize(lerp(defaultLightDirection, mainLight.direction.xyz,any(mainLight.direction.xyz))); - // lightDirection = lerp(lightDirection, customLightDirection, _Is_BLD); - // //v.2.0.5: - // - half3 originalLightColor = mainLightColor.rgb; - float3 lightColor = max(defaultLightColor, saturate(originalLightColor)); - float3 Set_LightColor = lightColor.rgb; - - float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); - float3 Set_BaseColor = ((_BaseColor.rgb * _MainTex_var.rgb) * Set_LightColor); - - - // //v.2.0.5 - // float4 _1st_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_1st_ShadeMap,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_MainTex_var,_Use_BaseAs1st); - // float3 Set_1st_ShadeColor = lerp( (_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb), ((_1st_ShadeColor.rgb*_1st_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_1st_Shade ); - // //v.2.0.5 - // float4 _2nd_ShadeMap_var = lerp(SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)),_1st_ShadeMap_var,_Use_1stAs2nd); - // float3 Set_2nd_ShadeColor = lerp( (_2nd_ShadeColor.rgb*_2nd_ShadeMap_var.rgb), ((_2nd_ShadeColor.rgb*_2nd_ShadeMap_var.rgb)*Set_LightColor), _Is_LightColor_2nd_Shade ); - // float _HalfLambert_var = 0.5*dot(lerp( i.normalDir, normalDirection, _Is_NormalMapToBase ),lightDirection)+0.5; - // - // float4 _Set_2nd_ShadePosition_var = tex2D(_Set_2nd_ShadePosition, TRANSFORM_TEX(Set_UV0, _Set_2nd_ShadePosition)); - // float4 _Set_1st_ShadePosition_var = tex2D(_Set_1st_ShadePosition, TRANSFORM_TEX(Set_UV0, _Set_1st_ShadePosition)); - // //v.2.0.6 - // //Minmimum value is same as the Minimum Feather's value with the Minimum Step's value as threshold. - // float _SystemShadowsLevel_var = (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel > 0.001 ? (shadowAttenuation*0.5)+0.5+_Tweak_SystemShadowsLevel : 0.0001; - // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var*saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); - // // - // //Composition: 3 Basic Colors as Set_FinalBaseColor - // float3 Set_FinalBaseColor = lerp(Set_BaseColor,lerp(Set_1st_ShadeColor,Set_2nd_ShadeColor,saturate((1.0 + ( (_HalfLambert_var - (_ShadeColor_Step-_1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0) ) / (_ShadeColor_Step - (_ShadeColor_Step-_1st2nd_Shades_Feather))))),Set_FinalShadowMask); // Final Color - - - //return float4(Set_BaseColor,1); - - - return CommonLitFragment2(input, _White); - } ENDHLSL } From 18389828e59b6417e40922c89dec1b69c993c0d1 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 18:05:50 +0900 Subject: [PATCH 242/290] rename shading start and feather vars --- .../Assets/Shaders/Toon2D.shader | 53 ++++++++++--------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 63a709abe..937a81d0e 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -1,23 +1,25 @@ -Shader "Toon3Das2D"{ +Shader "Toon/Toon 3D as 2D"{ Properties{ - _BaseColor ("BaseColor", Color) = (1,1,1,1) - _MainTex ("BaseMap", 2D) = "white" {} - _BaseColor_Step ("BaseColor_Step", Range(0, 1)) = 0.5 - _BaseShade_Feather ("Base/Shade_Feather", Range(0.0001, 1)) = 0.0001 + + _BaseColor ("Base Color", Color) = (1,1,1,1) + _MainTex ("Main Texture", 2D) = "white" {} - _1st_ShadeMap ("1st_ShadeMap", 2D) = "white" {} + //Three Colors + _1st_ShadeColor ("1st Shade Color", Color) = (0.5,0.5,0.5,1) + _1st_ShadeMap ("1st Shade Map", 2D) = "white" {} [Toggle(_)] _Use_BaseAs1st ("Use BaseMap as 1st_ShadeMap", Integer ) = 0 - _1st_ShadeColor ("1st_ShadeColor", Color) = (1,1,1,1) + _2nd_ShadeColor ("2nd Shade Color", Color) = (0.1,0.1,0.1,1) + _2nd_ShadeMap ("2nd Shade Map", 2D) = "white" {} + [Toggle(_)] _Use_1stAs2nd ("Use 1st ShadeMap as 2nd ShadeMap", Integer ) = 0 + + //Start and Feather + _BaseTo1st_ShadeStart ("Base to 1st Shade Start", Range(0, 1)) = 0.5 + _BaseTo1st_ShadeFeather ("Base to 1st Shade Feather", Range(0, 1)) = 0.1 + _1stTo2nd_ShadeStart ("1st to 2nd Shade Start", Range(0, 1)) = 0.25 + _1stTo2nd_ShadeFeather ("1st to 2nd Shade Feather", Range(0, 1)) = 0.1 - _2nd_ShadeMap ("2nd_ShadeMap", 2D) = "white" {} - [Toggle(_)] _Use_1stAs2nd ("Use 1st_ShadeMap as 2nd_ShadeMap", Integer ) = 0 - _2nd_ShadeColor ("2nd_ShadeColor", Color) = (1,1,1,1) - - _ShadeColor_Step ("ShadeColor_Step", Range(0, 1)) = 0 - _1st2nd_Shades_Feather ("1st/2nd_Shades_Feather", Range(0.0001, 1)) = 0.0001 _2DLightStrength ("2D Light Strength", Range(0,1)) = 1 - _MaskTex("Mask", 2D) = "white" {} _NormalMap("Normal Map", 2D) = "bump" {} _BumpScale ("Normal Scale", Range(0, 1)) = 1 @@ -106,19 +108,20 @@ Shader "Toon3Das2D"{ half4 _BaseColor; float _BumpScale; - int _Use_BaseAs1st; - int _Use_1stAs2nd; - + //Three colors float4 _1st_ShadeColor; + int _Use_BaseAs1st; float4 _2nd_ShadeColor; + int _Use_1stAs2nd; - float _BaseColor_Step; - float _BaseShade_Feather; + //Start and Feather + float _BaseTo1st_ShadeStart; + float _BaseTo1st_ShadeFeather; + float _1stTo2nd_ShadeStart; + float _1stTo2nd_ShadeFeather; - float _ShadeColor_Step; - float _1st2nd_Shades_Feather; float _2DLightStrength; - + int _DirectionalLight_Use; float3 _DirectionalLight_Direction; float4 _DirectionalLight_Color; @@ -220,7 +223,7 @@ Shader "Toon3Das2D"{ // //Minmimum value is same as the Minimum Feather's value with the Minimum Step's value as threshold. - // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var * saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseColor_Step - _BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); + // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var * saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseTo1st_ShadeStart - _BaseTo1st_ShadeFeather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseTo1st_ShadeStart - (_BaseTo1st_ShadeStart-_BaseTo1st_ShadeFeather)))); // // // //Composition: 3 Basic Colors as Set_FinalBaseColor @@ -228,10 +231,10 @@ Shader "Toon3Das2D"{ float4 _Set_2nd_ShadePosition_var = float4(1, 1, 1, 1); //used in DoubleShadeWithFeather, default: white - float Set_FinalShadowMask = saturate((1.0 + ( ( _HalfLambert_var - (_BaseColor_Step-_BaseShade_Feather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)))); + float Set_FinalShadowMask = saturate((1.0 + ( ( _HalfLambert_var - (_BaseTo1st_ShadeStart-_BaseTo1st_ShadeFeather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseTo1st_ShadeStart - (_BaseTo1st_ShadeStart-_BaseTo1st_ShadeFeather)))); - float innerLerpOp = saturate((1.0 + ((_HalfLambert_var - (_ShadeColor_Step - _1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / ( _ShadeColor_Step - ( _ShadeColor_Step - _1st2nd_Shades_Feather)))); + float innerLerpOp = saturate((1.0 + ((_HalfLambert_var - (_1stTo2nd_ShadeStart - _1stTo2nd_ShadeFeather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / ( _1stTo2nd_ShadeStart - ( _1stTo2nd_ShadeStart - _1stTo2nd_ShadeFeather)))); float3 Set_FinalBaseColor = lerp(baseColor, lerp(firstShadeColor, secondShadeColor, innerLerpOp), From d42429a0178954bc7b0e60de2a7cb553fb5e4e83 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 19:58:34 +0900 Subject: [PATCH 243/290] add Shading GUI --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 165 +++++++++++++----- .../Scripts/Utilities/ToonEditorGUIUtility.cs | 10 +- 2 files changed, 123 insertions(+), 52 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 5cfdac56e..474e0ea6c 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -25,7 +25,8 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { } EditorGUI.BeginChangeCheck(); - DrawThreeColorsGUI(mEditor, mats, m_materialPropertyUIElements); + DrawThreeColorsGUI(mEditor, mats, m_materialPropertyUIElements, ref m_colorsFoldout); + DrawShadingGUI(mEditor, mats, m_materialPropertyUIElements, ref m_shadingFoldout); DrawDirectionalLightGUI(mEditor, mats, m_materialPropertyUIElements, ref m_directionalLightFoldout); DrawNormalMapGUI(mEditor, m_materialPropertyUIElements, ref m_normalMapFoldout); @@ -41,6 +42,9 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { void RefreshFoldouts(Material mat, Dictionary uiElements) { + m_colorsFoldout = true; + m_shadingFoldout = true; + m_normalMapFoldout = true; m_outlineFoldout = mat.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); @@ -48,6 +52,69 @@ void RefreshFoldouts(Material mat, Dictionary m_directionalLightFoldout = lightEnabled; } + +//---------------------------------------------------------------------------------------------------------------------- + static void DrawThreeColorsGUI(MaterialEditor mEditor, Material[] mats, + Dictionary uiElements, ref bool foldout) + { + + ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, COLORS_FOLDOUT); + if (!foldout) + return; + + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_MAIN_TEX]); + + EditorGUI.indentLevel += 2; + ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_USE_BASE_AS1_ST], out bool applyTo1st ); + EditorGUI.indentLevel -= 2; + + if (applyTo1st) { + EditorGUI.indentLevel += 2; + ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[SHADER_PROP_1_ST_SHADE_COLOR]); + EditorGUI.indentLevel -= 2; + } else { + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_1_ST_SHADE_MAP]); + } + + EditorGUI.indentLevel += 2; + ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_USE_1ST_AS_2ND], out bool applyTo2nd); + EditorGUI.indentLevel -= 2; + + + if (applyTo2nd) { + EditorGUI.indentLevel += 2; + ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[SHADER_PROP_2ND_SHADE_COLOR]); + EditorGUI.indentLevel -= 2; + } else { + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_2ND_SHADE_MAP]); + } + + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_2D_LIGHT_STRENGTH]); + EditorGUILayout.Space(); + } + + static void DrawShadingGUI(MaterialEditor mEditor, Material[] mats, + Dictionary uiElements, ref bool foldout) + { + + ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, SHADING_FOLDOUT); + if (!foldout) + return; + + EditorGUILayout.LabelField("Base to 1st Shade"); + EditorGUI.indentLevel += INDENT_SIZE; + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_BASE_TO_1ST_SHADE_START]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_BASE_TO_1ST_SHADE_FEATHER]); + EditorGUI.indentLevel -= INDENT_SIZE; + + EditorGUILayout.LabelField("1st to 2nd Shade"); + EditorGUI.indentLevel += INDENT_SIZE; + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_1ST_TO_2ND_SHADE_START]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_1ST_TO_2ND_SHADE_FEATHER]); + EditorGUI.indentLevel -= INDENT_SIZE; + + EditorGUILayout.Space(); + } //---------------------------------------------------------------------------------------------------------------------- static void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements, @@ -146,40 +213,6 @@ static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements) - { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_MAIN_TEX]); - - EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_USE_BASE_AS1_ST], out bool applyTo1st ); - EditorGUI.indentLevel -= 2; - - if (applyTo1st) { - EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[SHADER_PROP_1_ST_SHADE_COLOR]); - EditorGUI.indentLevel -= 2; - } else { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_1_ST_SHADE_MAP]); - } - - EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_USE_1_ST_AS2_ND], out bool applyTo2nd); - EditorGUI.indentLevel -= 2; - - - if (applyTo2nd) { - EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[SHADER_PROP_2_ND_SHADE_COLOR]); - EditorGUI.indentLevel -= 2; - } else { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_2_ND_SHADE_MAP]); - } - - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_2D_LIGHT_STRENGTH]); - - } - static void DrawDirectionalLightGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements, ref bool foldout) { @@ -254,12 +287,12 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty label = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_2_ND_SHADE_MAP), + mainPropertyName = new MaterialName(SHADER_PROP_2ND_SHADE_MAP), label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), - extraPropertyName1 = new MaterialName(SHADER_PROP_2_ND_SHADE_COLOR) + extraPropertyName1 = new MaterialName(SHADER_PROP_2ND_SHADE_COLOR) }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_2_ND_SHADE_COLOR), + mainPropertyName = new MaterialName(SHADER_PROP_2ND_SHADE_COLOR), label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), }, new MaterialUIElement { @@ -267,10 +300,29 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty label = new GUIContent("Apply to 1st shading map", "Apply Base map to the 1st shading map."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_USE_1_ST_AS2_ND), + mainPropertyName = new MaterialName(SHADER_PROP_USE_1ST_AS_2ND), label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), }, + //Shading + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_BASE_TO_1ST_SHADE_START), + label = new GUIContent("Start", "The threshold for transitioning to the 1st shade color. 0: starts transition immediately, 1: never transition."), + // + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_BASE_TO_1ST_SHADE_FEATHER), + label = new GUIContent("Feather", "Controls feathering to the 1st shade color. 0: sharp transition, 1: fully feathered."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_1ST_TO_2ND_SHADE_START), + label = new GUIContent("Start", "The threshold for transitioning to the 2nd shade color. 0: starts transition immediately, 1: never transition."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_1ST_TO_2ND_SHADE_FEATHER), + label = new GUIContent("Feather", "Controls feathering to the 2nd shade color. 0: sharp transition, 1: fully feathered."), + }, + //Normal Map new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_NORMAL_MAP), @@ -377,16 +429,25 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty //Common constants - internal const string SHADER_PROP_MAIN_TEX = "_MainTex"; - internal const string SHADER_PROP_USE_BASE_AS1_ST = "_Use_BaseAs1st"; - internal const string SHADER_PROP_USE_1_ST_AS2_ND = "_Use_1stAs2nd"; + //Colors internal const string SHADER_PROP_BASE_COLOR = "_BaseColor"; - internal const string SHADER_PROP_1_ST_SHADE_MAP = "_1st_ShadeMap"; + internal const string SHADER_PROP_MAIN_TEX = "_MainTex"; + internal const string SHADER_PROP_1_ST_SHADE_COLOR = "_1st_ShadeColor"; - internal const string SHADER_PROP_2_ND_SHADE_MAP = "_2nd_ShadeMap"; - internal const string SHADER_PROP_2_ND_SHADE_COLOR = "_2nd_ShadeColor"; - internal const string SHADER_PROP_2D_LIGHT_STRENGTH = "_2DLightStrength"; + internal const string SHADER_PROP_1_ST_SHADE_MAP = "_1st_ShadeMap"; + internal const string SHADER_PROP_USE_BASE_AS1_ST = "_Use_BaseAs1st"; + + internal const string SHADER_PROP_2ND_SHADE_COLOR = "_2nd_ShadeColor"; + internal const string SHADER_PROP_2ND_SHADE_MAP = "_2nd_ShadeMap"; + internal const string SHADER_PROP_USE_1ST_AS_2ND = "_Use_1stAs2nd"; + + //Shading + internal const string SHADER_PROP_BASE_TO_1ST_SHADE_START = "_BaseTo1st_ShadeStart"; + internal const string SHADER_PROP_BASE_TO_1ST_SHADE_FEATHER = "_BaseTo1st_ShadeFeather"; + internal const string SHADER_PROP_1ST_TO_2ND_SHADE_START = "_1stTo2nd_ShadeStart"; + internal const string SHADER_PROP_1ST_TO_2ND_SHADE_FEATHER = "_1stTo2nd_ShadeFeather"; + internal const string SHADER_PROP_2D_LIGHT_STRENGTH = "_2DLightStrength"; internal const string SHADER_PROP_NORMAL_MAP = "_NormalMap"; internal const string SHADER_PROP_BUMP_SCALE = "_BumpScale"; @@ -419,9 +480,19 @@ internal enum OutlineMode { private static readonly GUIContent[] m_outlineModeEnums= EnumUtility.ToInspectorNamesAsGUIContent(typeof(OutlineMode)); private static readonly int[] m_outlineModeIndices = EnumUtility.ToIndices(typeof(OutlineMode)); + public static readonly GUIContent COLORS_FOLDOUT = EditorGUIUtility.TrTextContent("Colors", + "Colors for basic cel-shading settings in Unity Toon Shader."); + + public static readonly GUIContent SHADING_FOLDOUT = + EditorGUIUtility.TrTextContent("Shading", "Shading settings."); + + bool m_colorsFoldout = true; + bool m_shadingFoldout = true; bool m_normalMapFoldout = false; bool m_outlineFoldout = false; bool m_directionalLightFoldout = false; - + + private const int INDENT_SIZE = 2; + } diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs index 07f3c630a..f9b037f4b 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs @@ -133,15 +133,15 @@ internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, } //return true if changed, false otherwise - internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, Material[] mats, - MaterialPropertyUIElement element, ref bool foldoutState) + internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, Material[] mats, + MaterialPropertyUIElement element, ref bool foldoutState, out bool toggleEnabled) { - bool enabled = mats[0].GetInteger(element.mainProperty.id) !=0; - bool ret = DrawFoldoutWithToggleGUI(mEditor, ref foldoutState, ref enabled, element.label.text); + toggleEnabled = mats[0].GetInteger(element.mainProperty.id) !=0; + bool ret = DrawFoldoutWithToggleGUI(mEditor, ref foldoutState, ref toggleEnabled, element.label.text); if (!ret) return false; foreach (Material m in mats) - m.SetInteger(element.mainProperty.id, enabled ? 1 : 0); + m.SetInteger(element.mainProperty.id, toggleEnabled ? 1 : 0); return true; } From 8e0f02122aafeeb8fb96a1cbb498e0ee180a9694 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 20:36:10 +0900 Subject: [PATCH 244/290] update materials --- .../ToonShader_Eye_Clipping_StencilMask_3Das2D.mat | 9 +++++++-- .../ToonShader_Eyebrow_StencilMask_3Das2D.mat | 9 +++++++-- .../UnityChan_3Das2D/ToonShader_Face_3Das2D.mat | 9 +++++++-- .../UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat | 9 +++++++-- .../ToonShader_Fhair_StencilOut_3Das2D.mat | 9 +++++++-- .../UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat | 9 +++++++-- .../UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat | 9 +++++++-- .../UnityChan_3Das2D/ToonShader_Main_3Das2D.mat | 9 +++++++-- 8 files changed, 56 insertions(+), 16 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat index 08a7dae46..887d50ea8 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat @@ -57,7 +57,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_Use: 0 + - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 @@ -67,11 +67,16 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0 + - _1stTo2nd_ShadeFeather: 0.1 + - _1stTo2nd_ShadeStart: 0.25 + - _2DLightStrength: 0 - _BaseColor_Step: 0.393 - _BaseShade_Feather: 0.629 + - _BaseTo1st_ShadeFeather: 0.1 + - _BaseTo1st_ShadeStart: 0.5 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat index c43b9706b..ccb2e15d9 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat @@ -57,7 +57,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_Use: 0 + - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 @@ -67,11 +67,16 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.0001 + - _1stTo2nd_ShadeFeather: 0.1 + - _1stTo2nd_ShadeStart: 0.25 + - _2DLightStrength: 0 - _BaseColor_Step: 0.507 - _BaseShade_Feather: 0.08 + - _BaseTo1st_ShadeFeather: 0.1 + - _BaseTo1st_ShadeStart: 0.5 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat index c05d92c5e..e77ae714a 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat @@ -57,7 +57,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_Use: 0 + - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 @@ -67,11 +67,16 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.0001 + - _1stTo2nd_ShadeFeather: 0.1 + - _1stTo2nd_ShadeStart: 0.25 + - _2DLightStrength: 0 - _BaseColor_Step: 0.353 - _BaseShade_Feather: 0.121 + - _BaseTo1st_ShadeFeather: 0.1 + - _BaseTo1st_ShadeStart: 0.5 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat index 53cbc2501..c8b599c11 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat @@ -57,7 +57,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_Use: 0 + - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 @@ -67,11 +67,16 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.236 + - _1stTo2nd_ShadeFeather: 0.1 + - _1stTo2nd_ShadeStart: 0.25 + - _2DLightStrength: 0 - _BaseColor_Step: 0.801 - _BaseShade_Feather: 0.062 + - _BaseTo1st_ShadeFeather: 0.1 + - _BaseTo1st_ShadeStart: 0.5 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat index b2cd0c5f0..d7f43a127 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat @@ -57,7 +57,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_Use: 0 + - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 @@ -67,11 +67,16 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.236 + - _1stTo2nd_ShadeFeather: 0.1 + - _1stTo2nd_ShadeStart: 0.25 + - _2DLightStrength: 0 - _BaseColor_Step: 0.801 - _BaseShade_Feather: 0.062 + - _BaseTo1st_ShadeFeather: 0.1 + - _BaseTo1st_ShadeStart: 0.5 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat index 1dc502f32..67a23041d 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat @@ -57,7 +57,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_Use: 0 + - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 @@ -67,11 +67,16 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.064 + - _1stTo2nd_ShadeFeather: 0.1 + - _1stTo2nd_ShadeStart: 0.25 + - _2DLightStrength: 0 - _BaseColor_Step: 0.815 - _BaseShade_Feather: 0.13 + - _BaseTo1st_ShadeFeather: 0.1 + - _BaseTo1st_ShadeStart: 0.5 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat index 080e50529..747d49ab4 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat @@ -57,7 +57,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_Use: 0 + - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 @@ -67,11 +67,16 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.064 + - _1stTo2nd_ShadeFeather: 0.1 + - _1stTo2nd_ShadeStart: 0.25 + - _2DLightStrength: 0 - _BaseColor_Step: 0.815 - _BaseShade_Feather: 0.13 + - _BaseTo1st_ShadeFeather: 0.1 + - _BaseTo1st_ShadeStart: 0.5 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat index a487004cf..f950d3a42 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat @@ -57,7 +57,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_Use: 0 + - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 @@ -67,11 +67,16 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.08 + - _1stTo2nd_ShadeFeather: 0.1 + - _1stTo2nd_ShadeStart: 0.25 + - _2DLightStrength: 0 - _BaseColor_Step: 0.841 - _BaseShade_Feather: 0.074 + - _BaseTo1st_ShadeFeather: 0.1 + - _BaseTo1st_ShadeStart: 0.5 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - - _DirectionalLight_DiffuseFactor: 0 + - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 From a0e67d252be46f0dc3b96ba93ce23ecaea070e86 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 20:43:13 +0900 Subject: [PATCH 245/290] updater shading va;lues --- .../ToonShader_Eye_Clipping_StencilMask_3Das2D.mat | 6 +++--- .../ToonShader_Eyebrow_StencilMask_3Das2D.mat | 8 ++++---- .../Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat | 8 ++++---- .../UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat | 8 ++++---- .../ToonShader_Fhair_StencilOut_3Das2D.mat | 8 ++++---- .../UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat | 8 ++++---- .../UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat | 8 ++++---- .../Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat | 6 +++--- 8 files changed, 30 insertions(+), 30 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat index 887d50ea8..c89cf98d7 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat @@ -67,13 +67,13 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0 - - _1stTo2nd_ShadeFeather: 0.1 - - _1stTo2nd_ShadeStart: 0.25 + - _1stTo2nd_ShadeFeather: 0 + - _1stTo2nd_ShadeStart: 0 - _2DLightStrength: 0 - _BaseColor_Step: 0.393 - _BaseShade_Feather: 0.629 - _BaseTo1st_ShadeFeather: 0.1 - - _BaseTo1st_ShadeStart: 0.5 + - _BaseTo1st_ShadeStart: 0.393 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat index ccb2e15d9..7a10ab6c6 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat @@ -67,13 +67,13 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.0001 - - _1stTo2nd_ShadeFeather: 0.1 - - _1stTo2nd_ShadeStart: 0.25 + - _1stTo2nd_ShadeFeather: 0 + - _1stTo2nd_ShadeStart: 0 - _2DLightStrength: 0 - _BaseColor_Step: 0.507 - _BaseShade_Feather: 0.08 - - _BaseTo1st_ShadeFeather: 0.1 - - _BaseTo1st_ShadeStart: 0.5 + - _BaseTo1st_ShadeFeather: 0.08 + - _BaseTo1st_ShadeStart: 0.507 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat index e77ae714a..8b87ab6d9 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat @@ -67,13 +67,13 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.0001 - - _1stTo2nd_ShadeFeather: 0.1 - - _1stTo2nd_ShadeStart: 0.25 + - _1stTo2nd_ShadeFeather: 0 + - _1stTo2nd_ShadeStart: 0 - _2DLightStrength: 0 - _BaseColor_Step: 0.353 - _BaseShade_Feather: 0.121 - - _BaseTo1st_ShadeFeather: 0.1 - - _BaseTo1st_ShadeStart: 0.5 + - _BaseTo1st_ShadeFeather: 0.121 + - _BaseTo1st_ShadeStart: 0.353 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat index c8b599c11..40f71dcaa 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat @@ -67,13 +67,13 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.236 - - _1stTo2nd_ShadeFeather: 0.1 - - _1stTo2nd_ShadeStart: 0.25 + - _1stTo2nd_ShadeFeather: 0.236 + - _1stTo2nd_ShadeStart: 0.727 - _2DLightStrength: 0 - _BaseColor_Step: 0.801 - _BaseShade_Feather: 0.062 - - _BaseTo1st_ShadeFeather: 0.1 - - _BaseTo1st_ShadeStart: 0.5 + - _BaseTo1st_ShadeFeather: 0.062 + - _BaseTo1st_ShadeStart: 0.801 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat index d7f43a127..5f9b01729 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat @@ -67,13 +67,13 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.236 - - _1stTo2nd_ShadeFeather: 0.1 - - _1stTo2nd_ShadeStart: 0.25 + - _1stTo2nd_ShadeFeather: 0.236 + - _1stTo2nd_ShadeStart: 0.727 - _2DLightStrength: 0 - _BaseColor_Step: 0.801 - _BaseShade_Feather: 0.062 - - _BaseTo1st_ShadeFeather: 0.1 - - _BaseTo1st_ShadeStart: 0.5 + - _BaseTo1st_ShadeFeather: 0.062 + - _BaseTo1st_ShadeStart: 0.801 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat index 67a23041d..38cafecf0 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat @@ -67,13 +67,13 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.064 - - _1stTo2nd_ShadeFeather: 0.1 - - _1stTo2nd_ShadeStart: 0.25 + - _1stTo2nd_ShadeFeather: 0.064 + - _1stTo2nd_ShadeStart: 0.722 - _2DLightStrength: 0 - _BaseColor_Step: 0.815 - _BaseShade_Feather: 0.13 - - _BaseTo1st_ShadeFeather: 0.1 - - _BaseTo1st_ShadeStart: 0.5 + - _BaseTo1st_ShadeFeather: 0.13 + - _BaseTo1st_ShadeStart: 0.815 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat index 747d49ab4..2956778de 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat @@ -67,13 +67,13 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.064 - - _1stTo2nd_ShadeFeather: 0.1 - - _1stTo2nd_ShadeStart: 0.25 + - _1stTo2nd_ShadeFeather: 0.064 + - _1stTo2nd_ShadeStart: 0.722 - _2DLightStrength: 0 - _BaseColor_Step: 0.815 - _BaseShade_Feather: 0.13 - - _BaseTo1st_ShadeFeather: 0.1 - - _BaseTo1st_ShadeStart: 0.5 + - _BaseTo1st_ShadeFeather: 0.13 + - _BaseTo1st_ShadeStart: 0.815 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat index f950d3a42..2ab3229ea 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat @@ -67,13 +67,13 @@ Material: - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.08 - - _1stTo2nd_ShadeFeather: 0.1 + - _1stTo2nd_ShadeFeather: 0.08 - _1stTo2nd_ShadeStart: 0.25 - _2DLightStrength: 0 - _BaseColor_Step: 0.841 - _BaseShade_Feather: 0.074 - - _BaseTo1st_ShadeFeather: 0.1 - - _BaseTo1st_ShadeStart: 0.5 + - _BaseTo1st_ShadeFeather: 0.074 + - _BaseTo1st_ShadeStart: 0.841 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 From de32beb6182744b7b8276a35b63606f3317a0c3f Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 23:26:50 +0900 Subject: [PATCH 246/290] update label --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 474e0ea6c..ea4dce28e 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -307,8 +307,10 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty //Shading new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_BASE_TO_1ST_SHADE_START), - label = new GUIContent("Start", "The threshold for transitioning to the 1st shade color. 0: starts transition immediately, 1: never transition."), - // + label = new GUIContent("Start", + "The threshold for transitioning to the 1st shade color. " + + "0: use the base color (no transition), " + + "1: starts transitioning immediately."), }, new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_BASE_TO_1ST_SHADE_FEATHER), @@ -316,7 +318,10 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty }, new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_1ST_TO_2ND_SHADE_START), - label = new GUIContent("Start", "The threshold for transitioning to the 2nd shade color. 0: starts transition immediately, 1: never transition."), + label = new GUIContent("Start", + "The threshold for transitioning to the 2nd shade color. " + + "0: use the 1st shade color (no transition), " + + "1: starts transitioning immediately."), }, new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_1ST_TO_2ND_SHADE_FEATHER), From 7905761379cc2d296b959c407419d2d4db727e24 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 23:28:30 +0900 Subject: [PATCH 247/290] ThreeColorsLinearShading --- .../Assets/Shaders/Toon2D.shader | 40 ++++++++++++++++--- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 937a81d0e..a628d423c 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -163,6 +163,30 @@ Shader "Toon/Toon 3D as 2D"{ } + float3 ThreeColorsLinearShading( + float3 baseColor, + float3 firstColor, + float3 secondColor, + float3 baseTo1stStart, // t=0: use base, t=1: transition + float3 baseTo1stFeather, + float3 firstToSecondStart, //t=0: use base, t=1: transition + float3 firstToSecondFeather, + float dotNL) // dot(N.L) + { + const float t = saturate(1 - dotNL); //t = 0: light, t=1: dark shaded + + const float invBaseTo1stStart = 1 - baseTo1stStart; + const float invBaseTo2ndStart = 1 - firstToSecondStart; + + const float s1 = smoothstep(invBaseTo1stStart, invBaseTo1stStart + baseTo1stFeather,t); //works + const float s2 = smoothstep(invBaseTo2ndStart, invBaseTo2ndStart + firstToSecondFeather,t); //works + + float3 c01 = lerp(baseColor,firstColor, s1); + float3 c12 = lerp(c01, secondColor, s2); + return c12; + } + + half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv, in float3 tangentWS, in float3 bitangentWS, in float3 normalWS) { @@ -199,24 +223,24 @@ Shader "Toon/Toon 3D as 2D"{ const float3 diffuseLightFactor = (shapeLight0.rgb * _2DLightStrength) + (_DirectionalLight_Color * _DirectionalLight_DiffuseFactor * _DirectionalLight_Use); - float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); - float3 baseColor = surfaceData.albedo.rgb * diffuseLightFactor; + const float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); + const float3 baseColor = surfaceData.albedo.rgb * diffuseLightFactor; - // //v.2.0.5 + //1st and 2nd Shade float4 _1st_ShadeMap_var = lerp( SAMPLE_TEXTURE2D(_1st_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _MainTex_var, _Use_BaseAs1st); const float3 firstShadeAlbedo = _1st_ShadeColor.rgb * _1st_ShadeMap_var.rgb; - float3 firstShadeColor = firstShadeAlbedo * diffuseLightFactor; + const float3 firstShadeColor = firstShadeAlbedo * diffuseLightFactor; float4 _2nd_ShadeMap_var = lerp( SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _1st_ShadeMap_var, _Use_1stAs2nd); const float3 secondShadeAlbedo = _2nd_ShadeColor.rgb * _2nd_ShadeMap_var.rgb; - float3 secondShadeColor = secondShadeAlbedo * diffuseLightFactor; + const float3 secondShadeColor = secondShadeAlbedo * diffuseLightFactor; const float light2dDiffuse = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); - const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, _DirectionalLight_Direction) + 0.5; + const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, -_DirectionalLight_Direction) + 0.5; float _HalfLambert_var = (light2dDiffuse * _2DLightStrength) + (directionalDiffuse * _DirectionalLight_DiffuseFactor); @@ -240,6 +264,10 @@ Shader "Toon/Toon 3D as 2D"{ innerLerpOp), Set_FinalShadowMask); + Set_FinalBaseColor = ThreeColorsLinearShading(baseColor,firstShadeColor, secondShadeColor, + _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, + _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, _HalfLambert_var); + // float4 _Set_HighColorMask_var = tex2D(_Set_HighColorMask, TRANSFORM_TEX(Set_UV0, _Set_HighColorMask)); // // float _Specular_var = 0.5*dot(halfDirection,lerp( i.normalDir, normalDirection, _Is_NormalMapToHighColor ))+0.5; // Specular From c75b9e86f248d7ddb82c6d39811f876cda907f5a Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 23:37:32 +0900 Subject: [PATCH 248/290] use BaseColor --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index a628d423c..448738d93 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -178,8 +178,8 @@ Shader "Toon/Toon 3D as 2D"{ const float invBaseTo1stStart = 1 - baseTo1stStart; const float invBaseTo2ndStart = 1 - firstToSecondStart; - const float s1 = smoothstep(invBaseTo1stStart, invBaseTo1stStart + baseTo1stFeather,t); //works - const float s2 = smoothstep(invBaseTo2ndStart, invBaseTo2ndStart + firstToSecondFeather,t); //works + const float s1 = smoothstep(invBaseTo1stStart, invBaseTo1stStart + baseTo1stFeather,t); + const float s2 = smoothstep(invBaseTo2ndStart, invBaseTo2ndStart + firstToSecondFeather,t); float3 c01 = lerp(baseColor,firstColor, s1); float3 c12 = lerp(c01, secondColor, s2); @@ -224,7 +224,7 @@ Shader "Toon/Toon 3D as 2D"{ + (_DirectionalLight_Color * _DirectionalLight_DiffuseFactor * _DirectionalLight_Use); const float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); - const float3 baseColor = surfaceData.albedo.rgb * diffuseLightFactor; + const float3 baseColor = _BaseColor.rgb * surfaceData.albedo.rgb * diffuseLightFactor; //1st and 2nd Shade float4 _1st_ShadeMap_var = lerp( From bcca3f65fc1604d5fdcc5c0d9bd4e5d53cb7ddc8 Mon Sep 17 00:00:00 2001 From: sin Date: Sun, 23 Nov 2025 23:43:36 +0900 Subject: [PATCH 249/290] update main material --- .../Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat index 2ab3229ea..5ed1b90ea 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat @@ -63,12 +63,12 @@ Material: - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 - _Specular_UseDirectionalLight: 0 - - _Use_1stAs2nd: 0 + - _Use_1stAs2nd: 1 - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.08 - _1stTo2nd_ShadeFeather: 0.08 - - _1stTo2nd_ShadeStart: 0.25 + - _1stTo2nd_ShadeStart: 0 - _2DLightStrength: 0 - _BaseColor_Step: 0.841 - _BaseShade_Feather: 0.074 @@ -93,7 +93,7 @@ Material: - _2nd_ShadeColor: {r: 0.7490196, g: 0.69411767, b: 0.88235295, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _DirectionalLight_Direction: {r: -0, g: 0.3707992, b: -0.9287131, a: 0} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} From 9a205a225a70687d2fd2f3fc1a256035c76dc60a Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 09:58:39 +0900 Subject: [PATCH 250/290] remove unused code --- .../Assets/Shaders/Toon2D.shader | 30 ++++--------------- 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 448738d93..97656d715 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -240,38 +240,20 @@ Shader "Toon/Toon 3D as 2D"{ const float3 secondShadeColor = secondShadeAlbedo * diffuseLightFactor; const float light2dDiffuse = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); - const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, -_DirectionalLight_Direction) + 0.5; + const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, _DirectionalLight_Direction) + 0.5; - float _HalfLambert_var = (light2dDiffuse * _2DLightStrength) + float lightFactor = (light2dDiffuse * _2DLightStrength) + (directionalDiffuse * _DirectionalLight_DiffuseFactor); - - // //Minmimum value is same as the Minimum Feather's value with the Minimum Step's value as threshold. - // float Set_FinalShadowMask = saturate((1.0 + ( (lerp( _HalfLambert_var, _HalfLambert_var * saturate(_SystemShadowsLevel_var), _Set_SystemShadowsToBase ) - (_BaseTo1st_ShadeStart - _BaseTo1st_ShadeFeather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseTo1st_ShadeStart - (_BaseTo1st_ShadeStart-_BaseTo1st_ShadeFeather)))); - // // - // //Composition: 3 Basic Colors as Set_FinalBaseColor - - float4 _Set_1st_ShadePosition_var = float4(1, 1, 1, 1); //used in DoubleShadeWithFeather, default: white - float4 _Set_2nd_ShadePosition_var = float4(1, 1, 1, 1); //used in DoubleShadeWithFeather, default: white - - - float Set_FinalShadowMask = saturate((1.0 + ( ( _HalfLambert_var - (_BaseTo1st_ShadeStart-_BaseTo1st_ShadeFeather)) * ((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) ) / (_BaseTo1st_ShadeStart - (_BaseTo1st_ShadeStart-_BaseTo1st_ShadeFeather)))); - - - float innerLerpOp = saturate((1.0 + ((_HalfLambert_var - (_1stTo2nd_ShadeStart - _1stTo2nd_ShadeFeather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0)) / ( _1stTo2nd_ShadeStart - ( _1stTo2nd_ShadeStart - _1stTo2nd_ShadeFeather)))); - - float3 Set_FinalBaseColor = lerp(baseColor, lerp(firstShadeColor, secondShadeColor, - innerLerpOp), - Set_FinalShadowMask); - - Set_FinalBaseColor = ThreeColorsLinearShading(baseColor,firstShadeColor, secondShadeColor, + float3 Set_FinalBaseColor = ThreeColorsLinearShading(baseColor,firstShadeColor, secondShadeColor, _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, - _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, _HalfLambert_var); + _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, lightFactor); // float4 _Set_HighColorMask_var = tex2D(_Set_HighColorMask, TRANSFORM_TEX(Set_UV0, _Set_HighColorMask)); // // float _Specular_var = 0.5*dot(halfDirection,lerp( i.normalDir, normalDirection, _Is_NormalMapToHighColor ))+0.5; // Specular - // float _TweakHighColorMask_var = (saturate((_Set_HighColorMask_var.g+_Tweak_HighColorMaskLevel))*lerp( (1.0 - step(_Specular_var,(1.0 - pow(abs(_HighColor_Power),5)))), pow(abs(_Specular_var),exp2(lerp(11,1,_HighColor_Power))), _Is_SpecularToHighColor )); + // float _TweakHighColorMask_var = ( + // saturate((_Set_HighColorMask_var.g+_Tweak_HighColorMaskLevel))*lerp( (1.0 - step(_Specular_var,(1.0 - pow(abs(_HighColor_Power),5)))), pow(abs(_Specular_var),exp2(lerp(11,1,_HighColor_Power))), _Is_SpecularToHighColor )); // // float4 _HighColor_Tex_var = tex2D(_HighColor_Tex, TRANSFORM_TEX(Set_UV0, _HighColor_Tex)); // From 67a3189f3617c7f085b6b288f927e4096709ad0f Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 10:09:00 +0900 Subject: [PATCH 251/290] invert the light direction --- .../Assets/ScriptsDev/ToonDirectionalLightController.cs | 2 +- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs index 66a075a23..e5aef079d 100644 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs @@ -14,7 +14,7 @@ void Update() { return; } - Vector3 lightDir = -m_light.transform.forward; + Vector3 lightDir = m_light.transform.forward; Color lightColor = m_light.color; float lightIntensity = m_light.intensity; diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 97656d715..e3174c1b0 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -240,7 +240,7 @@ Shader "Toon/Toon 3D as 2D"{ const float3 secondShadeColor = secondShadeAlbedo * diffuseLightFactor; const float light2dDiffuse = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); - const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, _DirectionalLight_Direction) + 0.5; + const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, -_DirectionalLight_Direction) + 0.5; float lightFactor = (light2dDiffuse * _2DLightStrength) + (directionalDiffuse * _DirectionalLight_DiffuseFactor); From a4881f042462807bc9dbb05887fb55146a9e79de Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 10:15:55 +0900 Subject: [PATCH 252/290] Make lighting settings in one place --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 69 +++++++++++-------- 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index ea4dce28e..3ef3b62e1 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -27,7 +27,7 @@ public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { EditorGUI.BeginChangeCheck(); DrawThreeColorsGUI(mEditor, mats, m_materialPropertyUIElements, ref m_colorsFoldout); DrawShadingGUI(mEditor, mats, m_materialPropertyUIElements, ref m_shadingFoldout); - DrawDirectionalLightGUI(mEditor, mats, m_materialPropertyUIElements, ref m_directionalLightFoldout); + DrawLightingGUI(mEditor, mats, m_materialPropertyUIElements, ref m_lightingFoldout); DrawNormalMapGUI(mEditor, m_materialPropertyUIElements, ref m_normalMapFoldout); DrawOutlineGUI(mEditor, mats, m_materialPropertyUIElements, ref m_outlineFoldout); @@ -49,7 +49,7 @@ void RefreshFoldouts(Material mat, Dictionary m_outlineFoldout = mat.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); bool lightEnabled = mat.GetInteger(uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_USE].mainProperty.id) !=0; - m_directionalLightFoldout = lightEnabled; + m_lightingFoldout = lightEnabled; } @@ -88,11 +88,10 @@ static void DrawThreeColorsGUI(MaterialEditor mEditor, Material[] mats, } else { ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_2ND_SHADE_MAP]); } - - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_2D_LIGHT_STRENGTH]); EditorGUILayout.Space(); } +//---------------------------------------------------------------------------------------------------------------------- static void DrawShadingGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements, ref bool foldout) { @@ -115,6 +114,39 @@ static void DrawShadingGUI(MaterialEditor mEditor, Material[] mats, EditorGUILayout.Space(); } + +//---------------------------------------------------------------------------------------------------------------------- + + static void DrawLightingGUI(MaterialEditor mEditor, Material[] mats, + Dictionary uiElements, ref bool foldout) { + + ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, LIGHTING_FOLDOUT); + + + + if (!foldout) + return; + + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_2D_LIGHT_STRENGTH]); + EditorGUILayout.Space(); + + ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_USE], + out bool directionalLightEnabled); + + EditorGUI.indentLevel+= INDENT_SIZE; + + EditorGUI.BeginDisabledGroup(!directionalLightEnabled); + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction]); + ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR]); + EditorGUI.EndDisabledGroup(); + + EditorGUI.indentLevel-= INDENT_SIZE; + EditorGUILayout.Space(); + + } //---------------------------------------------------------------------------------------------------------------------- static void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements, @@ -211,25 +243,6 @@ static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements, ref bool foldout) { - - ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, mats, - uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_USE], ref foldout, out bool toggleEnabled); - - if (!foldout) - return; - - EditorGUI.BeginDisabledGroup(!toggleEnabled); - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction]); - ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR]); - EditorGUI.EndDisabledGroup(); - } //---------------------------------------------------------------------------------------------------------------------- @@ -485,17 +498,19 @@ internal enum OutlineMode { private static readonly GUIContent[] m_outlineModeEnums= EnumUtility.ToInspectorNamesAsGUIContent(typeof(OutlineMode)); private static readonly int[] m_outlineModeIndices = EnumUtility.ToIndices(typeof(OutlineMode)); - public static readonly GUIContent COLORS_FOLDOUT = EditorGUIUtility.TrTextContent("Colors", + static readonly GUIContent COLORS_FOLDOUT = EditorGUIUtility.TrTextContent("Colors", "Colors for basic cel-shading settings in Unity Toon Shader."); - public static readonly GUIContent SHADING_FOLDOUT = - EditorGUIUtility.TrTextContent("Shading", "Shading settings."); + static readonly GUIContent SHADING_FOLDOUT = EditorGUIUtility.TrTextContent("Shading", "Shading settings."); + + static readonly GUIContent LIGHTING_FOLDOUT + = EditorGUIUtility.TrTextContent("Lighting", "Lighting settings."); bool m_colorsFoldout = true; bool m_shadingFoldout = true; bool m_normalMapFoldout = false; bool m_outlineFoldout = false; - bool m_directionalLightFoldout = false; + bool m_lightingFoldout = false; private const int INDENT_SIZE = 2; From 7b8d34ed3bf8972cedde0505f3f0af15a851009a Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 10:20:28 +0900 Subject: [PATCH 253/290] rename diffuse and specular vars --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 12 ++++----- .../Assets/Shaders/Toon2D.shader | 26 +++++++++++-------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 3ef3b62e1..e3917f1cf 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -139,8 +139,8 @@ static void DrawLightingGUI(MaterialEditor mEditor, Material[] mats, ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction]); ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_STRENGTH]); EditorGUI.EndDisabledGroup(); EditorGUI.indentLevel-= INDENT_SIZE; @@ -434,12 +434,12 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "Multiplier for the 2D light contribution."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR), + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH), label = new GUIContent("Diffuse Factor", "Multiplier for the diffuse lighting contribution."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR), + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_STRENGTH), label = new GUIContent("Specular Factor", "Multiplier for the specular lighting contribution."), }, @@ -484,8 +484,8 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_OUTLINE_CUSTOM_NORMAL_MAP = "_Outline_CustomNormalMap"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_USE = "_DirectionalLight_Use"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_FACTOR = "_DirectionalLight_DiffuseFactor"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_FACTOR = "_DirectionalLight_SpecularFactor"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH = "_DirectionalLight_DiffuseStrength"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_STRENGTH = "_DirectionalLight_SpecularStrength"; //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index e3174c1b0..446fb2206 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -46,8 +46,8 @@ Shader "Toon/Toon 3D as 2D"{ _DirectionalLight_Direction ("Specular Light Direction", Vector) = (0,-1,0,0) _DirectionalLight_Color("Directional Light Color", Color) = (1,1,1,1) _DirectionalLight_Intensity ("Directional Light Intensity", float) = 0.5 - _DirectionalLight_DiffuseFactor ("Directional Light: Diffuse Factor", Range(0,1)) = 0.5 - _DirectionalLight_SpecularFactor ("Directional Light: Specular Factor", Range(0,1)) = 0.5 + _DirectionalLight_DiffuseStrength ("Directional Light: Diffuse Strength", Range(0,1)) = 0.5 + _DirectionalLight_SpecularStrength ("Directional Light: Specular Strength", Range(0,1)) = 0.5 } @@ -126,8 +126,8 @@ Shader "Toon/Toon 3D as 2D"{ float3 _DirectionalLight_Direction; float4 _DirectionalLight_Color; float _DirectionalLight_Intensity; - float _DirectionalLight_DiffuseFactor; - float _DirectionalLight_SpecularFactor; + float _DirectionalLight_DiffuseStrength; + float _DirectionalLight_SpecularStrength; CBUFFER_END @@ -221,7 +221,7 @@ Shader "Toon/Toon 3D as 2D"{ } const float3 diffuseLightFactor = (shapeLight0.rgb * _2DLightStrength) - + (_DirectionalLight_Color * _DirectionalLight_DiffuseFactor * _DirectionalLight_Use); + + (_DirectionalLight_Color * _DirectionalLight_DiffuseStrength * _DirectionalLight_Use); const float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); const float3 baseColor = _BaseColor.rgb * surfaceData.albedo.rgb * diffuseLightFactor; @@ -239,19 +239,23 @@ Shader "Toon/Toon 3D as 2D"{ const float3 secondShadeAlbedo = _2nd_ShadeColor.rgb * _2nd_ShadeMap_var.rgb; const float3 secondShadeColor = secondShadeAlbedo * diffuseLightFactor; - const float light2dDiffuse = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); - const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, -_DirectionalLight_Direction) + 0.5; + const float light2dDiffuse = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + + const float3 directionalLightDirection = normalize(-_DirectionalLight_Direction); + const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, directionalLightDirection) + 0.5; float lightFactor = (light2dDiffuse * _2DLightStrength) - + (directionalDiffuse * _DirectionalLight_DiffuseFactor); + + (directionalDiffuse * _DirectionalLight_DiffuseStrength); float3 Set_FinalBaseColor = ThreeColorsLinearShading(baseColor,firstShadeColor, secondShadeColor, _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, lightFactor); - // float4 _Set_HighColorMask_var = tex2D(_Set_HighColorMask, TRANSFORM_TEX(Set_UV0, _Set_HighColorMask)); - // - // float _Specular_var = 0.5*dot(halfDirection,lerp( i.normalDir, normalDirection, _Is_NormalMapToHighColor ))+0.5; // Specular + const float4 _Set_HighColorMask_var = float4(1,1,1,1); + + // const float3 halfDirection = normalize(viewDirection+lightDirection); + // const float directionalSpecular = 0.5*dot(halfDirection,perturbedNormalWS) + 0.5; + // float _TweakHighColorMask_var = ( // saturate((_Set_HighColorMask_var.g+_Tweak_HighColorMaskLevel))*lerp( (1.0 - step(_Specular_var,(1.0 - pow(abs(_HighColor_Power),5)))), pow(abs(_Specular_var),exp2(lerp(11,1,_HighColor_Power))), _Is_SpecularToHighColor )); // From 95bc522e34f3c6f9429ebe8f9f426623a16ee1be Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 12:14:41 +0900 Subject: [PATCH 254/290] Show highlight properties in the GUI --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 131 ++++++++++++------ .../Assets/Shaders/Toon2D.shader | 60 +++++--- 2 files changed, 131 insertions(+), 60 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index e3917f1cf..8ab23e7c9 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -140,7 +140,18 @@ static void DrawLightingGUI(MaterialEditor mEditor, Material[] mats, ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_STRENGTH]); + + EditorGUILayout.LabelField("Highlight Settings"); + EditorGUI.indentLevel+= INDENT_SIZE; + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[SHADER_PROP_VIEW_DIRECTION]); + ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_HIGHLIGHT_TEX]); + ToonEditorGUIUtility.DrawIntPopupGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE], + m_highlightModeEnums, m_highlightModeIndices,out int _); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH]); + ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_POWER]); + + EditorGUI.indentLevel-= INDENT_SIZE; + EditorGUI.EndDisabledGroup(); EditorGUI.indentLevel-= INDENT_SIZE; @@ -341,6 +352,61 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty label = new GUIContent("Feather", "Controls feathering to the 2nd shade color. 0: sharp transition, 1: fully feathered."), }, + //Lighting + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_2D_LIGHT_STRENGTH), + label = new GUIContent("2D Light Factor", + "Multiplier for the 2D light contribution."), + }, + //Custom Directional Light + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_USE), + label = new GUIContent("Custom Directional Light", + "Apply a custom directional light."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction), + label = new GUIContent("Light Direction", + "The direction of the custom directional light. "), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color), + label = new GUIContent("Light Color", + "The color of the custom directional light. "), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity), + label = new GUIContent("Light Intensity", + "The intensity of the custom directional light. "), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH), + label = new GUIContent("Diffuse Strength", + "Multiplier for the diffuse contribution."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_VIEW_DIRECTION), + label = new GUIContent("View Direction", "Camera View Direction"), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_HIGHLIGHT_TEX), + label = new GUIContent("Highlight Map", "Highlight Map."), + extraPropertyName1 = new MaterialName(SHADER_PROP_HIGHLIGHT_COLOR) + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE), + label = new GUIContent("Mode", "Highlight mode."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH), + label = new GUIContent("Strength", "Multiplier for the highlight contribution."), + }, + new MaterialUIElement { + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_POWER), + label = new GUIContent("Power", "Highlight power factor."), + }, + + //Normal Map new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_NORMAL_MAP), @@ -407,42 +473,6 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty }, //Outline End - //Custom Directional Light - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_USE), - label = new GUIContent("Custom Directional Light", - "Apply a custom directional light."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction), - label = new GUIContent("Light Direction", - "The direction of the custom directional light. "), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color), - label = new GUIContent("Light Color", - "The color of the custom directional light. "), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity), - label = new GUIContent("Light Intensity", - "The intensity of the custom directional light. "), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_2D_LIGHT_STRENGTH), - label = new GUIContent("2D Light Factor", - "Multiplier for the 2D light contribution."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH), - label = new GUIContent("Diffuse Factor", - "Multiplier for the diffuse lighting contribution."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_STRENGTH), - label = new GUIContent("Specular Factor", - "Multiplier for the specular lighting contribution."), - }, }; @@ -466,6 +496,21 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_1ST_TO_2ND_SHADE_FEATHER = "_1stTo2nd_ShadeFeather"; internal const string SHADER_PROP_2D_LIGHT_STRENGTH = "_2DLightStrength"; + + //Lighting + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_USE = "_DirectionalLight_Use"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH = "_DirectionalLight_DiffuseStrength"; + + + internal const string SHADER_PROP_VIEW_DIRECTION = "_ViewDirection"; + internal const string SHADER_PROP_HIGHLIGHT_COLOR = "_HighlightColor"; + internal const string SHADER_PROP_HIGHLIGHT_TEX = "_HighlightTex"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE = "_DirectionalLight_HighlightMode"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH = "_DirectionalLight_HighlightStrength"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_POWER = "_DirectionalLight_HighlightPower"; + + + internal const string SHADER_PROP_NORMAL_MAP = "_NormalMap"; internal const string SHADER_PROP_BUMP_SCALE = "_BumpScale"; @@ -483,9 +528,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_OUTLINE_USE_CUSTOM_NORMAL_MAP = "_Outline_UseCustomNormalMap"; internal const string SHADER_PROP_OUTLINE_CUSTOM_NORMAL_MAP = "_Outline_CustomNormalMap"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_USE = "_DirectionalLight_Use"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH = "_DirectionalLight_DiffuseStrength"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_SPECULAR_STRENGTH = "_DirectionalLight_SpecularStrength"; + //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; @@ -494,10 +537,18 @@ internal enum OutlineMode { NormalDirection, PositionScaling } + + internal enum HighlightMode { + Hard, + Soft, + } private static readonly GUIContent[] m_outlineModeEnums= EnumUtility.ToInspectorNamesAsGUIContent(typeof(OutlineMode)); private static readonly int[] m_outlineModeIndices = EnumUtility.ToIndices(typeof(OutlineMode)); + private static readonly GUIContent[] m_highlightModeEnums = EnumUtility.ToInspectorNamesAsGUIContent(typeof(HighlightMode)); + private static readonly int[] m_highlightModeIndices = EnumUtility.ToIndices(typeof(HighlightMode)); + static readonly GUIContent COLORS_FOLDOUT = EditorGUIUtility.TrTextContent("Colors", "Colors for basic cel-shading settings in Unity Toon Shader."); diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 446fb2206..d206f1b05 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -26,6 +26,19 @@ Shader "Toon/Toon 3D as 2D"{ [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching + //Directional Light + _DirectionalLight_Use ("Use Directional Light", Integer) = 0 + _DirectionalLight_Direction ("Directional Light Direction", Vector) = (0,-1,0,0) + _DirectionalLight_Color("Directional Light Color", Color) = (1,1,1,1) + _DirectionalLight_Intensity ("Directional Light Intensity", float) = 0.5 + _DirectionalLight_DiffuseStrength ("Directional Light: Diffuse Strength", Range(0,1)) = 0.5 + + _ViewDirection ("Camera View Direction", Vector) = (0,0,1,0) + _HighlightColor ("Highlight Color", Color) = (1,1,1,1) + _HighlightTex ("HighColor Map", 2D) = "white" {} + _DirectionalLight_HighlightMode ("Directional Light: Highlight Mode", Integer) = 0 //0: Hard, 1: Soft + _DirectionalLight_HighlightStrength ("Directional Light: Highlight Strength", Range(0,1)) = 0.5 + _DirectionalLight_HighlightPower ("Directional Light: Highlight Power", Range(0,1)) = 0.3 //Outline _OutlineMode("Outline Mode", Integer) = 0 @@ -41,13 +54,6 @@ Shader "Toon/Toon 3D as 2D"{ _Outline_UseCustomNormalMap ("Use Custom Normal Map", Integer ) = 0 _Outline_CustomNormalMap ("Custom Normal Map", 2D) = "white" {} - //Directional Light - _DirectionalLight_Use ("Use Directional Light", Integer) = 0 - _DirectionalLight_Direction ("Specular Light Direction", Vector) = (0,-1,0,0) - _DirectionalLight_Color("Directional Light Color", Color) = (1,1,1,1) - _DirectionalLight_Intensity ("Directional Light Intensity", float) = 0.5 - _DirectionalLight_DiffuseStrength ("Directional Light: Diffuse Strength", Range(0,1)) = 0.5 - _DirectionalLight_SpecularStrength ("Directional Light: Specular Strength", Range(0,1)) = 0.5 } @@ -127,8 +133,13 @@ Shader "Toon/Toon 3D as 2D"{ float4 _DirectionalLight_Color; float _DirectionalLight_Intensity; float _DirectionalLight_DiffuseStrength; - float _DirectionalLight_SpecularStrength; - + + float3 _ViewDirection; + float4 _HighlightColor; + int _DirectionalLight_HighlightMode; + float _DirectionalLight_HighlightStrength; + float _DirectionalLight_HighlightPower; + CBUFFER_END //---------------------------------------------------------------------------------------------------------------------- @@ -136,6 +147,10 @@ Shader "Toon/Toon 3D as 2D"{ TEXTURE2D(_1st_ShadeMap); TEXTURE2D(_2nd_ShadeMap); + + TEXTURE2D(_HighlightTex); + SAMPLER(sampler_HighlightTex); + float4 _HighlightTex_ST; #include "ObjectTransform.hlsl" @@ -253,18 +268,23 @@ Shader "Toon/Toon 3D as 2D"{ const float4 _Set_HighColorMask_var = float4(1,1,1,1); - // const float3 halfDirection = normalize(viewDirection+lightDirection); - // const float directionalSpecular = 0.5*dot(halfDirection,perturbedNormalWS) + 0.5; - // float _TweakHighColorMask_var = ( - // saturate((_Set_HighColorMask_var.g+_Tweak_HighColorMaskLevel))*lerp( (1.0 - step(_Specular_var,(1.0 - pow(abs(_HighColor_Power),5)))), pow(abs(_Specular_var),exp2(lerp(11,1,_HighColor_Power))), _Is_SpecularToHighColor )); - // - // float4 _HighColor_Tex_var = tex2D(_HighColor_Tex, TRANSFORM_TEX(Set_UV0, _HighColor_Tex)); - // - // float3 _HighColor_var = (lerp( (_HighColor_Tex_var.rgb*_HighColor.rgb), ((_HighColor_Tex_var.rgb*_HighColor.rgb)*Set_LightColor), _Is_LightColor_HighColor )*_TweakHighColorMask_var); - // //Composition: 3 Basic Colors and HighColor as Set_HighColor - // float3 Set_HighColor = (lerp(SATURATE_IF_SDR((Set_FinalBaseColor-_TweakHighColorMask_var)), Set_FinalBaseColor, lerp(_Is_BlendAddToHiColor,1.0,_Is_SpecularToHighColor) )+lerp( _HighColor_var, (_HighColor_var*((1.0 - Set_FinalShadowMask)+(Set_FinalShadowMask*_TweakHighColorOnShadow))), _Is_UseTweakHighColorOnShadow )); - + const float3 viewDirection = normalize(-_ViewDirection); + const float3 halfDirection = normalize(viewDirection + directionalLightDirection); + const float dotHN = 0.5*dot(halfDirection,perturbedNormalWS) + 0.5; + + float _TweakHighColorMask_var = + lerp( (1.0 - step(dotHN,(1.0 - pow(abs(_DirectionalLight_HighlightPower),5)))), + pow(abs(dotHN),exp2(lerp(11,1,_DirectionalLight_HighlightPower))), _DirectionalLight_HighlightMode ); + + const float4 highlightTex = SAMPLE_TEXTURE2D(_HighlightTex, sampler_HighlightTex, TRANSFORM_TEX(uv, _HighlightTex)); + const float3 highlightAlbedo = highlightTex.rgb * _HighlightColor.rgb; + const float3 highlightColor = highlightAlbedo * _DirectionalLight_HighlightStrength; + + float3 _HighColor_var = highlightColor * _DirectionalLight_Color * _DirectionalLight_Use * _TweakHighColorMask_var; + + float3 Set_HighColor = Set_FinalBaseColor + _HighColor_var; + Set_FinalBaseColor = Set_FinalBaseColor * _ShapeLightBlendFactors0.x; From 4b1911e0081f5638b81feb88995e65f29a925eb4 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 12:20:18 +0900 Subject: [PATCH 255/290] add CameraViewController --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 5 ++--- .../Assets/ScriptsDev/Toon3Das2DConstants.cs | 1 + .../ScriptsDev/ToonCameraViewController.cs | 22 +++++++++++++++++++ .../ToonCameraViewController.cs.meta | 2 ++ 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 8ab23e7c9..9cbb5773c 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -143,7 +143,7 @@ static void DrawLightingGUI(MaterialEditor mEditor, Material[] mats, EditorGUILayout.LabelField("Highlight Settings"); EditorGUI.indentLevel+= INDENT_SIZE; - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[SHADER_PROP_VIEW_DIRECTION]); + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.SHADER_PROP_VIEW_DIRECTION]); ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_HIGHLIGHT_TEX]); ToonEditorGUIUtility.DrawIntPopupGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE], m_highlightModeEnums, m_highlightModeIndices,out int _); @@ -385,7 +385,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "Multiplier for the diffuse contribution."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_VIEW_DIRECTION), + mainPropertyName = new MaterialName(Toon3Das2DConstants.SHADER_PROP_VIEW_DIRECTION), label = new GUIContent("View Direction", "Camera View Direction"), }, new MaterialUIElement { @@ -502,7 +502,6 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH = "_DirectionalLight_DiffuseStrength"; - internal const string SHADER_PROP_VIEW_DIRECTION = "_ViewDirection"; internal const string SHADER_PROP_HIGHLIGHT_COLOR = "_HighlightColor"; internal const string SHADER_PROP_HIGHLIGHT_TEX = "_HighlightTex"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE = "_DirectionalLight_HighlightMode"; diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs index 9f4d24187..e69e8c93d 100644 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs @@ -4,4 +4,5 @@ public static class Toon3Das2DConstants { public const string ShaderPropUnlit_DirectionalLight_Color = "_DirectionalLight_Color"; public const string ShaderPropUnlit_DirectionalLight_Intensity = "_DirectionalLight_Intensity"; + public const string SHADER_PROP_VIEW_DIRECTION = "_ViewDirection"; } \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs new file mode 100644 index 000000000..e575b4628 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using UnityEngine; + +[ExecuteAlways] +internal class ToonCameraViewController : MonoBehaviour { + + + void Update() { + + Vector3 dir = transform.forward; + + foreach (Material mat in m_materials) { + if (mat == null) continue; + mat.SetVector(Toon3Das2DConstants.SHADER_PROP_VIEW_DIRECTION, dir); + } + } + + +//---------------------------------------------------------------------------------------------------------------------- + [SerializeField] private List m_materials = new List(); + +} \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta new file mode 100644 index 000000000..c6f5c36a3 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 76eb1733b1eefbe4fb94e0398915fc49 From 93e20bbb716f2359dba8fc77c994b2d45fdb0c54 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 12:57:42 +0900 Subject: [PATCH 256/290] Revert "add CameraViewController" This reverts commit 6a428ffd65e742a1c83c58bca9ba683fa33e998f. --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 5 +++-- .../Assets/ScriptsDev/Toon3Das2DConstants.cs | 1 - .../ScriptsDev/ToonCameraViewController.cs | 22 ------------------- .../ToonCameraViewController.cs.meta | 2 -- 4 files changed, 3 insertions(+), 27 deletions(-) delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 9cbb5773c..8ab23e7c9 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -143,7 +143,7 @@ static void DrawLightingGUI(MaterialEditor mEditor, Material[] mats, EditorGUILayout.LabelField("Highlight Settings"); EditorGUI.indentLevel+= INDENT_SIZE; - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.SHADER_PROP_VIEW_DIRECTION]); + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[SHADER_PROP_VIEW_DIRECTION]); ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_HIGHLIGHT_TEX]); ToonEditorGUIUtility.DrawIntPopupGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE], m_highlightModeEnums, m_highlightModeIndices,out int _); @@ -385,7 +385,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "Multiplier for the diffuse contribution."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(Toon3Das2DConstants.SHADER_PROP_VIEW_DIRECTION), + mainPropertyName = new MaterialName(SHADER_PROP_VIEW_DIRECTION), label = new GUIContent("View Direction", "Camera View Direction"), }, new MaterialUIElement { @@ -502,6 +502,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH = "_DirectionalLight_DiffuseStrength"; + internal const string SHADER_PROP_VIEW_DIRECTION = "_ViewDirection"; internal const string SHADER_PROP_HIGHLIGHT_COLOR = "_HighlightColor"; internal const string SHADER_PROP_HIGHLIGHT_TEX = "_HighlightTex"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE = "_DirectionalLight_HighlightMode"; diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs index e69e8c93d..9f4d24187 100644 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs @@ -4,5 +4,4 @@ public static class Toon3Das2DConstants { public const string ShaderPropUnlit_DirectionalLight_Color = "_DirectionalLight_Color"; public const string ShaderPropUnlit_DirectionalLight_Intensity = "_DirectionalLight_Intensity"; - public const string SHADER_PROP_VIEW_DIRECTION = "_ViewDirection"; } \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs deleted file mode 100644 index e575b4628..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -[ExecuteAlways] -internal class ToonCameraViewController : MonoBehaviour { - - - void Update() { - - Vector3 dir = transform.forward; - - foreach (Material mat in m_materials) { - if (mat == null) continue; - mat.SetVector(Toon3Das2DConstants.SHADER_PROP_VIEW_DIRECTION, dir); - } - } - - -//---------------------------------------------------------------------------------------------------------------------- - [SerializeField] private List m_materials = new List(); - -} \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta deleted file mode 100644 index c6f5c36a3..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 76eb1733b1eefbe4fb94e0398915fc49 From a1f87bdb78ce2e062faeac1f029d7c1d5242ebc7 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 14:42:58 +0900 Subject: [PATCH 257/290] pass positionWS to the fragment shader --- .../Assets/Shaders/Toon2D.shader | 34 ++++++++----------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index d206f1b05..d6a168dc9 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -33,7 +33,7 @@ Shader "Toon/Toon 3D as 2D"{ _DirectionalLight_Intensity ("Directional Light Intensity", float) = 0.5 _DirectionalLight_DiffuseStrength ("Directional Light: Diffuse Strength", Range(0,1)) = 0.5 - _ViewDirection ("Camera View Direction", Vector) = (0,0,1,0) + _DirectionalLight_ViewPosition ("Directional Light: View Position", Vector) = (0,0,1,0) _HighlightColor ("Highlight Color", Color) = (1,1,1,1) _HighlightTex ("HighColor Map", 2D) = "white" {} _DirectionalLight_HighlightMode ("Directional Light: Highlight Mode", Integer) = 0 //0: Hard, 1: Soft @@ -103,6 +103,7 @@ Shader "Toon/Toon 3D as 2D"{ half2 lightingUV : TEXCOORD1; float3 normalWS : TEXCOORD2; float4 tangentWS : TEXCOORD3; + float3 positionWS : TEXCOORD4; UNITY_VERTEX_OUTPUT_STEREO }; @@ -134,7 +135,7 @@ Shader "Toon/Toon 3D as 2D"{ float _DirectionalLight_Intensity; float _DirectionalLight_DiffuseStrength; - float3 _ViewDirection; + float3 _DirectionalLight_ViewPosition; float4 _HighlightColor; int _DirectionalLight_HighlightMode; float _DirectionalLight_HighlightStrength; @@ -163,16 +164,13 @@ Shader "Toon/Toon 3D as 2D"{ o.positionCS = TransformObjectToHClip(input.positionOS); const float3 normalWS = TransformObjectToWorldDir(input.normal); - #if defined(DEBUG_DISPLAY) - o.positionWS = TransformObjectToWorld(input.positionOS); - o.normalWS = normalWS; - #endif o.uv = input.uv; o.lightingUV = half2(ComputeScreenPos(o.positionCS / o.positionCS.w).xy); o.normalWS = normalWS; const float3 tangentWS = normalize( mul( GetObjectToWorldMatrix(), float4( input.tangent.xyz, 0 ) ).xyz); o.tangentWS = float4(tangentWS, input.tangent.w); + o.positionWS = TransformObjectToWorld(input.positionOS); return o; } @@ -203,7 +201,7 @@ Shader "Toon/Toon 3D as 2D"{ half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv, - in float3 tangentWS, in float3 bitangentWS, in float3 normalWS) + in float3 tangentWS, in float3 bitangentWS, in float3 normalWS, in float3 positionWS) { #if defined(DEBUG_DISPLAY) half4 debugColor = 0; @@ -266,17 +264,17 @@ Shader "Toon/Toon 3D as 2D"{ _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, lightFactor); - const float4 _Set_HighColorMask_var = float4(1,1,1,1); - - - const float3 viewDirection = normalize(-_ViewDirection); + //Highlight + const float3 viewDirection = normalize(_DirectionalLight_ViewPosition - positionWS); const float3 halfDirection = normalize(viewDirection + directionalLightDirection); - const float dotHN = 0.5*dot(halfDirection,perturbedNormalWS) + 0.5; + float dotHN_01 = 0.5 * dot(halfDirection,perturbedNormalWS) + 0.5; - float _TweakHighColorMask_var = - lerp( (1.0 - step(dotHN,(1.0 - pow(abs(_DirectionalLight_HighlightPower),5)))), - pow(abs(dotHN),exp2(lerp(11,1,_DirectionalLight_HighlightPower))), _DirectionalLight_HighlightMode ); + float _TweakHighColorMask_var = + lerp( (1.0 - step(dotHN_01,(1.0 - pow(abs(_DirectionalLight_HighlightPower),5)))), + pow(abs(dotHN_01),exp2(lerp(11,1,_DirectionalLight_HighlightPower))), _DirectionalLight_HighlightMode ); + + const float4 highlightTex = SAMPLE_TEXTURE2D(_HighlightTex, sampler_HighlightTex, TRANSFORM_TEX(uv, _HighlightTex)); const float3 highlightAlbedo = highlightTex.rgb * _HighlightColor.rgb; const float3 highlightColor = highlightAlbedo * _DirectionalLight_HighlightStrength; @@ -284,9 +282,8 @@ Shader "Toon/Toon 3D as 2D"{ float3 _HighColor_var = highlightColor * _DirectionalLight_Color * _DirectionalLight_Use * _TweakHighColorMask_var; float3 Set_HighColor = Set_FinalBaseColor + _HighColor_var; - - Set_FinalBaseColor = Set_FinalBaseColor * _ShapeLightBlendFactors0.x; + Set_FinalBaseColor = (Set_FinalBaseColor ) * _ShapeLightBlendFactors0.x + _HighColor_var; half4 shapeLight0Modulate = half4(Set_FinalBaseColor, alpha); half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; @@ -315,7 +312,6 @@ Shader "Toon/Toon 3D as 2D"{ const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.uv); const half3 normalTS = UnpackNormalScale(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.uv), _BumpScale); - SurfaceData2D surfaceData; InputData2D inputData; @@ -332,7 +328,7 @@ Shader "Toon/Toon 3D as 2D"{ #endif return CombinedShapeLightShared2(surfaceData, inputData, input.uv, - tangentWS, bitangentWS, normalWS); + tangentWS, bitangentWS, normalWS, input.positionWS); } From 37bb31eef3678836fc89ebbfd263112f38ee6693 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 14:43:46 +0900 Subject: [PATCH 258/290] GUI for viewPos --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 8ab23e7c9..a00272007 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -143,12 +143,12 @@ static void DrawLightingGUI(MaterialEditor mEditor, Material[] mats, EditorGUILayout.LabelField("Highlight Settings"); EditorGUI.indentLevel+= INDENT_SIZE; - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[SHADER_PROP_VIEW_DIRECTION]); + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION]); ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_HIGHLIGHT_TEX]); ToonEditorGUIUtility.DrawIntPopupGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE], m_highlightModeEnums, m_highlightModeIndices,out int _); ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH]); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_POWER]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_POWER]); EditorGUI.indentLevel-= INDENT_SIZE; @@ -385,8 +385,8 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "Multiplier for the diffuse contribution."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_VIEW_DIRECTION), - label = new GUIContent("View Direction", "Camera View Direction"), + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION), + label = new GUIContent("View Position", "Camera View Position"), }, new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_HIGHLIGHT_TEX), @@ -502,7 +502,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH = "_DirectionalLight_DiffuseStrength"; - internal const string SHADER_PROP_VIEW_DIRECTION = "_ViewDirection"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION = "_DirectionalLight_ViewPosition"; internal const string SHADER_PROP_HIGHLIGHT_COLOR = "_HighlightColor"; internal const string SHADER_PROP_HIGHLIGHT_TEX = "_HighlightTex"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE = "_DirectionalLight_HighlightMode"; From b83b012beae2244d0665f1f9fa716743a1314181 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 14:47:24 +0900 Subject: [PATCH 259/290] Reapply "add CameraViewController" This reverts commit 0ff8a2766052708ebc8e8d8f47afbf894eff3421. --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 7 +++--- .../Assets/ScriptsDev/Toon3Das2DConstants.cs | 1 + .../ScriptsDev/ToonCameraViewController.cs | 24 +++++++++++++++++++ .../ToonCameraViewController.cs.meta | 2 ++ 4 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs create mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index a00272007..d69cf7c84 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -143,7 +143,7 @@ static void DrawLightingGUI(MaterialEditor mEditor, Material[] mats, EditorGUILayout.LabelField("Highlight Settings"); EditorGUI.indentLevel+= INDENT_SIZE; - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION]); + ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION]); ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_HIGHLIGHT_TEX]); ToonEditorGUIUtility.DrawIntPopupGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE], m_highlightModeEnums, m_highlightModeIndices,out int _); @@ -385,7 +385,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty "Multiplier for the diffuse contribution."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION), + mainPropertyName = new MaterialName(Toon3Das2DConstants.SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION), label = new GUIContent("View Position", "Camera View Position"), }, new MaterialUIElement { @@ -501,8 +501,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_DIRECTIONAL_LIGHT_USE = "_DirectionalLight_Use"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH = "_DirectionalLight_DiffuseStrength"; - - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION = "_DirectionalLight_ViewPosition"; + internal const string SHADER_PROP_HIGHLIGHT_COLOR = "_HighlightColor"; internal const string SHADER_PROP_HIGHLIGHT_TEX = "_HighlightTex"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE = "_DirectionalLight_HighlightMode"; diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs index 9f4d24187..f64e34f2d 100644 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs @@ -4,4 +4,5 @@ public static class Toon3Das2DConstants { public const string ShaderPropUnlit_DirectionalLight_Color = "_DirectionalLight_Color"; public const string ShaderPropUnlit_DirectionalLight_Intensity = "_DirectionalLight_Intensity"; + public const string SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION = "_DirectionalLight_ViewPosition"; } \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs new file mode 100644 index 000000000..7861e5e06 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +[ExecuteAlways] +internal class ToonCameraViewController : MonoBehaviour { + private void OnEnable() { + m_transform = transform; + } + + void Update() { + Vector3 pos = m_transform.position; + foreach (Material mat in m_materials) { + if (mat == null) continue; + mat.SetVector(Toon3Das2DConstants.SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION, pos); + } + } + + +//---------------------------------------------------------------------------------------------------------------------- + [SerializeField] private List m_materials = new List(); + + private Transform m_transform; +} \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta new file mode 100644 index 000000000..c6f5c36a3 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 76eb1733b1eefbe4fb94e0398915fc49 From 5da95a29c4088773c9177177282ad06d74ea6ee4 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 15:08:09 +0900 Subject: [PATCH 260/290] cleanup highlight --- .../Assets/Shaders/Toon2D.shader | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index d6a168dc9..6ada5acc1 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -212,7 +212,7 @@ Shader "Toon/Toon 3D as 2D"{ #endif half alpha = surfaceData.alpha; - half4 color = half4(surfaceData.albedo, alpha); + half4 albedo = half4(surfaceData.albedo, alpha); const half4 mask = surfaceData.mask; const half2 lightingUV = inputData.lightingUV; @@ -233,23 +233,24 @@ Shader "Toon/Toon 3D as 2D"{ shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); } - const float3 diffuseLightFactor = (shapeLight0.rgb * _2DLightStrength) - + (_DirectionalLight_Color * _DirectionalLight_DiffuseStrength * _DirectionalLight_Use); - - const float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv); - const float3 baseColor = _BaseColor.rgb * surfaceData.albedo.rgb * diffuseLightFactor; + const float3 directionalLightColorAndUse = _DirectionalLight_Color * _DirectionalLight_Use; + const float3 diffuseLightFactor = (shapeLight0.rgb * _ShapeLightBlendFactors0.x * _2DLightStrength ) + + (directionalLightColorAndUse * _DirectionalLight_DiffuseStrength); + + const float3 baseColor = _BaseColor.rgb * albedo.rgb * diffuseLightFactor; + //1st and 2nd Shade - float4 _1st_ShadeMap_var = lerp( - SAMPLE_TEXTURE2D(_1st_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _MainTex_var, + const float4 firstShadeTex = lerp( + SAMPLE_TEXTURE2D(_1st_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), albedo, _Use_BaseAs1st); - const float3 firstShadeAlbedo = _1st_ShadeColor.rgb * _1st_ShadeMap_var.rgb; + const float3 firstShadeAlbedo = _1st_ShadeColor.rgb * firstShadeTex.rgb; const float3 firstShadeColor = firstShadeAlbedo * diffuseLightFactor; - float4 _2nd_ShadeMap_var = lerp( - SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), _1st_ShadeMap_var, + const float4 secondShadeTex = lerp( + SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), firstShadeTex, _Use_1stAs2nd); - const float3 secondShadeAlbedo = _2nd_ShadeColor.rgb * _2nd_ShadeMap_var.rgb; + const float3 secondShadeAlbedo = _2nd_ShadeColor.rgb * secondShadeTex.rgb; const float3 secondShadeColor = secondShadeAlbedo * diffuseLightFactor; const float light2dDiffuse = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); @@ -257,35 +258,34 @@ Shader "Toon/Toon 3D as 2D"{ const float3 directionalLightDirection = normalize(-_DirectionalLight_Direction); const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, directionalLightDirection) + 0.5; - float lightFactor = (light2dDiffuse * _2DLightStrength) + const float threeColorsT = (light2dDiffuse * _2DLightStrength) + (directionalDiffuse * _DirectionalLight_DiffuseStrength); - float3 Set_FinalBaseColor = ThreeColorsLinearShading(baseColor,firstShadeColor, secondShadeColor, + const float3 finalDiffuseColor = ThreeColorsLinearShading(baseColor,firstShadeColor, secondShadeColor, _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, - _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, lightFactor); + _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, threeColorsT); //Highlight const float3 viewDirection = normalize(_DirectionalLight_ViewPosition - positionWS); const float3 halfDirection = normalize(viewDirection + directionalLightDirection); float dotHN_01 = 0.5 * dot(halfDirection,perturbedNormalWS) + 0.5; - - float _TweakHighColorMask_var = + const float highlight = lerp( (1.0 - step(dotHN_01,(1.0 - pow(abs(_DirectionalLight_HighlightPower),5)))), - pow(abs(dotHN_01),exp2(lerp(11,1,_DirectionalLight_HighlightPower))), _DirectionalLight_HighlightMode ); + pow(abs(dotHN_01),exp2(lerp(11,1,_DirectionalLight_HighlightPower))), + _DirectionalLight_HighlightMode ); const float4 highlightTex = SAMPLE_TEXTURE2D(_HighlightTex, sampler_HighlightTex, TRANSFORM_TEX(uv, _HighlightTex)); const float3 highlightAlbedo = highlightTex.rgb * _HighlightColor.rgb; - const float3 highlightColor = highlightAlbedo * _DirectionalLight_HighlightStrength; - - float3 _HighColor_var = highlightColor * _DirectionalLight_Color * _DirectionalLight_Use * _TweakHighColorMask_var; + const float3 highlightFactor = directionalLightColorAndUse * _DirectionalLight_HighlightStrength; - float3 Set_HighColor = Set_FinalBaseColor + _HighColor_var; + const float3 finalHighlightColor = highlightAlbedo * highlightFactor * highlight; - Set_FinalBaseColor = (Set_FinalBaseColor ) * _ShapeLightBlendFactors0.x + _HighColor_var; + + float3 finalColor = finalDiffuseColor + finalHighlightColor; - half4 shapeLight0Modulate = half4(Set_FinalBaseColor, alpha); + half4 shapeLight0Modulate = half4(finalColor, alpha); half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; #else @@ -295,7 +295,7 @@ Shader "Toon/Toon 3D as 2D"{ half4 finalOutput; #if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 - finalOutput = color; + finalOutput = albedo; #else half4 finalModulate = shapeLight0Modulate; half4 finalAdditve = shapeLight0Additive; From b1325f49827a6351c5b2e14bdfc06da195302122 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 15:29:42 +0900 Subject: [PATCH 261/290] Consider custom directional light inside outline --- .../Assets/Shaders/Toon2D.shader | 18 +++++++++++++----- .../Assets/Shaders/ToonBlend.hlsl | 11 +++++++++++ .../Assets/Shaders/ToonBlend.hlsl.meta | 7 +++++++ 3 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl create mode 100644 Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl.meta diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 6ada5acc1..f8a4844fa 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -154,6 +154,7 @@ Shader "Toon/Toon 3D as 2D"{ float4 _HighlightTex_ST; #include "ObjectTransform.hlsl" + #include "ToonBlend.hlsl" Varyings ToonVertex(Attributes input) { @@ -235,9 +236,8 @@ Shader "Toon/Toon 3D as 2D"{ const float3 directionalLightColorAndUse = _DirectionalLight_Color * _DirectionalLight_Use; - const float3 diffuseLightFactor = (shapeLight0.rgb * _ShapeLightBlendFactors0.x * _2DLightStrength ) - + (directionalLightColorAndUse * _DirectionalLight_DiffuseStrength); - + const float3 diffuseLightFactor = ToonDiffuseBlend(shapeLight0.rgb, _ShapeLightBlendFactors0.x); + const float3 baseColor = _BaseColor.rgb * albedo.rgb * diffuseLightFactor; //1st and 2nd Shade @@ -400,6 +400,12 @@ Shader "Toon/Toon 3D as 2D"{ int _Outline_UseCustomNormalMap; CBUFFER_START(UnityPerMaterial) + + float _2DLightStrength; + int _DirectionalLight_Use; + float4 _DirectionalLight_Color; + float _DirectionalLight_DiffuseStrength; + half4 _BaseColor; float _OutlineOffsetZ; float _OutlineWidth; @@ -412,6 +418,7 @@ Shader "Toon/Toon 3D as 2D"{ CBUFFER_END #include "ObjectTransform.hlsl" + #include "ToonBlend.hlsl" OutlineVertexOutput OutlineVertex(OutlineVertexInput v) { OutlineVertexOutput o = (OutlineVertexOutput) 0; @@ -479,7 +486,8 @@ Shader "Toon/Toon 3D as 2D"{ } #endif - float3 lightColor = shapeLight0.rgb; + + const float3 diffuseLightFactor = ToonDiffuseBlend(shapeLight0.rgb, _ShapeLightBlendFactors0.x); const float2 Set_UV0 = i.uv0; float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); @@ -490,7 +498,7 @@ Shader "Toon/Toon 3D as 2D"{ //Blend const float3 outlineBaseBlend = lerp(outlineAlbedo, outlineAlbedo * Set_BaseColor, _Outline_BaseColorBlend); - const float3 outlineBaseAndLightBlend = lerp(outlineBaseBlend, outlineBaseBlend * lightColor, _Outline_LightColorBlend); + const float3 outlineBaseAndLightBlend = lerp(outlineBaseBlend, outlineBaseBlend * diffuseLightFactor, _Outline_LightColorBlend); #ifdef _IS_OUTLINE_CLIPPING_NO return float4(outlineBaseAndLightBlend,1.0); diff --git a/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl b/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl new file mode 100644 index 000000000..75d25e2b6 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl @@ -0,0 +1,11 @@ +#pragma once + +float3 ToonDiffuseBlend(float3 shapeLight, float _ShapeLightBlendFactors) { + + const float3 directionalLightColorAndUse = _DirectionalLight_Color * _DirectionalLight_Use; + + const float3 diffuseLightFactor = (shapeLight.rgb * _ShapeLightBlendFactors * _2DLightStrength ) + + (directionalLightColorAndUse * _DirectionalLight_DiffuseStrength); + + return diffuseLightFactor; +} diff --git a/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl.meta b/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl.meta new file mode 100644 index 000000000..0bd1bb12f --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5bc7437a7c5f9e543b48e4927ebaa2f2 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From ea0794ed06f28af7363a6b8aa843e21f400ac369 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 16:38:01 +0900 Subject: [PATCH 262/290] chnage order --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index d69cf7c84..00f7f778f 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -228,12 +228,12 @@ static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary Date: Mon, 24 Nov 2025 16:40:07 +0900 Subject: [PATCH 263/290] fix compile error --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index f8a4844fa..9124382ce 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -476,6 +476,8 @@ Shader "Toon/Toon 3D as 2D"{ const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, i.uv0); const half2 lightingUV = inputData.lightingUV; + float3 diffuseLightFactor = float3(0,0,0); + #if USE_SHAPE_LIGHT_TYPE_0 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); if (any(_ShapeLightMaskFilter0)) @@ -484,10 +486,9 @@ Shader "Toon/Toon 3D as 2D"{ mask); shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); } + diffuseLightFactor = ToonDiffuseBlend(shapeLight0.rgb, _ShapeLightBlendFactors0.x); #endif - - const float3 diffuseLightFactor = ToonDiffuseBlend(shapeLight0.rgb, _ShapeLightBlendFactors0.x); const float2 Set_UV0 = i.uv0; float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); From f752d96a3a3f83e5b45c3fc4a7d90e223bc47323 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 16:42:06 +0900 Subject: [PATCH 264/290] declare widthMap --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 9124382ce..ed6db7faf 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -390,6 +390,10 @@ Shader "Toon/Toon 3D as 2D"{ TEXTURE2D(_MaskTex); SAMPLER(sampler_MaskTex); + TEXTURE2D(_OutlineWidthMap); + SAMPLER(sampler_OutlineWidthMap); + float4 _OutlineWidthMap_ST; + TEXTURE2D(_OutlineTex); SAMPLER(sampler_OutlineTex); float4 _OutlineTex_ST; From 88914783a3f00fd111e5fb44e22c4b5c4af4b2ca Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 16:45:51 +0900 Subject: [PATCH 265/290] use SAMPLE_TEXTURE2D_LOD --- .../Assets/Shaders/Toon2D.shader | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index ed6db7faf..9173be21a 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -48,7 +48,7 @@ Shader "Toon/Toon 3D as 2D"{ _OutlineTex ("Outline Tex", 2D) = "white" {} _Outline_BaseColorBlend ("Blend Base Color to Outline", Range(0,1) ) = 0.5 _Outline_LightColorBlend ("Blend Light Color to Outline", Range(0,1) ) = 0.5 - _OutlineOffsetZ ("Outline Z Offset", Float) = 0 + _OutlineOffsetZ ("Outline Z Offset", Float) = 0.75 _OutlineNear ("Outline Near", Float ) = 0.5 _OutlineFar ("Outline Far", Float ) = 100 _Outline_UseCustomNormalMap ("Use Custom Normal Map", Integer ) = 0 @@ -353,8 +353,9 @@ Shader "Toon/Toon 3D as 2D"{ // // } + HLSLPROGRAM - #pragma target 2.0 + #pragma target 3.0 #pragma vertex OutlineVertex #pragma fragment OutlineFragment @@ -433,7 +434,11 @@ Shader "Toon/Toon 3D as 2D"{ o.uv0 = v.texcoord0; float4 objPos = mul (GetObjectToWorldMatrix(), float4(0,0,0,1) ); - float4 _Outline_Sampler_var = tex2Dlod(sampler_OutlineTex,float4(TRANSFORM_TEX(uv, _OutlineTex),0.0,0)); + + const float outlineWidthAlbedo = SAMPLE_TEXTURE2D_LOD(_OutlineWidthMap, sampler_OutlineWidthMap, TRANSFORM_TEX(uv, _OutlineWidthMap),0).r; + const float outlineWidth = _OutlineWidth * 0.001 * outlineWidthAlbedo; + + const float3 normalDir = UnityObjectToWorldNormal(v.normal); const float3 tangentDir = normalize( mul( GetObjectToWorldMatrix(), float4( v.tangent.xyz, 0.0 ) ).xyz ); @@ -441,10 +446,12 @@ Shader "Toon/Toon 3D as 2D"{ float3x3 tangentTransform = float3x3(tangentDir, bitangentDir, normalDir); //UnpackNormal() can't be used, and so as follows. Do not specify a bump for the texture to be used. - float4 _BakedNormal_var = (tex2Dlod(sampler_Outline_CustomNormalMap,float4(TRANSFORM_TEX(uv, _Outline_CustomNormalMap),0.0,0)) * 2 - 1); + const float4 customNormalMap = SAMPLE_TEXTURE2D_LOD( + _Outline_CustomNormalMap, sampler_Outline_CustomNormalMap, TRANSFORM_TEX(uv, _Outline_CustomNormalMap),0); + float4 _BakedNormal_var = customNormalMap * 2 - 1; float3 _BakedNormalDir = normalize(mul(_BakedNormal_var.rgb, tangentTransform)); - float Set_Outline_Width = (_OutlineWidth*0.001*smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) )*_Outline_Sampler_var.rgb).r; + float Set_Outline_Width = outlineWidth * smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) ); float4 _ClipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); _OutlineOffsetZ = _OutlineOffsetZ * -0.01; From 50dfa7c69077a2a521dc045c030aa092b6b210b8 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 19:49:25 +0900 Subject: [PATCH 266/290] use UnpackNormal --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 9173be21a..ea0194786 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -445,11 +445,11 @@ Shader "Toon/Toon 3D as 2D"{ const float3 bitangentDir = normalize(cross(normalDir, tangentDir) * v.tangent.w); float3x3 tangentTransform = float3x3(tangentDir, bitangentDir, normalDir); - //UnpackNormal() can't be used, and so as follows. Do not specify a bump for the texture to be used. + //custom normal map const float4 customNormalMap = SAMPLE_TEXTURE2D_LOD( _Outline_CustomNormalMap, sampler_Outline_CustomNormalMap, TRANSFORM_TEX(uv, _Outline_CustomNormalMap),0); - float4 _BakedNormal_var = customNormalMap * 2 - 1; - float3 _BakedNormalDir = normalize(mul(_BakedNormal_var.rgb, tangentTransform)); + const float3 normalTS = UnpackNormal(customNormalMap); + float3 _BakedNormalDir = normalize(mul(normalTS.xyz, tangentTransform)); float Set_Outline_Width = outlineWidth * smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) ); float4 _ClipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); From 7751268a63883d7ac4640c5c10683a0cbf5f1ae5 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 19:58:18 +0900 Subject: [PATCH 267/290] rename outline normalmap --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 20 +++++++++---------- .../Assets/Shaders/Toon2D.shader | 16 +++++++-------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index 00f7f778f..c3e9982e1 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -218,10 +218,10 @@ static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary Date: Mon, 24 Nov 2025 20:07:12 +0900 Subject: [PATCH 268/290] fix tooltip --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index c3e9982e1..dac5d4eec 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -438,7 +438,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_LIGHT_COLOR_BLEND), label = new GUIContent("Blend Light Color to Outline", - "Blend light color to outline color."), + "Blend the combined effect of 2D lighting and custom directional light to the outline color."), }, new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_OFFSET_Z), From 07ba7185e3bb1c49889cbbd94343f9901cbc93bc Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 20:20:41 +0900 Subject: [PATCH 269/290] cleanup position scaling mode --- .../Assets/Shaders/Toon2D.shader | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index e28056745..a67742807 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -449,26 +449,26 @@ Shader "Toon/Toon 3D as 2D"{ const float4 customNormalMap = SAMPLE_TEXTURE2D_LOD( _Outline_NormalMap, sampler_Outline_NormalMap, TRANSFORM_TEX(uv, _Outline_NormalMap),0); const float3 normalTS = UnpackNormal(customNormalMap); - float3 _BakedNormalDir = normalize(mul(normalTS.xyz, tangentTransform)); + const float3 outlineNormalMapWS = normalize(mul(normalTS.xyz, tangentTransform)); - float Set_Outline_Width = outlineWidth * smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) ); + float finalOutlineWidth = outlineWidth * smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) ); float4 _ClipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); _OutlineOffsetZ = _OutlineOffsetZ * -0.01; float3 newPos; #ifdef _OUTLINE_NML - newPos = lerp(float4(v.vertex.xyz + v.normal*Set_Outline_Width,1), float4(v.vertex.xyz + _BakedNormalDir*Set_Outline_Width,1),_Outline_UseNormalMap); + const float3 outlineDir = lerp(v.normal, outlineNormalMapWS, _Outline_UseNormalMap); + + newPos = float4(v.vertex.xyz + outlineDir * finalOutlineWidth,1); o.pos = TransformObjectToHClip(newPos); #elif _OUTLINE_POS - Set_Outline_Width = Set_Outline_Width*2; - float signVar = dot(normalize(v.vertex.xyz),normalize(v.normal))<0 ? -1 : 1; - o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signVar*normalize(v.vertex)*Set_Outline_Width, 1)); + const float3 normalizedPos = normalize(v.vertex.xyz); + const float signPN = sign(dot(normalizedPos,normalize(v.normal))); + o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signPN * normalizedPos * finalOutlineWidth, 1)); #endif o.pos.z = o.pos.z + _OutlineOffsetZ * _ClipCameraPos.z; o.lightingUV = half2(ComputeScreenPos(o.pos / o.pos.w).xy); - - return o; } From 1fd4d503aaf0ee34b6d0cfb9180c27f089c36c30 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 20:22:00 +0900 Subject: [PATCH 270/290] cleanup --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index a67742807..35641e017 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -453,7 +453,6 @@ Shader "Toon/Toon 3D as 2D"{ float finalOutlineWidth = outlineWidth * smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) ); float4 _ClipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); - _OutlineOffsetZ = _OutlineOffsetZ * -0.01; float3 newPos; #ifdef _OUTLINE_NML @@ -466,7 +465,8 @@ Shader "Toon/Toon 3D as 2D"{ const float signPN = sign(dot(normalizedPos,normalize(v.normal))); o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signPN * normalizedPos * finalOutlineWidth, 1)); #endif - o.pos.z = o.pos.z + _OutlineOffsetZ * _ClipCameraPos.z; + const float scaledOutlineOffsetZ = _OutlineOffsetZ * -0.01; + o.pos.z = o.pos.z + scaledOutlineOffsetZ * _ClipCameraPos.z; o.lightingUV = half2(ComputeScreenPos(o.pos / o.pos.w).xy); return o; From 271867dc741e8d99879401886f04669fea1aa290 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 20:25:05 +0900 Subject: [PATCH 271/290] cleanup --- .../Assets/Shaders/Toon2D.shader | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 35641e017..b71c2ae36 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -433,29 +433,29 @@ Shader "Toon/Toon 3D as 2D"{ const float2 uv = v.texcoord0; o.uv0 = v.texcoord0; - float4 objPos = mul (GetObjectToWorldMatrix(), float4(0,0,0,1) ); + const float4 objPos = mul (GetObjectToWorldMatrix(), float4(0,0,0,1) ); - const float outlineWidthAlbedo = SAMPLE_TEXTURE2D_LOD(_OutlineWidthMap, sampler_OutlineWidthMap, TRANSFORM_TEX(uv, _OutlineWidthMap),0).r; + const float outlineWidthAlbedo = SAMPLE_TEXTURE2D_LOD(_OutlineWidthMap, sampler_OutlineWidthMap, + TRANSFORM_TEX(uv, _OutlineWidthMap),0).r; const float outlineWidth = _OutlineWidth * 0.001 * outlineWidthAlbedo; + + float finalOutlineWidth = outlineWidth * smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) ); - - const float3 normalDir = UnityObjectToWorldNormal(v.normal); + float3 newPos; +#ifdef _OUTLINE_NML + //TBN + const float3 normalDir = UnityObjectToWorldNormal(v.normal); const float3 tangentDir = normalize( mul( GetObjectToWorldMatrix(), float4( v.tangent.xyz, 0.0 ) ).xyz ); const float3 bitangentDir = normalize(cross(normalDir, tangentDir) * v.tangent.w); float3x3 tangentTransform = float3x3(tangentDir, bitangentDir, normalDir); - //custom normal map + //Outline normal map const float4 customNormalMap = SAMPLE_TEXTURE2D_LOD( _Outline_NormalMap, sampler_Outline_NormalMap, TRANSFORM_TEX(uv, _Outline_NormalMap),0); const float3 normalTS = UnpackNormal(customNormalMap); const float3 outlineNormalMapWS = normalize(mul(normalTS.xyz, tangentTransform)); - - float finalOutlineWidth = outlineWidth * smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) ); - float4 _ClipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); - - float3 newPos; -#ifdef _OUTLINE_NML + const float3 outlineDir = lerp(v.normal, outlineNormalMapWS, _Outline_UseNormalMap); newPos = float4(v.vertex.xyz + outlineDir * finalOutlineWidth,1); @@ -466,7 +466,8 @@ Shader "Toon/Toon 3D as 2D"{ o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signPN * normalizedPos * finalOutlineWidth, 1)); #endif const float scaledOutlineOffsetZ = _OutlineOffsetZ * -0.01; - o.pos.z = o.pos.z + scaledOutlineOffsetZ * _ClipCameraPos.z; + const float4 clipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); + o.pos.z = o.pos.z + scaledOutlineOffsetZ * clipCameraPos.z; o.lightingUV = half2(ComputeScreenPos(o.pos / o.pos.w).xy); return o; From 55e3738f0029a67bd23aa1989519693d3c5702d8 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 20:28:20 +0900 Subject: [PATCH 272/290] cleanup --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index b71c2ae36..da17ab3f1 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -466,9 +466,8 @@ Shader "Toon/Toon 3D as 2D"{ o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signPN * normalizedPos * finalOutlineWidth, 1)); #endif const float scaledOutlineOffsetZ = _OutlineOffsetZ * -0.01; - const float4 clipCameraPos = mul(UNITY_MATRIX_VP, float4(_WorldSpaceCameraPos.xyz, 1)); - o.pos.z = o.pos.z + scaledOutlineOffsetZ * clipCameraPos.z; - + o.pos.z = o.pos.z + scaledOutlineOffsetZ; + o.lightingUV = half2(ComputeScreenPos(o.pos / o.pos.w).xy); return o; } From 1cee0ea59c9b882065c2ecaf107e3472c555dd28 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 20:30:21 +0900 Subject: [PATCH 273/290] change keyword name --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 4 ++-- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index dac5d4eec..a7354cb40 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -197,8 +197,8 @@ static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary Date: Mon, 24 Nov 2025 20:41:08 +0900 Subject: [PATCH 274/290] cleanup clipping --- Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 7db55a1b7..d1b6b0ffc 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -521,8 +521,8 @@ Shader "Toon/Toon 3D as 2D"{ float _Inverse_Clipping_var = lerp( _IsBaseMapAlphaAsClippingMask_var, (1.0 - _IsBaseMapAlphaAsClippingMask_var), _Inverse_Clipping ); float Set_Clipping = saturate((_Inverse_Clipping_var+_Clipping_Level)); clip(Set_Clipping - 0.5); - float4 Set_Outline_Color = lerp( float4(_Is_BlendBaseColor_var,Set_Clipping), float4((_OutlineTex_var.rgb*_Outline_Color.rgb*lightColor),Set_Clipping), _Is_OutlineTex ); - return Set_Outline_Color; + + return float4(outlineBaseAndLightBlend,Set_Clipping); #endif } From 174d40fb954a9d1aa13dfcff8545eb819148f570 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 20:59:11 +0900 Subject: [PATCH 275/290] save 2d materials --- ...Shader_Eye_Clipping_StencilMask_3Das2D.mat | 30 +++++++++++++----- .../ToonShader_Eyebrow_StencilMask_3Das2D.mat | 30 +++++++++++++----- .../ToonShader_Face_3Das2D.mat | 30 +++++++++++++----- .../ToonShader_Fhair2_3Das2D.mat | 30 +++++++++++++----- .../ToonShader_Fhair_StencilOut_3Das2D.mat | 30 +++++++++++++----- .../ToonShader_Hair_Clipping_3Das2D.mat | 30 +++++++++++++----- .../ToonShader_Head_Clipping_3Das2D.mat | 30 +++++++++++++----- .../ToonShader_Main_3Das2D.mat | 31 ++++++++++++++----- 8 files changed, 185 insertions(+), 56 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat index c89cf98d7..d3f37088e 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat @@ -12,8 +12,9 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - TOON_OUTLINE_NORMAL + m_InvalidKeywords: - _OUTLINE_NML - m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -32,6 +33,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _HighlightTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} m_Scale: {x: 1, y: 1} @@ -56,12 +61,18 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _Outline_NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_HighlightMode: 0 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 + - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 @@ -69,7 +80,7 @@ Material: - _1st2nd_Shades_Feather: 0 - _1stTo2nd_ShadeFeather: 0 - _1stTo2nd_ShadeStart: 0 - - _2DLightStrength: 0 + - _2DLightStrength: 0.129 - _BaseColor_Step: 0.393 - _BaseShade_Feather: 0.629 - _BaseTo1st_ShadeFeather: 0.1 @@ -77,15 +88,18 @@ Material: - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 + - _DirectionalLight_DiffuseStrength: 0.877 + - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 1 - - _OutlineWidth: 24.95 - - _Outline_BaseColorBlend: 0.804 - - _Outline_LightColorBlend: 1 + - _OutlineOffsetZ: 0.75 + - _OutlineWidth: 5 + - _Outline_BaseColorBlend: 1 + - _Outline_LightColorBlend: 0 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: @@ -93,7 +107,9 @@ Material: - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} + - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat index 7a10ab6c6..f99f9147b 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat @@ -12,8 +12,9 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - TOON_OUTLINE_NORMAL + m_InvalidKeywords: - _OUTLINE_NML - m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -32,6 +33,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _HighlightTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} m_Scale: {x: 1, y: 1} @@ -56,12 +61,18 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _Outline_NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_HighlightMode: 0 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 + - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 @@ -69,7 +80,7 @@ Material: - _1st2nd_Shades_Feather: 0.0001 - _1stTo2nd_ShadeFeather: 0 - _1stTo2nd_ShadeStart: 0 - - _2DLightStrength: 0 + - _2DLightStrength: 0.129 - _BaseColor_Step: 0.507 - _BaseShade_Feather: 0.08 - _BaseTo1st_ShadeFeather: 0.08 @@ -77,15 +88,18 @@ Material: - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 + - _DirectionalLight_DiffuseStrength: 0.877 + - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 1 - - _OutlineWidth: 24.95 - - _Outline_BaseColorBlend: 0.804 - - _Outline_LightColorBlend: 1 + - _OutlineOffsetZ: 0.75 + - _OutlineWidth: 5 + - _Outline_BaseColorBlend: 1 + - _Outline_LightColorBlend: 0 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: @@ -93,7 +107,9 @@ Material: - _2nd_ShadeColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} + - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat index 8b87ab6d9..8a2eecf0a 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat @@ -12,8 +12,9 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - TOON_OUTLINE_NORMAL + m_InvalidKeywords: - _OUTLINE_NML - m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -32,6 +33,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _HighlightTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} m_Scale: {x: 1, y: 1} @@ -56,12 +61,18 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _Outline_NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_HighlightMode: 0 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 + - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 @@ -69,7 +80,7 @@ Material: - _1st2nd_Shades_Feather: 0.0001 - _1stTo2nd_ShadeFeather: 0 - _1stTo2nd_ShadeStart: 0 - - _2DLightStrength: 0 + - _2DLightStrength: 0.129 - _BaseColor_Step: 0.353 - _BaseShade_Feather: 0.121 - _BaseTo1st_ShadeFeather: 0.121 @@ -77,15 +88,18 @@ Material: - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 + - _DirectionalLight_DiffuseStrength: 0.877 + - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 1 - - _OutlineWidth: 24.95 - - _Outline_BaseColorBlend: 0.804 - - _Outline_LightColorBlend: 1 + - _OutlineOffsetZ: 0.75 + - _OutlineWidth: 5 + - _Outline_BaseColorBlend: 1 + - _Outline_LightColorBlend: 0 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: @@ -93,7 +107,9 @@ Material: - _2nd_ShadeColor: {r: 0.7490196, g: 0.69411767, b: 0.88235295, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} + - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat index 40f71dcaa..798b462c0 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat @@ -12,8 +12,9 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - TOON_OUTLINE_NORMAL + m_InvalidKeywords: - _OUTLINE_NML - m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -32,6 +33,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _HighlightTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} m_Scale: {x: 1, y: 1} @@ -56,12 +61,18 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _Outline_NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_HighlightMode: 0 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 + - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 @@ -69,7 +80,7 @@ Material: - _1st2nd_Shades_Feather: 0.236 - _1stTo2nd_ShadeFeather: 0.236 - _1stTo2nd_ShadeStart: 0.727 - - _2DLightStrength: 0 + - _2DLightStrength: 0.129 - _BaseColor_Step: 0.801 - _BaseShade_Feather: 0.062 - _BaseTo1st_ShadeFeather: 0.062 @@ -77,15 +88,18 @@ Material: - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 + - _DirectionalLight_DiffuseStrength: 0.877 + - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 1 - - _OutlineWidth: 24.95 - - _Outline_BaseColorBlend: 0.804 - - _Outline_LightColorBlend: 1 + - _OutlineOffsetZ: 0.75 + - _OutlineWidth: 5 + - _Outline_BaseColorBlend: 1 + - _Outline_LightColorBlend: 0 - _ShadeColor_Step: 0.727 - _Specular_Intensity: 0 m_Colors: @@ -93,7 +107,9 @@ Material: - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} + - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat index 5f9b01729..4377d8041 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat @@ -12,8 +12,9 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - TOON_OUTLINE_NORMAL + m_InvalidKeywords: - _OUTLINE_NML - m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -32,6 +33,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _HighlightTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} m_Scale: {x: 1, y: 1} @@ -56,12 +61,18 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _Outline_NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_HighlightMode: 0 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 + - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 @@ -69,7 +80,7 @@ Material: - _1st2nd_Shades_Feather: 0.236 - _1stTo2nd_ShadeFeather: 0.236 - _1stTo2nd_ShadeStart: 0.727 - - _2DLightStrength: 0 + - _2DLightStrength: 0.129 - _BaseColor_Step: 0.801 - _BaseShade_Feather: 0.062 - _BaseTo1st_ShadeFeather: 0.062 @@ -77,15 +88,18 @@ Material: - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 + - _DirectionalLight_DiffuseStrength: 0.877 + - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 1 - - _OutlineWidth: 24.95 - - _Outline_BaseColorBlend: 0.804 - - _Outline_LightColorBlend: 1 + - _OutlineOffsetZ: 0.75 + - _OutlineWidth: 5 + - _Outline_BaseColorBlend: 1 + - _Outline_LightColorBlend: 0 - _ShadeColor_Step: 0.727 - _Specular_Intensity: 0 m_Colors: @@ -93,7 +107,9 @@ Material: - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} + - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat index 38cafecf0..e9d81b7a7 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat @@ -12,8 +12,9 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - TOON_OUTLINE_NORMAL + m_InvalidKeywords: - _OUTLINE_NML - m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -32,6 +33,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _HighlightTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} m_Scale: {x: 1, y: 1} @@ -56,12 +61,18 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _Outline_NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_HighlightMode: 0 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 + - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 @@ -69,7 +80,7 @@ Material: - _1st2nd_Shades_Feather: 0.064 - _1stTo2nd_ShadeFeather: 0.064 - _1stTo2nd_ShadeStart: 0.722 - - _2DLightStrength: 0 + - _2DLightStrength: 0.129 - _BaseColor_Step: 0.815 - _BaseShade_Feather: 0.13 - _BaseTo1st_ShadeFeather: 0.13 @@ -77,15 +88,18 @@ Material: - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 + - _DirectionalLight_DiffuseStrength: 0.877 + - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 1 - - _OutlineWidth: 24.95 - - _Outline_BaseColorBlend: 0.804 - - _Outline_LightColorBlend: 1 + - _OutlineOffsetZ: 0.75 + - _OutlineWidth: 5 + - _Outline_BaseColorBlend: 1 + - _Outline_LightColorBlend: 0 - _ShadeColor_Step: 0.722 - _Specular_Intensity: 0 m_Colors: @@ -93,7 +107,9 @@ Material: - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} + - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat index 2956778de..5cd0b22ed 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat @@ -12,8 +12,9 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - TOON_OUTLINE_NORMAL + m_InvalidKeywords: - _OUTLINE_NML - m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -32,6 +33,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _HighlightTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} m_Scale: {x: 1, y: 1} @@ -56,12 +61,18 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _Outline_NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_HighlightMode: 0 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 + - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 @@ -69,7 +80,7 @@ Material: - _1st2nd_Shades_Feather: 0.064 - _1stTo2nd_ShadeFeather: 0.064 - _1stTo2nd_ShadeStart: 0.722 - - _2DLightStrength: 0 + - _2DLightStrength: 0.129 - _BaseColor_Step: 0.815 - _BaseShade_Feather: 0.13 - _BaseTo1st_ShadeFeather: 0.13 @@ -77,15 +88,18 @@ Material: - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 + - _DirectionalLight_DiffuseStrength: 0.877 + - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 1 - - _OutlineWidth: 24.95 - - _Outline_BaseColorBlend: 0.804 - - _Outline_LightColorBlend: 1 + - _OutlineOffsetZ: 0.75 + - _OutlineWidth: 5 + - _Outline_BaseColorBlend: 1 + - _Outline_LightColorBlend: 0 - _ShadeColor_Step: 0.722 - _Specular_Intensity: 0 m_Colors: @@ -93,7 +107,9 @@ Material: - _2nd_ShadeColor: {r: 0.6691177, g: 0.47672933, b: 0.27059904, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0.3213938, g: 0.76604444, b: -0.5566705, a: 0} + - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} + - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat index 5ed1b90ea..b620c5854 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat @@ -12,8 +12,10 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: + - TOON_OUTLINE_NORMAL + m_InvalidKeywords: + - _ - _OUTLINE_NML - m_InvalidKeywords: [] m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 @@ -32,6 +34,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _HighlightTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MainTex: m_Texture: {fileID: 2800000, guid: 682e7dad2cf2429e8441474769ab30a7, type: 3} m_Scale: {x: 1, y: 1} @@ -56,12 +62,18 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _Outline_NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: + - _DirectionalLight_HighlightMode: 0 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 + - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 1 - _Use_BaseAs1st: 0 @@ -69,7 +81,7 @@ Material: - _1st2nd_Shades_Feather: 0.08 - _1stTo2nd_ShadeFeather: 0.08 - _1stTo2nd_ShadeStart: 0 - - _2DLightStrength: 0 + - _2DLightStrength: 0.129 - _BaseColor_Step: 0.841 - _BaseShade_Feather: 0.074 - _BaseTo1st_ShadeFeather: 0.074 @@ -77,15 +89,18 @@ Material: - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 + - _DirectionalLight_DiffuseStrength: 0.877 + - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 - _OutlineExtrusion: 0.02 - _OutlineFar: 100 - _OutlineNear: 0.5 - - _OutlineOffsetZ: 1 - - _OutlineWidth: 24.95 - - _Outline_BaseColorBlend: 0.804 - - _Outline_LightColorBlend: 1 + - _OutlineOffsetZ: 0.75 + - _OutlineWidth: 5 + - _Outline_BaseColorBlend: 1 + - _Outline_LightColorBlend: 0 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: @@ -93,7 +108,9 @@ Material: - _2nd_ShadeColor: {r: 0.7490196, g: 0.69411767, b: 0.88235295, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: -0, g: 0.3707992, b: -0.9287131, a: 0} + - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} + - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} From 7f78eeb5b391826eef1903a92ffce3790ea72e6a Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 20:59:23 +0900 Subject: [PATCH 276/290] remove clipping --- .../Assets/Shaders/Toon2D.shader | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index d1b6b0ffc..052e2fb81 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -343,7 +343,7 @@ Shader "Toon/Toon 3D as 2D"{ } // Cull [_SRPDefaultUnlitColMode] // ColorMask [_SPRDefaultUnlitColorMask] -// Blend SrcAlpha OneMinusSrcAlpha + Blend SrcAlpha OneMinusSrcAlpha // Stencil // { // Ref[_StencilNo] @@ -359,8 +359,6 @@ Shader "Toon/Toon 3D as 2D"{ #pragma vertex OutlineVertex #pragma fragment OutlineFragment - - #pragma multi_compile _IS_OUTLINE_CLIPPING_NO _IS_OUTLINE_CLIPPING_YES #pragma multi_compile TOON_OUTLINE_NORMAL TOON_OUTLINE_POS // Outline is implemented in UniversalToonOutline.hlsl. // #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" @@ -512,19 +510,7 @@ Shader "Toon/Toon 3D as 2D"{ const float3 outlineBaseBlend = lerp(outlineAlbedo, outlineAlbedo * Set_BaseColor, _Outline_BaseColorBlend); const float3 outlineBaseAndLightBlend = lerp(outlineBaseBlend, outlineBaseBlend * diffuseLightFactor, _Outline_LightColorBlend); -#ifdef _IS_OUTLINE_CLIPPING_NO return float4(outlineBaseAndLightBlend,1.0); -#elif _IS_OUTLINE_CLIPPING_YES - float4 _ClippingMask_var = SAMPLE_TEXTURE2D(_ClippingMask, sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); - float Set_MainTexAlpha = _MainTex_var.a; - float _IsBaseMapAlphaAsClippingMask_var = lerp( _ClippingMask_var.r, Set_MainTexAlpha, _IsBaseMapAlphaAsClippingMask ); - float _Inverse_Clipping_var = lerp( _IsBaseMapAlphaAsClippingMask_var, (1.0 - _IsBaseMapAlphaAsClippingMask_var), _Inverse_Clipping ); - float Set_Clipping = saturate((_Inverse_Clipping_var+_Clipping_Level)); - clip(Set_Clipping - 0.5); - - return float4(outlineBaseAndLightBlend,Set_Clipping); -#endif - } From 2ef507235978b2297d29f436898f0b44c9a19841 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 21:13:00 +0900 Subject: [PATCH 277/290] rename to highlight size --- .../Editor/Scripts/UnityToon3Das2DGUI.cs | 6 +++--- .../Assets/Shaders/Toon2D.shader | 18 +++++++++++------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index a7354cb40..ac96eacab 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -148,7 +148,7 @@ static void DrawLightingGUI(MaterialEditor mEditor, Material[] mats, ToonEditorGUIUtility.DrawIntPopupGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE], m_highlightModeEnums, m_highlightModeIndices,out int _); ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_POWER]); + ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_SIZE]); EditorGUI.indentLevel-= INDENT_SIZE; @@ -402,7 +402,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty label = new GUIContent("Strength", "Multiplier for the highlight contribution."), }, new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_POWER), + mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_SIZE), label = new GUIContent("Power", "Highlight power factor."), }, @@ -506,7 +506,7 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty internal const string SHADER_PROP_HIGHLIGHT_TEX = "_HighlightTex"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE = "_DirectionalLight_HighlightMode"; internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH = "_DirectionalLight_HighlightStrength"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_POWER = "_DirectionalLight_HighlightPower"; + internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_SIZE = "_DirectionalLight_HighlightSize"; diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader index 052e2fb81..db1867258 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader @@ -38,7 +38,7 @@ Shader "Toon/Toon 3D as 2D"{ _HighlightTex ("HighColor Map", 2D) = "white" {} _DirectionalLight_HighlightMode ("Directional Light: Highlight Mode", Integer) = 0 //0: Hard, 1: Soft _DirectionalLight_HighlightStrength ("Directional Light: Highlight Strength", Range(0,1)) = 0.5 - _DirectionalLight_HighlightPower ("Directional Light: Highlight Power", Range(0,1)) = 0.3 + _DirectionalLight_HighlightSize ("Directional Light: Highlight Size", Range(0,1)) = 0.3 //Outline _OutlineMode("Outline Mode", Integer) = 0 @@ -139,7 +139,7 @@ Shader "Toon/Toon 3D as 2D"{ float4 _HighlightColor; int _DirectionalLight_HighlightMode; float _DirectionalLight_HighlightStrength; - float _DirectionalLight_HighlightPower; + float _DirectionalLight_HighlightSize; CBUFFER_END @@ -201,7 +201,7 @@ Shader "Toon/Toon 3D as 2D"{ } - half4 CombinedShapeLightShared2(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv, + half4 CombinedShapeLightSharedWithToon(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv, in float3 tangentWS, in float3 bitangentWS, in float3 normalWS, in float3 positionWS) { #if defined(DEBUG_DISPLAY) @@ -271,8 +271,8 @@ Shader "Toon/Toon 3D as 2D"{ float dotHN_01 = 0.5 * dot(halfDirection,perturbedNormalWS) + 0.5; const float highlight = - lerp( (1.0 - step(dotHN_01,(1.0 - pow(abs(_DirectionalLight_HighlightPower),5)))), - pow(abs(dotHN_01),exp2(lerp(11,1,_DirectionalLight_HighlightPower))), + lerp( (1.0 - step(dotHN_01,(1.0 - pow(abs(_DirectionalLight_HighlightSize),5)))), + pow(abs(dotHN_01),exp2(lerp(11,1,_DirectionalLight_HighlightSize))), _DirectionalLight_HighlightMode ); @@ -327,7 +327,7 @@ Shader "Toon/Toon 3D as 2D"{ surfaceData.normalWS = input.normalWS; #endif - return CombinedShapeLightShared2(surfaceData, inputData, input.uv, + return CombinedShapeLightSharedWithToon(surfaceData, inputData, input.uv, tangentWS, bitangentWS, normalWS, input.positionWS); } @@ -595,4 +595,8 @@ Shader "Toon/Toon 3D as 2D"{ CustomEditor "UnityToon3Das2DGUI" -} \ No newline at end of file +} + + +//[Note-sin: 2025-11-24] Texture that only needs one channel at the moment +//1. _OutlineWidthMap From 6283a3991a383111006dd2d7207532048bf96aeb Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 21:26:56 +0900 Subject: [PATCH 278/290] save materials --- ...onShader_Eye_Clipping_StencilMask_3Das2D.mat | 11 ++++++----- .../ToonShader_Eyebrow_StencilMask_3Das2D.mat | 10 ++++++---- .../UnityChan_3Das2D/ToonShader_Face_3Das2D.mat | 13 +++++++------ .../ToonShader_Fhair2_3Das2D.mat | 13 +++++++------ .../ToonShader_Fhair_StencilOut_3Das2D.mat | 11 ++++++----- .../ToonShader_Hair_Clipping_3Das2D.mat | 17 +++++++++-------- .../ToonShader_Head_Clipping_3Das2D.mat | 13 +++++++------ .../UnityChan_3Das2D/ToonShader_Main_3Das2D.mat | 15 ++++++++------- 8 files changed, 56 insertions(+), 47 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat index d3f37088e..8c13d7974 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat @@ -83,13 +83,14 @@ Material: - _2DLightStrength: 0.129 - _BaseColor_Step: 0.393 - _BaseShade_Feather: 0.629 - - _BaseTo1st_ShadeFeather: 0.1 + - _BaseTo1st_ShadeFeather: 0.629 - _BaseTo1st_ShadeStart: 0.393 - _BumpScale: 1 - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_DiffuseStrength: 0.877 - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightSize: 0 - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 @@ -98,8 +99,8 @@ Material: - _OutlineNear: 0.5 - _OutlineOffsetZ: 0.75 - _OutlineWidth: 5 - - _Outline_BaseColorBlend: 1 - - _Outline_LightColorBlend: 0 + - _Outline_BaseColorBlend: 0 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: @@ -109,8 +110,8 @@ Material: - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _HighlightColor: {r: 0, g: 0, b: 0, a: 1} + - _OutlineColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat index f99f9147b..7484bdadf 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat @@ -20,7 +20,8 @@ Material: m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} - disabledShaderPasses: [] + disabledShaderPasses: + - SRPDEFAULTUNLIT m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -89,7 +90,8 @@ Material: - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_DiffuseStrength: 0.877 - - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightPower: 0.315 + - _DirectionalLight_HighlightSize: 0.315 - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 @@ -99,7 +101,7 @@ Material: - _OutlineOffsetZ: 0.75 - _OutlineWidth: 5 - _Outline_BaseColorBlend: 1 - - _Outline_LightColorBlend: 0 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: @@ -109,7 +111,7 @@ Material: - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} + - _HighlightColor: {r: 0.5529412, g: 0.15294118, b: 0.105882354, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat index 8a2eecf0a..f586d0062 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat @@ -54,7 +54,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _OutlineWidthMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 6d7e50a99f93487aa7444c0f14286af7, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Outline_CustomNormalMap: @@ -66,13 +66,13 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_HighlightMode: 0 + - _DirectionalLight_HighlightMode: 1 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 - - _Outline_UseNormalMap: 0 + - _Outline_UseNormalMap: 1 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 @@ -89,7 +89,8 @@ Material: - _DirectionalLight_2DLightFactor: 0 - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_DiffuseStrength: 0.877 - - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightPower: 0.315 + - _DirectionalLight_HighlightSize: 0.315 - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 @@ -99,7 +100,7 @@ Material: - _OutlineOffsetZ: 0.75 - _OutlineWidth: 5 - _Outline_BaseColorBlend: 1 - - _Outline_LightColorBlend: 0 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: @@ -109,7 +110,7 @@ Material: - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} + - _HighlightColor: {r: 0.5529412, g: 0.15294118, b: 0.105882354, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat index 798b462c0..0203dfa13 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat @@ -54,7 +54,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _OutlineWidthMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 6d7e50a99f93487aa7444c0f14286af7, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Outline_CustomNormalMap: @@ -62,17 +62,17 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Outline_NormalMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 5b30ce1dc38b14141b4635ebb6c167ac, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_HighlightMode: 0 + - _DirectionalLight_HighlightMode: 1 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 - - _Outline_UseNormalMap: 0 + - _Outline_UseNormalMap: 1 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 @@ -90,6 +90,7 @@ Material: - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_DiffuseStrength: 0.877 - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightSize: 0 - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 @@ -97,9 +98,9 @@ Material: - _OutlineFar: 100 - _OutlineNear: 0.5 - _OutlineOffsetZ: 0.75 - - _OutlineWidth: 5 + - _OutlineWidth: 4.4 - _Outline_BaseColorBlend: 1 - - _Outline_LightColorBlend: 0 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0.727 - _Specular_Intensity: 0 m_Colors: diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat index 4377d8041..ea1fbd4db 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat @@ -54,7 +54,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _OutlineWidthMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 6d7e50a99f93487aa7444c0f14286af7, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Outline_CustomNormalMap: @@ -66,7 +66,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_HighlightMode: 0 + - _DirectionalLight_HighlightMode: 1 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 @@ -90,6 +90,7 @@ Material: - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_DiffuseStrength: 0.877 - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightSize: 0 - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 @@ -97,9 +98,9 @@ Material: - _OutlineFar: 100 - _OutlineNear: 0.5 - _OutlineOffsetZ: 0.75 - - _OutlineWidth: 5 + - _OutlineWidth: 2.92 - _Outline_BaseColorBlend: 1 - - _Outline_LightColorBlend: 0 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0.727 - _Specular_Intensity: 0 m_Colors: @@ -110,7 +111,7 @@ Material: - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0.32156864, g: 0.32156864, b: 0.32156864, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat index e9d81b7a7..78e75afe5 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat @@ -12,7 +12,7 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: - - TOON_OUTLINE_NORMAL + - TOON_OUTLINE_POS m_InvalidKeywords: - _OUTLINE_NML m_LightmapFlags: 4 @@ -54,7 +54,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _OutlineWidthMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 6d7e50a99f93487aa7444c0f14286af7, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Outline_CustomNormalMap: @@ -66,10 +66,10 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_HighlightMode: 0 + - _DirectionalLight_HighlightMode: 1 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - - _OutlineMode: 0 + - _OutlineMode: 1 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 - _Outline_UseNormalMap: 0 @@ -90,6 +90,7 @@ Material: - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_DiffuseStrength: 0.877 - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightSize: 0 - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 @@ -97,9 +98,9 @@ Material: - _OutlineFar: 100 - _OutlineNear: 0.5 - _OutlineOffsetZ: 0.75 - - _OutlineWidth: 5 + - _OutlineWidth: 4.3 - _Outline_BaseColorBlend: 1 - - _Outline_LightColorBlend: 0 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0.722 - _Specular_Intensity: 0 m_Colors: @@ -109,8 +110,8 @@ Material: - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _HighlightColor: {r: 0, g: 0, b: 0, a: 1} + - _OutlineColor: {r: 0.40392157, g: 0.40392157, b: 0.40392157, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat index 5cd0b22ed..3cc4d9ef7 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat @@ -54,7 +54,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _OutlineWidthMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 6d7e50a99f93487aa7444c0f14286af7, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Outline_CustomNormalMap: @@ -66,7 +66,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_HighlightMode: 0 + - _DirectionalLight_HighlightMode: 1 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 @@ -90,6 +90,7 @@ Material: - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_DiffuseStrength: 0.877 - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightSize: 0.2 - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 @@ -97,9 +98,9 @@ Material: - _OutlineFar: 100 - _OutlineNear: 0.5 - _OutlineOffsetZ: 0.75 - - _OutlineWidth: 5 + - _OutlineWidth: 1 - _Outline_BaseColorBlend: 1 - - _Outline_LightColorBlend: 0 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0.722 - _Specular_Intensity: 0 m_Colors: @@ -109,8 +110,8 @@ Material: - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _HighlightColor: {r: 0.47058824, g: 0.47058824, b: 0.47058824, a: 1} + - _OutlineColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat index b620c5854..427f3bf2d 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat @@ -55,7 +55,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _OutlineWidthMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 6d7e50a99f93487aa7444c0f14286af7, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Outline_CustomNormalMap: @@ -63,17 +63,17 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _Outline_NormalMap: - m_Texture: {fileID: 0} + m_Texture: {fileID: 2800000, guid: 72cb1f5c5a9106843a355751851f8b09, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: - - _DirectionalLight_HighlightMode: 0 + - _DirectionalLight_HighlightMode: 1 - _DirectionalLight_Use: 1 - _Directional_Use: 0 - _OutlineMode: 0 - _Outline_BlendBaseColor: 0 - _Outline_UseCustomNormalMap: 0 - - _Outline_UseNormalMap: 0 + - _Outline_UseNormalMap: 1 - _Specular_UseDirectionalLight: 0 - _Use_1stAs2nd: 1 - _Use_BaseAs1st: 0 @@ -91,6 +91,7 @@ Material: - _DirectionalLight_DiffuseFactor: 1 - _DirectionalLight_DiffuseStrength: 0.877 - _DirectionalLight_HighlightPower: 0.3 + - _DirectionalLight_HighlightSize: 0 - _DirectionalLight_HighlightStrength: 0.5 - _DirectionalLight_Intensity: 0.83 - _DirectionalLight_SpecularFactor: 0 @@ -98,9 +99,9 @@ Material: - _OutlineFar: 100 - _OutlineNear: 0.5 - _OutlineOffsetZ: 0.75 - - _OutlineWidth: 5 + - _OutlineWidth: 2.9 - _Outline_BaseColorBlend: 1 - - _Outline_LightColorBlend: 0 + - _Outline_LightColorBlend: 1 - _ShadeColor_Step: 0 - _Specular_Intensity: 0 m_Colors: @@ -111,7 +112,7 @@ Material: - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} + - _OutlineColor: {r: 0.19215687, g: 0.19215687, b: 0.19215687, a: 1} - _Specular_Color: {r: 1, g: 1, b: 1, a: 1} - _Specular_LightDirection: {r: 0, g: -1, b: 0, a: 0} - _White: {r: 1, g: 1, b: 1, a: 1} From 69d5ccac08b29d2d309dfc6dce8b83dfe5c1dfad Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 21:38:15 +0900 Subject: [PATCH 279/290] adjust the shading settings --- .../ToonShader_Eye_Clipping_StencilMask_3Das2D.mat | 2 +- .../ToonShader_Eyebrow_StencilMask_3Das2D.mat | 4 ++-- .../Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat | 4 ++-- .../Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat | 4 ++-- .../UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat | 4 ++-- .../UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat | 6 +++--- .../UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat | 4 ++-- .../Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat index 8c13d7974..2a9941ca0 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eye_Clipping_StencilMask_3Das2D.mat @@ -108,7 +108,7 @@ Material: - _2nd_ShadeColor: {r: 1, g: 1, b: 1, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_Direction: {r: 0.1626372, g: -0.5113381, b: 0.84384984, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 0, g: 0, b: 0, a: 1} - _OutlineColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat index 7484bdadf..65d9fc69e 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Eyebrow_StencilMask_3Das2D.mat @@ -75,7 +75,7 @@ Material: - _Outline_UseCustomNormalMap: 0 - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - - _Use_1stAs2nd: 0 + - _Use_1stAs2nd: 1 - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.0001 @@ -109,7 +109,7 @@ Material: - _2nd_ShadeColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_Direction: {r: 0.1626372, g: -0.5113381, b: 0.84384984, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 0.5529412, g: 0.15294118, b: 0.105882354, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat index f586d0062..56877cf8b 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Face_3Das2D.mat @@ -74,7 +74,7 @@ Material: - _Outline_UseCustomNormalMap: 0 - _Outline_UseNormalMap: 1 - _Specular_UseDirectionalLight: 0 - - _Use_1stAs2nd: 0 + - _Use_1stAs2nd: 1 - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.0001 @@ -108,7 +108,7 @@ Material: - _2nd_ShadeColor: {r: 0.7490196, g: 0.69411767, b: 0.88235295, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_Direction: {r: 0.1626372, g: -0.5113381, b: 0.84384984, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 0.5529412, g: 0.15294118, b: 0.105882354, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat index 0203dfa13..d19b7b87f 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair2_3Das2D.mat @@ -74,7 +74,7 @@ Material: - _Outline_UseCustomNormalMap: 0 - _Outline_UseNormalMap: 1 - _Specular_UseDirectionalLight: 0 - - _Use_1stAs2nd: 0 + - _Use_1stAs2nd: 1 - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.236 @@ -108,7 +108,7 @@ Material: - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_Direction: {r: 0.1626372, g: -0.5113381, b: 0.84384984, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat index ea1fbd4db..40a6d0121 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Fhair_StencilOut_3Das2D.mat @@ -74,7 +74,7 @@ Material: - _Outline_UseCustomNormalMap: 0 - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - - _Use_1stAs2nd: 0 + - _Use_1stAs2nd: 1 - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.236 @@ -108,7 +108,7 @@ Material: - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_Direction: {r: 0.1626372, g: -0.5113381, b: 0.84384984, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 0.32156864, g: 0.32156864, b: 0.32156864, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat index 78e75afe5..dade4ab93 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Hair_Clipping_3Das2D.mat @@ -74,8 +74,8 @@ Material: - _Outline_UseCustomNormalMap: 0 - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - - _Use_1stAs2nd: 0 - - _Use_BaseAs1st: 0 + - _Use_1stAs2nd: 1 + - _Use_BaseAs1st: 1 m_Floats: - _1st2nd_Shades_Feather: 0.064 - _1stTo2nd_ShadeFeather: 0.064 @@ -108,7 +108,7 @@ Material: - _2nd_ShadeColor: {r: 0.8602941, g: 0.664852, b: 0.45544982, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_Direction: {r: 0.1626372, g: -0.5113381, b: 0.84384984, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 0, g: 0, b: 0, a: 1} - _OutlineColor: {r: 0.40392157, g: 0.40392157, b: 0.40392157, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat index 3cc4d9ef7..a3fdf0be1 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Head_Clipping_3Das2D.mat @@ -74,7 +74,7 @@ Material: - _Outline_UseCustomNormalMap: 0 - _Outline_UseNormalMap: 0 - _Specular_UseDirectionalLight: 0 - - _Use_1stAs2nd: 0 + - _Use_1stAs2nd: 1 - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.064 @@ -108,7 +108,7 @@ Material: - _2nd_ShadeColor: {r: 0.6691177, g: 0.47672933, b: 0.27059904, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_Direction: {r: 0.1626372, g: -0.5113381, b: 0.84384984, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 0.47058824, g: 0.47058824, b: 0.47058824, a: 1} - _OutlineColor: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1} diff --git a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat index 427f3bf2d..2472221ce 100644 --- a/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat +++ b/Toonshader_ProjectURP/Assets/Materials/UnityChan_3Das2D/ToonShader_Main_3Das2D.mat @@ -75,7 +75,7 @@ Material: - _Outline_UseCustomNormalMap: 0 - _Outline_UseNormalMap: 1 - _Specular_UseDirectionalLight: 0 - - _Use_1stAs2nd: 1 + - _Use_1stAs2nd: 0 - _Use_BaseAs1st: 0 m_Floats: - _1st2nd_Shades_Feather: 0.08 @@ -109,7 +109,7 @@ Material: - _2nd_ShadeColor: {r: 0.7490196, g: 0.69411767, b: 0.88235295, a: 1} - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - _DirectionalLight_Color: {r: 1, g: 1, b: 1, a: 1} - - _DirectionalLight_Direction: {r: 0, g: -0.6563298, b: 0.7544741, a: 0} + - _DirectionalLight_Direction: {r: 0.1626372, g: -0.5113381, b: 0.84384984, a: 0} - _DirectionalLight_ViewPosition: {r: 0, g: 0, b: 0, a: 0} - _HighlightColor: {r: 1, g: 1, b: 1, a: 1} - _OutlineColor: {r: 0.19215687, g: 0.19215687, b: 0.19215687, a: 1} From cc1ef04850928db83c99b74d180b62bb1fcbb677 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 22:49:46 +0900 Subject: [PATCH 280/290] update label --- .../Assets/Editor/Scripts/UnityToon3Das2DGUI.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs index ac96eacab..459fb5af0 100644 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs @@ -399,11 +399,11 @@ MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty }, new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH), - label = new GUIContent("Strength", "Multiplier for the highlight contribution."), + label = new GUIContent("Highlight Strength", "Multiplier for the highlight contribution."), }, new MaterialUIElement { mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_SIZE), - label = new GUIContent("Power", "Highlight power factor."), + label = new GUIContent("Highlight Size", "Highlight size."), }, From 94ce18762268b7ca7dc9189a1b2a5d1be33bea07 Mon Sep 17 00:00:00 2001 From: sin Date: Mon, 24 Nov 2025 23:36:26 +0900 Subject: [PATCH 281/290] add prefabs --- Toonshader_ProjectURP/Assets/Prefabs.meta | 8 + .../Assets/Prefabs/SD_unitychan_2D.prefab | 6022 +++++++++++++++++ .../Prefabs/SD_unitychan_2D.prefab.meta | 7 + 3 files changed, 6037 insertions(+) create mode 100644 Toonshader_ProjectURP/Assets/Prefabs.meta create mode 100644 Toonshader_ProjectURP/Assets/Prefabs/SD_unitychan_2D.prefab create mode 100644 Toonshader_ProjectURP/Assets/Prefabs/SD_unitychan_2D.prefab.meta diff --git a/Toonshader_ProjectURP/Assets/Prefabs.meta b/Toonshader_ProjectURP/Assets/Prefabs.meta new file mode 100644 index 000000000..3eecca26e --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: feb4e03eedd0cb94eb4b1d07c65d3383 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Prefabs/SD_unitychan_2D.prefab b/Toonshader_ProjectURP/Assets/Prefabs/SD_unitychan_2D.prefab new file mode 100644 index 000000000..cdc920643 --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Prefabs/SD_unitychan_2D.prefab @@ -0,0 +1,6022 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4701421483510144 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5731700714063062722} + - component: {fileID: 8727559746035349811} + m_Layer: 6 + m_Name: J_R_HeadRibbon_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5731700714063062722 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4701421483510144} + serializedVersion: 2 + m_LocalRotation: {x: -0.25047436, y: 0.28337345, z: 0.04999436, w: 0.92437154} + m_LocalPosition: {x: 0.0795154, y: -0.06875421, z: 0.31363952} + m_LocalScale: {x: 0.9999998, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8288908343178119051} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8727559746035349811 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4701421483510144} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 8288908343178119051} + boneAxis: {x: 0, y: 0, z: 1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + debug: 1 + threshold: 0.01 +--- !u!1 &24114967919257654 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7032405307784783804} + m_Layer: 6 + m_Name: Character1_LeftHandPinky2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7032405307784783804 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 24114967919257654} + serializedVersion: 2 + m_LocalRotation: {x: -0.0041052187, y: -0.02118038, z: -0.00477994, w: 0.99975586} + m_LocalPosition: {x: -0.009598923, y: 0.000000007152557, z: 0.000000076293944} + m_LocalScale: {x: 1.0000001, y: 0.9999998, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8418220330097518440} + m_Father: {fileID: 8544153664223713142} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &116592254993198272 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1945343063166025465} + m_Layer: 6 + m_Name: Character1_RightHandMiddle2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1945343063166025465 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 116592254993198272} + serializedVersion: 2 + m_LocalRotation: {x: -0.0038748826, y: -0.017280553, z: 0.010274474, w: 0.9997904} + m_LocalPosition: {x: 0.01678072, y: -0.000000042915342, z: 0.000000076293944} + m_LocalScale: {x: 0.9999997, y: 0.9999998, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2355703600664584488} + m_Father: {fileID: 2267692973050519269} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &188036615518678405 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2268707898031551092} + - component: {fileID: 5469484761548186197} + m_Layer: 6 + m_Name: Character1_LeftHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2268707898031551092 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 188036615518678405} + serializedVersion: 2 + m_LocalRotation: {x: -0.025144951, y: 0.0009263517, z: -0.00004903172, w: 0.9996834} + m_LocalPosition: {x: -0.112707324, y: -0.0000000047683715, z: -0.000000038146972} + m_LocalScale: {x: 1.0000001, y: 0.99999976, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 347900642799376463} + - {fileID: 2142336817693022222} + - {fileID: 8544153664223713142} + - {fileID: 4311764050378445562} + - {fileID: 1740985048597586241} + m_Father: {fileID: 7396104810784837768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5469484761548186197 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 188036615518678405} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.07 +--- !u!1 &219660183361621404 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2824019142497116302} + m_Layer: 6 + m_Name: J_L_Elbow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2824019142497116302 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 219660183361621404} + serializedVersion: 2 + m_LocalRotation: {x: -0.0065112184, y: -0.0007156489, z: -0.017952146, w: 0.99981743} + m_LocalPosition: {x: 0.00022022247, y: 0.0046890355, z: -0.00008010864} + m_LocalScale: {x: 1.0000002, y: 0.99999976, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7396104810784837768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &225404716319441635 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7490102396379286848} + m_Layer: 6 + m_Name: Character1_LeftUpLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7490102396379286848 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 225404716319441635} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.09838927, y: 0.0002046585, z: -0.06464721} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 9130718734329090452} + - {fileID: 1241849649781415384} + m_Father: {fileID: 29597928197065389} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &283883574830613507 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 347900642799376463} + m_Layer: 6 + m_Name: Character1_LeftHandIndex1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &347900642799376463 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 283883574830613507} + serializedVersion: 2 + m_LocalRotation: {x: 0.008546737, y: -0.09441612, z: 0.03057627, w: 0.99502647} + m_LocalPosition: {x: -0.046978243, y: -0.022182073, z: 0.0025979613} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4487619767070584897} + m_Father: {fileID: 2268707898031551092} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &436425014046712664 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2004898901779290869} + m_Layer: 6 + m_Name: Character1_LeftFoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2004898901779290869 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 436425014046712664} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.03391635, z: -0.16433224} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2105237481522923700} + m_Father: {fileID: 9130718734329090452} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &436858141743470579 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4311764050378445562} + m_Layer: 6 + m_Name: Character1_LeftHandRing1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4311764050378445562 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 436858141743470579} + serializedVersion: 2 + m_LocalRotation: {x: -0.002642449, y: -0.03478314, z: -0.004747433, w: 0.9993802} + m_LocalPosition: {x: -0.049339905, y: 0.008889142, z: 0.0041249082} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2687392561584112538} + m_Father: {fileID: 2268707898031551092} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &454840462129759945 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2142336817693022222} + m_Layer: 6 + m_Name: Character1_LeftHandMiddle1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2142336817693022222 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 454840462129759945} + serializedVersion: 2 + m_LocalRotation: {x: 0.0055155223, y: -0.087773144, z: 0.0217056, w: 0.9958887} + m_LocalPosition: {x: -0.05140888, y: -0.0063463617, z: 0.006106071} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999976} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6725300670364461023} + m_Father: {fileID: 2268707898031551092} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &530681079345152123 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6407150209309253158} + m_Layer: 6 + m_Name: Character1_Reference + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6407150209309253158 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 530681079345152123} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.000000002661807} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 29597928197065389} + m_Father: {fileID: 6731142422001346709} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &604876840981190205 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4808659917229634046} + m_Layer: 6 + m_Name: J_R_HairSide_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4808659917229634046 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 604876840981190205} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000069662923, y: 0.00000008195637, z: 0.000000029802383, + w: 1} + m_LocalPosition: {x: 0.17118447, y: 0.000000009536743, z: -0.00000016212464} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 0.99999976} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8855767437384622858} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &730778440229028643 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7039575964410758742} + - component: {fileID: 8314716407754399569} + m_Layer: 6 + m_Name: J_R_HairSide_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7039575964410758742 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 730778440229028643} + serializedVersion: 2 + m_LocalRotation: {x: 0.03276742, y: 0.4340327, z: 0.09296258, w: 0.8954887} + m_LocalPosition: {x: 0.072985135, y: -0.09341254, z: 0.27946243} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8855767437384622858} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8314716407754399569 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 730778440229028643} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 8855767437384622858} + boneAxis: {x: 1, y: 0, z: 0} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: [] + debug: 1 + threshold: 0.01 +--- !u!1 &800097489790157745 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 612309645553071391} + - component: {fileID: 4348996100345983640} + m_Layer: 6 + m_Name: J_L_HairSide_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &612309645553071391 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 800097489790157745} + serializedVersion: 2 + m_LocalRotation: {x: 0.029233634, y: -0.33951724, z: -0.06338306, w: 0.93800646} + m_LocalPosition: {x: -0.124109186, y: 0.000000047683713, z: -0.00000030517577} + m_LocalScale: {x: 0.9999999, y: 1.0000002, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5872812096164718950} + m_Father: {fileID: 699930855321221375} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &4348996100345983640 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 800097489790157745} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 5872812096164718950} + boneAxis: {x: -1, y: 0, z: 0} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: [] + debug: 1 + threshold: 0.01 +--- !u!1 &849165504154124924 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8857949806185292424} + - component: {fileID: 2185278896394700416} + m_Layer: 6 + m_Name: J_R_HairTail_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8857949806185292424 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849165504154124924} + serializedVersion: 2 + m_LocalRotation: {x: 0.27495188, y: -0.14915672, z: -0.13304274, w: 0.9404538} + m_LocalPosition: {x: 0.08453457, y: 0.12091121, z: 0.074723355} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1718512596781371879} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2185278896394700416 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849165504154124924} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 1718512596781371879} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.08 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.007, z: 0} + colliders: + - {fileID: 3742319637435193207} + - {fileID: 6804823801260687976} + - {fileID: 5945787198051039176} + - {fileID: 2177169964850823879} + debug: 1 + threshold: 0.01 +--- !u!1 &906258176490767633 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3580862425918477564} + m_Layer: 6 + m_Name: J_R_Sode_C00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3580862425918477564 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906258176490767633} + serializedVersion: 2 + m_LocalRotation: {x: -0.008828224, y: -0.005897476, z: 0.10055573, w: 0.9948748} + m_LocalPosition: {x: 0.01254324, y: 0.036262, z: -0.0059057614} + m_LocalScale: {x: 0.99999994, y: 1.0000002, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6963582107709384724} + m_Father: {fileID: 446200131182488843} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &954687525056108494 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5065832433306771527} + m_Layer: 6 + m_Name: bone_eye_R + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5065832433306771527 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 954687525056108494} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.026893293, y: 0.046498314, z: 0.10205597} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &994237003113453090 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2961329562039978871} + m_Layer: 6 + m_Name: Character1_RightShoulder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2961329562039978871 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 994237003113453090} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000017797277, y: 0.14720337, z: 0.012063239, w: 0.9890327} + m_LocalPosition: {x: 0.02673147, y: 0.046953294, z: 0.1026548} + m_LocalScale: {x: 0.99999994, y: 0.99999994, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6954321385767605024} + m_Father: {fileID: 9120174409034302403} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1062312390838644691 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3398889758669254210} + m_Layer: 6 + m_Name: Character1_RightFoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3398889758669254210 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1062312390838644691} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000000509566, y: 0.000029975812, z: -0.00016999245, w: 1} + m_LocalPosition: {x: -0, y: 0.033916343, z: -0.16433214} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8938201858354982214} + m_Father: {fileID: 5833084827420442486} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1165333237025849021 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4487619767070584897} + m_Layer: 6 + m_Name: Character1_LeftHandIndex2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4487619767070584897 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165333237025849021} + serializedVersion: 2 + m_LocalRotation: {x: 0.0058518304, y: 0.04137672, z: 0.0068952497, w: 0.9991027} + m_LocalPosition: {x: -0.014227028, y: -0.00000000834465, z: 0.000000076293944} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.9999996} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 644978463370826841} + m_Father: {fileID: 347900642799376463} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1165559236122699706 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8591750898746922411} + - component: {fileID: 2954485512992697158} + m_Layer: 6 + m_Name: J_acce_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8591750898746922411 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165559236122699706} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -2.5015806e-10, y: -0.052113816, z: 0.06192604} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7271580559260712381} + m_Father: {fileID: 9120174409034302403} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2954485512992697158 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1165559236122699706} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 7271580559260712381} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.1 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: [] + debug: 1 + threshold: 0.01 +--- !u!1 &1234363997120937107 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6878059461571870231} + - component: {fileID: 2055818716676457244} + m_Layer: 6 + m_Name: Character1_LeftArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6878059461571870231 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1234363997120937107} + serializedVersion: 2 + m_LocalRotation: {x: 0.026822958, y: -0.19842313, z: 0.0032788063, w: 0.9797439} + m_LocalPosition: {x: -0.046947505, y: -0.0003006166, z: 0.0036682128} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7396104810784837768} + - {fileID: 7895641511515384564} + m_Father: {fileID: 6093097180885946835} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2055818716676457244 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1234363997120937107} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.05 +--- !u!1 &1301542983648007760 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1654624824523219389} + m_Layer: 6 + m_Name: Character1_RightHandIndex3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1654624824523219389 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1301542983648007760} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000007450581, y: 0.000000104308135, z: -0.000000016763806, + w: 1} + m_LocalPosition: {x: 0.010736103, y: -0.000000085830685, z: -0.00000015258789} + m_LocalScale: {x: 0.99999994, y: 0.99999976, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1749022844549540435} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1337150063009337818 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8418220330097518440} + m_Layer: 6 + m_Name: Character1_LeftHandPinky3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8418220330097518440 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1337150063009337818} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000002793968, y: -0.000000029802322, z: -0.000000007450581, + w: 1} + m_LocalPosition: {x: -0.0075915335, y: -0.000000009536743, z: 0} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7032405307784783804} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1341362871341351714 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1054518996607798814} + m_Layer: 6 + m_Name: J_R_HeadRibbon_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1054518996607798814 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1341362871341351714} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000007748599, y: -0.00000043213427, z: -0.00000084936573, + w: 1} + m_LocalPosition: {x: -0.0000009536743, y: -0.0000010681152, z: 0.16675788} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 312985126539233903} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1439928643943303844 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5074259165098998069} + m_Layer: 6 + m_Name: J_R_ForeArm_00_tw + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5074259165098998069 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1439928643943303844} + serializedVersion: 2 + m_LocalRotation: {x: -0.012467529, y: -0.00039108118, z: 0.000021479957, w: 0.9999222} + m_LocalPosition: {x: 0.1089093, y: 0.00009293079, z: -0.00038059233} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 446200131182488843} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1597064968528032783 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1718512596781371879} + - component: {fileID: 5769535583271219466} + m_Layer: 6 + m_Name: J_R_HairTail_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1718512596781371879 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1597064968528032783} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000029802322, y: -0.0000000074505815, z: -0.00000010058282, + w: 1} + m_LocalPosition: {x: -0.000000095367426, y: 0.0000009918213, z: -0.19820796} + m_LocalScale: {x: 1.0000002, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7360389635270391183} + m_Father: {fileID: 8857949806185292424} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5769535583271219466 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1597064968528032783} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 7360389635270391183} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + - {fileID: 6804823801260687976} + - {fileID: 5945787198051039176} + - {fileID: 2177169964850823879} + debug: 1 + threshold: 0.01 +--- !u!1 &1625475289135790493 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2755942572119240026} + m_Layer: 6 + m_Name: J_R_Sode_E00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2755942572119240026 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1625475289135790493} + serializedVersion: 2 + m_LocalRotation: {x: 0.002230505, y: 0.0000016093232, z: -0.0000000026582874, w: 0.99999756} + m_LocalPosition: {x: 0.0237582, y: 0.000000004172325, z: 0.0000009918213} + m_LocalScale: {x: 1.0000002, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7021926352628559999} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1697002752442651709 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2148168642296180} + m_Layer: 6 + m_Name: J_R_Sode_B01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2148168642296180 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1697002752442651709} + serializedVersion: 2 + m_LocalRotation: {x: 0.000022957096, y: -0.0000007750364, z: -0.000007668492, w: 1} + m_LocalPosition: {x: 0.111486964, y: -0.0000026249886, z: 0.00000125885} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2598788246662646975} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1721989194271613396 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2590597086074521511} + m_Layer: 6 + m_Name: Character1_RightHandThumb3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2590597086074521511 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1721989194271613396} + serializedVersion: 2 + m_LocalRotation: {x: -0.01386646, y: 0.019060291, z: 0.00015806762, w: 0.9997222} + m_LocalPosition: {x: 0.010316124, y: 0.0000005340576, z: -0.00000010967254} + m_LocalScale: {x: 1.0000002, y: 1.0000004, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8931402703070841046} + m_Father: {fileID: 4214762892820373619} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1783773124011686840 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 312985126539233903} + - component: {fileID: 7380194914189166690} + m_Layer: 6 + m_Name: J_R_HeadRibbon_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &312985126539233903 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1783773124011686840} + serializedVersion: 2 + m_LocalRotation: {x: 0.68807024, y: 0.05360729, z: 0.0443758, w: 0.7222994} + m_LocalPosition: {x: 0.0000008010864, y: 0.000001335144, z: 0.13668053} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1054518996607798814} + m_Father: {fileID: 8288908343178119051} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7380194914189166690 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1783773124011686840} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 1054518996607798814} + boneAxis: {x: 0, y: 0, z: 1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + debug: 1 + threshold: 0.01 +--- !u!1 &1837524912982795708 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2138355904350086949} + m_Layer: 6 + m_Name: J_R_HairSide2_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2138355904350086949 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1837524912982795708} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: -0.07184112} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6982430254059911505} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1996512241493110588 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8645214920068418899} + m_Layer: 6 + m_Name: LookPos + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8645214920068418899 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1996512241493110588} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.8, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6731142422001346709} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2002885710864653430 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4662294156586103562} + m_Layer: 6 + m_Name: Character1_LeftHandRing3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4662294156586103562 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2002885710864653430} + serializedVersion: 2 + m_LocalRotation: {x: 6.765418e-17, y: -0.000000044703473, z: 0.0000000015133989, + w: 1} + m_LocalPosition: {x: -0.010001297, y: 0.0000000017881393, z: 0} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2687392561584112538} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2163072715003180786 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2350293877619336017} + - component: {fileID: 8449650592627471630} + m_Layer: 6 + m_Name: J_R_Skirt_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2350293877619336017 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2163072715003180786} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000074505815, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.000000095367426, z: -0.060169753} + m_LocalScale: {x: 1, y: 0.9999999, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8844543047423818134} + m_Father: {fileID: 7206730510584683501} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8449650592627471630 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2163072715003180786} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 8844543047423818134} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 4237397560926780522} + - {fileID: 126894663884498659} + - {fileID: 4646042344897761171} + debug: 1 + threshold: 0.01 +--- !u!1 &2174636109454660141 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6279320856188589947} + m_Layer: 6 + m_Name: J_L_HairFront_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6279320856188589947 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2174636109454660141} + serializedVersion: 2 + m_LocalRotation: {x: 0.14653109, y: -0.012764544, z: -0.0018909584, w: 0.9891219} + m_LocalPosition: {x: 0.0000000023841857, y: 0, z: -0.18115325} + m_LocalScale: {x: 0.9999999, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 220351708734432648} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2228752027473629224 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1038416052695676677} + m_Layer: 6 + m_Name: Character1_LeftHandThumb4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1038416052695676677 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2228752027473629224} + serializedVersion: 2 + m_LocalRotation: {x: 0.00000014156107, y: 0.00000002607702, z: -0.000000089406974, + w: 1} + m_LocalPosition: {x: -0.012429466, y: -0.000000038146972, z: 0.000000038146972} + m_LocalScale: {x: 1, y: 0.99999976, z: 0.9999997} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6690496443531499613} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2300892023884190509 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4797773783076098714} + m_Layer: 6 + m_Name: J_L_Sode_C01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4797773783076098714 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2300892023884190509} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000037252907, y: -0.000000044703487, z: 0.0000000074505815, + w: 1} + m_LocalPosition: {x: -0.107970506, y: -0.000000009536743, z: 0} + m_LocalScale: {x: 0.9999999, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3342038955245361892} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2378791293606974704 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4214762892820373619} + m_Layer: 6 + m_Name: Character1_RightHandThumb2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4214762892820373619 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2378791293606974704} + serializedVersion: 2 + m_LocalRotation: {x: -0.007267016, y: 0.07349538, z: -0.111579284, w: 0.99100745} + m_LocalPosition: {x: 0.017501583, y: 0.000000114440915, z: -0.00000050544736} + m_LocalScale: {x: 0.99999994, y: 0.99999964, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2590597086074521511} + m_Father: {fileID: 439045745349089632} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2408117209060125217 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7966788070020410002} + m_Layer: 6 + m_Name: Character1_RightHandPinky1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7966788070020410002 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2408117209060125217} + serializedVersion: 2 + m_LocalRotation: {x: 0.009402843, y: 0.14908786, z: -0.03696336, w: 0.98808813} + m_LocalPosition: {x: 0.046354044, y: 0.022601992, z: 0.00095024105} + m_LocalScale: {x: 0.9999999, y: 1, z: 0.9999998} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6397107419441545405} + m_Father: {fileID: 5755076169123862156} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2441900717573544699 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6698999444532217468} + m_Layer: 6 + m_Name: J_L_SkirtBack_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6698999444532217468 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2441900717573544699} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: -0.06979225} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1541561317559911158} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2542678360567054871 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4006969703662656344} + m_Layer: 6 + m_Name: J_R_Sode_D00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4006969703662656344 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2542678360567054871} + serializedVersion: 2 + m_LocalRotation: {x: -0.010909932, y: 0.104387626, z: 0.022491591, w: 0.99422246} + m_LocalPosition: {x: 0.015457363, y: 0.00009038925, z: -0.03743225} + m_LocalScale: {x: 0.99999976, y: 1.0000001, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2051485737349694948} + m_Father: {fileID: 446200131182488843} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2567537932918011793 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1241849649781415384} + - component: {fileID: 7598970713000379034} + m_Layer: 6 + m_Name: Locator_LeftUpLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1241849649781415384 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2567537932918011793} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.07247563} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7490102396379286848} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7598970713000379034 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2567537932918011793} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.06 +--- !u!1 &2593667274209736985 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6430434720047991833} + m_Layer: 6 + m_Name: J_R_HairTail_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6430434720047991833 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2593667274209736985} + serializedVersion: 2 + m_LocalRotation: {x: -1.6653337e-16, y: -0.000000014901158, z: -0.000000011175868, + w: 1} + m_LocalPosition: {x: -0.000000038146972, y: -0.000000038146972, z: -0.17191932} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7360389635270391183} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2609993454752576944 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2610291734591142933} + - component: {fileID: 5823264736046475635} + m_Layer: 6 + m_Name: _Fhair + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2610291734591142933 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2609993454752576944} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4228537525546935594} + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!137 &5823264736046475635 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2609993454752576944} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 2 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 66ecb67261a5bed49b4e9f4734178c7e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300006, guid: 7d482c82ffb74a7fbfc5c7b288095351, type: 3} + m_Bones: + - {fileID: 612309645553071391} + - {fileID: 699930855321221375} + - {fileID: 6526853387327317499} + - {fileID: 7039575964410758742} + - {fileID: 8855767437384622858} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 6526853387327317499} + m_AABB: + m_Center: {x: 0, y: -0.03, z: 0.16} + m_Extent: {x: 0.295, y: 0.12, z: 0.176} + m_DirtyAABB: 0 +--- !u!1 &2636037261930780200 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4005512137851375714} + - component: {fileID: 3752581507719097027} + m_Layer: 6 + m_Name: J_L_HeadRibbon_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4005512137851375714 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2636037261930780200} + serializedVersion: 2 + m_LocalRotation: {x: 0.68807155, y: -0.053607468, z: -0.044375025, w: 0.7222982} + m_LocalPosition: {x: -0, y: 0.00000022888183, z: 0.13667938} + m_LocalScale: {x: 1, y: 0.99999976, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8400846392894500075} + m_Father: {fileID: 8288184820673587655} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3752581507719097027 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2636037261930780200} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 8400846392894500075} + boneAxis: {x: 0, y: 0, z: 1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + debug: 1 + threshold: 0.01 +--- !u!1 &2651599606854574190 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2687392561584112538} + m_Layer: 6 + m_Name: Character1_LeftHandRing2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2687392561584112538 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2651599606854574190} + serializedVersion: 2 + m_LocalRotation: {x: -0.005074419, y: -0.01721808, z: -0.011732383, w: 0.99977005} + m_LocalPosition: {x: -0.013061695, y: 0.000000007152557, z: -0.000000038146972} + m_LocalScale: {x: 0.99999964, y: 0.99999976, z: 0.9999998} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4662294156586103562} + m_Father: {fileID: 4311764050378445562} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2660563876341861809 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2225245250193162762} + - component: {fileID: 2778570379256716332} + m_Layer: 6 + m_Name: J_L_HairTail_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2225245250193162762 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2660563876341861809} + serializedVersion: 2 + m_LocalRotation: {x: -4.9960047e-16, y: -0.00000006705523, z: -0.0000000074505815, + w: 1} + m_LocalPosition: {x: -0, y: 0.000000114440915, z: -0.2224917} + m_LocalScale: {x: 0.9999999, y: 1.0000004, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7410364982531109626} + m_Father: {fileID: 650710974728237554} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2778570379256716332 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2660563876341861809} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 7410364982531109626} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + - {fileID: 2055818716676457244} + - {fileID: 1952171542537200122} + - {fileID: 2177169964850823879} + - {fileID: 5469484761548186197} + debug: 1 + threshold: 0.01 +--- !u!1 &2722470468437240058 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8288908343178119051} + - component: {fileID: 6811777108806405795} + m_Layer: 6 + m_Name: J_R_HeadRibbon_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8288908343178119051 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2722470468437240058} + serializedVersion: 2 + m_LocalRotation: {x: -0.82907134, y: 0.12707938, z: -0.096691504, w: 0.5358566} + m_LocalPosition: {x: -0.0000011062622, y: -0.0000010299682, z: 0.24783768} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 312985126539233903} + m_Father: {fileID: 5731700714063062722} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6811777108806405795 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2722470468437240058} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 312985126539233903} + boneAxis: {x: 0, y: 0, z: 1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + debug: 1 + threshold: 0.01 +--- !u!1 &2833677757875666648 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1740985048597586241} + m_Layer: 6 + m_Name: Character1_LeftHandThumb1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1740985048597586241 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2833677757875666648} + serializedVersion: 2 + m_LocalRotation: {x: 0.7231719, y: 0.16827042, z: 0.18860354, w: 0.6427568} + m_LocalPosition: {x: -0.016437054, y: -0.01568381, z: -0.017473105} + m_LocalScale: {x: 1, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 627136687486605248} + m_Father: {fileID: 2268707898031551092} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2872353104234345470 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 644978463370826841} + m_Layer: 6 + m_Name: Character1_LeftHandIndex3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &644978463370826841 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2872353104234345470} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000018626456, y: -0.00000014901154, z: -0.0000000037252887, + w: 1} + m_LocalPosition: {x: -0.0107357595, y: 0.000000014305114, z: -0.000000076293944} + m_LocalScale: {x: 1.0000005, y: 1, z: 1.0000004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4487619767070584897} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2998961262265051476 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5833084827420442486} + - component: {fileID: 126894663884498659} + m_Layer: 6 + m_Name: Character1_RightLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5833084827420442486 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2998961262265051476} + serializedVersion: 2 + m_LocalRotation: {x: 8.881784e-16, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.02183431, z: -0.1518638} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3398889758669254210} + m_Father: {fileID: 2423412952060108609} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &126894663884498659 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2998961262265051476} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.05 +--- !u!1 &3032179794786167899 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 650710974728237554} + - component: {fileID: 2105859277721558611} + m_Layer: 6 + m_Name: J_L_HairTail_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &650710974728237554 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3032179794786167899} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000029802326, y: -0.000000022351744, z: 0.000000011175873, + w: 1} + m_LocalPosition: {x: 0.000000019073486, y: -0.000000076293944, z: -0.19820912} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2225245250193162762} + m_Father: {fileID: 2219722635308239775} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2105859277721558611 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3032179794786167899} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 2225245250193162762} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + - {fileID: 2055818716676457244} + - {fileID: 1952171542537200122} + - {fileID: 2177169964850823879} + debug: 1 + threshold: 0.01 +--- !u!1 &3100082352255109641 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1624019310821944626} + - component: {fileID: 8595815926925720104} + m_Layer: 6 + m_Name: _eye + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1624019310821944626 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3100082352255109641} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4228537525546935594} + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!137 &8595815926925720104 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3100082352255109641} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 2 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 3f9d94f5fe986d041a6ec19968d86f1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300008, guid: 7d482c82ffb74a7fbfc5c7b288095351, type: 3} + m_Bones: + - {fileID: 6353880293219359101} + - {fileID: 5065832433306771527} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 5065832433306771527} + m_AABB: + m_Center: {x: -0.027, y: -0.108, z: -0.021} + m_Extent: {x: 0.094, y: 0.008, z: 0.034} + m_DirtyAABB: 0 +--- !u!1 &3223785493978147267 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7328954229572208060} + m_Layer: 6 + m_Name: Character1_LeftHandMiddle3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7328954229572208060 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3223785493978147267} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000007450579, y: -0.000000014901163, z: -0.0000000037252907, + w: 1} + m_LocalPosition: {x: -0.012807655, y: -0.000000005960464, z: -0.000000076293944} + m_LocalScale: {x: 0.9999999, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6725300670364461023} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3486880178515505638 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7271580559260712381} + m_Layer: 6 + m_Name: J_acce_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7271580559260712381 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3486880178515505638} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: -0.017489681, z: -0.022835387} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8591750898746922411} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3732929220959569902 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7360389635270391183} + - component: {fileID: 1293945147033921126} + m_Layer: 6 + m_Name: J_R_HairTail_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7360389635270391183 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3732929220959569902} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000089406925, y: 0.000000014901161, z: -0.000000040978207, + w: 1} + m_LocalPosition: {x: -0.0000004196167, y: -0.0000005340576, z: -0.2224927} + m_LocalScale: {x: 0.9999997, y: 1.0000005, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6430434720047991833} + m_Father: {fileID: 1718512596781371879} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1293945147033921126 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3732929220959569902} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 6430434720047991833} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + - {fileID: 6804823801260687976} + - {fileID: 5945787198051039176} + - {fileID: 2177169964850823879} + - {fileID: 2236474210489685004} + debug: 1 + threshold: 0.01 +--- !u!1 &3763628574515435971 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6731142422001346709} + - component: {fileID: 5757260810511786122} + - component: {fileID: 2503438222180621390} + - component: {fileID: 9116022294543279056} + - component: {fileID: 3154194682003541504} + - component: {fileID: 8050305352418330004} + - component: {fileID: 6055481018498512936} + m_Layer: 6 + m_Name: SD_unitychan_2D + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6731142422001346709 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3763628574515435971} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0.9995854, z: 0, w: -0.028793927} + m_LocalPosition: {x: -12.32, y: 0, z: 0} + m_LocalScale: {x: 3.96, y: 3.96, z: 3.96} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 6407150209309253158} + - {fileID: 8645214920068418899} + - {fileID: 4228537525546935594} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: -183.3, z: 0} +--- !u!95 &5757260810511786122 +Animator: + serializedVersion: 7 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3763628574515435971} + m_Enabled: 1 + m_Avatar: {fileID: 9000000, guid: 7d482c82ffb74a7fbfc5c7b288095351, type: 3} + m_Controller: {fileID: 9100000, guid: b1956214b7a44fc9bec22567af111a35, type: 2} + m_CullingMode: 1 + m_UpdateMode: 0 + m_ApplyRootMotion: 1 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_AnimatePhysics: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 +--- !u!114 &2503438222180621390 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3763628574515435971} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f2ff98864dcb4134ba90930706ec5c19, type: 3} + m_Name: + m_EditorClassIdentifier: + _random: 0 + _threshold: 0.5 + _interval: 10 + isGUI: 0 +--- !u!114 &9116022294543279056 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3763628574515435971} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c67123d0e0f146e697bb437163c8dddc, type: 3} + m_Name: + m_EditorClassIdentifier: + animations: + - {fileID: 7400000, guid: c4544fb5b42c4552870042c04cb737f1, type: 2} + - {fileID: 7400000, guid: 8cdef82beb75460f82696a83f7bfba04, type: 2} + - {fileID: 7400000, guid: 823c17bb316e4c218c9beff783729a1f, type: 2} + - {fileID: 7400000, guid: eb341d461bfc49f89db3587f69bca0c6, type: 2} + - {fileID: 7400000, guid: ce1a347fa6e6465b843f36dc83582bae, type: 2} + - {fileID: 7400000, guid: dec3c005cf844201bbef95939e02c8de, type: 2} + - {fileID: 7400000, guid: 174f028e4ccf4719a7815e1c7894ceea, type: 2} + - {fileID: 7400000, guid: f44409afa9024ee2bb3101f621229b8b, type: 2} + - {fileID: 7400000, guid: 4ce8eb4a108d4c7b8b4561f26e7866e9, type: 2} + - {fileID: 7400000, guid: 2d8b9ed644c545e498f975bc939c5d08, type: 2} + - {fileID: 7400000, guid: 604de7575f9c46b5a948a29180b85fa1, type: 2} + - {fileID: 7400000, guid: 24773958be8b4089a71a8cd22e2c849d, type: 2} + - {fileID: 7400000, guid: d9f6a58fed7746738b0afb93ecc442ca, type: 2} + - {fileID: 7400000, guid: d7898170620647fcb36b2142c04bd648, type: 2} + - {fileID: 7400000, guid: ecd04fe714a640fbbdf2139c12d881b3, type: 2} + - {fileID: 7400000, guid: 925f903d002e4acbac5c4eafb345c93d, type: 2} + - {fileID: 7400000, guid: 73e5e53087f64843bb92acce55950646, type: 2} + - {fileID: 7400000, guid: 7fe487b57948406ba0e71c243762875b, type: 2} + - {fileID: 7400000, guid: e382dc476bce434480784cd40d20600a, type: 2} + delayWeight: 3 + isKeepFace: 1 + isGUI: 0 +--- !u!114 &3154194682003541504 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3763628574515435971} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f43949b7c4b743bdb782be6c4275073f, type: 3} + m_Name: + m_EditorClassIdentifier: + isActive: 1 + ref_face: {fileID: 2161748187344067778} + ratio_Close: 85 + ratio_HalfClose: 20 + index_EYE_blk: 0 + index_EYE_sml: 1 + index_EYE_dmg: 15 + ratio_Open: 0 + timeBlink: 0.4 + threshold: 0.3 + interval: 3 +--- !u!114 &8050305352418330004 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3763628574515435971} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1f2e6774bbb440e1b90ec5051477225a, type: 3} + m_Name: + m_EditorClassIdentifier: + dynamicRatio: 1 + stiffnessForce: 0.01 + stiffnessCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.010707155 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0.010707155 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + dragForce: 0.4 + dragCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.40000004 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0.40000004 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + springBones: + - {fileID: 5053127848451338921} + - {fileID: 7887378130367053097} + - {fileID: 869632525762003056} + - {fileID: 4348996100345983640} + - {fileID: 3660892605848956866} + - {fileID: 2105859277721558611} + - {fileID: 2778570379256716332} + - {fileID: 7372975349392021593} + - {fileID: 8463605413180248651} + - {fileID: 3752581507719097027} + - {fileID: 365682419521750707} + - {fileID: 2715013834793208439} + - {fileID: 1860357686482802260} + - {fileID: 2134467581654292776} + - {fileID: 2127697319085753800} + - {fileID: 8314716407754399569} + - {fileID: 3654952180710147857} + - {fileID: 2185278896394700416} + - {fileID: 5769535583271219466} + - {fileID: 1293945147033921126} + - {fileID: 8727559746035349811} + - {fileID: 6811777108806405795} + - {fileID: 7380194914189166690} + - {fileID: 7888507672601922300} + - {fileID: 8449650592627471630} + - {fileID: 2740617454352934065} + - {fileID: 2954485512992697158} +--- !u!114 &6055481018498512936 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3763628574515435971} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ff342babe4934cdeaf74b996a43cb5d4, type: 3} + m_Name: + m_EditorClassIdentifier: + isWindActive: 1 + threshold: 0.5 + interval: 5 + windPower: 1 + gravity: 0.98 + isGUI: 0 +--- !u!1 &3903041098038084877 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2105237481522923700} + m_Layer: 6 + m_Name: Character1_LeftToeBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2105237481522923700 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3903041098038084877} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.00009206772, y: -0.044022497, z: -0.041161656} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2004898901779290869} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &3908205429895148045 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6353880293219359101} + m_Layer: 6 + m_Name: bone_eye_L + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6353880293219359101 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3908205429895148045} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.026893321, y: 0.04649828, z: 0.102056116} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4030810819268419301 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7071530083350639876} + m_Layer: 6 + m_Name: J_R_Sode_A00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7071530083350639876 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4030810819268419301} + serializedVersion: 2 + m_LocalRotation: {x: -0.007507754, y: -0.0075066104, z: -0.09549668, w: 0.99537313} + m_LocalPosition: {x: 0.016253967, y: -0.04258907, z: -0.004563751} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 65304671717520652} + m_Father: {fileID: 446200131182488843} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4089475108514837883 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5872812096164718950} + m_Layer: 6 + m_Name: J_L_HairSide_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5872812096164718950 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4089475108514837883} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000077299774, y: -0.00000008475035, z: -0.000000014901153, + w: 1} + m_LocalPosition: {x: -0.17118454, y: 0.000000009536743, z: 0.00000022888183} + m_LocalScale: {x: 1.0000001, y: 1, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 612309645553071391} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4132814973932139131 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4621580118481350796} + m_Layer: 6 + m_Name: Character1_Spine1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4621580118481350796 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4132814973932139131} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.000000009536743, z: 0.04283531} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 9120174409034302403} + m_Father: {fileID: 5997968756326345837} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4194163012382237545 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5997968756326345837} + m_Layer: 6 + m_Name: Character1_Spine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5997968756326345837 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4194163012382237545} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: -0.00017591476, z: 0.001539917} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4621580118481350796} + m_Father: {fileID: 29597928197065389} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4235508750247604389 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7206730510584683501} + - component: {fileID: 7888507672601922300} + m_Layer: 6 + m_Name: J_R_Skirt_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7206730510584683501 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4235508750247604389} + serializedVersion: 2 + m_LocalRotation: {x: -0.08715573, y: 0, z: -0, w: 0.9961947} + m_LocalPosition: {x: 0.08367225, y: -0.05437761, z: 0.015768737} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2350293877619336017} + m_Father: {fileID: 29597928197065389} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7888507672601922300 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4235508750247604389} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 2350293877619336017} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.01, z: 0} + colliders: + - {fileID: 4237397560926780522} + - {fileID: 126894663884498659} + - {fileID: 4646042344897761171} + debug: 1 + threshold: 0.01 +--- !u!1 &4275565025371768374 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8123648678838411109} + m_Layer: 6 + m_Name: J_L_knee + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8123648678838411109 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4275565025371768374} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.00028729916, z: -0.0016981125} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 9130718734329090452} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4296839564137766281 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 56685568677107031} + m_Layer: 6 + m_Name: Character1_Neck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &56685568677107031 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4296839564137766281} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.047267172, z: 0.1330844} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6526853387327317499} + m_Father: {fileID: 9120174409034302403} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4307154371054408781 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6645859756972294891} + m_Layer: 6 + m_Name: J_L_Sode_A01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6645859756972294891 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4307154371054408781} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000014901161, y: 0.000000014901158, z: -0.000000018626446, + w: 1} + m_LocalPosition: {x: -0.10319832, y: 0.000000028610229, z: 0.000000038146972} + m_LocalScale: {x: 1.0000002, y: 1, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4612639662609169669} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4471403981006925009 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4990400317689328422} + m_Layer: 6 + m_Name: Character1_RightHandRing3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4990400317689328422 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4471403981006925009} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000002421438, y: 0.000000029802315, z: -0.0000000022118978, + w: 1} + m_LocalPosition: {x: 0.0100004, y: -0.000000009834766, z: -0.00000034332274} + m_LocalScale: {x: 1.0000002, y: 1.0000002, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6385624135361057265} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4555604448874851774 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9113194316341878803} + m_Layer: 6 + m_Name: J_R_Elbow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9113194316341878803 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4555604448874851774} + serializedVersion: 2 + m_LocalRotation: {x: -0.006511231, y: 0.00071536587, z: 0.017952094, w: 0.99981743} + m_LocalPosition: {x: -0.00022066115, y: 0.0046890113, z: -0.000079879756} + m_LocalScale: {x: 1.0000002, y: 1.0000001, z: 1.0000005} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 446200131182488843} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4564253623441068590 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1122555548113153179} + - component: {fileID: 5286555014758074657} + m_Layer: 6 + m_Name: _head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1122555548113153179 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4564253623441068590} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4228537525546935594} + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!137 &5286555014758074657 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4564253623441068590} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 2 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 0f5c320d996610448ab3be5c087d2544, type: 2} + - {fileID: 2100000, guid: 96545c3995189d647accdbd148fa2c3d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300002, guid: 7d482c82ffb74a7fbfc5c7b288095351, type: 3} + m_Bones: + - {fileID: 6526853387327317499} + - {fileID: 8374793752138679864} + - {fileID: 2219722635308239775} + - {fileID: 650710974728237554} + - {fileID: 2225245250193162762} + - {fileID: 6350278636661609562} + - {fileID: 8288184820673587655} + - {fileID: 4005512137851375714} + - {fileID: 6982430254059911505} + - {fileID: 8857949806185292424} + - {fileID: 1718512596781371879} + - {fileID: 7360389635270391183} + - {fileID: 5731700714063062722} + - {fileID: 8288908343178119051} + - {fileID: 312985126539233903} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 6526853387327317499} + m_AABB: + m_Center: {x: 0, y: 0.26, z: 0.026} + m_Extent: {x: 0.487, y: 0.359, z: 0.572} + m_DirtyAABB: 0 +--- !u!1 &4612474773820537967 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8070889619200223800} + - component: {fileID: 3742319637435193207} + m_Layer: 6 + m_Name: Locator_AboveHead + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8070889619200223800 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4612474773820537967} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0.03246137, z: 0.166686} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3742319637435193207 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4612474773820537967} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.2 +--- !u!1 &4643059418833223977 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1749022844549540435} + m_Layer: 6 + m_Name: Character1_RightHandIndex2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1749022844549540435 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4643059418833223977} + serializedVersion: 2 + m_LocalRotation: {x: 0.0058521065, y: -0.04137672, z: -0.0068952506, w: 0.9991027} + m_LocalPosition: {x: 0.014227294, y: 0.00000006437301, z: -0.00000015258789} + m_LocalScale: {x: 0.99999994, y: 0.9999998, z: 0.99999976} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1654624824523219389} + m_Father: {fileID: 3149775317872288184} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4644341937121223472 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6526853387327317499} + m_Layer: 6 + m_Name: Character1_Head + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6526853387327317499 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4644341937121223472} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.5015806e-10, y: -0.00804217, z: 0.030468559} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4954622075558114072} + - {fileID: 6353880293219359101} + - {fileID: 5065832433306771527} + - {fileID: 220351708734432648} + - {fileID: 8374793752138679864} + - {fileID: 699930855321221375} + - {fileID: 2219722635308239775} + - {fileID: 6350278636661609562} + - {fileID: 4248700656684398461} + - {fileID: 6982430254059911505} + - {fileID: 7039575964410758742} + - {fileID: 8857949806185292424} + - {fileID: 5731700714063062722} + - {fileID: 8070889619200223800} + m_Father: {fileID: 56685568677107031} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4701387812620264104 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3005056069481410214} + - component: {fileID: 7737939273965273251} + m_Layer: 6 + m_Name: _Fhair2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3005056069481410214 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4701387812620264104} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4228537525546935594} + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!137 &7737939273965273251 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4701387812620264104} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 2 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 603cf7ef4659af5439a575075bf3ca95, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300010, guid: 7d482c82ffb74a7fbfc5c7b288095351, type: 3} + m_Bones: + - {fileID: 6526853387327317499} + - {fileID: 220351708734432648} + - {fileID: 4248700656684398461} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 6526853387327317499} + m_AABB: + m_Center: {x: 0.019, y: -0.111, z: 0.188} + m_Extent: {x: 0.037, y: 0.044, z: 0.105} + m_DirtyAABB: 0 +--- !u!1 &4828964285052282239 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 861820310669654305} + m_Layer: 6 + m_Name: J_L_ForeArm_00_tw + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &861820310669654305 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4828964285052282239} + serializedVersion: 2 + m_LocalRotation: {x: -0.012573468, y: 0.00046314503, z: -0.00002451689, w: 0.99992085} + m_LocalPosition: {x: -0.10891037, y: 0.00009298801, z: -0.00038040162} + m_LocalScale: {x: 1.0000004, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7396104810784837768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4866825602820108857 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9120174409034302403} + m_Layer: 6 + m_Name: Character1_Spine2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9120174409034302403 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4866825602820108857} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.00015314102, z: 0.041275635} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6093097180885946835} + - {fileID: 56685568677107031} + - {fileID: 2961329562039978871} + - {fileID: 8591750898746922411} + - {fileID: 1643941648384315466} + m_Father: {fileID: 4621580118481350796} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4881496285946555352 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2582931053939394173} + m_Layer: 6 + m_Name: J_R_SkirtBack_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2582931053939394173 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4881496285946555352} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: -0.06979225} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6831772141878411927} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4913657814871505121 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7410364982531109626} + m_Layer: 6 + m_Name: J_L_HairTail_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7410364982531109626 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4913657814871505121} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000014901161, y: -0.000000007450581, z: -0.000000007450581, + w: 1} + m_LocalPosition: {x: 0.000000019073486, y: 0.000000076293944, z: -0.17191942} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2225245250193162762} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4980279165888321717 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8931402703070841046} + m_Layer: 6 + m_Name: Character1_RightHandThumb4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8931402703070841046 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4980279165888321717} + serializedVersion: 2 + m_LocalRotation: {x: 0.00000030919912, y: 0.000000108033525, z: 0.00000022351746, + w: 1} + m_LocalPosition: {x: 0.012428941, y: -0.0000006866455, z: 0.00000018596648} + m_LocalScale: {x: 0.99999964, y: 0.9999998, z: 0.9999998} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2590597086074521511} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5048720820961056140 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2553643339994845254} + - component: {fileID: 4646042344897761171} + m_Layer: 6 + m_Name: Locator_RightUpLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2553643339994845254 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5048720820961056140} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: -0.00009900672, z: -0.00014139892, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.0699162} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2423412952060108609} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &4646042344897761171 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5048720820961056140} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.06 +--- !u!1 &5064952843108433067 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8938201858354982214} + m_Layer: 6 + m_Name: Character1_RightToeBase + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8938201858354982214 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5064952843108433067} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 6.1098625e-13, w: 1} + m_LocalPosition: {x: 0.00009202957, y: -0.044022463, z: -0.041161664} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3398889758669254210} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5313307378197191260 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6397107419441545405} + m_Layer: 6 + m_Name: Character1_RightHandPinky2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6397107419441545405 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5313307378197191260} + serializedVersion: 2 + m_LocalRotation: {x: -0.0041054687, y: 0.021180103, z: 0.004780198, w: 0.99975586} + m_LocalPosition: {x: 0.009599628, y: 0.00000007390976, z: 0.0000011444091} + m_LocalScale: {x: 1.0000004, y: 0.9999999, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4962509302789058149} + m_Father: {fileID: 7966788070020410002} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5357346096268649034 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8400846392894500075} + m_Layer: 6 + m_Name: J_L_HeadRibbon_03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8400846392894500075 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5357346096268649034} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000022351746, y: -0.00000011920929, z: 0.0000000149011345, + w: 1} + m_LocalPosition: {x: -0.000000076293944, y: -0.00000015258789, z: 0.16675673} + m_LocalScale: {x: 1, y: 0.9999998, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4005512137851375714} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5401563396523540146 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 627136687486605248} + m_Layer: 6 + m_Name: Character1_LeftHandThumb2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &627136687486605248 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5401563396523540146} + serializedVersion: 2 + m_LocalRotation: {x: -0.0072667697, y: -0.07349535, z: 0.11157922, w: 0.99100745} + m_LocalPosition: {x: -0.017500991, y: 0, z: -0.000000076293944} + m_LocalScale: {x: 0.99999976, y: 0.9999999, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6690496443531499613} + m_Father: {fileID: 1740985048597586241} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5412792538822288528 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7396104810784837768} + - component: {fileID: 1952171542537200122} + m_Layer: 6 + m_Name: Character1_LeftForeArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7396104810784837768 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5412792538822288528} + serializedVersion: 2 + m_LocalRotation: {x: 0.013020072, y: 0.001430947, z: 0.035897728, w: 0.99926966} + m_LocalPosition: {x: -0.11878532, y: 0.000000009536743, z: 0.000000076293944} + m_LocalScale: {x: 0.9999999, y: 0.9999998, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2268707898031551092} + - {fileID: 2824019142497116302} + - {fileID: 861820310669654305} + - {fileID: 4612639662609169669} + - {fileID: 2234923054981574972} + - {fileID: 3342038955245361892} + - {fileID: 5207081768540906711} + m_Father: {fileID: 6878059461571870231} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1952171542537200122 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5412792538822288528} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.05 +--- !u!1 &5425203079364918255 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1274123420685706251} + m_Layer: 6 + m_Name: J_L_Sode_E00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1274123420685706251 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5425203079364918255} + serializedVersion: 2 + m_LocalRotation: {x: 0.000000006519262, y: -0.00000046193605, z: 0.000000004190955, + w: 1} + m_LocalPosition: {x: -0.02375902, y: -5.9604643e-10, z: 0.000000114440915} + m_LocalScale: {x: 0.9999999, y: 0.9999997, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7895641511515384564} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5527928506538396792 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8631932705004513523} + m_Layer: 6 + m_Name: J_L_Skirt_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8631932705004513523 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5527928506538396792} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: -0.06979223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3984155238952603344} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5654697583955873360 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 699930855321221375} + - component: {fileID: 869632525762003056} + m_Layer: 6 + m_Name: J_L_HairSide_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &699930855321221375 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5654697583955873360} + serializedVersion: 2 + m_LocalRotation: {x: 0.032767124, y: -0.43403226, z: -0.092962936, w: 0.89548886} + m_LocalPosition: {x: -0.07298515, y: -0.0934125, z: 0.27946135} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 612309645553071391} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &869632525762003056 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5654697583955873360} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 612309645553071391} + boneAxis: {x: -1, y: 0, z: 0} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: [] + debug: 1 + threshold: 0.01 +--- !u!1 &5725743184177743746 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3149775317872288184} + m_Layer: 6 + m_Name: Character1_RightHandIndex1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3149775317872288184 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5725743184177743746} + serializedVersion: 2 + m_LocalRotation: {x: 0.008546484, y: 0.094416015, z: -0.030576246, w: 0.99502647} + m_LocalPosition: {x: 0.046977613, y: -0.02218206, z: 0.002598419} + m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1749022844549540435} + m_Father: {fileID: 5755076169123862156} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5834618362995374323 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6401941459970387374} + m_Layer: 6 + m_Name: Character1_RightHandRing1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6401941459970387374 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5834618362995374323} + serializedVersion: 2 + m_LocalRotation: {x: -0.0026424497, y: 0.034782935, z: 0.00474744, w: 0.9993802} + m_LocalPosition: {x: 0.049340207, y: 0.008889168, z: 0.0041255187} + m_LocalScale: {x: 1, y: 1, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6385624135361057265} + m_Father: {fileID: 5755076169123862156} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5839509526745451135 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1643941648384315466} + - component: {fileID: 2177169964850823879} + m_Layer: 6 + m_Name: Locator_UpperBody + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1643941648384315466 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5839509526745451135} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0.04870856, z: 0.05303502} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 9120174409034302403} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2177169964850823879 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5839509526745451135} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.1 +--- !u!1 &5852959122383165786 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8544153664223713142} + m_Layer: 6 + m_Name: Character1_LeftHandPinky1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8544153664223713142 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5852959122383165786} + serializedVersion: 2 + m_LocalRotation: {x: 0.009402834, y: -0.1490879, z: 0.036963325, w: 0.98808813} + m_LocalPosition: {x: -0.046355017, y: 0.022602014, z: 0.0009494018} + m_LocalScale: {x: 1, y: 1.0000002, z: 0.99999994} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7032405307784783804} + m_Father: {fileID: 2268707898031551092} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5871597644458133844 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6831772141878411927} + - component: {fileID: 2740617454352934065} + m_Layer: 6 + m_Name: J_R_SkirtBack_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6831772141878411927 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5871597644458133844} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.065894224, y: 0.049491055, z: -0.019820098} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2582931053939394173} + m_Father: {fileID: 29597928197065389} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2740617454352934065 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5871597644458133844} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 2582931053939394173} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.03 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.01, z: 0} + colliders: + - {fileID: 4237397560926780522} + - {fileID: 126894663884498659} + - {fileID: 4646042344897761171} + debug: 1 + threshold: 0.01 +--- !u!1 &5873621934725613905 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4962509302789058149} + m_Layer: 6 + m_Name: Character1_RightHandPinky3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4962509302789058149 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5873621934725613905} + serializedVersion: 2 + m_LocalRotation: {x: -0.00000024121255, y: 0.00000025331983, z: -0.000000014901105, + w: 1} + m_LocalPosition: {x: 0.0075922012, y: 0.00000013589859, z: -0.00000030517577} + m_LocalScale: {x: 0.99999964, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6397107419441545405} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5915506034642101527 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2234923054981574972} + m_Layer: 6 + m_Name: J_L_Sode_B00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2234923054981574972 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5915506034642101527} + serializedVersion: 2 + m_LocalRotation: {x: -0.004493182, y: 0.16546658, z: -0.024590796, w: 0.98589855} + m_LocalPosition: {x: -0.0107017895, y: 0.000851388, z: 0.02043209} + m_LocalScale: {x: 1.0000002, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 9059987628779412517} + m_Father: {fileID: 7396104810784837768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6090098268396068696 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4954622075558114072} + - component: {fileID: 2161748187344067778} + m_Layer: 6 + m_Name: _face + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4954622075558114072 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6090098268396068696} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -2.5015806e-10, y: 0.009918099, z: -0.6672374} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!137 &2161748187344067778 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6090098268396068696} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 2 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 77410fc82598c414fbb68f41d4df2bba, type: 2} + - {fileID: 2100000, guid: 1d19f1d638a5ffb449e3a32dd4d5986d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300000, guid: 7d482c82ffb74a7fbfc5c7b288095351, type: 3} + m_Bones: [] + m_BlendShapeWeights: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + m_RootBone: {fileID: 0} + m_AABB: + m_Center: {x: 0, y: 0.754, z: 0.045} + m_Extent: {x: 0.141, y: 0.115, z: 0.069} + m_DirtyAABB: 0 +--- !u!1 &6133703520049981530 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 29597928197065389} + m_Layer: 6 + m_Name: Character1_Hips + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &29597928197065389 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6133703520049981530} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0.41803354, z: 0.049120344} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7490102396379286848} + - {fileID: 2423412952060108609} + - {fileID: 5997968756326345837} + - {fileID: 3903073689557626799} + - {fileID: 1541561317559911158} + - {fileID: 7206730510584683501} + - {fileID: 6831772141878411927} + - {fileID: 541384037228338826} + m_Father: {fileID: 6407150209309253158} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6134404846302216326 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2219722635308239775} + - component: {fileID: 3660892605848956866} + m_Layer: 6 + m_Name: J_L_HairTail_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2219722635308239775 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6134404846302216326} + serializedVersion: 2 + m_LocalRotation: {x: 0.27495223, y: 0.14915642, z: 0.13304274, w: 0.94045377} + m_LocalPosition: {x: -0.08453446, y: 0.12091128, z: 0.07472458} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 650710974728237554} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3660892605848956866 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6134404846302216326} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 650710974728237554} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.08 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.007, z: 0} + colliders: + - {fileID: 3742319637435193207} + - {fileID: 2055818716676457244} + - {fileID: 1952171542537200122} + - {fileID: 2177169964850823879} + debug: 1 + threshold: 0.01 +--- !u!1 &6178152074234705202 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6350278636661609562} + - component: {fileID: 7372975349392021593} + m_Layer: 6 + m_Name: J_L_HeadRibbon_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6350278636661609562 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6178152074234705202} + serializedVersion: 2 + m_LocalRotation: {x: -0.2504739, y: -0.2833735, z: -0.049994256, w: 0.9243716} + m_LocalPosition: {x: -0.079515405, y: -0.068754226, z: 0.3136406} + m_LocalScale: {x: 0.99999994, y: 0.99999976, z: 0.9999998} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8288184820673587655} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7372975349392021593 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6178152074234705202} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 8288184820673587655} + boneAxis: {x: 0, y: 0, z: 1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + debug: 1 + threshold: 0.01 +--- !u!1 &6211667901187136842 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6725300670364461023} + m_Layer: 6 + m_Name: Character1_LeftHandMiddle2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6725300670364461023 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6211667901187136842} + serializedVersion: 2 + m_LocalRotation: {x: -0.0038751021, y: 0.017281516, z: -0.010274473, w: 0.9997904} + m_LocalPosition: {x: -0.016781254, y: 0.000000019073486, z: 0} + m_LocalScale: {x: 1.0000001, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7328954229572208060} + m_Father: {fileID: 2142336817693022222} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6241505657057301182 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5755076169123862156} + - component: {fileID: 2236474210489685004} + m_Layer: 6 + m_Name: Character1_RightHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5755076169123862156 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6241505657057301182} + serializedVersion: 2 + m_LocalRotation: {x: -0.024933074, y: -0.0007821354, z: 0.000042964955, w: 0.9996888} + m_LocalPosition: {x: 0.11270626, y: -0.00000007152557, z: -0.0000009536743} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000004} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3149775317872288184} + - {fileID: 2267692973050519269} + - {fileID: 7966788070020410002} + - {fileID: 6401941459970387374} + - {fileID: 439045745349089632} + m_Father: {fileID: 446200131182488843} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2236474210489685004 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6241505657057301182} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.07 +--- !u!1 &6300459396168663946 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8374793752138679864} + - component: {fileID: 7887378130367053097} + m_Layer: 6 + m_Name: J_L_HairSide2_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8374793752138679864 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6300459396168663946} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.13977991, y: -0.032653578, z: 0.14276138} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8555601841336020544} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7887378130367053097 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6300459396168663946} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 8555601841336020544} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: [] + debug: 1 + threshold: 0.01 +--- !u!1 &6300974693869485373 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3903073689557626799} + - component: {fileID: 365682419521750707} + m_Layer: 6 + m_Name: J_L_Skirt_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3903073689557626799 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6300974693869485373} + serializedVersion: 2 + m_LocalRotation: {x: -0.08715573, y: 0, z: -0, w: 0.9961947} + m_LocalPosition: {x: -0.08367218, y: -0.054377582, z: 0.01576828} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3984155238952603344} + m_Father: {fileID: 29597928197065389} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &365682419521750707 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6300974693869485373} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 3984155238952603344} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.01, z: 0} + colliders: + - {fileID: 4237397560926780522} + - {fileID: 5622497061649964821} + - {fileID: 7598970713000379034} + debug: 1 + threshold: 0.01 +--- !u!1 &6331784844233827884 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6385624135361057265} + m_Layer: 6 + m_Name: Character1_RightHandRing2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6385624135361057265 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6331784844233827884} + serializedVersion: 2 + m_LocalRotation: {x: -0.0050746724, y: 0.017218595, z: 0.01173241, w: 0.99977005} + m_LocalPosition: {x: 0.013061752, y: 0.000000005960464, z: 0.00000015258789} + m_LocalScale: {x: 0.9999998, y: 0.9999999, z: 0.99999964} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4990400317689328422} + m_Father: {fileID: 6401941459970387374} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6422079993104970979 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2598788246662646975} + m_Layer: 6 + m_Name: J_R_Sode_B00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2598788246662646975 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6422079993104970979} + serializedVersion: 2 + m_LocalRotation: {x: -0.0044931974, y: -0.16546617, z: 0.024590768, w: 0.9858986} + m_LocalPosition: {x: 0.010701637, y: 0.00085137604, z: 0.0204319} + m_LocalScale: {x: 1.0000001, y: 0.9999998, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2148168642296180} + m_Father: {fileID: 446200131182488843} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6473899708057712658 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 65304671717520652} + m_Layer: 6 + m_Name: J_R_Sode_A01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &65304671717520652 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6473899708057712658} + serializedVersion: 2 + m_LocalRotation: {x: 0.000023934985, y: 0.0000045448483, z: -0.00000024597793, w: 1} + m_LocalPosition: {x: 0.10319793, y: 0.00000018596648, z: -0.0000025939942} + m_LocalScale: {x: 1, y: 1.0000002, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7071530083350639876} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6571246899436162287 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1541561317559911158} + - component: {fileID: 1860357686482802260} + m_Layer: 6 + m_Name: J_L_SkirtBack_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1541561317559911158 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6571246899436162287} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.06589424, y: 0.049491055, z: -0.019819336} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6698999444532217468} + m_Father: {fileID: 29597928197065389} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1860357686482802260 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6571246899436162287} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 6698999444532217468} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.03 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.01, z: 0} + colliders: + - {fileID: 4237397560926780522} + - {fileID: 5622497061649964821} + - {fileID: 7598970713000379034} + debug: 1 + threshold: 0.01 +--- !u!1 &6661035546890823218 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 439045745349089632} + m_Layer: 6 + m_Name: Character1_RightHandThumb1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &439045745349089632 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6661035546890823218} + serializedVersion: 2 + m_LocalRotation: {x: 0.7231718, y: -0.16827066, z: -0.18860316, w: 0.6427569} + m_LocalPosition: {x: 0.016436901, y: -0.015683817, z: -0.017472915} + m_LocalScale: {x: 0.9999999, y: 1, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4214762892820373619} + m_Father: {fileID: 5755076169123862156} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6661394658488556038 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2051485737349694948} + m_Layer: 6 + m_Name: J_R_Sode_D01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2051485737349694948 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6661394658488556038} + serializedVersion: 2 + m_LocalRotation: {x: 0.00002354477, y: -0.0000008641438, z: 0.000005244297, w: 1} + m_LocalPosition: {x: 0.10183468, y: 0.0000029587745, z: 0.00000125885} + m_LocalScale: {x: 1.0000001, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4006969703662656344} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6718389729297730740 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6320071064974784136} + m_Layer: 6 + m_Name: J_R_knee + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6320071064974784136 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6718389729297730740} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000025893838, y: 0.000000009194991, z: 0.0000000023283064, + w: 1} + m_LocalPosition: {x: -0, y: 0.022121582, z: -0.15356168} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2423412952060108609} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6925958816042242961 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3342038955245361892} + m_Layer: 6 + m_Name: J_L_Sode_C00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3342038955245361892 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6925958816042242961} + serializedVersion: 2 + m_LocalRotation: {x: -0.008827749, y: 0.0058973646, z: -0.10055546, w: 0.99487484} + m_LocalPosition: {x: -0.012543258, y: 0.036262, z: -0.005905571} + m_LocalScale: {x: 1.0000001, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4797773783076098714} + m_Father: {fileID: 7396104810784837768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6946307129390035735 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6690496443531499613} + m_Layer: 6 + m_Name: Character1_LeftHandThumb3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6690496443531499613 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6946307129390035735} + serializedVersion: 2 + m_LocalRotation: {x: -0.01386693, y: -0.019060507, z: -0.00015807952, w: 0.9997222} + m_LocalPosition: {x: -0.010315971, y: 0, z: 0.00000007152557} + m_LocalScale: {x: 0.99999994, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1038416052695676677} + m_Father: {fileID: 627136687486605248} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6955022916378376002 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7021926352628559999} + m_Layer: 6 + m_Name: J_R_Arm_00_tw + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7021926352628559999 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6955022916378376002} + serializedVersion: 2 + m_LocalRotation: {x: -0.019467767, y: 0.0000867438, z: 0.0000013984003, w: 0.9998105} + m_LocalPosition: {x: -0.0006183624, y: 0.00000034093856, z: 0.000029029845} + m_LocalScale: {x: 0.99999976, y: 0.9999998, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2755942572119240026} + m_Father: {fileID: 6954321385767605024} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7134389897970941102 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8288184820673587655} + - component: {fileID: 8463605413180248651} + m_Layer: 6 + m_Name: J_L_HeadRibbon_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8288184820673587655 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7134389897970941102} + serializedVersion: 2 + m_LocalRotation: {x: -0.8290727, y: -0.12707953, z: 0.09669092, w: 0.5358546} + m_LocalPosition: {x: 0.000000076293944, y: -0.000000114440915, z: 0.2478369} + m_LocalScale: {x: 1.0000001, y: 1.0000001, z: 1.0000005} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4005512137851375714} + m_Father: {fileID: 6350278636661609562} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8463605413180248651 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7134389897970941102} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 4005512137851375714} + boneAxis: {x: 0, y: 0, z: 1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 3742319637435193207} + debug: 1 + threshold: 0.01 +--- !u!1 &7279308382332940472 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6982430254059911505} + - component: {fileID: 2127697319085753800} + m_Layer: 6 + m_Name: J_R_HairSide2_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6982430254059911505 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7279308382332940472} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.13977984, y: -0.032653518, z: 0.14276077} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2138355904350086949} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2127697319085753800 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7279308382332940472} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 2138355904350086949} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: [] + debug: 1 + threshold: 0.01 +--- !u!1 &7417868316547513817 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 220351708734432648} + - component: {fileID: 5053127848451338921} + m_Layer: 6 + m_Name: J_L_HairFront_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &220351708734432648 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7417868316547513817} + serializedVersion: 2 + m_LocalRotation: {x: -0.032923594, y: 0.012465945, z: 0.003332434, w: 0.99937457} + m_LocalPosition: {x: 0.00047761618, y: -0.102207325, z: 0.28018036} + m_LocalScale: {x: 1, y: 0.9999999, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6279320856188589947} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5053127848451338921 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7417868316547513817} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 6279320856188589947} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: [] + debug: 1 + threshold: 0.01 +--- !u!1 &7422033952457024370 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6963582107709384724} + m_Layer: 6 + m_Name: J_R_Sode_C01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6963582107709384724 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7422033952457024370} + serializedVersion: 2 + m_LocalRotation: {x: 0.00002408773, y: -0.0000046640653, z: 1.1234674e-10, w: 1} + m_LocalPosition: {x: 0.10796964, y: 0.000000333786, z: 0.0000027847288} + m_LocalScale: {x: 0.99999964, y: 0.9999999, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3580862425918477564} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7440065012690024429 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7895641511515384564} + m_Layer: 6 + m_Name: J_L_Arm_00_tw + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7895641511515384564 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7440065012690024429} + serializedVersion: 2 + m_LocalRotation: {x: -0.019484475, y: -0.000087756256, z: -0.0000014493894, w: 0.99981016} + m_LocalPosition: {x: 0.00061920163, y: 0.0000003504753, z: 0.000030059813} + m_LocalScale: {x: 1, y: 0.99999976, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1274123420685706251} + m_Father: {fileID: 6878059461571870231} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7470772141849515107 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4248700656684398461} + - component: {fileID: 2134467581654292776} + m_Layer: 6 + m_Name: J_R_HairFront_00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4248700656684398461 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7470772141849515107} + serializedVersion: 2 + m_LocalRotation: {x: -0.06683042, y: -0.07431372, z: 0.0030237695, w: 0.9949885} + m_LocalPosition: {x: 0.014399265, y: -0.09940759, z: 0.28018036} + m_LocalScale: {x: 1.0000001, y: 0.9999998, z: 0.99999976} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4421361216595297283} + m_Father: {fileID: 6526853387327317499} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2134467581654292776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7470772141849515107} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 4421361216595297283} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: [] + debug: 1 + threshold: 0.01 +--- !u!1 &7513917819248657796 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8555601841336020544} + m_Layer: 6 + m_Name: J_L_HairSide2_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8555601841336020544 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7513917819248657796} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: -0.07184112} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8374793752138679864} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7540377780967610214 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5207081768540906711} + m_Layer: 6 + m_Name: J_L_Sode_D00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5207081768540906711 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7540377780967610214} + serializedVersion: 2 + m_LocalRotation: {x: -0.0109099485, y: -0.104387544, z: -0.022491656, w: 0.9942225} + m_LocalPosition: {x: -0.015458488, y: 0.00009045124, z: -0.037431754} + m_LocalScale: {x: 0.9999999, y: 0.99999976, z: 0.9999998} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1164422361666431161} + m_Father: {fileID: 7396104810784837768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7621408989575438848 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8855767437384622858} + - component: {fileID: 3654952180710147857} + m_Layer: 6 + m_Name: J_R_HairSide_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8855767437384622858 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7621408989575438848} + serializedVersion: 2 + m_LocalRotation: {x: 0.029233143, y: 0.33951682, z: 0.063383006, w: 0.9380066} + m_LocalPosition: {x: 0.124110945, y: -0.00000016212464, z: -0.0000010681152} + m_LocalScale: {x: 1.0000001, y: 0.99999994, z: 1.0000002} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4808659917229634046} + m_Father: {fileID: 7039575964410758742} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &3654952180710147857 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7621408989575438848} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 4808659917229634046} + boneAxis: {x: 1, y: 0, z: 0} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: [] + debug: 1 + threshold: 0.01 +--- !u!1 &7782350045114135825 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 446200131182488843} + - component: {fileID: 5945787198051039176} + m_Layer: 6 + m_Name: Character1_RightForeArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &446200131182488843 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7782350045114135825} + serializedVersion: 2 + m_LocalRotation: {x: 0.013020083, y: -0.0014304537, z: -0.03589762, w: 0.99926966} + m_LocalPosition: {x: 0.11878662, y: -0.0000000023841857, z: -0.0000005340576} + m_LocalScale: {x: 1, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5755076169123862156} + - {fileID: 9113194316341878803} + - {fileID: 5074259165098998069} + - {fileID: 7071530083350639876} + - {fileID: 2598788246662646975} + - {fileID: 3580862425918477564} + - {fileID: 4006969703662656344} + m_Father: {fileID: 6954321385767605024} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5945787198051039176 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7782350045114135825} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.05 +--- !u!1 &7785554163382420134 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6954321385767605024} + - component: {fileID: 6804823801260687976} + m_Layer: 6 + m_Name: Character1_RightArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6954321385767605024 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7785554163382420134} + serializedVersion: 2 + m_LocalRotation: {x: 0.02679965, y: 0.1984241, z: -0.003274372, w: 0.9797443} + m_LocalPosition: {x: 0.04694744, y: -0.0003006053, z: 0.0036683274} + m_LocalScale: {x: 1.0000002, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 446200131182488843} + - {fileID: 7021926352628559999} + m_Father: {fileID: 2961329562039978871} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6804823801260687976 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7785554163382420134} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.05 +--- !u!1 &7835538482898923977 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4421361216595297283} + m_Layer: 6 + m_Name: J_R_HairFront_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4421361216595297283 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7835538482898923977} + serializedVersion: 2 + m_LocalRotation: {x: 0.14653113, y: -0.012764582, z: -0.0018909615, w: 0.9891219} + m_LocalPosition: {x: -0.000000028610229, y: 0.000000019073486, z: -0.18115318} + m_LocalScale: {x: 1.0000001, y: 1.0000002, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4248700656684398461} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7879561262097683484 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1288929777825255150} + - component: {fileID: 7552893586261974913} + m_Layer: 6 + m_Name: _body + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1288929777825255150 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7879561262097683484} + serializedVersion: 2 + m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + m_LocalPosition: {x: -0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4228537525546935594} + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!137 &7552893586261974913 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7879561262097683484} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 9b9cc9e24bdb5804b9009ba59c8957fe, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 0 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: 4300004, guid: 7d482c82ffb74a7fbfc5c7b288095351, type: 3} + m_Bones: + - {fileID: 9130718734329090452} + - {fileID: 2004898901779290869} + - {fileID: 29597928197065389} + - {fileID: 7490102396379286848} + - {fileID: 9120174409034302403} + - {fileID: 6093097180885946835} + - {fileID: 7895641511515384564} + - {fileID: 8123648678838411109} + - {fileID: 7206730510584683501} + - {fileID: 3903073689557626799} + - {fileID: 3984155238952603344} + - {fileID: 1541561317559911158} + - {fileID: 2350293877619336017} + - {fileID: 1274123420685706251} + - {fileID: 5207081768540906711} + - {fileID: 2234923054981574972} + - {fileID: 4612639662609169669} + - {fileID: 2824019142497116302} + - {fileID: 3342038955245361892} + - {fileID: 7396104810784837768} + - {fileID: 2268707898031551092} + - {fileID: 4311764050378445562} + - {fileID: 6878059461571870231} + - {fileID: 8544153664223713142} + - {fileID: 347900642799376463} + - {fileID: 1740985048597586241} + - {fileID: 2142336817693022222} + - {fileID: 2687392561584112538} + - {fileID: 4487619767070584897} + - {fileID: 7032405307784783804} + - {fileID: 6725300670364461023} + - {fileID: 6690496443531499613} + - {fileID: 861820310669654305} + - {fileID: 627136687486605248} + - {fileID: 8591750898746922411} + - {fileID: 5833084827420442486} + - {fileID: 3398889758669254210} + - {fileID: 2423412952060108609} + - {fileID: 7021926352628559999} + - {fileID: 2961329562039978871} + - {fileID: 6320071064974784136} + - {fileID: 6831772141878411927} + - {fileID: 9113194316341878803} + - {fileID: 2755942572119240026} + - {fileID: 446200131182488843} + - {fileID: 7071530083350639876} + - {fileID: 2598788246662646975} + - {fileID: 4006969703662656344} + - {fileID: 3580862425918477564} + - {fileID: 5755076169123862156} + - {fileID: 5074259165098998069} + - {fileID: 2590597086074521511} + - {fileID: 6385624135361057265} + - {fileID: 6954321385767605024} + - {fileID: 1749022844549540435} + - {fileID: 439045745349089632} + - {fileID: 7966788070020410002} + - {fileID: 6397107419441545405} + - {fileID: 1945343063166025465} + - {fileID: 6401941459970387374} + - {fileID: 3149775317872288184} + - {fileID: 2267692973050519269} + - {fileID: 4214762892820373619} + - {fileID: 6526853387327317499} + - {fileID: 56685568677107031} + m_BlendShapeWeights: [] + m_RootBone: {fileID: 29597928197065389} + m_AABB: + m_Center: {x: 0, y: 0.008, z: -0.081} + m_Extent: {x: 0.324, y: 0.145, z: 0.336} + m_DirtyAABB: 0 +--- !u!1 &7941598378412098330 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8844543047423818134} + m_Layer: 6 + m_Name: J_R_Skirt_02 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8844543047423818134 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7941598378412098330} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.000000019073486, z: -0.06979223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2350293877619336017} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7951457905010954670 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4228537525546935594} + m_Layer: 6 + m_Name: Mesh_SD_unitychan + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4228537525546935594 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7951457905010954670} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1288929777825255150} + - {fileID: 1624019310821944626} + - {fileID: 2610291734591142933} + - {fileID: 3005056069481410214} + - {fileID: 1122555548113153179} + m_Father: {fileID: 6731142422001346709} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8380099222079526815 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1164422361666431161} + m_Layer: 6 + m_Name: J_L_Sode_D01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1164422361666431161 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8380099222079526815} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000018626454, y: -0.000000044703476, z: 0.000000001862645, + w: 1} + m_LocalPosition: {x: -0.101834446, y: 0, z: 0.000000038146972} + m_LocalScale: {x: 1.0000001, y: 0.9999999, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5207081768540906711} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8395745312774838002 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6093097180885946835} + m_Layer: 6 + m_Name: Character1_LeftShoulder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6093097180885946835 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8395745312774838002} + serializedVersion: 2 + m_LocalRotation: {x: 5.4117755e-10, y: -0.14720343, z: -0.012063365, w: 0.9890327} + m_LocalPosition: {x: -0.026731491, y: 0.046953294, z: 0.10265426} + m_LocalScale: {x: 1, y: 1, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6878059461571870231} + m_Father: {fileID: 9120174409034302403} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8407776964008459017 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2267692973050519269} + m_Layer: 6 + m_Name: Character1_RightHandMiddle1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2267692973050519269 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8407776964008459017} + serializedVersion: 2 + m_LocalRotation: {x: 0.0055155335, y: 0.08777313, z: -0.021705609, w: 0.9958887} + m_LocalPosition: {x: 0.051409397, y: -0.006346327, z: 0.006106949} + m_LocalScale: {x: 1, y: 1.0000002, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1945343063166025465} + m_Father: {fileID: 5755076169123862156} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8532562385638308393 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2355703600664584488} + m_Layer: 6 + m_Name: Character1_RightHandMiddle3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2355703600664584488 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8532562385638308393} + serializedVersion: 2 + m_LocalRotation: {x: -0.0000000018626964, y: -0.00000092387177, z: -0.000000055879344, + w: 1} + m_LocalPosition: {x: 0.012807674, y: 0.0000000667572, z: -0.00000087738033} + m_LocalScale: {x: 1.0000002, y: 1.0000001, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1945343063166025465} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8679779466394157924 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2423412952060108609} + m_Layer: 6 + m_Name: Character1_RightUpLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2423412952060108609 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8679779466394157924} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000050956612, y: -0.00002997581, z: 0.00016999245, w: 1} + m_LocalPosition: {x: 0.09838916, y: 0.0002045536, z: -0.06464706} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5833084827420442486} + - {fileID: 6320071064974784136} + - {fileID: 2553643339994845254} + m_Father: {fileID: 29597928197065389} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8726454797839578918 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4612639662609169669} + m_Layer: 6 + m_Name: J_L_Sode_A00 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4612639662609169669 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8726454797839578918} + serializedVersion: 2 + m_LocalRotation: {x: -0.0075075305, y: 0.0075068395, z: 0.095496655, w: 0.99537313} + m_LocalPosition: {x: -0.016254006, y: -0.042589106, z: -0.004563713} + m_LocalScale: {x: 1.0000002, y: 0.99999976, z: 1.0000001} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6645859756972294891} + m_Father: {fileID: 7396104810784837768} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8809074375141990714 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9059987628779412517} + m_Layer: 6 + m_Name: J_L_Sode_B01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9059987628779412517 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8809074375141990714} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0.0000000018626454, w: 1} + m_LocalPosition: {x: -0.11148712, y: -0.0000000023841857, z: 0} + m_LocalScale: {x: 0.99999994, y: 1, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2234923054981574972} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8832480588170221485 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 541384037228338826} + - component: {fileID: 4237397560926780522} + m_Layer: 6 + m_Name: Locator_Hips + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &541384037228338826 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8832480588170221485} + serializedVersion: 2 + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0.005178678, z: -0.02264928} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 29597928197065389} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &4237397560926780522 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8832480588170221485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.08 +--- !u!1 &9132162797234363520 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9130718734329090452} + - component: {fileID: 5622497061649964821} + m_Layer: 6 + m_Name: Character1_LeftLeg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9130718734329090452 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9132162797234363520} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0.021834202, z: -0.15186352} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2004898901779290869} + - {fileID: 8123648678838411109} + m_Father: {fileID: 7490102396379286848} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &5622497061649964821 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9132162797234363520} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86ca884c3c154919a4ef012d33b4a4aa, type: 3} + m_Name: + m_EditorClassIdentifier: + radius: 0.05 +--- !u!1 &9150489648765871549 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3984155238952603344} + - component: {fileID: 2715013834793208439} + m_Layer: 6 + m_Name: J_L_Skirt_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3984155238952603344 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9150489648765871549} + serializedVersion: 2 + m_LocalRotation: {x: 0.0000000074505815, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 0, z: -0.060169294} + m_LocalScale: {x: 1, y: 0.9999999, z: 0.9999999} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8631932705004513523} + m_Father: {fileID: 3903073689557626799} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2715013834793208439 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9150489648765871549} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 698033d576d14e9c85202d0b21b26075, type: 3} + m_Name: + m_EditorClassIdentifier: + child: {fileID: 8631932705004513523} + boneAxis: {x: 0, y: 0, z: -1} + radius: 0.05 + isUseEachBoneForceSettings: 1 + stiffnessForce: 0.01 + dragForce: 0.4 + springForce: {x: 0, y: -0.0001, z: 0} + colliders: + - {fileID: 4237397560926780522} + - {fileID: 5622497061649964821} + - {fileID: 7598970713000379034} + debug: 1 + threshold: 0.01 diff --git a/Toonshader_ProjectURP/Assets/Prefabs/SD_unitychan_2D.prefab.meta b/Toonshader_ProjectURP/Assets/Prefabs/SD_unitychan_2D.prefab.meta new file mode 100644 index 000000000..cb9aeed5b --- /dev/null +++ b/Toonshader_ProjectURP/Assets/Prefabs/SD_unitychan_2D.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dc9a3d182bbd1a24fa639a5bdb5bb13f +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From 908e2f6605eb442b3ad53f4f98599734874acae6 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 26 Nov 2025 13:45:20 +0900 Subject: [PATCH 282/290] rename shader --- .../Assets/Shaders/{Toon2D.shader => Toon3Das2D.shader} | 0 .../Assets/Shaders/{Toon2D.shader.meta => Toon3Das2D.shader.meta} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename Toonshader_ProjectURP/Assets/Shaders/{Toon2D.shader => Toon3Das2D.shader} (100%) rename Toonshader_ProjectURP/Assets/Shaders/{Toon2D.shader.meta => Toon3Das2D.shader.meta} (100%) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader similarity index 100% rename from Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader rename to Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader.meta b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader.meta similarity index 100% rename from Toonshader_ProjectURP/Assets/Shaders/Toon2D.shader.meta rename to Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader.meta From 60ebf8912c9533f42972e6e8a8d6b838fc08a201 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 26 Nov 2025 16:24:20 +0900 Subject: [PATCH 283/290] use all shape lights --- .../Assets/Shaders/Toon3Das2D.shader | 166 ++++++++---------- .../Assets/Shaders/ToonBlend.hlsl | 99 +++++++++++ 2 files changed, 172 insertions(+), 93 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader index db1867258..49cc8e7c5 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader @@ -83,6 +83,7 @@ Shader "Toon/Toon 3D as 2D"{ #pragma vertex ToonVertex #pragma fragment ToonFragment + //USE_SHAPE_LIGHT keywords #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" // GPU Instancing @@ -109,7 +110,18 @@ Shader "Toon/Toon 3D as 2D"{ float4 _White; - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Lit2DCommon.hlsl" + //#include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Lit2DCommon.hlsl" + + TEXTURE2D(_MainTex); + SAMPLER(sampler_MainTex); + UNITY_TEXTURE_STREAMING_DEBUG_VARS_FOR_TEX(_MainTex); + + TEXTURE2D(_MaskTex); + SAMPLER(sampler_MaskTex); + + TEXTURE2D(_NormalMap); + SAMPLER(sampler_NormalMap); + CBUFFER_START(UnityPerMaterial) half4 _BaseColor; @@ -201,69 +213,63 @@ Shader "Toon/Toon 3D as 2D"{ } - half4 CombinedShapeLightSharedWithToon(in SurfaceData2D surfaceData, in InputData2D inputData, in float2 uv, + half4 CombinedShapeLightAndToon(ShapeLightResult shapeLightResult, SurfaceData2D surfaceData, + in float2 uv, in float3 tangentWS, in float3 bitangentWS, in float3 normalWS, in float3 positionWS) { - #if defined(DEBUG_DISPLAY) - half4 debugColor = 0; - - if (CanDebugOverrideOutputColor(surfaceData, inputData, debugColor)) { - return debugColor; - } - #endif - - half alpha = surfaceData.alpha; - half4 albedo = half4(surfaceData.albedo, alpha); - const half4 mask = surfaceData.mask; - const half2 lightingUV = inputData.lightingUV; - - if (alpha == 0.0) - discard; - + const half alpha = surfaceData.alpha; + float3x3 tangentTransform = float3x3( tangentWS, bitangentWS, normalWS); const float3 normalTS = surfaceData.normalTS; float3 perturbedNormalWS = normalize(mul( normalTS, tangentTransform )); // Perturbed normals - #if USE_SHAPE_LIGHT_TYPE_0 - half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); - - if (any(_ShapeLightMaskFilter0)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter0) * mask + _ShapeLightInvertedFilter0 * (1 - - mask); - shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); - } - - const float3 directionalLightColorAndUse = _DirectionalLight_Color * _DirectionalLight_Use; + half4 light2dMod = shapeLightResult.mod; + half4 light2dAdd = shapeLightResult.add; - const float3 diffuseLightFactor = ToonDiffuseBlend(shapeLight0.rgb, _ShapeLightBlendFactors0.x); - - const float3 baseColor = _BaseColor.rgb * albedo.rgb * diffuseLightFactor; + const float light2dIntensity = max( + light2dMod.r * light2dAdd.r, max( + light2dMod.g + light2dAdd.g, + light2dMod.b + light2dAdd.b)); + const half4 mainTex = half4(surfaceData.albedo, alpha); + const float3 baseAlbedo = _BaseColor.rgb * mainTex.rgb; + //1st and 2nd Shade const float4 firstShadeTex = lerp( - SAMPLE_TEXTURE2D(_1st_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), albedo, + SAMPLE_TEXTURE2D(_1st_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), mainTex, _Use_BaseAs1st); const float3 firstShadeAlbedo = _1st_ShadeColor.rgb * firstShadeTex.rgb; - const float3 firstShadeColor = firstShadeAlbedo * diffuseLightFactor; const float4 secondShadeTex = lerp( SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), firstShadeTex, _Use_1stAs2nd); const float3 secondShadeAlbedo = _2nd_ShadeColor.rgb * secondShadeTex.rgb; - const float3 secondShadeColor = secondShadeAlbedo * diffuseLightFactor; + + //perform 3 color linear shading with 2D colors and lights + const float3 color2D = ThreeColorsLinearShading( + baseAlbedo * light2dMod + light2dAdd, + firstShadeAlbedo * light2dMod + light2dAdd, + secondShadeAlbedo * light2dMod + light2dAdd, + _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, + _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, light2dIntensity); + - const float light2dDiffuse = max(shapeLight0.r, max(shapeLight0.g, shapeLight0.b)); + //Toon Directional Light + const float3 directionalLightColorAndUse = _DirectionalLight_Color * _DirectionalLight_Use; const float3 directionalLightDirection = normalize(-_DirectionalLight_Direction); - const float directionalDiffuse = 0.5 * dot( perturbedNormalWS, directionalLightDirection) + 0.5; + const float dotNL = 0.5 * dot( perturbedNormalWS, directionalLightDirection) + 0.5; - const float threeColorsT = (light2dDiffuse * _2DLightStrength) - + (directionalDiffuse * _DirectionalLight_DiffuseStrength); - - const float3 finalDiffuseColor = ThreeColorsLinearShading(baseColor,firstShadeColor, secondShadeColor, + const float3 toonDiffuseColor = ThreeColorsLinearShading( + baseAlbedo * directionalLightColorAndUse, + firstShadeAlbedo * directionalLightColorAndUse, + secondShadeAlbedo * directionalLightColorAndUse, _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, - _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, threeColorsT); + _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, + dotNL); + + const float3 finalDiffuseColor = color2D * _2DLightStrength + + toonDiffuseColor * _DirectionalLight_DiffuseStrength; //Highlight const float3 viewDirection = normalize(_DirectionalLight_ViewPosition - positionWS); @@ -285,49 +291,37 @@ Shader "Toon/Toon 3D as 2D"{ float3 finalColor = finalDiffuseColor + finalHighlightColor; - half4 shapeLight0Modulate = half4(finalColor, alpha); - half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; - - #else - half4 shapeLight0Modulate = 0; - half4 shapeLight0Additive = 0; - #endif - - half4 finalOutput; - #if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 - finalOutput = albedo; - #else - half4 finalModulate = shapeLight0Modulate; - half4 finalAdditve = shapeLight0Additive; - finalOutput = _HDREmulationScale * (finalModulate + finalAdditve); - #endif - - finalOutput.a = alpha; - - return max(0, finalOutput); + return float4(finalColor,alpha); } + half4 ToonFragment(Varyings input) : SV_Target { const half4 main = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv); const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.uv); const half3 normalTS = UnpackNormalScale(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.uv), _BumpScale); SurfaceData2D surfaceData; - InputData2D inputData; - + const float3 normalWS = normalize(input.normalWS); const float3 tangentWS = normalize(input.tangentWS); const float3 bitangentWS = normalize(cross(normalWS, tangentWS) * input.tangentWS.w); + + const float alpha = main.a; - InitializeSurfaceData(main.rgb, main.a, mask, normalTS, surfaceData); - InitializeInputData(input.uv, input.lightingUV, inputData); + InitializeSurfaceData(main.rgb, alpha, mask, normalTS, surfaceData); #if defined(DEBUG_DISPLAY) SETUP_DEBUG_TEXTURE_DATA_2D_NO_TS(inputData, input.positionWS, input.positionCS, _MainTex); surfaceData.normalWS = input.normalWS; #endif - return CombinedShapeLightSharedWithToon(surfaceData, inputData, input.uv, + if (alpha == 0.0) + discard; + + ShapeLightResult shapeLightResult = CombinedShapeLight(mask, input.lightingUV); + + + return CombinedShapeLightAndToon(shapeLightResult, surfaceData, input.uv, tangentWS, bitangentWS, normalWS, input.positionWS); } @@ -365,6 +359,7 @@ Shader "Toon/Toon 3D as 2D"{ // #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" + //USE_SHAPE_LIGHT keywords #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" struct OutlineVertexInput { @@ -470,34 +465,11 @@ Shader "Toon/Toon 3D as 2D"{ return o; } - //SHAPE_LIGHT macros - #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" half4 OutlineFragment(OutlineVertexOutput i) : SV_Target { - InputData2D inputData; - - InitializeInputData(i.uv0, i.lightingUV, inputData); - - half4 shapeLight0 = half4(0,0,0,0); - const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, i.uv0); - const half2 lightingUV = inputData.lightingUV; - - float3 diffuseLightFactor = float3(0,0,0); - - #if USE_SHAPE_LIGHT_TYPE_0 - shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); - if (any(_ShapeLightMaskFilter0)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter0) * mask + _ShapeLightInvertedFilter0 * (1 - - mask); - shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); - } - diffuseLightFactor = ToonDiffuseBlend(shapeLight0.rgb, _ShapeLightBlendFactors0.x); - #endif - + const half2 lightingUV = i.lightingUV; const float2 Set_UV0 = i.uv0; float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); @@ -506,9 +478,17 @@ Shader "Toon/Toon 3D as 2D"{ const float3 outlineTex = tex2D(sampler_OutlineTex,TRANSFORM_TEX(Set_UV0, _OutlineTex)).rgb; const float3 outlineAlbedo = outlineTex * _OutlineColor.rgb; - //Blend + //Blend with baseColor const float3 outlineBaseBlend = lerp(outlineAlbedo, outlineAlbedo * Set_BaseColor, _Outline_BaseColorBlend); - const float3 outlineBaseAndLightBlend = lerp(outlineBaseBlend, outlineBaseBlend * diffuseLightFactor, _Outline_LightColorBlend); + + //Blend with light + ShapeLightResult shapeLightResult = CombinedShapeLight(mask, lightingUV); + const float3 color2D = (outlineBaseBlend.rgb * shapeLightResult.mod.rgb) + shapeLightResult.add.rgb; + const float3 colorToon = outlineBaseBlend.rgb * _DirectionalLight_Color.rgb * _DirectionalLight_Use; + const float3 outlineLightColor = (color2D * _2DLightStrength) + + (colorToon * _DirectionalLight_DiffuseStrength); + + const float3 outlineBaseAndLightBlend = lerp(outlineBaseBlend, outlineLightColor, _Outline_LightColorBlend); return float4(outlineBaseAndLightBlend,1.0); } diff --git a/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl b/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl index 75d25e2b6..7491d54a8 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl +++ b/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl @@ -1,5 +1,9 @@ #pragma once + +#include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" //_ShapeLightTexture + + float3 ToonDiffuseBlend(float3 shapeLight, float _ShapeLightBlendFactors) { const float3 directionalLightColorAndUse = _DirectionalLight_Color * _DirectionalLight_Use; @@ -9,3 +13,98 @@ float3 ToonDiffuseBlend(float3 shapeLight, float _ShapeLightBlendFactors) { return diffuseLightFactor; } + +struct ShapeLightResult { + half4 mod; + half4 add; +}; + +//---------------------------------------------------------------------------------------------------------------------- + +ShapeLightResult CombinedShapeLight(in half4 mask, in half2 lightingUV) +{ + ShapeLightResult ret = (ShapeLightResult)0; + + #if defined(DEBUG_DISPLAY) + half4 debugColor = 0; + + if (CanDebugOverrideOutputColor(surfaceData, inputData, debugColor)) + { + ret.mod = ret.add = debugColor; + return ret; + } + #endif + +#if USE_SHAPE_LIGHT_TYPE_0 + half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); + + if (any(_ShapeLightMaskFilter0)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter0) * mask + _ShapeLightInvertedFilter0 * (1 - mask); + shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); + } + + half4 shapeLight0Modulate = shapeLight0 * _ShapeLightBlendFactors0.x; + half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; +#else + half4 shapeLight0Modulate = 0; + half4 shapeLight0Additive = 0; +#endif + +#if USE_SHAPE_LIGHT_TYPE_1 + half4 shapeLight1 = SAMPLE_TEXTURE2D(_ShapeLightTexture1, sampler_ShapeLightTexture1, lightingUV); + + if (any(_ShapeLightMaskFilter1)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter1) * mask + _ShapeLightInvertedFilter1 * (1 - mask); + shapeLight1 *= dot(processedMask, _ShapeLightMaskFilter1); + } + + half4 shapeLight1Modulate = shapeLight1 * _ShapeLightBlendFactors1.x; + half4 shapeLight1Additive = shapeLight1 * _ShapeLightBlendFactors1.y; +#else + half4 shapeLight1Modulate = 0; + half4 shapeLight1Additive = 0; +#endif + +#if USE_SHAPE_LIGHT_TYPE_2 + half4 shapeLight2 = SAMPLE_TEXTURE2D(_ShapeLightTexture2, sampler_ShapeLightTexture2, lightingUV); + + if (any(_ShapeLightMaskFilter2)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter2) * mask + _ShapeLightInvertedFilter2 * (1 - mask); + shapeLight2 *= dot(processedMask, _ShapeLightMaskFilter2); + } + + half4 shapeLight2Modulate = shapeLight2 * _ShapeLightBlendFactors2.x; + half4 shapeLight2Additive = shapeLight2 * _ShapeLightBlendFactors2.y; +#else + half4 shapeLight2Modulate = 0; + half4 shapeLight2Additive = 0; +#endif + +#if USE_SHAPE_LIGHT_TYPE_3 + half4 shapeLight3 = SAMPLE_TEXTURE2D(_ShapeLightTexture3, sampler_ShapeLightTexture3, lightingUV); + + if (any(_ShapeLightMaskFilter3)) + { + half4 processedMask = (1 - _ShapeLightInvertedFilter3) * mask + _ShapeLightInvertedFilter3 * (1 - mask); + shapeLight3 *= dot(processedMask, _ShapeLightMaskFilter3); + } + + half4 shapeLight3Modulate = shapeLight3 * _ShapeLightBlendFactors3.x; + half4 shapeLight3Additive = shapeLight3 * _ShapeLightBlendFactors3.y; +#else + half4 shapeLight3Modulate = 0; + half4 shapeLight3Additive = 0; +#endif + + half4 finalOutput; +#if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 +#else + ret.mod = shapeLight0Modulate + shapeLight1Modulate + shapeLight2Modulate + shapeLight3Modulate; + ret.add = shapeLight0Additive + shapeLight1Additive + shapeLight2Additive + shapeLight3Additive; +#endif + + return ret; +} From 2906e7ce11146295ee64f88a4adb431a02d961a9 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 26 Nov 2025 16:25:07 +0900 Subject: [PATCH 284/290] Remove unused code --- Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl b/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl index 7491d54a8..df4a0cf65 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl +++ b/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl @@ -3,17 +3,6 @@ #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" //_ShapeLightTexture - -float3 ToonDiffuseBlend(float3 shapeLight, float _ShapeLightBlendFactors) { - - const float3 directionalLightColorAndUse = _DirectionalLight_Color * _DirectionalLight_Use; - - const float3 diffuseLightFactor = (shapeLight.rgb * _ShapeLightBlendFactors * _2DLightStrength ) - + (directionalLightColorAndUse * _DirectionalLight_DiffuseStrength); - - return diffuseLightFactor; -} - struct ShapeLightResult { half4 mod; half4 add; From 7b83be51851aafbbb5884b650d81332bfb3facc8 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 26 Nov 2025 16:33:34 +0900 Subject: [PATCH 285/290] rename --- .../Assets/Shaders/{ToonBlend.hlsl => ShapeLight2D.hlsl} | 0 .../Shaders/{ToonBlend.hlsl.meta => ShapeLight2D.hlsl.meta} | 0 Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) rename Toonshader_ProjectURP/Assets/Shaders/{ToonBlend.hlsl => ShapeLight2D.hlsl} (100%) rename Toonshader_ProjectURP/Assets/Shaders/{ToonBlend.hlsl.meta => ShapeLight2D.hlsl.meta} (100%) diff --git a/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl b/Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl similarity index 100% rename from Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl rename to Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl diff --git a/Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl.meta b/Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl.meta similarity index 100% rename from Toonshader_ProjectURP/Assets/Shaders/ToonBlend.hlsl.meta rename to Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl.meta diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader index 49cc8e7c5..cfe817aca 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader @@ -166,7 +166,7 @@ Shader "Toon/Toon 3D as 2D"{ float4 _HighlightTex_ST; #include "ObjectTransform.hlsl" - #include "ToonBlend.hlsl" + #include "ShapeLight2D.hlsl" Varyings ToonVertex(Attributes input) { @@ -416,7 +416,7 @@ Shader "Toon/Toon 3D as 2D"{ CBUFFER_END #include "ObjectTransform.hlsl" - #include "ToonBlend.hlsl" + #include "ShapeLight2D.hlsl" OutlineVertexOutput OutlineVertex(OutlineVertexInput v) { OutlineVertexOutput o = (OutlineVertexOutput) 0; From 1db3bd3d6c48d701c6fe51a817214d6171610280 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 26 Nov 2025 22:17:19 +0900 Subject: [PATCH 286/290] _HDREmulationScale --- .../Assets/Shaders/Toon3Das2D.shader | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader index cfe817aca..bce1b74c3 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader @@ -167,6 +167,9 @@ Shader "Toon/Toon 3D as 2D"{ #include "ObjectTransform.hlsl" #include "ShapeLight2D.hlsl" + + //_HDREmulationScale declaration + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightVariables.hlsl" Varyings ToonVertex(Attributes input) { @@ -247,16 +250,16 @@ Shader "Toon/Toon 3D as 2D"{ //perform 3 color linear shading with 2D colors and lights const float3 color2D = ThreeColorsLinearShading( - baseAlbedo * light2dMod + light2dAdd, - firstShadeAlbedo * light2dMod + light2dAdd, - secondShadeAlbedo * light2dMod + light2dAdd, + (baseAlbedo * light2dMod + light2dAdd).rgb, + (firstShadeAlbedo * light2dMod + light2dAdd).rgb, + (secondShadeAlbedo * light2dMod + light2dAdd).rgb, _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, light2dIntensity); //Toon Directional Light - const float3 directionalLightColorAndUse = _DirectionalLight_Color * _DirectionalLight_Use; + const float3 directionalLightColorAndUse = _DirectionalLight_Color.rgb * _DirectionalLight_Use; const float3 directionalLightDirection = normalize(-_DirectionalLight_Direction); const float dotNL = 0.5 * dot( perturbedNormalWS, directionalLightDirection) + 0.5; @@ -289,7 +292,7 @@ Shader "Toon/Toon 3D as 2D"{ const float3 finalHighlightColor = highlightAlbedo * highlightFactor * highlight; - float3 finalColor = finalDiffuseColor + finalHighlightColor; + const float3 finalColor = _HDREmulationScale * (finalDiffuseColor + finalHighlightColor); return float4(finalColor,alpha); } From 0f28590ca1e34b74c1fda5272e672327e3a8d928 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 26 Nov 2025 22:21:36 +0900 Subject: [PATCH 287/290] HDREmulationScale for outline --- Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader index bce1b74c3..2bf98afd6 100644 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader +++ b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader @@ -109,9 +109,7 @@ Shader "Toon/Toon 3D as 2D"{ }; float4 _White; - - //#include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Lit2DCommon.hlsl" - + TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex); UNITY_TEXTURE_STREAMING_DEBUG_VARS_FOR_TEX(_MainTex); @@ -290,7 +288,6 @@ Shader "Toon/Toon 3D as 2D"{ const float3 highlightFactor = directionalLightColorAndUse * _DirectionalLight_HighlightStrength; const float3 finalHighlightColor = highlightAlbedo * highlightFactor * highlight; - const float3 finalColor = _HDREmulationScale * (finalDiffuseColor + finalHighlightColor); @@ -365,6 +362,9 @@ Shader "Toon/Toon 3D as 2D"{ //USE_SHAPE_LIGHT keywords #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" + //_HDREmulationScale declaration + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightVariables.hlsl" + struct OutlineVertexInput { float4 vertex : POSITION; float3 normal : NORMAL; @@ -493,7 +493,7 @@ Shader "Toon/Toon 3D as 2D"{ const float3 outlineBaseAndLightBlend = lerp(outlineBaseBlend, outlineLightColor, _Outline_LightColorBlend); - return float4(outlineBaseAndLightBlend,1.0); + return float4(_HDREmulationScale * outlineBaseAndLightBlend,1.0); } From 4fc22baa8f8ca8153b3ab2349dbd977c4449fdfd Mon Sep 17 00:00:00 2001 From: sin Date: Thu, 27 Nov 2025 00:50:03 +0900 Subject: [PATCH 288/290] add normal textures [skip ci] --- .../Textures/BakedNormal_FHair_Normal.png | Bin 0 -> 18703 bytes .../BakedNormal_FHair_Normal.png.meta | 117 ++++++++++++++++++ .../BakedNormal_SDunitychan_Normal.png | Bin 0 -> 241283 bytes .../BakedNormal_SDunitychan_Normal.png.meta | 117 ++++++++++++++++++ 4 files changed, 234 insertions(+) create mode 100644 com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_FHair_Normal.png create mode 100644 com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_FHair_Normal.png.meta create mode 100644 com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_SDunitychan_Normal.png create mode 100644 com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_SDunitychan_Normal.png.meta diff --git a/com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_FHair_Normal.png b/com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_FHair_Normal.png new file mode 100644 index 0000000000000000000000000000000000000000..9ec63b4a3b42d2840cd54427c0e5c0778ca99832 GIT binary patch literal 18703 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 QcxBP;n+Dp&H(-(f7nE@)A^-pY literal 0 HcmV?d00001 diff --git a/com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_FHair_Normal.png.meta b/com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_FHair_Normal.png.meta new file mode 100644 index 000000000..b7fc0fcc7 --- /dev/null +++ b/com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_FHair_Normal.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 5b30ce1dc38b14141b4635ebb6c167ac +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: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + 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: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_SDunitychan_Normal.png b/com.unity.toonshader/Samples~/URP/UnityChan/Textures/BakedNormal_SDunitychan_Normal.png new file mode 100644 index 0000000000000000000000000000000000000000..89a544af4826109b3ae972963b56c278fc3beca6 GIT binary patch literal 241283 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

vJ2(oYM&9$CWH@$uTK*mwT&$2t zJ6C@(5GKpGOJ#6kAyi8j0R?8B2Yut|VSLN-F%4U}VDST_ssnf8IxP zZ~YRXwoPrD_R;(p$*gt@9RovylcIH!(H|{nCI$MCuFPn`!oov_T^C`|;VoDQ59Sqv zf}n9C40XPTUVCz5MtWhH#3{d4IlS|A?<+K%E%uvJsSL$RzD7aQ zKK;eI$8*uVmWIaiK`tKNj>@I}qh9U3qvUiE+D)lR3$%5Dp+d zq=AdIokaR4iIBb*9FUznsOLLgp84>?{6mYX{_VkQqt{0ZVkD(_rOMZzeJgbA`jF?S z2n`1w@@+Xuc-8Rlu&ySN2}}9k)g-=Z<3(r7fcmx2pZ;L{SU~!nk-28PXIeVc1(Iy()Rmyj9OQ>r`h_#w9cJR%IE%0 z*>C)kfA;cobJ;&hdnt&zZF&p0IEeaP1adN(BvoKKVnR=*`?nsNJq)Ow*)&jbQ+jK0 z@ODvxchoVI+O~VpS)wzflzA6Fn;?Ez>_RyC6pTQg}r@t?r7(YYxh76Q!= z9(#Ye5Hy)*;+S|j^q#Ke<_8ap*FKIH>MsaIY*z||z!BRu00ArFw>hRcbYxpFlNt&X zKnMX#(kIa9P_>J0p(gR%5kcPvL>4OO;=wMCd(TX=!ZNfQzh-FLw@qHx6E1Y|k z_&2&oOcmP5S9J$D-n-)ZZ}2~sI$Kqv8R-Ayfxv=@YEuM7Hh@sG6sLd9Ivtj{cAD+NTeDm$kXqPf( zH+4ZaM90kcS8(+&k6WAR4}lW~wKGIF8507#jIinJ2vjr`&k{iJh9cVXavt@CE>^MI zkMirjkdUi9VbC&0J1@8Ovh-mLH^o50KqBURj6@7m)Cww)o*S~m5-hNHz#Tx?NLxTe zixPG2BHZTcKMR&`b`0D(U705$Z*Wn5(C+x^*QOpf{lJr@wd1`C*&JPPM*|@oLLr97 z%}*4^<%SO!oA+cZnQvxXx!QhnMbY!6e0QG5NUyhNMd865rPDgF1OJV5_gjN9y|we! z5(Z_@TS)ART-Y5N34vZmIS9ak@6v-vXf%prx1jIG(89g;;>W{i_BV5c0{&k%gCanRTir3Ylqj~5o1ObU+YiLduH%XOF zM;HUImg~9%l|%EhNB2FgYZ|pSp1&zxvqQpg`={Fp3GzbEa)x?OHFomAk5Z$=(VX33 z#=UZ9^Z71bz39KBJVFzw6tb+kEk6N4lqu+g{} ztSUMuHYtgY#*qk6ou9$N;PC>SxW|`GC^&|0P-WcL4+UnjG`u)i#kQe4#E3G84w?Wh z(nu@}i-3?&Jox*ZCKOvSD{dk&^HqyoG>vfI7L>P`_CBkB40IckX`GzLiI_k%mH?7R zhMfmRgdoYHx@<5IN_e5kebJzzwe$hsWz$btGuH(*`K_-T9R2;3`?#;Sd%(=_XPxG6 z#i}S4<~}z{b+5zKm&3K4zka!$a#G&75HPc7(zhHK@atRk(7DY5vx>5AU;DYP>6MT5 z{sTfwfz{)yn<Ah=WA#@R>JknRO#HH zo+~9sF|!T2_3VAe5|r-ZyTZOVum}NRu@3JrF%;d-&(XX?3S}vPyC~YULU8FA3 zs9$hhps_B*(e=LLNZJsZFRE+BNNP4)EzxGlROc1g`3SI5B~%dFB}j~9wt`Q zYWGeQ571Lc=IEgW$RvbQELtO#DVkdF2AxXh;e_BG2?hQK`)?k4GPsh5DYhYX2$^I& zXj5bPy7aiEqKcB~uiDYBs?PH}?D2NT?ZqSfTn8uHMknTLee>Ub`NZudA#{{MCH%S=AhDMklFg;+4UHe z<>@oNV}FBeOnVZ#I@6Qk;)J;)oX3hOO>y5s2g;Zc;C`Qk0u%5CcrbL$Es)`1LAAUV zboUV9Y5UzWCPHQ17q>TfWvcT1<;$Y6*H3D8cZ99~ycKiOG48$I(-UcuCS`6n0#9WA zC?0jogbhN-C<2v!_p9COn>V$(LiVCWijG{?kCWwz77doj8Yb*WIbYh)R2(1kZ1Pvd z_QHb3n^}V_>)x3B@Q+LZo@_LsIH@rkXl$wKw!%ChNK8Z&xdZGJ>FPMFsw@Q;`ZlwK zH`dA-DyTRS0;d3;h(}Y1jITH}9xsZ(1bCpg79D+`%-g0V16^8Gv)WR>8FH%EMA1nk zN@^5H(7sd;r{e3vrwImo{6?)}{~U zIux5rqEYNkg7N;l!{eHtZpCsXRN_SaS2!G;UsB7qviye|MzULVo?yKd~QAeAWJs7 z?)zcQ$!M`K{WwbmU1ks$NWtzVr+m?WI8bI#UZmqBVA1Yq(0HTt!i(+q^z1Pdt?=(Z z(?4#7(4lHFM9(lx7O;?TlC@A7cSLbm!j*Tpy;~#pmM7sbNf_NjI1&pSeA{$&2)?1g z4q~$3j0cM%V3910`fl53J?JWRTVK>+N3t53!A)u4ron};ugl4f!W}={f(8wT1BDE7 zhc?VXi!whzXKYhBvw)$LMZW;o?>&99gv<8r?mB5Ty%$~@XM7uewZlnJO|I)XEk)h_ zI5K>)OU|eX4KYfzC`NWnH+hDgP6=*#ZliCfinDLDW*5aDyOu``Rpk$9*S8ieCXu!$k=RD% zUIJW{j688snihs6Eb*Qw(W-Z^5+$q)uR`L1Z(zWtBJ2Pq6%qwt=%RJE5rql&i9~(v ztl)VIiIKwY0gtw~NA{})?M74ch}z;|4crpqSQbuLfP)7@HOPOq5mdZgG0Z8F*cxhJ z(ajogcvgAVC-Zlc>y%l=!lcUIKk{pT%w`9K6wZ!DHE`b**T7v;UMh~mCz{%Dv!c+8+i-f)(?=*t_$drB2`?n4po(68(i1wDuZH~?@% zA^=ppLyv6`BH_uB)ZL0z>pZVXyE42 zJ6Zqrn?uk7#WKt=_ zj1yXuXbqH>D)2_Y@?LHt?d~?<~OH$t3O}V1#v{0T!`S%y6p(QrbuF%2clRd}?C# z(r4&ls50y8;?o?LaWpv^X7k_BY5$ybbKfA*0!HzzU%WoINes=RYy!5YQ|gVbyBt`XsI(sN1Pl?v=#paIr8A;0085lGnW03d@rYw`7i$Y41UkO|r^x#J7(4D$(3< zTVZW2Osa(V<$ckjmt%BeSa-P(l#RApIqGiP4W{IOYXnJdPD*sX&qlt=hK>KtS+9k~ zjk17&tb|=gR=Af_a_7$6{N9-=cQU(XSzG90?l!QLgxz<9eKqk6YE9SKAGTM^yv?z! zuV=FES{{O>Frfys{#E^I+_I&oRMleQQlHf7u*%H5N-T6xl*ou8i&+WpQ0QCfn)ZQ) z*mFWlhyAAmzApOCBy~81Mf`8u5cOj$T=~UH{-fR2Uqk`kBOjVCb~b!__R+JzA4Mmr z?gr#Jn(_*dA>Tpoz>-w85t3NYVBhAd&&Dsc{@ zHlV)S+K_qPQoy}c+aXR5j{;g_VlvKc@WE~G+1b)^E8{nhnmSX91)^y&>nC>YGBHe! zV=-__MmyyicAu-5IC!!B#I6XPlmZ9&-UxwUmv1+A)?e!kmX@GsiRvXeNF2%7O(Jdt z-2L;*phNZ&SK-Um#fttC57&Rs94&7cD-?)6#*oN!=qlhb=f#VhKk?_og&(H_kW-qn z)^Bh})K5sOEAVxyVzzEQL8refkT|S;MfB?9TSZ-0hEG3D>+;Dhs+#t5dKspEjH$jo z>A!0Xi^L@}PTWG{TkKx7e18rEMMyH?e}WCSBqUhaVhsZX8^N*=EH<_KrJrY??~GsK zdX@H&_MByhQ0Yeact^!jP-C0o{8YvEVy9vUxip8>mLR$HEl_EFR?2wI*`_?*wt{lT`T^tOyK+bNjgytFB%MNK0%ZZ z3;cw(eB*(YJ&E2!`xd24rp^#^-v3m{`M2StTv~!|NufXl18Uv6GaL6E95lT&vs^p) zsN5v9tNmpD?@^7{-SRoE<4;m|bKeus;SQ>^aJI2JOb6B*0xcqnOxhv_(4yTGod}VW z0%8vI2=aEWw3K$|b))K?IN_5FJP8qiOI8?|Erdxx1I)oz2qdtFG!Q(IQzKfh#Hn|o zsat4uL&)3p+cujXr>RJ%$l*ULhon^gY^*AK4f%RhkBb=-=d}l;VAamK_I-Znv`ldQaG2o_Q-6x%q(ZxufGJk+PzY}NR*5F zrZ_+BKj*tB-lz2I=j;y!!QjR#xhp^XUCf-^vrN!b+pZIYLk}O`F@a`UXw__7j%jak zuucEw<@(Jp{VV5Yp&{J(D{;VFQ>?U8X+M_V^r6>EFps%fvliBT!(AC(L52IeSU+;b)so{iys}M3n zM}mY|=?oM~24U$?8-@=ycVFEIa`tbV-?L|1{lZO8hjS*Eq^3;!1U=6-S-Xx6w|;w> zS9d=Y7yzQkoy@&^v|x4blTutNZh8;tEtXXm@?I?mi~*N>&Y)YVQFrS*>q18l)E;5! z?Ar>J3eUP-D+eC)Dp&u`NGo(on|pO>r2XG-^G;L4PJ55E>mL%{ifMzY85{GhboRUG z(h)M?FKpw}h0V{0IOUu?(-Fb-nkqLmAd?OCNdEiDGEi^9AOSBNy9fxRS(pwx!rpET zxF$#_!%SjZj?tyn&nNmS=iLgqye|p;Sg4yDk(_CAUaGq~KO81CakBrTxVbv48iKW#=%7h(+>5+JhQx5A6fNNYU4%Zn1IPtiZlT%$p79MjXboSbZMRMiXXmi)a{~wD0rQs?6IyP z70^3#s^aTVkJEI#bJM_V)q_f)RzlR(aHu3!kU0+F=0~CNki7*#R}T0S>1?XJ5~wyU z>B-e>+E;OVVdYDfja1^<_y@=1jz<>+W)$d4OG`hL-c1ue{QjfBvAb~SSULg+VijIG z1$P(DJ*%9k4g50sBc#zIXM4Rze31E-;`SH$|L|E@xMc9AjW77FSoqGqvypl>)aBO= zNViMnWu=Xyua)2k)P~FIWj}oQ4ns$-u;lh|2xHLPICK&g#h@c37HMa4K4-6??OE3m zKgny4(YsJ2Cg^U!dC>ot#5jzw@iqvXZiq?MAhPc4qiBnT3xc8WMpD-6hJ7!co4SoB zLv;)sMhJ%zUO`B-;6QGCqStEmOj^K{+1mY%%{x&3HEgy}D6g^}xxN%xu_oHUee%TB zk=pWd&tQ3}?3Ewnq2a3Dk~z2b$|)WMZKrSU(E5+~nS_Hl^DXHZgwMdkxY&CXZe{3U zrZOwES+?lkm1Rpzr-SXxlWw&B$$804uxf34z~BDGvDCTx&*$oY$2^A9jwK+Ve~1Vv z$Yw+-G^16W@~mgP=d=9h#D*=o*<3jtt&^^&&jw7T1^gJ;BD8iUc*GM@io4M$+YDee z!Lo$u5cNQyb@nlTg^k)#vr?Z;gW}fKRu{#Kv4*m;(u3I%e0NE9;?a;T)4HyW8u~>* za2k*Yl?xkbE_#qlGuaU@d-%ll=MM~p9Xj_4*gO+$uol@-@6k2v7Us#dBdzDxu&GUS zUFH>^{RyvcGRXE<)nrc=91eHbKOx;FuuyETLDYH$G44m;4uB$MoJiNZh{kE1KTb6y zy*b;xSm4li)2WOlZ(dVz!XfWIP;S4i>922xRhgg&vDP4W$)pFLT#@Hok3U z)XV!XIN>g<0aZABU4$<-t9sqNf5UT4sA{rNWpPG3cG9c(XLyD#9A^Sd3Q@%&TA##J z+ym^T3I)Svd|#XVeMijsI@Y`F(4P}4DOBcLYv8OhKbq*hxMw<`CX36xTi#Yi9bzy$ z&F!>QCr*I!0tcFOgIPCi=I1}7vixpFqB}ouARRi4iR?YXdBj?Rq5n|2@%?*&J)z;@ z>UH5KrFWxYjq|%)q`Lct$3~wSP1gR#b7a4M(0FTr+g?ysmeKT)Un#uqy#VjQV%{|O zm7jlJ3ChRXrv4?(GtNJ-K=LcgM?;wyfUQ&=He5PTHGm>>)HzX8>$kRu?1Jha@Ui<6UB0LcrH z7=L%HRKe7HsU_~{CClntXS`N_g_TGqdQBGvhXoILyyI~S_8z(?l|AjfdN$FSt9eDu z>{jZhwhgS0+biZ>ZfLQKkl^`L$hnK{y*-!bJ2~yO{8hgH_MBzFveL$=%Iss6`Nd6} zjnA83Rn`($zX>h*T)=Y#z5{3gA1@TNG$$fM+p+1aPQh%!ZRJnC_)?i&>lWCNaOMsh?O+=*s zmvhw`mM;wVlHQ8BRQLE z$&K+Z$aub&gFUSlTc?CiM(H=wYpq?mgP>Jd5`r{Xk0}L5N>;g-RTgCh)3}Q@^JJ}! zE!x5@nXYjzPTOTXvTZ{$YNN*5tWGDKbtw10ozHdZNc(7kNeSji@FoA|6A@IsDK;6>W zN1qP=5`a1``rW(xnB?u)AoE{0&nQS5_vH4ORG1`;4g74=zSO;LT`cRwbyE5E$g#w- zjaF}cv&F*xo6FvF4Zg|0>{m|RZd2n869$MRf&EMtSP8%hd9nWWt-c5dHHk|@HB#&U3T=j#c$R)o8I*I~9-WuQL}I7;ce=NuO;-o_)JLyY#D4YJI|IgK4??$H_5^I}{SLT8B?^8(14$ z?f0J?3f_=1TLfO@nY4C~%JMT^Mrv3DuwEowD4qeT4n>-{no#v~{umeUqKiroukewR zio+*@;inIoyOmcL^?R?&_AgzC5n4-_UVFe5@VUPF_sjtlgT-dP3_K9S;3k1CBe6o7 z-Uj%*cG&#>SgMX+G*!<;!2;&NxMz7jBs5&JZin<>NbLz};%*j&59Gks!Jnr;!b~A& z#<;mHzy1M#7I#=t&g~y}4!xYGcKrL@<<^Mug6*d#`9G6P9i)J|ekx@!V$rO${Ttx= zC$`y_widmtNaqziFDPB}NKNwgZ;QkGj@=ce*nhK|{2s{9fg&MVh$cA%Pdgz2WKVgr z;k7L~lpFC5rZ=hdNBY(CV7{}})c+6HEX0T-*HVlm=-LXa4Ch@ePDJkY|`h9I_ z@+EmP2Vb_gt^exM?d#z3TWT-aXjt{kt(uz5U5Z|;PzI#v^k&6+oqzL&=xUMj@4$QJ zK;H}gfGP?O7$->_v$x%&G|o1@yL)mlaV`Sz!`}y0iu)Jm%@)_EN8f&Z9l83UGrD}S zRP*%DY@f4p??dq-U+}5v$rQ06iTvdsV;+lnkV98Jj3HlIZJjI=l&bI^+;8T&mfydM zo%Z`tlPGZHzpeiOIOZhaVKo zo?bl|R37fyl_H(i#k?t9qhL{c;!q8B#Hgf1c?GMo+3!9Zy!mEcO=$CO+PMSCI8ns~ zTg(;1Izet>1i6dg3CIk!-%Pn|wJENd_qpM@<41ztvratJFRI(|<+oP0bUu_vMZj%=ZNg-qH_tKcQIg2_JVM ztL=M{d{GSBl|=YN7_5^5`~b$Za+QoZbfk==`fS209ZR76gs+n5X!sijRhJIH6;1^F zXz2JRLPx)%?_)vHi}`c17M~CFhVB^pJCN+Zk{UbHckio<^6MVIp@_u~J_(Y_{tL$< zt6cwWuJFFKDZ5(aS0pqM_CPZQ$z(HlL5dI|B@v;R@Y=^G-w#>V+Bo~oja00ZmCW>S zT%KOfcJ}M$+N1<`s#*E)EzP=}6`Tq0bh)Lcxg`npsq^^@MF&oD@1-$NGh!9`2>_DF zWR~g=o;mAW-!|98TRm+iFz&hj=U89W?7$&&R{)9DQm4&KHotDp<)|$4Pj5bK+}_+c zr1>nklJE*T*)baS?SMQqf??sWJ&m2c7VtKr#!$~nn^DQ1td@SFXlmis1Iga_zKs^+ z^}5YB!PR428`>o^O=j~;fx?7`V_KAs)H@r`>9(w)v?BYfs+O?|b@A3lN8|pT3`wEY zMBAUKYcZGcI2`ZMQ#aV;?APYmzZg*MHCMI%yX|q0Rh&SOq)qmRla1l;PYd3X)|R>r zZC~X?c9Wk7Or=6S6@;~u3sA{-xOvFPf#v3=mWv2zraM z*tt3|**SUclXM^fn@%M^{f!fTxN~IIy8Qk4jD@$qN4bGi@2H0N()+CD_(sJFzuA&q z)!r+QrOx_K_)c#8sOZ#=Jy<5gV6zCrU}yhOkZNMo-ZfBM_&Ri|ef9Qj*Zls5dmTbc zYY`GYjP^jmgy}vL$#F;*C=ac9yD=Oo#jErh1zUZoG8RwX;pz2z!1f4Gb{X)3q; zKO9r5c3Z7Fb9?zhY(Rh7bou&AuFWJrSAW~H-d+V#pVhR1O9;;$8e=}5G5@EkyKuEh z5G?>@!1$jPescEHhO77Ns=Dsb7{ccP;wTk8yPK(ldPLq4{f;++_=hTBI`tj#;45g!MAydaM zAS_+P0XHCX@se|K_dPLT!(IWOj~3aJ1%i$DL+{&P*EW<@Z42}r!3T9;v`{H||{VLB@3#V%RBpof=?7L9bE0TIaka1eFHCw3zvq+VfP6BVTR4r*qkC*(^7iZAO25AY z+v_`xY+pfdoVOm8iqi)ZMJwu!mM>MT?O$=ey}>o_ImG2VQ&PF~Cb&DRdHt`7`?^wl z^+402-*TeQ(u4W06}NhRbv^JiSG$9zaN<#WlFiG{dQWFnEgw@}uaZ)h4OY*(!a`VI zY`DyR_fAr-H$HPo7`}e&W=8?D37wj1oj>v2^5>{_y>|6d$J+00RZBhNS3S~oi{EFq zeiS(MvZr%L++C;#f%fZ6Iz8yF&V7pL4y(%zM?6w#p1bzdL}|Enb>0%U`x&lUB!`B( zZenG4>2qQ8#g3tiWJJDw0XzW*uKYS_$uxTtkuTDg5ru5aHpLdua8(5ohNU+c&{btoo$9gvU#V+UN}`mVqh}zTz7X8>ABuO__!PjBfA5^ zUwjW@%m6?aWavOYLvR!{C3~=MSRUvxOEsi(hBdhswcAcQTG+KkA95I2ZVgMTc`!H@ z5?TGXp#4dlbGWmFith-Q%EI3t#tQ}Y56%iC3o{_#P3P7HaYf*y$T0EcPBkYyCh~*n zd7U0jT2@9z#ZIZ+Rx+Or&vYEQW4;Y)vW2n8Wt)umeV+}3(`=d>-A|KWO{E8Mql)Wh zzE)0ou6Bt|O`qOu8S=~t__(~7T|I7}D>&0NaA59K!sdtaO=$Z&8(5M2a(ZHD;~hW3 z;^cv(ogP)h{Pe-KzpKMPc{g8_m@RDt3@*I?5QN6E(i#iB#~=C#78N_hUGW*0d-dM? z)=fM~UPkexITi=1!I1+E$eIYxgAX9^VTn05}3c_%-0a0^HQq)jLU#!k-g zM@`hsD-`jGlkegk%4wJR<0`M0pHV8_x?{J4uqgO(IE7`~WxI-Q)5!M%N(~Qc<4?Fq zbPSm*y>3;^F*j(G);s@6&Oz_6WcENSZgZL|)zop(Fzj`NpMF|hW~Hp+#eyzi+8a5d zmyxkc*7Eqh9Lo+}i)8i|(V-_Ai97%Ld|?{b}N@E*$3HW-wwGtGo)b`Id_8BM6k7S@`{0JYi@OY z)3nOcL{ax^spjAjHR{fX_+)UD*vA7NN=4``MEp@tJ-(4n%Sg=>cmChK-wm@`U*?ra zaPh_kD|8vB$dI=qy12~ewBv`>JJa01c)8Ba{+!;3-yGi4A8^QlN!`h4e^7M2r?0ef z=%)9L>VnOdl`Z}km49As`a1pL=*pJ*VijwpzA}fAV6XaBe}&9(6>$|yfQC~S~9 zDKWS_y!6k$9PkevBaP|W0Z#Sax!rWc8}kNyzgayNJp zr1V7V{HMIhoM`IRcOUtsO7?rwE}xRKkx*|eu(yoMFKK!y7N;RRVgBifsO*jream`v zITBcF;MtRO08=7PZ?Han@zg~Y-5ixfZ@LM3SM)G)m}Ll!Vv_Da(G=-_Qi>4SQ-&-< z7VFB*f#9@&rQZQdcQ*g1U6S8iwn@<15mp-=S$}C4e`zQ0$gM~TsYJg#lb|JQ!EO~H zmD}c#-Cm|uKzlz%8+W=W0^u|aWa1GNCkY-3mgCNzF_&`5xX14wTqu5|Sey~#7%T8u zaqu=yBwq~S&Oie9MbU&A>i=9zEI8A@_WPOH>it~fb(?+{Cy^uuc}uTDXfUtb;<=KN z_O_XXy6#J7H&cTHe%9PpI8(W>P-Ig7c<{)X%2z_qd-k$pHb|zMcBgCtGxMPvnVo_el;eOw73U zFJ(@v`1p@hW|i*IKYymRsNIWy@%H|t=a8UBk_b%dUAswz!F|7DTujGa3u`D#rbBI=gGo%x3V%*luy6foAJvR z-^r|f`!mC1f>Ss??X+>sg{%q61>CEKb*8>BvvaUY2JEZ7mo-zq@X=yG77^qP#xO@+ zObel+MAI%<6gTl7XK>%WON`)wP&HJ*VMqY01r!tkf&Q)#v;~pngy;w8-xhIVYI^(J z!nx)RANl?YFP+@+dgD&D1Nq}aUQ!2l?W%M1Hr4a}^J{%_dF)DM*;4OHVOV|5pqGHz zgOU8YD&pMXG+jI@f(Nh(9CR{UyMtap1crJ?mv8dJM%KpMqSXe`Zgx9$4?Z#M$vn&? z;WE?pfI>m`ixyIDZNL8KRKQGN_41XBRSyZMaz)@Kcq!SaJo!y|Qva${m0d#o8Rg%- zGuKb$3r(mUiX)PAY=MrPvz(d%dd+S#1M`5KkEm7KxMG+C%^kJip!atges zl=M&>j;9DAU!m?<6MtN*cbW5|RYd5H{7V)hM$@z$AK7y}+IUl{C^l+f{c%W_Sm~yneYa0>E$xY2n1$3lL_`w25FEKA$2LI0Z@}#M~mj3O| z_raNGyi$Hk7ZTT><|Yom4dk6}Z?33gj4_Kx;S#k}%TK;X3P zTn^v9;=HF1&Br?%{XWG=%SO{|Fi5An%7MX?4&w2a^=IXBI4mv5hpkV?xPN%mS!91j zEGPa5H-#-`Jj`qV%rke23NujYr>26n`3`j5N55l`QQQLvf=h*zg0OC8XB2o^aDCFj z2!y@g2PXhD7B%%1CF{rJ?8^4)<+CN#Q=9W@{bj43{=L%yF9tDt214v7!W#7l!&et> zE}oo{GA>r?7c!fDf2g@)(0{C{JFd~guiv=z`?l%7GVFo|QSeYvkg=oR1xA~j;UYooOT1PGtLpAymw6QQH7Z;WMU{r-6A<1L;urvPh~Sh=*-G@`(7UPV>sd+ z0tV9%ZvWi)l~Z(Qs^J?+gsP!hgru^rbz|c`Kp$4@<&JIj_v)K{moswLvLgffw)Ox0 zm^gMrGiyJ>!%Av-bFkqpY-7oV(Ts-!*C(Ffi|_e;pIK|)Htjtpo4EF-#8kn%R{OJ7 zNcF+Q_EX{vm@I;v5SBC9$K~l$-XU;#waalrgTN?|=gTS7D_W3y<$+Oi2oFyhG?ozA zO+yGYta+!qQs~^6TtfXpd+*YDr^s;0oG8kH=T6c8eo&})EUot|ec!XQu!wei3mH2x z`HL^6-S61(ZUcF4E?)0zr|m6bB=Wsdd3~(0!54*#9p&S_VTv)qW%aR*l}_%18L+lzRJ>R68-XICydtJ!L8JfH z9-8=<3(qMCp3VXjo&<$$YSES=b-7ugzCa`&3VVQ`z>=7EoonTM&YJu-bI|ZSjaXYYoj9r=-q({6ovzg#vyQ zX3c$Roa`}`w0WkJV0lH0$i@jGnDoNWj* znt0#^4g|w9W%N^Dpm)LK(($8hlO89X^6RY1;}sV?az|?U?lyh=C>FO9;bwCo)9r+# zQ{#5pim|MeIE!n~BFGkCC`dt&9Y+5|6WG;5gf^|D=Tshqz}_>qZ^DivFlkhZSfSr+ z1J}>Sb0ZyVV{Lu@bJ5L0ejg2*4<~rb;us>;{iOQeHtUCu*Y*DjNVlPCz8DvXGcNUDGl6F$5z**&*FAKcp<6Akl@%%+Hl ze}PE`K|?S<-xh_=Ol=6OaV$@KP~%NL#3sq&5QU5^5{TZ9Tw$>|ThL59v9^L|Mo;r? z=Lu0%;V)X}D^^s3=K6KJEdBLyx)c=dbQ~+nBxxfWZ}Ns-w&lc?^M_t5 zoP4KP^f}B)O8HNhwwd?r&n^e9Gwla$u3!Hzw1R+z>O4~X&zbP92a~Lc$KMW`knJr0 zxjx?R*gy1HE=7A#uv8(YC=^J(xnFpswmh*TGDK*hL5^pY>ZB96R&N>|jJ=wsJoo8F zVvq6ZWcMz`6M;&LC-&{JdFIBh5M{jcE0?IhbxZQH>&b#=magS{I$TVwpW2;qE?;>4 z{<|I`7A>AcV%NfQGQaOV>2Q`K#i~0=&uYTuY!l!zI5Ze~stRCekp9=WV)uPq1oL+g zl}Qx`l?$*V_8_qvsAD6PVx_xd*B-|OOdrY>TALUhEbm@09{4r4bf#~xp|z%1;q|T7 z@tsN@&*pt^um1WRZt3mqZd_UET~!`1U@FyjO3KSDVd9)?L7)>SE(apz&(S>4GE9|- zyu;kY2oy)?qoj*YXI*>z{R(+7yG|8P7e@%(Pw-TYjO1(G#`WHwTZDlIgUKd2W6z57 z|FLx4fl&Yd|LEk5IFdci%2^rN^PG{8&dAD^kz|IVI613xMpk9h*;{rf<75@tAt4kZ z$;$e@e7?W;AO0xgeXr;1^?W^_kLTn0cxsc07v(Wo>D8IaPk-G=uNwT}o9cj&ss^>l zpsg=z$N0IeR{AH$6GsCQ!P`!DkCzXIn=$o#OrRST0;#d^t@&k=A9zmyJKhv=sU^T> zgM0Cs#FL#AmUv&kjE}ksRF?p}0)nU)s3{b$lY95G@zJjV{#O|({9e3DGFH8mAGIwR zMdR1^6KG!HGo>7#ompD0$%vZnUYu{+aip6NlE}94^7VbS)EMOGmlY@d zl{?5MBThs+1p|S?z6CUM+s1mZnYd;;xkrf?ew`{Xvmw`Qf3zK@k3fB?O8L@gR{9We>!B#`R?Jj(bi+xTAqa~7LYe{8(6 z$)nbC&~ww1rAOZ``0v(yQaXj_V-Rx=E=+RQk1}-}`a9K5sm!UiC6;avDJ*o4?W|UF zKWbjf7hMZuaoGaH@aBTbXE(PcH=9F0T_t5~&z9AF(0<0G*-!4=|BP?gSI!{4KqHCi zzFz|5=iNlF1o{+m?O=->ZOog9c_wl8LhQ(w5+>m7;V1Jh7u8 zp#=y1LxAH2av8X;tQkcvnr{F`Ecnis0z9 zn)qp78^c5}X9cvDfu>P#uOLyEit?zF-HTI+{XYJjX0-P>hc(mIwWc5mx{#~3p`AOu z@u#B=>RVe4Z};0)J{|pua=9}RP6S{I9OZ^%WA3+#OUKzzm-K(R<1vQ+?Y`G|tr3Ba0hO>|+G| z;Lm_0npQ~;fBJ~S?RsbB#;Gf|Gc$x(&&X}xIMPCZ!h&2@fR`cnm6_n+75{ao%3t=D zcvL<(aD7Y5oD!suezU0@4%(Wy>A_#CGA<3js{EcEz9_wAS>arLw(~*C^W$m%WZN8XbT@7Es1;bri%UtG=}JX6hD-{@Oq;Xhjb&yaq4$|~;5C)=#qZa*=z zC5)k~-$J<>S_1;_NYLfYMPPBm4kLhD_a5z!lN7tm6t^nLc|Mt-u#v+VDQPd~I`-eW-Mf&4@eH~=GZ08cZ$0WC8a@iC%&1AfuciGyt^ zI&x4Wtx5+)PRL<*4)(UQQ#<^vxhLPgr@jM(-6l>4((TBxk>pTFG^WEtI?k%USU?qel%X2&zqMZwFE{JZij$G|bDoM^IOe%^H+vQz)#j)GS zMz8n7d9Eqvt4{bX=rc_?!4xFTB@D(WhGLwB5Xa#pELhdL^}F-0mV0mGDGmGIJI~Nf zq^~(<1cbI6+!~mi>uwJ zR_SZk-Nn;Ha&s}%Oc0BlWRYBf*rBQ-$2$X`XZ_8^AlL*8iZBy{U%*n4;Y5DadkpY% zudQIjG57oWc788}bjSekhdn#p;7SFf#mR;{_u4i(^$Uf(6zEDBsW`W~OfpDq8SakV zF;^!h*JQFRDeAmzAFpp^(tFLe%egk}iLF&-s;mc%Nd^8vxcYgu2Of27nUM=3q-1Gh z5@0YY*$1_Tamus)i>+cN_YB0*jxc2Bd-hsf%sB`$#=&RaI5&(Q#-=F}qtRFOSnHhNaw^&tQ#f#8c%3Y4UwI<0s?lPv~q$8&z z*GVFo@`qKS4P?jNWSGqEqlzG5RfYkELK~byJ-v#}oaTl27^g>^Y{6wpt5#`BSA6%! zXc{{4njc-J=mIJG2~Hr)Ly9oTT#2|?`?Arrw75>HKPt?h1y1cMdw4Mf#?0Q$#{iQsS0|G%{vAosiAW(#s*W;md#Wgy#1t$(EPS%Mj zk4aG2Gz3^zkmUbgw!pgJ#${rf$y`4QIv|Bh9B4m@{qdvb;rF|Kah3sc8znv*6H42B z^;XecA%3Cr5&aV?v(`7cH#k4V;dkum4r}6n`Axg39gU{rqe927+10lGKDpX+gB%`H zoXK|a;uJ{Sn0tD^aOLA&rz7yGdY01X>&R<8@@4zQyWo;#$P%(@K5M<%_#TV8Ynq^; z3<8ZdeW~XlMF!3B=iIICS#qJ#6x7oL)!qL+6eT%Cs}g@}YxN(4T?x7Zv_{OuvSu)}NpOeeuqx0AJyotLLQq4O+m0K^8sr@=tMm~+I9d-!6r zDCd^ypYu!0LOd#6@|%wz`ILv>!kY;rLF=qmN!>!@T>+O~X&~k&U}zSQp7wLAv0%Q@oB%V_~5Q(-}YEgKwE9MoUvw;c#p4G zkAt{7`B@U9N323y>bZd?YmJCjkLG@I2o~1)Od7`+0M^6-cTk}An}X+oP;w?^s@RlA zAm@yS2ZubJ35O=#C;8Uvm%#4UJwy7>9#E2j2R}Z1fBK_NV(#E}h^>SpDJ zAt9q(|-e)T=s#&>=NU2ZX zYD5KW10qi51d*yT_T(BQzbt;R`nn|;EjGkRMG-w(0XR9RsqZEShvN>dg;q_}wY_6A z1JeC71GhYlO;Wjo8dY0nI4J?kJqN{mmj3(~jlm&Zb5DNpJnlT5|8(?g9-q18o^h@; zw&h`621^btrZM)m@bK`~--~OfE7sY+sY3r;RDU!ddIXq&CU(bt2k(9STWeMKzwA9e zzP%h?8M161`qQ`04==&}cqOyauBmp!*`~~@8i1G|YGy4seHS~f%D1j~BavezijT8=uBr~ z>FZWJUj5f)wk+Mhj+qH?KXA+-bOcw>*#m`0ZFP6^#8%E8ZUt{{tZ$V+RIJw&re9oi zUWqoNrY5KYah__qwC1CT3I9)vph1D>-@)AeFz8;8c=C@UWXI|7x&@DQ){~R>OEgb* zH$*E#zilmS=@(L}9~B%1&z%ta$F@HYGUVwqg9gHI&5A!BS>HQuDYg}GI55dp>!IrE z-S#LxPfNvAi;@7$rNaTWZhzB=FKa%bHQ($IX7(YQVEh) zthmdFsBi~a=A7qq8=F5Q0`N!i9EeC%Hv^3(PO_Tevb0&bn@8@@(!&7uX+R|UP@|{u zV8n-G%HZ$i2eo;qfn0qSJn#LBaK%Hdg>#yOT;cLB%*LjX+ zOE*2$R2si>x=!6#a`E)7`ks((z2unXu{p@EPv59!v8QBACYbXLK?}QhwVAc&xo*l+ zM$Z`$A0~1%|0T%?MkwSpBaBLr8lDU)N4GQiK#3EA;e$|M0lyt`@$|3P(auW9@4%y0 zuV!_{it!sj14~ki%u2+F*#wTIW{xoS9{u%ub$x=zp1fEX7Oka|=KtZcrpBe$)CsyV zw@M?$&=Kdcfcv3mgrqMfx0V_d74%A+E&>>}3HcP=qMI}AGP@yrla7*SZiNJ!Bj)>WQzUteg z2+E`2&Sk_HgAQ#umakkPK!5Kr@bU3l$gyqH_#&kcSi#I+)nl^kOUQF)hmArT^1>pF zlU*-5R<>{EHTwlnS0zGF@956@M0g$?V?zg2by8V}M0WfK*;i$D4V z25?^4T>5>oV8sh2;S3w&#jSV^GOm@pVRmP*67}TFu!t@`Z>(KLK>>qf*xb>)=Snd{ z7%C|-vl|Em1O@8+XK6gs!2X}`?2}P?yTkA~-)H_WGHZ&)J5V$>=<|#O9V(axu?k6C zPnXC(B8g_V{hm@@xuL7UN>1S3P2;xx_ghqTpa2Z~#h`#Pv)NsWF!BgMzr`A}V<<$T ze5(NQ{8hMdxwZ~p^>C+^^kv#%Z9xxdv}L-dw95lO4@L*42tm9%l_1`p0_> z$72#l*{7nX>8GQeQ!O+q;)mTozw0elaAqlz*!hMTsmq@}C5H$yNDfyq*ci_~s6`Jx z1u{es>@7Ydtuy7>VZ}1$-C=;cQ55AR7ACp9hj5J|LfzO?~9Zx1Zs^t5Hy#(-##I< zGvLpXUC=iFC%fLs0KlvSf?vi&&<&ddENaY7l#$d=tsy;Q)?-N#q@-!SOOfJG2xsPN zaeT=>q#$>-=I4(|wkk~SFvi_NHo4e;B=H7ZM4(G5Zg5G1R4POt&&}QXaAhNWdg?Iv z=Hj_cr?GyeZgOPp43Di%>*GI{vq-aWASwuiN+a#ULt^vO@%8y5Hrsw>KghPeng7%XciG6wQ?-BGZ;=Ac4O9@KVAG$loL_elad(O===+V=q7T=$u zE5t{oxA_OJ{A;`QVxYMh2m2MvYcNEmkIQbu79pJ(A$xQZD&F2-l{)Xz+^ z4!QB>;4lbNK3ei}0AXK;36KxDJ42(vy#Rqf191}SP20)m2DLxkX=*cX)oM{GX4OnZ zrtlAvPa;{{sEo*7CKi(4Pl{ z>A_jc($`uvC_W0HM+bwNT-{q4U)e}crKygT(Lm2n2jp2;+a#+Ah&wm|>#a1uKuo^M00>Cv-FQvc?U z-j%5PwHujqhl2qMT=nj(u7**5gT5sf1nXhU{mnlI?>4DtWY4zx_nh?2Ztl;!+1v>d&2U8LrLic{=k(-8r5+q0%iODq< zKHeO)N9}FDIO0zR?f&_iQ`fWCysm-1F};g|Qt~o_*x7=2)Ku|&K@KC;YdwZy#Ru=3 z?+(5UgGWwpboP$)3VEr%mD|gGD=;!#T)uRk$^srr-)bF|{pPkJGCKZEw zHwPS5vSf%sS&+|e@LXLcEeF*Y$Cy#go!5Ys?eS2EK$MyxQ}Rhqz3ZYYYE#wjdB%Z~r}SmCPJl4Tu`{rLNsP>AoA z&y!}+!y1X{&r0u_HWVceYih-ttUd)Lrk4k7$OX1|6mXL|dk7y#ty7cgT7>_?f-K%{3K>Va^4Qvdo#6`zod0e8)XyOIoo|Tt+8|n zLJlW~11>8R3%+#WmXcU(GroJP*Bg17Pn52WSs5#?`*VX(=@zJg`+E~^&yW~;EYj%~ z0Zy=-bS*7R413my(@oMOgH4h_#1Ujbl@mm|&wyH@2*!;90ZxM3|BxL<3J65dbYY-p zQT}FI^})g_p2D>&f<_QWxF~Aq)AObS?7WRlDRflPbrL%)?$^DJ9M+rEzTKP%Ng;$}FO#dSb-arq930 zr=!NfkAgby7C`Ku88;+OIy%C1RlU?6Ifd>ng>UC6LBJxwSFklMm z)2Hr4tQI-BGg%J!wIG85c?@KICs58S)ox3v4ffV$L9-P<;e=YQ;iqF3 zWv90B?5}R|R#V<~s8$&jzU<=X6kmS1tL;%ymCiXLKZBg1JiYu%^I}C!@V38~;T6}O zDW&SG(u{n(fQ81v%V1S1`KF7TD-}!V@|*2$(kiVhNxp!%7AO9_&xkgL0A=1>DD;~Z zp=NUR8vR$*{rC`(>hnzJLBF$u0J{S}CvEw2&1-k>bAXD|uj)SDVaXuf0gdRm=iSCR zjC?A#$D-N$%5#5DPb1h0b2sR-+x$-u-%dpOqqbB!Y(<$V2*z4#i}+v5_@t4IdQk}Z zGaym|N^ejMIkc);!F{14WwgA){P2SViC_%s;1sZ1L&WrH1xF{2@a7G*M{8?d$A43b z#m-JKk_sZ2!&@Z^B0~`{pA0MusFj1u!uQ8#ibI8N?t6atOBUc7J$ryDQSSIrBKN&Y zeO5l}eYk|9laS2DLwkayr*$JCJe;4I7~x45mlQWGz4&&fyMF3rbHrqtiI{iAwuO&J zmnlkWxoYg^?}aJ+wdpaIy{{QIAcOJwOyJcb@1zEW!#=oiuKgwBzR91B;(EWn)vLsg zMi?{WwaL)rXP|}cbWwdb{*>eNE6>3a zOFfnxRLlTSnlsE;&TL#e@cb2aNu>hRkyJw$5?em~+VocpSSyRhG3;(FFaOieZVNd6 z=5<;<5`MS|f(_hr5pgI)7YAXouWsxLJ?uLm%!RIOQ^rJKsbg?A;3k@r@2JCMnca1O z6bS701Ixr4%u)}^6!;SLVv<4N>1}z^sa|s&6MAxWuSKje*fsdi1K&2qu@;sJ`U=;3 zwL1A=3YDJY!mse{%rt#X6z-`O85Zz zj!(iGl2|@fSohd=vY&?nlVG)|#n-_ifcph#?V&D#jg2)E9dmY^ytl|%xYW51KO>6% zXT3Ag+{RIx*;U2`-d&{0=iysAo8gppXBqICDm4UDIPkGu;r)_5syu;4tfX@;E)j9{K*0^ya0+fY{{ePH`tN-2J{P$y}Uf$4ds$JS^ z@K(Tf*awTZle1Y|)uHQuW!WaOYhNm>dhk3LnH8HYa|7$cm!MRViwOzYood|-U0RFc znG;2WUnzh~eD#W&ET-;fZoZ%k6a-*TXO-@}O#JafL5JKS7mAJj^XI+Y>1UqPfz#Ew z2gijWMRN!+#}-2#1v}MKfO7 zi6!Yc3ousmKREN9Y+QA=f6;N3jY^jNZ9PgYIIv0{AfACejD1f26a|jmQxPB^*2k_| zbf5LMKn+9BytO%V%vlb`caM};uU;P z8EpyL2pP$!73B%#%CDCC`4B?(rbk;qt&Q^pFB6(tjxEMPB&AO}XVRj85v&v<8fP{3 zLRaQ8qdSmYIxoiNJbkp?{>SV1+-Yt5O8Y+=^%LX9)}iz$=TPrt*aaE(yc`tMjDs*1 zoFp=A{^bM|3Pj~F!HBBKM;cR$(W*g>f8I2a@{;qQdNgO1e)dm3<;P`}PyYEm`tvu@ zK@w2KP!Mv!Q-ixx{znii0>?0y28=F7#0|bTn<{^S37F#Q4^fc2=L9VMUrGY(nT%A9 zkNULQ(3A`htP^=`x}xWiOfoW&NZZ>|tMKV^?9L18irwCDn3=FGRB-okS(NJ#BV4*| zFj!FLaFOvMhQKEAkgbwbY4`8X*XhBP#U7#fmUwv{0?T6DRpoPL5x4Cb-~|E9n$?3qy&Xj zuh8$^^2bY+M~5<^^sKLkoeJQtMveWdPdBoEbKuKW~R_Y}o}Kezxt&?Dy)^KWtt6 z7*hXB+Sh4-fZs7YX*v*{9rS&C=U4q6XVq!KaiXcWwu0Ucvrd9*;tJ{i<2JHUB73l4Y@P^8$9wnjAH5YYLS zlXIuL`0+}*dA!_LuZpt+d6rj##FC8q+7qAJ?2NnqRFzH&-J*k6y++bf~Pf$LTzY9mNd zkNIfmQG0_#_Ax5;GoxNBS4GH5W?|nAc&C_2?ceY9y)G~z<7r1>ivNZ1hEKI!U*Y!$ImH;l3NCy-O zh%~GPu9*KcAHrczFhHOru)hL zOOc47+{lZ!%c>=ZlqPjERyk{@1J&ENr!oTfEJ10NzJ1Z|h@gH_e7dxE{N0aAMofV_sm2!!gTl2lFGFiA~hh2-I_$m2fK#lt0d-Zy{ z)1}Y_UupRs6pbc5&y(N7wKRUU=o=TNpIdd#E4g^o-J)N!|5+oc1VsSaDg*^NY^)NI zF(WFWufzE9jBK@Kv!K%}K5J(CcIDCc@_y+$oqj%3VPsxT&Y5}LAY>PkD_iA1eN{aK zB1QR|he_(Y52O|q?8C?*WPC`2w<}?OD)+N2tMigUx{So?MnG`Cszj7Eb@m}7ync{jkx(6%-CgmjTgA`Y}}7x+1y#3 z^p6&GuLS!6{0#UZ1S->Fr+h!?vC*d}mPP4;wvVdXbOgPboN%vukIxx_PvNX=3XcR;cqL<`68OTlZ&W5g$^=a_|u~0Y$_Y?zj z97Y+PgPzq1py=x<&<>H|e&$4Rv=3zzM?$`GDffa8i;b(lZTF<#278PEu#-Zw-H&P}1Eokc1He&jvK9qh! zqdokU?FZo=N+Yqr@OEba`B=)GYdbS9#tlrq^FDfbK5Jfny>&cjZnN;yIjp<5e0{BX zNWWkjjWxb}Q4stMtQL&7&V!k~XHYb~2?*st&!kczePx2^ z_h;Lo?~XD2sj&#ozE38g|G^i+q^Hfz3eCc$^}pY?rWQ*(C7D;kw}1a=>I}C$bhlf_ zKY1am31BDiz`=GZ?!9o$wzOv}w*OA^=r=;MFw%e7*vV>*bMwNU)Jv(mGVE7(=XqTW zDrjxX;~V4ahTK`t>x(1Ghc)8^ zvl3-+5FE&dqv;4bQC(IvK)8;V5eM)KTb$WPYI;3M0*B=qZoh}28Z8aG&hxf z#F!t=C*{bN>cExiV8hA0w$S@N%Jpz^ptk`Lp$__L4xO?#yINPC(z{immrSzae+{k+4@pYLO} zErSOL%0PU&yK2k!*HYWllJ?yK^8hZ!a1D#q9m;|=$$W!=fXf`UdZh!e4EnySUFqyI z&c(q2uhR7HB>?y7ks%<%aPmB2Op}WVE~)L!ufc$(6DgU>KixX+WrZi&bIIN z`c=-joeA4PG$O1WQ0mYsqkUv2R?T$=CFxK+SQsyUOxVz%b6`e5 zK@MyW2(TO+ZrrZ?_`~ejTDsHsN(B37H9FO$Q-z@DLp8lCSK$O+l__A_R zuUzb)Z}r5E`y3fL7A^@x5lIgwRoj$k55X1yurLG+X^X*;SgRcN!s1; zw42tR>kq6x#z~Y(#HNwLx4zZ<`+F%KRJYEpjm2)SI#iEPF<(ICfL{O}1Qb%99u&A| zH0w*DoIOUlC24)`8uyKx1^oQBr1O^vV8Rev@H)QQ!f`3!At(Ka1GQlFXwkWt_Z{z` z$=5AbF%AAE`UBcgq}cw2DfiohNm-ocJ@ZU7D?gP-(%OGcgpB>-pCzy+!bNX>>R@&@ z?z@u@A<9nObCsT2Q)G!t5rL8E3KyBt5T#0UjDQ>{I|T&F?k8z+N7rJ2?A`^408W>c zmQ9*fnw2(Ei!Y~aOW$sHA;RvIE2>)>m!KB`C&%VIr4~j+;3UC!h}Bem$SW1Ak&GP+ zO6J9Ve(|Q};XlFtuvN$Q?WNESp;OWL)9S+ZMSN(d`RQKPN!+hnhx}3Ttvm5Y19N{r zs_zX?w4UBbss@gY$dvrPC%iHKezjOCtE`3Y!21N=&am{K7Q8Kz@yqU?kpKk)4;Gv7 zAt!-X)6C2a>^SmrK12LU%iPI3Y2q$5FG!tGz!?J@!5LvoylwATBr3q5kIbI79j^A1 z^pnxFw*ju%=zCq15>I?~`t9<-86+B9PU?+y-a8RhYpPXK;1XPx;R6btT2oFWXu+tD zU&d}X=Xo>=1ajccNU;>L2k+o0?{2F15`v2EeLXDcag9E(f>Jrj$6w|4r{8IZg^G&A< zV0HsjHT{GG56L@rdcHh}?s70LrA~*Uy2|vWftI5o{eVjmy|9rUi`S1u`0ySEIF_PBu4micy%#k<^aLU|{N7vf6OirfScMsKn ze-S4_AR>q&Y!235@%OX=;Cb z>$kqX#l7Rvxj$b{CsZsecCWP^ZXU9n(qxBp&o_aQ@YERU-#(L1WUS4cz{}IJmFPB6&W@F!{i8~=(J(U)*;8%*U638(E=qP*0!lIt zFv!00u@leIc0$p9q<(+PotV9%_V6OjN^3Q#ZC4T?=m zZ(%>fok`Z#=4tu&WuuxtZ0vvYPLZ^Z4>>BKpYsmh9Hh_WeqDi&3P0>_yDNM4m&o@s+P-q7&~r&V72srZ6`6;CB4O6lKqQyufSOlbEljTC7RM7f_DB@JNn0cU6n6 z+H~p#gN_C#Yc(x%+AU3)%i<;l&Q@$fO=IVTntW7Wlujp&ID#9nD_T*k&J?K}Y@l@> zq?{Eab(hPpH~G?|^)-0GTrnsPZgzEdRxAhNCNl&lun{8PcXWWm6cza%{b2QuF_l2g z2fos>n!b(%aQZYOY57UNe|)=n3cc38_oRVR1PYNvAdnQW;rI3q4i5A068S|b={WDq zBPiF5CIi=cEiBh%E0z9s(Cp1EpR;M&*AEQY^=k|GgBJ>&=km(>HqYhccl2SW*j0UL z%6uTHdMyvIO@$$Ss&acRhhsG#+{;qCS)0Gy+*RgQEZjD!O+76o7e zF~Ogr$q!|m#%Bg!N#ze~v)HiFHc;~1#uA2vfKKD95; z9SXa1rRqX+hF_4q262Xi)g%i@b^m)_6fv0runLr8$l(`wf%~{aiY3vG%zMm6Kk`;Q z`0GDy;??$>R5)Hb>hG`kP+_uQeVIJm=&Uj1e;Ah_4(=T*_;r5gOCyxd-#Pv%f8a>i z?Tv*3mq80w0dmMNYnjTd$Bxy^m>*p-7Y?DvCT7nFXHR-!vEag5djCcEyKmn9Z?;uxn)rOM0&Z$DrWCOakm~ ztiF;G298>JMG#oTXK+wZ$Y?XZYay?4P)W33t>jgPR0cn=|A01U*w;->bl)=@p$NAmEoiBZxtSY z6FRAxIBjVA?KN=v)vGLI#l-H5YW#|PjeczDQ$-joj6B)wWpxUEZ#Ak^V#5E2`#SAm zZ%9q{oe!;#WO=MVR^Y$7%Rr%k;ridAWB72Uj)sR7DX*lMsqkj`DcT}Zjvk&u2nvwa z0XjPt0M>{cfi8!wc_+08)*kDxZPoWb##=CYNacG4S6Cj>@#X=rGs z5Y=qnDl`_a_3o){O}DR2gbW{t&z<5hf=GxifxT|Lnl|_~4hzG8>jY5$!{ET?KmrfS z>kXO1n9CpyLtRQ`?;!&9i+HL;&aD_ObF7>fynttQvN6N#5yE<$Urut;yXDLAB z0MKa>oXO+LwhnXm3xXB6h*2vcI+X?1!Y`sYAd(SX-B>P^6jbx!fphMFh$s#E0s_%h zrs`tz5})2(%*@`Az*^@S*U~xMEGbh_eZ_WMh~ATaLxC=yexoqckcg|3)Hq*ciquVc zez#OVBTvQ(#YbbJ4~@V)gLC2f_^xgD-CkPPyIA??w{uAumoW3o|SXh;W2#V>>UV*RIg(~ z2g13A&FApLv7eK_Qj-MbwwPDHWE9<6=1$Z}_US#leLE$f{5|Y?^6ikjb$&mUzI|=? zYJ)X8Cz=mK4T0Sn_Z^#c0Feex{3Bl9xW*tj~jYu}cKkHo@|xeORE_GJj5RY=rp zI`azOJBifjSPiz_>klviQB);}TLAM1E*0EG5L}gkdRr~$@yeXPnk7shhy$o{orG>4 z(uZ{9k42g1aT;cMg*f;;6NP{(2}60*{Pw5EA$wJNt-dREM;|Ix_tZ}^c;5c~sjXY2 z<#y?kj`&C}^X1?{Z5k>F)qhb(3A7BjeT$;==TT8w`Ic^H6f5oIf zJa)RNo>XgTV{`N4wTZDiI%LKox4?Em)(=UD-bMS9BOUU5nU7y^-d{+<}V`iuEqr;>Qt z*5iL-o-CD|Gv(uW!Clt%h@l@jkQBX$_q0+0vvu{|)=Ywuu#2F>0l~|T#8~>jY8hh8 zg%DvW8sIEJ!g?W*qZWVN+Wu~-@2qD3>2BW$TI{ADpiJWl-Va;5rlR}c!yUar4Z-?< z3m4muu7(^=pY%=4R(wncLqVt!P%SqUEKG+LagJKgJwb!ZlQ4gBwXl$m@>3;ALoQNQ zT0!whbnc`kG+^yt=!1n{V{i8|DNlRv*@DrtDi&r$8LTmc2||2pyU}_nTe*?WGS*=w zL}_zl%_?dPcuLC+#aHs|1Ozw_|519uu;z%-$#NE_v~W%_XDRfrmM352CT44YX7*0S zF=9YK4xt8^DO`j1wU(}mYX8E#{phn-ot(R~%Gc%&M?;Ujl4;A?rZp-UWvDk3Z--=@OM_JxJ`-uc#jjsN%XWlosA!#h)yk3*HUv z7l41CQOuH}96mSJ7?$|hW>_{ldw*lN$K+4A4ug?THVTd07gu5XTH$J~*j=W2*}0gA zxE#DLWeEw;DQ_`#tcilNb~b--hS8DMuXsWoTM-snezsd zU?b-=@g-n8r__v!pSfZHNdsZ0GJ+(Jzk8n{?F_q+!}JbJw*+*1N9!|0!2(l13gW-YUaa)O0>?xBK0wwSAXjL|`2|LKPlo*?7?LR!Bq@85o> z@}WD^ZO5e_=N<$Tfy5q)4CPch!Ac*u^`kmIvfAzKOe-h%LwkuG?+3NFH|;Cf-JpnQ zFq{?3sE1_)ZS2$z)?5LOY~vP%ms+042TpHDXFgIqFz{skuZj#qAi?n}h8r(fJv@95 zs<||iiwYU?o2uJKq$etDE`#&EDQVoZlNuU#lXb#Ggx80!3mTTTpPp0SE16(UqQHrX z8B(qU`=QzDBm*Qita%hwCNwla7)E_|*Xw~(54n&Fl#CLn0XVXoYvemztGHh2y|{4| zj2xIP{Ag`hacv^$(Hov$oodBe{LcSBRTdPoK>1F_SYBmCFpa(F-t0|F+BpBtM9l{; zS}2&v5FjQ`>6Z~!ru5W*jb7BVP&9K}@4SQmjHc2Tr`54;)X|JinGV1ClG421#tE+& zBfa=6sJW5NmK1G7=9WAj`}tL}ak5RJbI|^1#Dr~H1S5Ca0c(~cQ}>ps8&$oB#W&9Oh;w5|Srl{UAtaC+zX`9bux3d(5>&long`fJu1ZT(~R z()X4m9uI~d+&u1BIr`3__E4Bih8i%kG1TJ82)$m(!lB$`tth&eR_-dk3YHaLAI~4Q z-#cv17`O{vF7-{tUonlEro5^Cw?S=XR-&=o6v*ELFAdGuH-55bG8fu^J5ViaV{Pg8 z^QfOzhZ+iMdnDK8-&^Huc3eQV5S@yjMu)rspX1i+<2)b6~s}jnZ04d@N3Kde$%yU{Z+J}s{Q@75kL-y zkuPgZ1QRuq%WYeBgj_d6zA*?w9V`qz?dsasf>PbY>qfch{ek-Sn=g&Zewt1UdQTB-5$L zZEpfsva|&&bi|h9Dvq_2wZdoWzWL$U%!8|!O$sf`N0a7VbYpb|Kt}SSGZwHm3)V-i zdS(~nRsVG%DK6;{tfuZ2jxn+UNDjt}K&HG0aZ-V7A+xlA7C9OPLAuE(4ZKH)HCIW> zq)M>bdABu&{$7uWDqSM=H7jRj+A7!#GzS z#L>p-%(n7k-tgJ=2`7KYuKs8tV(wsQc33~FyEfcaNMb`JlpyrALc+sy!S_x1vZRxa zFaeZ+K^zBQc&u@`Wc){={?)Eu%Rjqk$COf3EAaOlE6i-I9~;w9K-kfcGprG-i$J~} z|LL$bwVD$2R?*Y=r8M#B5BCG?S`bu;lZX{oG<_k1uYX#BLAI zhe=yl4!-bFe0bVadEb){k;qHAt;1?ABI`bt!J~YNlNy8rp3i?E9~N#w2BUzmzIlq& zb!H?;cfR&b9SrGQ_}#H}HD0aORwctD-r8$+u94e<;82{*C?Y^gpa#1Ecz)oafVMQi zNfuAF@97{DXWYH`0A|TF-R^^%Zt?0RZsNOI-bV--jnTjNYMCY?$)hIp-(CfmSXEF_y`?gk+FH-#a6F> z@8zE?HO#8W=TqE)`!$j}yQfFYnM2=RwZ(cOXm(4Ie970tTBfUFIy z4IT?J!2cm5qt>nK$_S7q`lj5qa}IpC{JUc?d=xKKuYA}W;H&mZa{XKE= zdB|CGph*TcIXqQitm9>HLUZx7QZj4oJKKVqtHKa$rfB96vhqe{N^y7xf;Mg>_k1|1 zrW;fo}K<>Je&nWNb~qopufOsDMM-l)S6*#(v_l{XPKS#WQ?(?5`quFw?$ zN&YNS{?zO`0ZpmNtZEVI?{gv9m(69ptaN1Tk)MKvZiI9ci8dO3Io~v@=~X&yWJU6I zHnAK=jL0oL{i3JOum82@VZZu}-K2oFe`A?AGUh9}AHE#>`1m|un> zqf;?woFORr5E>RE={|m2h*|ydT&Z1P$rB6a{Q6qYDZ&z9bRoa^b47nKk8E784LaX zaO<}Slu|cEQIP$LHGzW-;{4@ng4YioMG*0LDXTnhJQ~`G_pb^Ef@L}Xncn>jH+X|a z={wilqe>|@5uS3k62fo4KltV=9Uo-xEQ?ObV}k2M;I7lMD+7Y@nKK8vli2rR5h=2l zC)aj<)>$yS7fXtcbTFrZT985g3n`0twyPazezB2`+*H87z#G>m_3{J*2>*pBH=Zy4gM_R{Ds6G;y+w<64 z&D10m<0YNCIN2R)fEGxT?>9b&7kHy7e`yLV^YEpzE=-nv{LpXoTGWQb}R^>et=`+LBIeRkm{j4PMzqm2@ZCdCq6ACC2fYP~ttE=7YYb6XNDm64|q17kAk=UUpio7QMa9@f~>= zSvy1~(%yo!5H!rcXy=z-+gU1*COD+sJa3%xIR~#D7hKHX?!ndu&_TfG7ts7owInU> zmqA#17KsrXubb<>RVnLikZLjzebFaCu>=JKKr{f~73_BAbY=*VKurWdVBZ zHl8;+ANoiHf?9_h9Q45F@;yAm^j=_mR>Shq+-Tusn)hYDUsg42#_h|>N}IHk&kFTT zyZmVgi4&X+mJNlDkY-}x{`eX|0g22XEh;Cuu$BK6Q1Yf)=(s;&e?sc(2}*#mB0;e zxzqadyCfj}5tu^W?t6*=O45M$fK?9a+TjePP`-~`tBVa&X7^Z_u}0Q#D^&77ss{f@ z&L9MM&S3F_I|~A@=^R}rbaVckKE|OoAKj9{9vd9|MHXC!AAe2L%sLmT2R^aYES+Eu zBkGzPR5AM~G4?4tnx1w99YTs1-d;{KqKdIAuI!2|@A^v)%nPu_T7~Clt`5_+?8+b8 zpqYBf(OGIpEPYh!#o^{TrHQnZ@6f@Qahu*!ka6cms$Fb6{p=WwJOa0}5>&_96h7gw1Xq*Uox2+NoG*IDIA3@qy&8bwfRcvtw!g;3 zKptwcQuR6?Sv4>2TsqvGG;hdXi-sml%%ST#&wlS6cJ?^`%4yUj{D1F^0P@^t)jzJEuo;^%Z7JgXj8jT;ZCr!rmUHZOOKoET@V2yg=J(%LX7F*?9Hn^`Cc zlFrgAcW5e~7;$ASKNWq9(+0dw^GH<~Y}JB6<8CwCAVD|F5#VwVu2-l3Cx)b&{w%U=K6SFeSyvc+bS7o_k(% zFI@Wi-;}(FdXhz<0gJjvtklN*NKwI(Ts0r_q(5=9jSBE#9PV5wgsNqchihS@o?2FK zsX1-k6E~*!z2Lt7&Fy!zbFsc~u$jNXbzh4V74;Fp@gk(JW!2==^oh7dVVpxvcki$Ft+zFN==*~Epw)o z%s_<-HHel{M#e1*8S==>^XS30M^{}kpWz0@(1s>=V9Qd?qH2z>AQl9#?E7njt~s>6 zR~{K#HU&OQ*%&sJN>Gbwl=+tjh4%~`SO^qV*}(Cy&aNi4wJDesW=^llXIN)JWFy^H}ymHZ!OuIvgtHRKDsXE7-#|gps)#ww-w>9`f*X_P|>e%^OoH6*f3RfWmN7)Rx*W3( zshjs68#Mfu;nj%Ol@zGy6h$gvVSfvfR?pUE_s$;vyqVWxN(un`vaweETo_BIS>cx_ zI1r4Hts45Lt=cPl9CktueAHr-pKggjV*h8%-4Ck7>}YMQbPB0T`-z>t`qYjSM(^5- zGlMkmt{8c@o7MsInp6iJ58JU`qvA?6y~c*OZw7m6M#rxWnJf}o!ehs#EKx0{qNy)x zdtc_LCvA3i)W9SXx!c+{jD6Wh`yRgnJp=$xu}A}B_^wY`K{K!Zc(q5-0#-JxoFho= zm{ZIcqQq;diO7ATl&BJ{o+#Lg%@U>^B4E4y9_u!=1w1&w8&tr~!i`UK{$K(aKW%|G zT?>b+*WIhv@2mZOp2#0w28WLKeLs;uILsGkqN5~--tIOCCg49!*VD}dxpTdZ@r0Xf z4tb%R3myB2jX#TJt0ncT@nlIG!y47wzS4E7dUOLiRAcfNEAyXEbeo%JAr?_-+}wW zsnJb~)0>(~UQGxjG3Y%h0ZD}Cw(pg&|NfME7DjWJfIaRDY42Cedu+`BNILkU;70fe z8D=RAQH4ejktzVAu)B(8NkUs9$fvI$(6(QLl+&#SZvE`+}|34TAk_?fh zWSitDE@tjbJ9vZwmnltUyFUN48Fo5E;`NIzDZ!d_ZKO@V=64ldLC{aPnxc!%qu`c8 zHUO`+QI`(X5GK&i9x;M;E#A%2*R9<*sBac&5Kbxl#07Q{1{*K^MWM7#-$rN0mX+K^ zcg!^+`nuo1Z{Nyy_uF$hS3jF=Ewg~&u8frmS6878pCPvzQSC{qbHyRUzu7AI5k$(_ zo6JNELC_GdT&0kWFI&Ikp37dhU+mP(_G%%sDB$n3aIn5JGWZ^ess@jxzjK+L+iWkF zc94rYNvrc+DP0eU*IWx?hUE~2(B=%Y;E>adDBEq5W8F%%pv)A^8t<_m+1^FJb2u1~ zx2!$yYF>WYyiC`;a=P=DCiQaa`y2_A&w)iF8$L@A?(Jg+<)D^F?fF{7^&0i%q0>dL z{NcYlsm)uY;B$RbrsqU;vD4d2?tR&_Pwt*qKdvsm>Ew3EpLQ!ygl|BoGq3g}FAK?Gs;AF_{HkGS<8i*nmXxNJ28sgTUM0uqv$8kctml zt|T5s-}a234gDM9}h(-?fixEx6lB-fGHomr^m* zygH;(uMI}T61WD*CLO*#q#!5)s@RUK(ey-il9 za$L3m=(N99!C17Rk-w&Aye@?Y*baPtSXzLUF(IO7S!=J4M33WK|6D=OvMOq1 zWCWC}@*)E?2@0Ot$yE6FANBaHUcPg>Nj33b8~0!Eys7~lS)bFULT+=wGoy>)aDNKb znbfAIuJybczRo$oIZ)zL?ETaFUtou(CUM}ikb55LFtLNqED|FoM!&T=@h?smddc^Q zp%ly%ad0eepMR7FbCY4g1Z*ksFWhM=yAtP5-49}`xY^yvNZH4AA9j{L$bPSn(SWp1 z75)1UC<_6T;?`pY3BL=E)CG>~V^j+_=EfjEr}?)Xa6<6!7%F1TF%9EkJ#sdHV^r<7gh z;i{`-?oj^b&xZdmCg0{6j%_`k{gcMyn9ZT1cXygucM_fTq90d9=F&cky?L<9Vp;F`9^#oK?k?l-y1?*~@a<@ms@1H-GaM>w-{; z>{3g|5sL;c7AqoOYPLxrUxf_#^I51T;aFNy(MqS=;FqBUKODjWV)(*UldDhkUUU(eH{jxPTia6gU4(aRV#3n<;Mis14b=PJ%( zY;@#bcvb7OmVDEhV0_eglUgsGV4!zwgs&9RGCua1gIhmp>#GuVXkqAaC|`+G>IQ?A zWTetPMNUE#5ozYr+$Ueg`{j{`GabI`?s(@TUD7<7`NSQWbk zJnSSL7_UA~F6>`7A8(hO&fW}I$?x#XA5ME-wk;Mq)kc%P|DSOf@H%+kD{?RGs`>2( z)7x{w>gNOeUi&}CpI$Xw?3^5$PpAijEgh<2-hA}O{Ca%hFlzGmXK}g1EB~RHX6w`e zy1)aaE_3vw!3KV}^WDDGD|3FopUM9Hg=u@|ByTUBO|Fy^tR|e!{I9E;_q(r(yTreJ zo1Lxk+H_m0m=>R5E-x$F=oI*~T-bC?Hk2DP=e0MrK5vx$jY9+ACU?*{|3-eEXHTl( zb88o&BxmLJiqm#4LuLNP?Yub@{?^o9yp04Z@n-Agx;WX>k9V0lWCm} zc=+i1Rg2J!yE21iU`T-Jv8-j1i=<9|I-samnJ7YTElL$m#FC+je$*{gFx#P!MS+=U z+N9CHD}n)rV;Y4>!XM%M{F8g1-e|BO(kYR&8ptQXzyY~1a$vOWqPnw^H#)J8$**Ut z+R(@#l(jta3xm2LQz}V(7MR|z6u0qOU%~TgS zIc)8Q%KsQvEe2ZzUXTGu-|^5NW&&Jsu&1Gtk-s+FXpVMkABUD)-7)rJK1q342ak9X zM^zfHpn%YO8u|!TiYm)iZmg~k_3{PS*dPom&xfu6XOudm-K@A$6fHl93}@fxKwIh>Q< zek`}@bX|J0iQ~W9cYSSgnAUEX>c6(`DdWBJueNYtyk}~QW2W*7`Qw*;+nq_i=U2OT z<|S)q?CISf*L>CoX+*Of+?CIU#Jy$ek9~K}TRkr)sDIO}poDx+b4qSLp7>2AFYK@T zukATW`bMm-6rMvd5K z2}iUPe|6h|gc#?zzFMyZjwPB#$vj{pGjgEHzAxQ+dKl=IGVqc#q%7cXh+qdu}SJ%I=md^)J5jgQ$ph zoFh>}M3dXEO`YS(Vx7Yx&$q7yBoEEzH;Pk_+Er*fpLk3cWh4ivfWa~rBn}RR|1c|T z(Z%m_B+f;CxhEdlo;S0&UigiFr2@ZALa!`}|_u(hjaRT`8Wi_0GVUq_o5Ov=fr1&CsEFKZ{ujUKVCHZ1Ata8p#M!`4?A0 z%jD|wv##>f^Y6G3EdU7-iPj}jclZ0KlpShXKlAP^-fLZ|gSiMM z(7QN92-*+HN~#&l`;b<1h)2LgZB6vCf26l@q+Se$KZ_?Rxf+%>-k*;uT%Rhg@m{lA z*zmljC%MdT-g$8o=f1Pw?gKCRmpKg2z{SFJP?{(zImxEY1}g+I1x=iOT@muTeVK0EuM48yeHPR!f=8LD>S`6R z;s1a{J>kTIQp<_c?~x<&GzrLygQ3M>;}W#D#CFM@*_fQWpHv^)Md^8-q&DufM2&)A zH}?A1qLR|`0(xa;#CYAEF7y+^=HJuobzC~0$`(`1IZH`Uv0x3d&cjDR#!=W{ zK$K1nkLalCM?1IYX_(j5iBr{+e3O-@rRG+=x9GBQCT)DiH}h@W(kKjr`l1-hM_W!8 zh%zEKM})l7f5H6;SRRvtL=$EWQsD7#ha!&>bjww{KsWrE@$Y^9+`LAv_VWZjC<8&7 z;jNd{-D2aUr&PedjAbMWWL~jH2-oC9S{i#@$Cuj*(e{~XAd$?>h{It6uXbrM^)!#O z8WZ`8{T2E1uO*knJHFNa7wy;2=lo`V8SYHP)l2J;$oOp9j%J|OOxGL#Lw6XH@EdP$ zKi7hi@Eu#?k*3a_&Y$>R;xu2=mds!L{`9>HOwOviZnY&f|FD ze8KDD>HN)C^U{Z!21Nh`8`s6<(T;0TDHMHB1iBYfk^oR(#dTzG+>KCR)5KO}!Hwi9 zR=&&fby$}!nP`s29u^Wpie#~*9Zl5kXQ&F)gtCPJb`(^&H}-9X%(vA&w;#XT2ZLQ_ z1#QP$S}Zg^ki%m;KL{0IiBKsQ>r=LyX~L}0%A9C(p2B!*I7Jm>d&JZCS9&VGz9Dlq7%*ZW%0uslk7@f6dC z!|&nQr@y`agzGCKeU&BgkE`uF3wz@_#RHZnm+x-Yho&5Tmx*;7eAcXP{*ynikUu!M z{wsg**I@ppNL`Pr;Ds0~lGM5aA08WTDexeyRPaxpwl(C(z1tqYEJW?W!}LdRmP(pD z?3aotP7x_+vb_+Ey*)Xx2B~6q1;dzgd5C)9Yf&uXFl|zRrj$CbI3B!tTi#GE6O)UB zKWUgy6Gc6%RZBN0s0XZ#I4za4Hos~ID|1?o{q292f(;58t|(P}k>{I>nCZoIR);0BwR$TlR{Z7_C zwJ#0O>7+V14o!>^0}gm#2-n=ySA8Qbg|^P&(xUG#mvE6-*%kVDW{+CIi43&fPa(om z^lcx;I`);A&T)^y&ewFlD3;13%ZAyVFV_~gXzm>)gCKr98_?y`jiX)2lqFp~!Wk^ley2~Z&|RtG%mi|>*tt1x-dE3;GexB7MHn>K8WLmc}z10Qz1ExdVd}1 zPZ1Ue)*C&|W*mcGj@*~ub80;9U${^xX+AuPIWN5VN$t0=aOHG9VJ>d^iVlzt{YA;o!%0q6=1|)w|Q?)Bu zqgl%&;?|XV}I@v&_7@iFU8O5dBvgdjBsn^mZ zas|}wE^9u1Mzt(c#6V8Mw_PG5bFsH@@ZDtW&2@L$ z)l2`Y)yuZ#-w91!O+L#G@)uS|y+BKU@~gh-$eE#2i=1_spjZPNJ0pWC;$=2HCW6xJYDk%aH4zWDiUaiw#`2ykEq`sP zjLghX6=Aa1z&9np%!aZMt(1o7{3~v=dF$zkVmts|PJ0hhCtJv@?oq|Q$4+-{Z^1EU zN!OrKj>BgcRx!lRD6$4BD}lrmNi(2Rx9ng>3s2>0;02N%LoFj-5G$e-**@>1gPiPX&yqc@?UD$AvXk6@2@}yqsJhSK5Ag2)_ zFC@=?hv>0s=@_fMA&Wn=MxtmlKAatAZ21jw3qb3oP+8)9-^5%DH?|e3BwW3=<+^<}`te zXNQw==;niiozJ3Xz?UjW;0JRMBtS5jx_aJwadBm&X9`XRCd>#RD8vHDj)Gzwvwj8^ z^QR1Vt=b0}TMt9eo_dpG*?jWeEJ%2$0+(nm_zF zs0#vtv!4s&@#5Kie#Ucyn{IECOMn9Y0f5Ha4V;_Pq0HQ$2Ys5 zJbgE^Gz-XJEP;5OxLDAaRNtxC=uHjuZQoIXDuw|Z-w1AvVO0xNTuTC8Ld|%MLO>9- zrU143+Q(<1zTaQkYLU&j)lDkv)%|^N(pk==9@Wps^i9BEs+WMD#YH88!L0JLjNsC!W5urIetLpPRAbKDBa9=v1X4O=P z^G}#CNxU{|8$1F?ca2%qQ{o8~AYAYY;0H#4EHpHW(PDl19`V2p8ou<}Yu$U{xW3`$ z*}-5D{x?rOKF`$2Ks&~nK_R1fVzQ4A&2S2RY$%k?`MY=8YUqm!0$iVifkJ#SDXeq>}pfpMq`nSjIyKs9;0261)`{VckEjO} zVcJPN>Aj{eb+JHoSqeBR5F`>4z(?Hn1N%qjnC`?+AsSGaMo==q#2DJORdsv)rgrkP zs)Qq8pB-|uVIQ#EHeY=L8W%(FhYY>#ldj0 zZ9Poz_9~}Pu`*9MjV0wkA~ho|2{U#I?TA?&Gxiw%(q#&eF2yK@KE)m#p%9S zcL%<%jE4jt6@N6sb7|EpwreL>tM zOdIW4Y~|Q&ULViBZJ#D)JYv&;A1_3bdhu8pbi~}(H z7-WWx7Df$9=1vdNT$@h3{r_f_OofmEoCX1bfN(X00tCjD&dj6UW+Ne-5JjpT*=ic| zG8_Yi1R?X@2a)sQis(m?2LxHuqg{jleSCJW0HaL%f=`>C;|?l-ZS;)|L)~}U$;nPh5fkaXW=HtpPVlCPv}A&0-YLGW}Hs{?wsZOFR$N^Vitw+q4i16q%rT!vG996F2z3H6i};X;n(#Eb)nj2KXBQ?Z}+Sqc!Zv zUwkg`h%4iJcao0V#2iKw@k1yx1JMRVApCk9WT8fY0F*9wxx$b|KLVeMP>nsJ_TjKD=6+$X?rZy05-axDjt`w?W5)R!Sz`DQ zO|*f!`^#K%Y-N_XDcgxKZ785ua=)5&sIoD559fRsU`i7~y5qZMuG4gK-|t|eFE<*! z&A0d|na*k4rpEp_RNbn2sQ8y6gjE|vsomwI2!1ez5CMJ)4m2l@%{FP@Y%lT}76auRMB*i4fCtsR3{{=h17A!9?*RnIxRd-g>+}^H_n(VCrCL+h> zBFXeUVQnZRNviUdQL~x9DI<)#ZUbi{x?~@VBj)+Fw}0!+hR!93^IEuip+15Qp+KbL z0;d9Icseek0#c;g*7>JAuMs~=nU<_I8~A(Ru>_UEv9d9wA3*Ftl!`gAUS~&sIc;(o z54&(@DgR{kY;xc1telG{8wH+3q_??L$oAWA_GHJm$E*G`2K+t?I#*wAhWT#-(r)K@ zHxVXRFRqW6#Q9z|+)VNN{-RshmA~OPT=2Sar;EbvOs^C9s7pvrR}cpe*H|6E3vJ<4 zkHkiTCG+DRSTn$GDg%!`v{TNq?1j;=0J!ne%RuNhX+fUa%-1?s!9jhysliUPL3t#b zNV>h0o3O-7y&wVIIGUiR4e|||Ov%S>2XA^Te%A4LK8?Q^ASU_O-UrqmA>>DA-hG|Q z`})>J|4QS-_352Wr}4`qpj@I<;{#<4G=qZXofhR1x|{BQw4?(Srlx2_X)N^mEUh!3 zL1TGOy2;70u%deYl0W8Asd$e*tQg}su&>%Xi_7ot1=OC1 zFP2uMijme81XUTqf)7{5VB?F8;*r#ha_;_HSO!7NV1+<}7{Ga#{^%|NZ=h}7gvaYw zRtX9sFeDVqR5>f}K^2VJR&A!jOui_>HE;CG)<;+@Clu2OBVrY@@Pz5#LC~1sK>`_S*tje~-qOVK2)k{W*|`zi}jp>%g*ME*{pEv)DNquwUySiK<>00e`v|7Q;f2{3u#T)!uIMmXAk5rPZk}F77|g(j*iOs zL=!AZ-v*0r8#k|YR%@K#KFDt3X6kj6{SO)EYGmT=v$Som9-;jNg!KVtBQC`HD=C4BxWWhgI{ zOD*F&`V<2RarS&7bAD2in$v9f5QXtfgBPA*?A9C%;-Z8 zaXa(x#M4DaVjR&p*ra1&l+q;!WrRoLvD9sm%2N`PwLm&&sFSFsEsDevkQg^-L?Kal z5l>iw(*=uqSq;Y4!M%VCU`GIA&{Z4UlhMz$v?_@zRv~I-HXXCkb07K&>;UdO<@y0J zC5~0z`0e5P-HRrh0uQ19XU>p&v+d1zu^sc~Cds@u`CELT)sXK2-TZmQD2|TRr04d~ z1O`;I*2L&rHg%#_2>!GcX5e>Kmj;{`suOQH5TJQ!~>b=hA>6DB$;rwrdke6@yh+$?$E7 z8CC>Bdn{ziJvM$BuGH_p+xo47qsZc}7Y%d%ML&vLj7xC)kg;*oGq53;|9%bi(yJKJ zM5@NUgt7@*^I+?%rbD1$CL##e#dJV2M>0n1Vk3NOVBe-T*yaARg_Hd2=rG)_Nm0`W zt;#3vrN6d%}4Jo*UssHwliZ@(n=y*mime;2Gt(Lj(=`{UW zkHQe#Lm;Og!mzpnUgn~i>KabsnXYfncWxLKPKy>UG9SNqfVrgyV1u3{;5`HcZ&fI2 zm{Gczeb4dgHU&;S0=gBNr9o;J({g&p(z(*KQbkjI>Y-{$onJp>jG!IgnoYGieuTOHkUl-XD(af>KDU0Oh49@1h(Y0u)QkQ#k|+XvDDCH2@YN>FHj@D z6Z;=}!I0$f9KYRNx=F*b$vj{POZ#}XOA?<>S{hyY5}S_BterAeI6@OyW*^#Krho%b zd33q0Gb5j%dAV5!kQ*Wt?*<)oR4<(D>G&>(J2i968qFHZe3+5upRbm6b6;vP_dMBl zti(qF&tGl|+-wLQL>UqJ+QmQH`5Q@2^JT$8<4IJ+=xbxXB4nf2TD{-W)hjTfPV14~hkk{i2DYV$~-`!yCnS95$66Bs26G_L}WwB10!KDG3X5?1?S&Qng4#cj?U5GXx>DlFywtg@d&a&wJ zDIr#!%%Mb`j=+MdLVkD}zq$OuVRA5V616Ne_hpXBkv~<=-B;`zIG#_tm*@45pK*Of zBDg9Gn8C&bzIAALSB`V4V{Vyu9CfI;_{^)0vZCdY{j->V_f2jJ#EribcTofcDa=0i zwfU$3#b9IJ^RB#J44LRO{ufpVE!IYn;@uTt{s;$~B?R5B{b$NBq_*!PX_w2}fq{+f z9s1{9HtiB+BI#OB^2@$z=DgR4!UMh~5In#Z;DUm)qRU7|iari)j#BvzPx+@6P96~T zf*udR7ZgO;rMf|yRM}uqnasG-xHLS+Na!q8TVG@Js`xVxQg6f-yqk9#*+HX++cVcK zH{B=qoP4HtQm2ce^eIIAu0=iTo3y-U1yXGyN_%b%V2 zZe3h`zxgq$GutqxFTPS}NV`MFZyA69&*nDs1_Q?e7O&PU8Ua+e+LaWVaOg}0dnLoS z?JwIFzk0)Ap;}KY%b_D{ueK&~+QK&9vTxgK2K0vr==&6DzSQ>P139*(xx&UI3p6= z%_EEQls{ZiDv{eiOnSK*QSUwTIz_fdT%A#F|99tBEvPbsb4EciH%HPJn#!jxHPu=I&pVqv&| zc0jcP7eWCkfT$uUAyal~bu=m|0z`_4Df0jU#9dY~ZMOICAzF7KRNwI}I|zzkKTvOX ze1IwufAR?YODtXx_N+@2kG9NxM!qPT34yWpehKyR6xIef7+^`-Nj9 zP2Niox&Xi_L^yf+BMpTL2o^jdBLW$Q658r3pg)c%G|=&c%`sD(BcZw1$A zxwPl&7k3m1fj}<~{HQD>JnL1^3p|X9p5T&S&4O&oF-?Ugs#q`*8vdnk7b6_e@u4Gd znVRXma`Ni&P=5x7m9O4>R5iGT6F;Gj4-OD~7D{Yv=GL&$-QE>Krailp6`|aN4jb1o z=P8fX2#y%p8jsrQoJUw6p>!dY7;V-JR63Y5yc4B2ZD;d4*fl3<@ZA>@YY#52o1Lql zzxqLPb_6W3JY~Ghn6wo@I2hIkY~av57W^L?U21Pg%v;p^Uk5od^q!p{MG!tv^8-t^ zqP3i4bL%isQ(|sM`O;?>AA2$b$}D;?y+S!^s=%onI}rZ^R)8%WLd+bD{pmd_s*#b{ zj)v^k7!7uZZVE|ZPZ5Mt;bqpxL+AmTSP<^}jL@Y`!#Trou`h3$WMpUgzXK34LX!Xm z=t)=z(->pP_#mz*O{y+8dEb-9(JyB|(&2cz^rX0oVr#EwPfxC0<#%1hjC~T)E=aCg z0JZ8Fe^Xypg4}r_<7Ir|No4NCVC683j0)@j@kk^EE*pvhR|}!Rr6d?u7TIQ|oHN?7 zJ|R)WZCMXm$cKvJc$rF`5svmk7P=hfs~>bd`6?j+S_)9QI}6jYl9%CDsrUHJ&GEHr zqUop>7H2B??YtOI)Tjt45XGcsChC>{QhV|zT!!IyPKb_a1ee0};DMCXDw`?h;O%~( zjJ;T#N|}luEjL$aDNx8Xe3xLTD?&xMXJ1oD942Y#k+3)w=0MxWDKtB_v`)d5t;rep zoJqHB1} zt%JXiWs4R@aE|J#gp2ln8NkLPg}|(ti(1%|E6F;B^^4Z@LU>&S@ZeA5%PgMgsZjyU zQwgdR0ulo<9%(>^0|>11AZ}0t7SP$kp@bAf0%j1?0LV)!V2c|;8341iuJKIW4t=o| zyFBgEr}168SRa77#4ka<&7%NPB!xv55~pC(XQ?yPvuStd&0_hqxB)cJR0G9H7qq*1 zU+!!J_-{MDIkl6zS{M044l;InOI=sQP0yY}RP>4-7_nl`~R2q1^6DnJO} zfbst%v9r-x&~xK!-@2KB&>`~POrtYREEhKwq0*Wu+^iio@x(*iJsiYLD|3RL<}3cr zcGKxkgXg~M;e?!IDv>aI_ucFLqYjs@P{YJBupBbq1x_^0x^y*t<#S(2$GAq-d`On~ zqsR?;j3Eo@i7YqkwCMCoEE6;nfKrL*=M%B2Z}!2cB6`d^TVRYYb^9g6x*Q!Q@L4r= zfl$<)}wUaM7u;@agBsPOq_w6|9an|jt zBFn%vRR+IdHZB4#qMwauaNaMD@ORZs_I+advet06xm4GaapAOV$g9Bs1Uf1JXabIh z(tWy-S8vIJKiQVTGqeAD*WRn{@21<7twY`2$09JuFhWTr{gs<|h#-v+hEzXCV@V*V zi~=u??P)v@X9Ql<`w#^v4vYcUvswFip>Zd;;VWwscbs?O-79c;CCb>+Y(@ zf7B~gv^t?eq!Ra%feN8`WKrfg=fKxylO!|K4`PxsD+|WCKn7jLJ7$2e8>Gsr;k;)k&D>-GP3`F5k zkDk}fh;vYFWVd|K#=#?il)l^ujFrE7+;A8r&Y%Qo{VgRX_to7fO?Q5=Q6ls5=5Fiv zM7zm$nc=$aRo_Ydg3w z#^nG~ zP?#R?xPS$8ZaPUn^CiJBMC$aZ42v^^%Dk{bOw5>!cJOwWCz+E(*EFfM8 zP63QF*ChF`I)_fL(spyNfuy{!YEp)g;oihcq~-g#mcI%l+Y5&gH+OCZna;d#9^drc z{-;Pt%rb0mS*>kZR2f^v-X-;8sdELhPx3Ruu{Kx1RT0*mMr4-vQj$%y3 zscPo215;5poAI#7UV#vz?(|Y3gMk6Gvmw9(2}>?wO?C|yJSu;AUO1L4|1N#|*LU9Q zm7Y5crxk%AB}iA)0F1qiVYqGifkgnas1m=u%DX1^Wo86Dk8`s@sJkFoCIms)0orym zTlHNLZLg%K?C3lkL#xkXn66CxA{P#uPbuY_FGfh_W+j?-lj|31vPnN6vRGi@*`S3Y zinLY}Di#&@{#s5qnz$+Sthc<+5v+PHN>c$g7y~o8nRX#X9!8*l?VI#CJQi>q6rl>h zPX~2Njl^Sv#18*TYV+8cxtZ!>s*!u`?7hF@-!?w9E`Dg{)pp*x?wiFp|N3Sr^)jTb zi%;G%cfs|{hA`B2v!8$f&Wrg8juPNM3{_&yAiz8U9;}Sd`J9}$&Nq8pZ#EZBHd$}t zoNE1FFu7GS@(>1Q5Z=*q6K85TEAc%RzMgDemcJ}ux^VYD0x<_A^+1YLGV`OgX@)f{ zSg1u4g8M(CC$M4&Aj}^W1K#&q2$tj@&7U(4+ip`Sw409b7;^=Fyc&{`TfC z8g3V5Q|Ovvp2>d4gU_%=?ddaeU;~~t(!t@JA!z;+WPq77{L}4%iJ~$^&8@};4*&ic zmG~~0B=QOqN<+Vdo(geDY%_GTPU>_^iLM+I@|9?;rAs!n5ccSEOaii#kTRM=9-+t% zw!uoLPE@<|-k(98rnSZdIX|1RWwZE2ACG#eG~dJC4IKjPj|iGgL{!H8bY>79@)DUO zYCcAiG^>U#@5q~o)T8aKs+X#(JN?^2C;lFlNr?g>%CC(6EpszD8EV8viGB-NwOZh8 z-stgvb&(^kzHKZ{G9R7%*c=&*4S`3s(7#GgloFXR(#!F!R?e{(iqf2m>Z#a_pR1#b zgR$YRWX5JZMubjSXd-DNh1_i^5`pbJcO=|| z#Q62~l^leh|MhlElWugWp{Z6k5nCt|lDFEFalVe7_`ZbITSOX!jU?m+ zKjTxzr;I=r7Gy!3t%VN6w7#mr!FT0+K7s0a+C}9}>g0`+oa>Gc8y!ixe)OY4QK}e@ z1M8cjo4K3bJ0+Jg_>v7}OzZ4hrB5Y(Uw;RZkY_JhEJbHcOB4H$W> zmPQgc)e6QDS%T&!_7Sz^ur?@Rp=kU-TV_mWmI@dyK*BPy2lpE0eg4Rw7wj~kE%C`& zc%0h~PET96yGT-uAmFeHGM9MswrnEeO{K)Ml4q;y^j3VLoKG3d3i~RaOBX*Oh%Fv$ z^V;jyj{OPu4l0DXn-&AHT&Hn@?!W16+mpw4NH*-JweH%oOCi9VVt3?lOuO;_p9$AiB^p^!QhM3KYWlfe_FsN8L_A(AST`DrgcZ1)dFKDfoeJVlM35fVNP?rBxe z*;t=mq1+*{@;FZ1?57Fhs3%+P5CdnNb)?N$x%B45dPO}^!up}0m3hLQrIvH+MpyTp z3dxSWzyB<}29qboJvPpY6L!u!9XDUOk96;DF`aHw%Qm0v?Z6_4ifg?aBR@dK{ za@|_;LW0POL0QPGKV@F17pQG#bGSUyU5Lf}&75c?p<4k^k zdZsxhjSF)v-dxQW&RuZaOe9=x-gLiN?5H-p`Z3S}#L3roub9&*!c@o%`dI>PwCvRE zitF9K8_}E54)WBO8RWJ(PA96FCwzg8CXQKzyet^+m>uXSY7`>swGiTZQNaA7And2@ zrhWF<*NmzuYHyGb5dfrns*Gjy>Pr?%BU|RTEb-FJ!egvW+4uR; zN)Ih9E!_>$O3I;IKtNhRO6uZ*AE=rXHIKAuG!AOgQdMu)ema9hWL@?07b<=axV>;@~vNnCB9c z%9Siw@XvczHP?f0LbfAG51na372sLziLpQMSTW*o)=#G?$-Z>fc>|=;ZiZ zD2%e#artPx@0y9vjBcsyqUiX9_c`_U)hCM)x)IZK<>K(<-`%lfveJ|0j5U^FoyNGK z@6aF0-8b7aljz|Pdrqn5 z>$fLNjW+1dylcLQAnLJt#dFtvx$Qn#%Axu4jQWDh**~I0^yy7#uf9{>nYh$O`r1af z`2(_EJLY)pv%rxXt!LcE=ROy^65jK^rKaOGKvytX=u^#1NreiSQE1^W&q~Xu)?Ne&V`mSFh)m zRY6ZpIEmouuyCN|b0`Tx(*vKAS=p$fwSdBHkw5_78)wa{gOtu9O?J7Vt$>39wh06( z7*SO$N)I6z>H`V|XMH08*Mcna)KpnnGKmS>N2OZVj{4?LZJKtpsduP$9eWPQ7<@Ha zA6mQ!fmLsnP@6RDhu5lmYnKXw@RcKzVgJCSg)rYZ?zM#Vs;73__t6EkUP!@0_DANW zIzH#4HsJgzKQDf z5_J;?{3tM0Aq+;@I*hxs!iHVx1Edm0F8weySD4I!sYcIcnKd4bAV4F=DH7UMiQsDz zuNtTFh@^7_L!wDnH>R>SrN%QyjR}K^Yz!wP=S`aE2Fr!bVdWKjjwfuwt7T+i)$tN# z#32&#==7+@7tyO^w*1A^2@|uj)m@G+XK6J0U#tqB>C9BiHytv2f7`g*dN8`icZBZF z7jVlv2FZ8POao+wSBX7yH8%O`YvDcNJ`J)BGq#N`Hz`Ws~@~IYA=IEGp=@YicAh=De%;P|l#>8`@z+AD!_!oX2gKj_^zY=fwjHy6OyA{PZ%# zi~?DA`^Mfk^yFRkCeU}f>3-DNiGcfgyS0%bvvm^40zdX*0g{kFMF8|W-9o%kx zbzJv>q5C%-bA5Zg$jQ7tWOCE(35tgU1(^ai zVckm2buP`P>41=KmFRL&I*J-3l>g`E3xSLlpbMZ_$*n>|z%*0N3$6wCo|vNrmtKkG z_DzWmJjev$1zZ&9J3f#QIKBe$^C~Jjd=9v2Cwq10cOSbY-X|p+U#bokmng~9=vZUp zM(f*q*&+V=`nvh12wuWo3wH@gCYgfGb%_GChue?&p4CO`7H)baBs8D|e8qr*08khVI=jO)d+R@W#Ll$h^LE-nVlMe4_k-!W9S=A#nGA2LKPFz!ry80Z-alswcd> z)99(xN6?Wn&q5#H6zUL9Z#?yOz5Et43SSZ4!s4v&^!zC7TkFbYnv3Xrfz8 z)VdKM`Tn`u?Z^in-)9Pkw&M|u-EUc|)pbXNQpM2Y7EZp-Zwd`IzX&mi^$avsm~b%y zJgD!E`^_&}oOh@0`<_ixG3qZ3wr=P{1{*a39DMSqjucSk17Iry9789l(`8S8 z4$7Z>O|RQO+L+32=~-iD%$+dt*#Aam-z+s1;!{rMG@J=agKirQpi9TK&FX2QJ%=N$ z!pdn2iEmLcnVT?*eI&a3ut4%T$NB$w09g&thKl2?(~ld0}!;Y#@LBRQ`Z*lPEV{ z$U?YveUHIgmTF@kNy;ERr+A9n<)*B`@R@h)@N%1-Jg&>`SB{K|KKV%LUwKi1uEaJvlPm=Ue4E`smDZ-8-mA3QY?}((s?wwGcbtR7;ekSxYs!t8$G#2Y;HX@ z)duAQ)73nff~Z(B5{-T(DqHXF>guvLJX&c{-2)#6HHm*3Ai^S4QpjSJavuJ?v!B}| z{;T^)^dP)!GmFzg3C-X>j>mO3ub;O8C-zzPnwn&7Y8^ z`i^ch|45az&?a;}W3E3F4M}&RUs#d8;=k}>YAtl}9NB;Lgy3$TU4zr}k?=FGJnqdn zhVS{DPiVVWM`GkXM~1F)uU6#`-2B?a{W{mp_yQpa^?!l_5Fk|*!$^&C=nk?umrVoT zC+|ps^hH3Un*mhHpJ8M`ETHfaFik@&TTPGsoDOUqYV~X)3$3`qT_*KHp5&3^I>^on z+F+EB;v;Us$5ca;mgs`!29M3S7i8U}A4S`WXw#W4Cc6$Q$#n5^SXGl8#Aid`H2vr# zaC?H*k15TMAX43A*-D}L}=l6H)ymxK1-;c;;t8&MoJ~`BNs`yWn5Er1mLt#Kv1gWQtqU3&8GPPKH&Aj8h>K<4SYO(UMDwaW>8PFwd1tRc~VezVA zm`IrqI1z>Gof*VAz|&V06+=9eISR;5<(gvjD7LC$^gV(8=>*4}bgT4h#W_xD4X+hlRliPP~9$B-DQiPz>wIK|Yi5aCY zEbRnExGTFS4?AL_LAlRXqx|vR^s}$KO^Y4eYiJV?atcw-8lGIzdpK8oyO=rhIWXbJf1*`EOEj;};0UI@10uGLLFf}(XOpqff<=_WU~?g;RQco}NNBNGHjC?Yu>I*j4CP$DQ8 zSlhWc;nom0D5}v(zzj0_Z7Gh0YvsYX&R+$+2eEH>LiVM8U;lM z3oYDaS6IR|3F%m!f0U8%lNv9apOV$>-`ACEILZ=rWxc!P_;ZEKyR$}W>p5|6jmOzv z%-%m{{C-4E%*k$uZ0?yAt;X%FRuSXhq9_LJ2zU@&W67iGP4apBH^l9{zBsquO&d?O?%FG2Ius$%X6QzxDx)(-)KP8ojc> zy$V5iP$&$D3PcwvDMCsu?e|m1cdb;KRDS;*r{A~K)|VG)J%A3(Y&i zFydRvJeg6Yw%1B`W>a|XM^6~fp6IlGx4EkKy9D(N8bX1}S(I>KasOANfHPec`l@;T zT`w)+qd&6oM>PICuuwvokWB;WtV*J^}ES*NS?&r4d2Xo5*1QaJHBeCrC4E%*xcosY6ohztFGO0T}8v6a?rLMh1Cxeu;rHIm9kxowBvLIoN7tZC2x9p&$2gFsvmS`RZp&ZUpUy|0x?Po|pZR&_YnaqF ze<@QJeojJAK+ch=M1C*UKVBtLC7((tOpR7;tx`sB+3I|h`l7pWXZ|2!=XMt09lSXX zzjZt2!`Ffv#9`#-J#AjxtA8;VB%BKH0 z60kD)0Eq&M6FB$56YO2~--OP=oq1M zFk!``1eYIzfY|r1lYgH~V}Y#?0~cD4N=upvL55+<@_jcGuU|ViqOTb--bwDTBL!-b z`uM(tF&;TyAO>X>NEYS0nj?RlxhuEle0aI>K8V~h#Z|tp+^DfW5r+jT7L@UOP8@R2 zhPJ`$^xKHd5cQeeQ+7q}&<~)vp3qF7?zYTggIsFbSbiCCp1XEl1E(PD)8La_HQvIV znmMrnYa9e2OeM_Xvvo8$v%HoQ=AG*Iw|K=nYNW{s0xUxb2yZ`3^CF9xKrIJ8c> z+2mK>#t-OxjT@j9_R@tWjd$MY-&w>S0N_j0!r)>&;bJG@{IGS6|AJB8yXPW|i@aBn zh6j&b8xVF=QX*8He_r1)aIWb z);yl&X$%@ICyZAC>Blp>>sMpUO{)g-Yx}bdt7d$3B*3qNz{6C71;#e8(=lxR0BZrD z?qQ!JRQ_at0Fx19Lx3g5;!?vhlpza8uf6l7n6acX1eL2QlBjl%XHb;zI`((6wJpd3 z&$>Jgzb`#M_CDAdUhwRpZ!GJH@P|Z7^0)!TQ&pK-h>%SE@%iAzFjY^b)*Vn}1;>E{ ztqE|=cR$Xzu6&>C$`sTJim(B*#-ktHAR$aq+XJq;T*4JKq0 zWxJ^ex9;rKAss17Ui6*b(EQ>2k&`Dj4gph~`q*z|R{ByrPg@@!Q9$uVAh4`cXdr9h z%D-@~qFmtFXOR1A8SA*Txp%m@P$(=+M-$f@J1yQvi4Y*C0(hnju6$z!3 zUo!=*=Xk4yw7P&dTRR}mMU}S^B)=?oo$A>0VBJSKOk4$R+C)Uxs8$8)O}wS5q)_k- zFdx{(1z(uu)#KJ5R~Ipt?fj>J+$kizl95LT78yjLOah~z)xX1jI|hcjKBfrgO6)W( zxM<^0FE_Mpd^wz01uXX$}v)>T1?AGU3rzAC4~>O)g}ajlSoYv^pMJ z`t*M6N07kbpak;2CpYk20*@*lC0J0f(AaMLQ7E8GSQA)28A0FP1zRc~Zo@eg;lO?VP&RU?Ym&Akq%m@Xy&YaYOvg@eJy6X_YJ@eJ z*z2zhLP8d85~v*$Y*qZSJcdS)?H#}|L>})w_wjvSJ}ku12|%3d`?>=WQqIU5YDbCT zyo3E#vYYB^bdkY&dG!X=(l)lka{z=WVIUC@gjtB2Gj~rd4z7Pcvh)Uc%TGY6_d|5? zvRyaT+8E<;`TZ<7m^%pEu>P3D0`BF%om!XVPxxhL-6d#s*tUq<*~zs(WuPE@OPt8j ze71H|0h(+fUgz4mj*h9m%8?I5Rp58EF`xAMyC!+6N42^81lX=UeO4{=`}>bm4Ug?; z_mv&L-RS21YWvfHgqID7NuqVCQYE&g2F(G=iU<dwIq6R!yGB*<1KaY0f^?dm?y7C9w2f`J zI~3fF)KBX0kmyQ$WW}yL6=X4;XW?eRpEha!2wX|w95AWu=UXG8qZT1;6lMT8nNTxr zKfsDvy$9ui1#WaRPMcH z5AZhQbUDol`=IPzZPrkK0kgl`@p33pT&CSD6PKLxXi~e2*nCT zmSe2Ysqu6~;l#3u*UT4_4y5HgMi!*%h@-DMmkoTs6I~X!em7|SKI6Br?qWVE4pAUb z5MDd>v;Q^kcaHnZMq^x<*POyTS zeNNV8e47z_iMp;1t7exBO#DOmqGG?Sp!}poAyZgqkQCH56x>v)BABmOoA6&<| z9>j*BQsmN%e2^q)twy6`Gc{0YP(n6%mrP#_{5JAqgo2B>CardGQNw%AnWZMF*5&gC zx6N`=lUTQxSG{gmulc>ZB&6pWt|n7TOlnOc9%CR12vY_Or2jM|99X|#gCZa(2ons$ zJObJmY*27^f*lCp{5Syr;U3MJ#CD0B1Q`h)50Bv_2uU`-Zy8dCTWf>&f$?qynj$tw z6Cq0^C3GjK+aR$-y!JTFXKA&q(BOC?ih3$8*cx~+?uL>wO67NSp=;F=7WWE`8RibQ zwraX#tpuhNv8OOOl>gK%I&H2_s-d+`En!`V7gzsI+#MVh^k{zErsoUugT-Pps;9-} zkIj{rKNaW)DD;(-Z^c(0a4%nJAW~#!-ZQzPeSLRpgPVt@Ui_#xur3hQ`K&As!65LNzUiMge+=ELhe>{v4eg}@QA>J0>PK+Vw_1)4x#2n zAU}an39J*C{R}X1&?4o~?4-kC#Nl7Mt)^!mJSyt#51Pu!elFeLoxjdI%vfV5_3krkfjCM)MA z$HYOa3R_s^QArX>*VOjI*l8Qu=sBX zVuz|U+u@;K?}Sm|X+qg{OFP{M(qy$e#-6M1W)eCN2ainEEJy*uKE z)@qQiV4@DcUqnGpCx=H~ngF^gZmj9A2yYH9tSXU8|c!z!8T6hc<$? zdvKCyDAnWn@G@yqW=k=t6j8bgM2i*Mp0>%m%6g{k#fKaCtq zyv<2k6bcG(fC*#?1_Kla1b?MwA{XEG*y4_KIKywN+mxS zrbq;m!g9*T^Z(hnbED>dUv*{7?v&T73A(bbeprLu&~%=#nP~E__F1%S;HCGwXR6FmX%k|npa!N# zE}ir!bD=dL2(j$9w9Tzt=fbXj>fpxFu+y&R`Q+99*#P?LGrCTHD;Ec*$RH@VV+nw4A(*weOw(T5#x?#XX-0Dk;kbI5k$l03#~&W6 zr${(7>rV++~h283wwn$_enK)Or~@ z^HBuuSTxsuvC|ygqC2fP%tb=z*=W!ee2s)Omy>h>G=bDKehQdR)%Ft zdS#qQo_N;sIXy9+)vu2=#70~j7}vOQ=K&%7;OQ$dTXO(F2i?n0USGE+wMh*gr*m?6 z!=e2BS%I3cI>V-b(fGTAVnLBuBz`0;6o#u`us!^|T9)RTvlVpIU#<2Zw#Zh8(j45~X9LQFOh2>Y5Mr@l7ZJ7M}0G`lV z7N7BOLxZy?97c%xWctVwRS@56trjykd^)_-?Y=Z0sln)7c|>G^i!5fNv*{mOpWZcg z->u;d=?XQ9)R*|H@5|2gV!w`EtG$!sbW#=FalZ6N>bQsV0Tqs@>EnT+1!wbzrCg`J+k@5Scr%ohTXKjm2AT zX$Px0TBWl!i=XWD>XshisB(!;873|4|40K>4PPn_&c_#(2P3A(imf<^sp6-L>=q=X zPiAYu*?r)5MLQqcd^R!oBu_#x>89dshpU?}!jBhXGe;6txdkN*X7wlQtLr4)e~t>% z*HUwKml3nE5~K7!|B7Dt8D_9!QkO($!Pn6HojqW^lP+(4c&WInIN&UtkylF-RQ;vMFbmY-$6!ORD<6z=G5$jqhdC4L>F{v#h25zqh3cVAG3OgT}!{6J*NhI$off$sQTWZ5p#-x_;?qM>xk6A`;nAY5e>0~ zw8nq*?5%*;PF%?4Q-lKGG7p>kxsrYy$?vgpkE%FO87w$));IIx zyQX-P(bBw+)r+cy`bIa*nCb*o@SuAIY!C-1Fjmui0|0n9z%mmm-g-<`6U0g1ILQJ* zoMJpdchz=YJuAk!9R{#5pg0%>3@w101g@oU3({IrEs3qfIav+O^&M{2Y+Y-F!_uvwr^VC~nAi#Lez(_v)i?{MgiBrG_nM z>=*X9_7XnhgY%#~`^Kh<1)Ch@pz#Wc=z;O(d(liro)vE3P_%W{3oid`Dir9LXe=wd z;U@PpZ^z5I*j6%pKp;;~XudAdzD$oDcT&5ptRAvOa61%?LUV;{g4(Zp!tQ(3E< z%{pEQ52hWj@_QVZoQ?B0cHO@!OYogOg&2{>3VB!A2fI2K?Aj}Y;dkSmCaMg7|5mnq&T3Jzp8 zg|O#W8+13Mg2an`M2^o3(MlPmi*&=T1D`q^f&utk#ap6vMjD`46|iTiTHp21&pMhN z)h~E*3k)@ukOK$Gj8y^hw(@f2~?FW3P^>yI1R1-%`C=uDIuuT_^0AZF5J9o^Fa*KMLu{ z0o0UNR>$dwCo|(##46d{RSa__7fI3v(oC}ZJGb0&E%*(lJ}bisVpxktQX|tn=XYiI ze@#nrigoaT!UYlvM(qX3%GRTVtH@oyzJ=4Gpsy$ea(oO1RajU=6}6T&8@IlbbAdZ! zO#U!s3SHy$s#Hv|= zZ&gJGYvYUmvJGZ|pyWTD0+I@-TG=uF#JS2CB&O?7=Y>}zdi+_ic7QDdUn&zl`V)Hw zdo0Euk;zV}WF5Bs(|N<17_CG@tfUD=|} zF{&UuJqEu6MxGrXvpF-aE8}K9wAaqiP-!QsZLUfJBLLW`NaXdvxLYT9C5a3o z&HEt+X^kuMg9Zun9z#=c+dgLo&qV_<3PI#OV`TEn;`4`b#}}VNeAcEX5j|WTuA+%e zwa4pj=UodfYXyEs4yCQ%#y2D&;1Gw9#Tc~$HA#K5xg_bek>Xp1yE1c9uij{VKvq{& z7;Q(zXQh0zMiP&KThwO4Vve%+V& zn>si&P=OY1w*Ta~-E?{i9F)5)~g)^7dr zi|?wr7aL1I&cEAA8N9UVQ&bG?gy+DBKi-Uo-hS>j?F=PX1cb)ZU}Zo87^H~@;e`GJ zC#VvNAcUR=l}j+r%}y><&;LNYwVJB)-T0Y^Ahbk*^B^-62amA*R5|xPXC7C8WyIuY z@LM1TST8P)nL!S)8+)JKty>H}SZAx@=~v0Xf#8-35Kc}$)^iDUJG*G`MFh~35>o_| z_Nh8U0@q>qnfVli7;UBNtRmniup)_2dJxv=^@5tOuGJw?eWZX6AC*+}{d;qQ_ol|= zZ1sFy*w(N9klGdpt`{{95wtUU8{RI*-$E`UTTgq=LB#O*s^%=Z$?fmQx{|%w0JYDh zcf);o|6R_!SBK2>OFhQCiw`5cz1!;-5_9|i46eSrpFqmF;M+H)<0j98MhhSTf@EiE z*IN2s4q!;_6APD|C8iw|k4FncGacNYcU;3Y@fb)jsYxAI$bd+ooJ>3la{)NdHENAw zgOIEN^S(IqxmPK6Dm)$6tE6rg4s2{$7F9@%qRYbwfZYVzzqS}S6kxy~16aDW0<{H- z?=SZ^@4D?-iIW*M7m7FZVg&AF_p(H&a!6&n7S37wRmnH_SzSc69tiuMwjPEBM4L3! zJ083|yN4orXf#{vG4A9xd-<_qG}m<`H-5SdjZm~!V#6bk)dachVM@W|VWg2oYWNr- zUAYv}Z)B`r)?IZRU%gVAIG{9X9? z;IlG1kO7R3pCfUVa4qowcL~dDSO$Rd_zK5%1Z!Zx*=X$MYF?E~j7yKu;o}2WBHe^R z>jmwaS6;y8qWjObL2j?wbUMK$kx-IksY1WaLf>Vti|DH)=975cg=%RJeewIzq-m0$ zdmlZ|sd#^XLc`GHX)qa+-tyGh;Gk@Cg+a#1`ZKTXr#tgU=S$CN3OjQ4M)&BuZzS&u zyT@iF5w9(*F+ikE0y8 z$dxQbg`SmfMWkN%9Jfr!yw|X}8`zmatavB%3*Fh6-E?XSV=ANU0i)k0(dDoo`pn|u zE&sNyx}01_pg`W-V9zCdP3(my*IhFKJ(}t=0UE(ObEH4*`kz-^oO!eAFtbFQAW?D(!qGgaeT)k`n@E z9n7CvxIl$WfT)W>Df|&};8Vx@kD7zyzh)V|(L$eGS3sbOBIjnj&0S|$?C`!My2WYx zH1$QW3n9E9i1||1>35;uz;*!h?}mZ4P%V2I*Tc#CM{2jnHbiuL=o1p6?uT_WQmoZB zoivTF#8pOW)kc-b{iOF|ZeBJ{XP(eiGH~eD-6uCs%M=vYUkp+yw%;YST{-hugmv8%ljuZqX@#cmLLqG7-9-9 zHts7Uz5_HSOQ3cB%a=Bd`s#zFM#jJEvHfs50vEa5-8NN(-UC^wtQdXy7 zgG~p1OF5E8)aU>cJvg5Sdn#9$CCittZ#;%e#+87X5euC@>%3j#1aK&m)c z9269MSbzrDC3xWEAcQgi)}8{FB7_2c0S(m7um}G5x`;b(t_(`eb7H$ATpSD;g6T^( zHAAv?jfG|nW>ZosX>S`folG8k&-ooETnyg#UgRDmt-1fSS=LDQyKEl4x#;bfjnQ>y zXDO+o64Eqd&yyCng`eMi-1z$?iXHdM15D(PSIADooN8+Z`MuB0eK*d0&c6$L`%cTU zDziWe8P%g}a^L4_&zDVHYFzXqwL?6QYvhlTefJ;wo_cv7vd9K=2t&xFCBwON90v(K|F!dj04ypY11SF$eV2yIwy(*tafi-DAEY z^I5lHXeyH`eoGgj7i^(7Sq4@?cV^7BT6PLJ3=0G;0FWkk3|E|LjhAI>yMN+9#!XTeFCis$YpOfgiFCE@fc9R-|5hBl!yhLZ2!2)p$ycfJ$6$atOsUx}loaJ6`D`sf*XJya`K&^B$8*<3 z-hDf%S)(+n9F6dYwD0KLiBnX3_W7*}7d(KKT$#ALJ#P2>Z{V7>S=hTJzjJ(5bzh@+ zQ%u1tVC0ycjh zZ^+oP%|a2`oNJx)K&q78`L|sU`;+v`rXjx$n_a@bFq=mEvlhSY3s7~vaf;TR(YF>* zN!^xt?`b9JbQWc?w%Wb^4qWxm(fsmjT>;m^Crl1Q=3Un^M~0g@ zD}NUOw*d@Km1cJ4BuwLXqsgI{$sw*hA6XH7^NN>W>cgvZVJ7?S=v4u8WvdJv6mVZx z?d)7Mmo_xIUEPh+brs(+u5Ug(Tr=|S=`nF@SWb}7d##M~>RFLvl_W@3Z;K$nnlAq~ zFwqba28=coh;J((+4W(-Ukv_a#7&Q;q`jJTcO0A_TUzffw0B?R)e!5hua}?% z?JS|3_<)ssTRz^2hWACo2A=7~%2Z+%H01(I^Fj8PZ>}zwPpHzT&JNO@y*A&JO?mFO zm|PebpEN~ZW{2yh`VQ$$phl{m+QuAO>8-vBLzpwIH`20)HW#4D3G{*mLZUbq01ci2nl%wEzZSFVU~MeGjXzwd?{C zrj}ow(WzcX|1h6h_+9XO9LJ}hl5861&J7*?QaCa%-(*D8jCSXuE9 z?G$-28giRN^4~z-dXN0-6p>Bp+{vi!#Zid&#nYJ>mqfuVk*}!Npr1t};cIfviwVZZ z*W|a(JKsr@8p!{4YdU9a-S25W)%y7Q9}xU~@+3JcO=eEgwjak5JN7>fJMupY@4w4T z7z?HXh4TSlO?|ja|5h2B9bZv-IPK(XfjcO`N+;N6YJT=Pymftx_aLm}hKBp+m6twK zJC$P0V6XNPM{+8Va(yjpjz zNMqNh2cJ%e@h4DK_!7${8uHJ3O3HVNL@Fd|aOlw;mYXb!mJnAJ22>2^pztYC&15zY3mkusni&SFx|b3 z*Ra>HP|a8=hV$1Np3Bo`WX;}=P39LR6PK@7eoR~%**9CW;XQ{`UQ%&Jb!0isJ-vp5 zJ$tYN{3EnjgA+TrKt-gY0xF0N0uBXa0qk{LH^VAhz#VS32m~4rk>RfzN$0%#s?Ur6 z>~rbKrHNCATm7`Y?!<^&y3~2vcCE~Tny+08Oe%2ZP^>#dHYdYJFf2q!CoC(&y%4rG!w>M?7N9nw0Y53z0n1=*lkHHE4nxJ>+aha}{Bh&f>RnLVFnaWi zQOPRfH5<6qLMZE2_wA@-jTVo-vlnSzbDO0en?xmpD@f500!=(+5+;PFobQw7F_L;=YKO;MCmAghBN|1pN#5~QZH1PZz=@6#r@U3?z;eZFuwmvBDF z{PW~qUZd-*m*shs$pwD2ebYgoT;;)%h6;Q9B+0S3nDjC}S!og3Gri5uH+qSm=6mFp zmOEfGe_HNRey z^A7{$@d1b5H7k|lv;yJ@5y3oBUgFXPl`$@l)t;O+?pK_q>891uN2j@*7OlkZJayKi zb^`iS1b{2S@dE!=cqukGw5=Pxw3^AYT0a7V-OB)BHwYu}DMjtrUFO$6$)z4^F=DzE z`qUqAL?98@La%CKUKZ59UHs2c@Ta#ppbP^CgMoqC9iX*1GU*V-j}(EihzC+KA@oz; z!sOo|wX?^si`uW({^I&UROQ1)db6hQ2Y#Q#Pa@L~7T32+J=TwDYc1X_n%Ph%+z;uY z>P%5Dg4iM&s*eYNtN)YJTFEifO9nCs_$iPulmb`IclN^ia#AP3YobpwwMK_D+2{8TR1Y`fHbrZ6sm!2U{3X}a|LM&(NJ7}hd>7+QdeVvD1mHXxEZVHQV!Zk z=KZ{(Osilpf&~M%41`sTAg2^qxnOhvkMaN0SfG3gEC@RaWaBGIdbRE2&lF$TEc>02 zrTArBo47v{GxCvBU8q1)9|zHHS}u^QKBq?z)Ash>V8n};)@Vjzr&~mKL+XE+f~yv2 z?5e2tFI-eLBQeoZ(zH6b2oyQ=25f2yKwPgOTcZ|PZVfOWaUmAvIsE}R{J-5{`M+L) z%>j%NK!XYc3DAH+Q|L+74Y~uq18HCvPDCy1JDa``>x3KNik9?9!*~GIPp6!78XV zkNu}NOll`ZObT%A>So0A>!@)WF36M2iIQIQ`$y{`(zR6iuMz zKuA&H_2;+xd_3vG%ZCQOKWtidlWPi>+Z^A1d8Q5eKnS66?&hk0)KLx6xLAD%50Vg1X}ZnnX3 zO?A0W?@nQ?_HBG5o)$pTdAITQ0asjm{##TVF+2dsEjtS&0#w**93ZJc_hGd&4kU%d zW-nqujyBl#|2FXae+|^egPn!S056~@<4}N*2bdTjPVf;_X45Y;FF%xL4VT{4yVlR@ z5K&JP&MD4kyq9=8T+p^c{9ncqKX-5H~9`rWkK zVlK;t#)a^amYHDku5EVj_3!o1A{Z5K>*ThD#?p;w2T)=(2?^UFRN-R^CShP_O!FdYuhS=~U;AZ3csX}1JU?|ir5f%i<)rP?_KuKe>S%H%K&v>wt1{wwovE z7`u0WKA-D+y|3%Cd?!+m$uL}QFGUEM0&9$=K;-&RF`S*Gl`N6)wFwM-lb$t#=3<^1 z$=;=uxmqNxy|Hc!$1CprWf{W;<4;~h)wTb!`a zeB;^r*B2X4e0_AH{o&5_HCNFagOVsaB3)roPVf4AW6(BkaCUlYTIkyyI5nJD9Bs4h zn)zbs@U~lX$L9`cL8N)_^K}mG74_w*V4*1F2t=fOL6o*L-a0u349rnS+h@a#WCO-K|%$D;y-iO4g>G8ibV7)qtYvUUFM zI|C9#cFA7--vvu%F>y>FTZ>X51w%QRR31roBRYBpwhj1!Adtydfo$Iufg6B7{`cPh z{SQBrT>^yvo1v`#!@UtiR1V4@iX{R$zSNNxdi?l1zYP6F^-tZ-H(&m`e&f5yzPAqZ z#~(hu(Gui-Af2hqR10rUzzqI?^ojc|Q4RZ&2!^@JK^fa>S z_qP=pnzmQyQ^f#Xp`+~kTr0iE8aWzjfGpU)fXRi}C+0@xC~FZB`}^sMP7kralr>hy zSp3P@dD3@@rrI4JNOLpeC|rU}b-;Q^(M>WC9GD3*i%kFy6BVJtPvDi`*Z)H-u=3a@ z0Hb4$5D#L@GqtEFA&N{wF`!QN9GS5p0J(ZlOL zg#_QZB3(lz$T4-S=3NFL7)fNsB4I4jg6(Vz1h449!uE@tF?rV%JiXc1t^RDrIY$a! zelS+Iv3ujuN~7STtw}!2BxYO`UB*UYg7X|QTg&7(a1a(pl%Zji=?GIyC(-}6W&!uV zWy>fAvS519dd;a7}bO><4Y3LLOvSqz-3DH`|Hf7tLBHl_q%Pq_D<_PzQaI><9W6AfPsY@QoGy2 z+}nx{$J{nLtt!@+ibcMfCqG);E{K~ah*`JuOZSZ~d%wn^rvB zM-fGjB;=uIszIQsIC7m)d@h|3n@*>5RiPCRn63%L^gRUOjTdF#kzRrP(yaO?r@Hp< zI=pJ`wtF8W7zPK-Az(OAkY}I_{(qQSGM8`$Lz*DxB3mLjudp~+-tUc*?G{*wztwyq zmq@~6NEC+PQ6YxS10fDSfNi3qg#RK~;01#b21E<5|L+pZNRTP`?^S}BE|!rtndXCu zqPQr{F6V|AkEoE(ARLzWo&0Y7`nDrS&WHB59C=bWyqXxOZ@a<$(_+QVo5dd6_Ahk6 zRev*ipsQkty}ezr{#KUSmb=HFe*R0zGn3*}`?1(CYw+U{asoU)8=WKY{3BW*jYXRE zB#vY&G6Td6cMX}&u}Ck4G2|i}Wv6_uGd5WH13Ftmh*l#YHDuKwW#Imix;poQAHGXX zqI@u9Arcj(N7}Bv_4fwI*bS`5YY)$`WpA%lq2aT2OU3!QS@M$1E7R75Zi3%;^1}#XJ8@Zn?hu z`Nt#Uhs(SFG+0Em#1n}NSOlSv7K6qBQXD1EgS1OzI-1C|&lB3P@Yw!?LIID%Nv7~} zGh1G)TN-e-{_y2fPg(<*`J&ZX3%zS?PLuF>c@iO+*LJPJNy$2sMuw6d=+OZDM5?~s zW1y72G+CLQn*@VgI08fflz{_6iGp8&jfM@8Ieq~6meCaOv^+f$MFj{ci6pOpE9^EH zhw3M|)4}MqW@C4D98Z)X3J?;?#gm|h1WHO!GRFLU4q^m0oeZrka6tbEU3O#O{3P3> zpSIQ%adz7y(4Ros>=UbGnR)JSY2Ed{8ngNHgSX#$=$K2QLZ)eB-pKVOx%=)e+V^^G zMpm0kZOWp9si*r6uU(%rCtyk3(j%9XT+h^Tp7}^A@;W^4!K{Mt@#d@b=jvZSeEsvn zK*73#kmR}TQGdVe)(md9ZMQ8so4})T1YB&J7b1qZ8W+z;5 z>7d}5QV%_Fc9&+4`qkb!7r$`y(OH|1Ja>{?t^4UyT8X4MBW0y!diQW{y7gXOS(%UKkGu@RyuIh2lw9fbl65BqK+jKcG+pPOy$a~hR9-RImu zYp~pJ!rA??<3mS>rETqE4ULs&NB^p4-G%DUA6I5(HjVUc`_=4kmPcwu5Yd-Eeht6A za{64!aQA_{t*XnltPIcHK6^SqlBc#%cBN;xh>tNSaYg|tJ_qlu4)?fQV(2wL?XF+i z?OokB8kU<$i{A&P8k%0Z;A_>4f#7^$WN~yM zLiDxp$y~OkB?>1WIrVYps&nyuiSZguJa>18w(H%|8q5A!22XJI?An9f4*lVW1Mc{m zKM`f-d_1{pb}96yntmIW;DNCZ?@6D#)GcU zrq3aBt+jBOQM?o&7EA|E<>v#c2`(UeB!`z`V=O?aP0V;Bp&dO^OgMv3@iL)U13i= z>D3tU+^xzx`nS{Yd&9i!6x0roDA5FGc>$h=LqrrZo6&^l3J?MlY!OHYM#|N3Ib>@b zrmV=^N=Rh7-?AOA=<~gCq}ga)s?b;Ze%N(E+`^+DtP6H@?`}Wz+V|4SfPktJFf@Ti ze_tez8{a&hWZe7sshCd7iBp0~YvnUhcshaYh%MbpA(4q>3CR&=*MLI8<9u)us%&?t zG*kjOGWr~+^rd3`MV5BiH*7}ALq07St#W3wNT>YKxUueh->{L__f zVb9fee*5B_R{rSa*E-ubGrHj)Zf%HkJi38*VQd-mO<($2#Cp z`_at%5JHqEzz#tT&GtD>7?aGfk45>`l1MzANR$xpXUH%~P}UBDE|k{U*dadpaV?_1 z+38s&<^O01Ee($p|FiNNcIbA8rH#^!b^MBkBXysi8$uLWmdSvNjL=P@%$F=WvQCYr z>5WiwtYIQC46AmwETg0A5JuDAJb(u&gMfkyx@VL&MNx8-P_ zsKmnZkXId+!{zi;SU05p=;Ex|&yR^>60Ig-d1d=4`wk(Udm9GM6L zULez>TEt{KKo*m9_%3=&5nQ@*6wg!j3{!r!GOvVZZ%hL}G@<6m`KjK=ry?eE3pP#k z=5;x3nZISlwKw->8t=|*-x=2USuySI=aA91TVuQD_kET3Bw=F2>}_73f7n~|#=FmK zGbuS*BF%)jdAE&s)SflcFh1SqrKC==9O3B&x#YbQ8S8%K`rYV@oOg!rr=}ge!Fz4L z=wOHVgg?t!%65EL*SB&1yPg9Id~m1jmdPvoLj%ceGpTNL(iA-k9y!!h&y0VRgn1bx0BiZ@~mIjv$2Q1#p5aFZP zo$8$2Qap_;*=mJD6L}mQLTBR;SzV&+*U1P`Ov)q(obxaOE}7)1&NpZUAQjoIg60%= zu5b9;wb7h=U0Lg!iOHZ%2`z3L+#is%aoH})={oE=`QjAk6kmXyvV0xwa(HBcRU{W` z{SY<_f)#>9Jr4X1#>{_Yn8eYc+0jecF3Xek@D`BH+O3(DZ*78z#iex%!Ik>jyQ(L= zwO(x(-~Y{yf}OuAO~W5v41PB8@9F0YE;XL)4Lx_hdyCp|z(z!fpcJRz@OSseHdOs6 z+5{cl7fX4zq8FZ<752SmZF#%W%JN-e{D#!iMga+_$Aq4G_9p9E&RtR(Sz+3~yf2+l z%+IZ_+wXAH)byyHCKKUv5U%7P&Kro&-WM<6rPCQau5~FA4Q2yIvStxuRoO5s&4@$P{qhr+k#mookE*&TH$R zyz<%nXO1eBGe?SW4Va|@2<`x-2_Pgzg1`k1(~G4N*!PbRsEK6r!_FUk|13l3LHb*Z z-&31>WCXcC`RLu-lWzvUC>rOHiY)Jj@$`P8wk00CG^>X zJ3L@_aZo~9_?P?phW*Wafv442p*q8;aFOTUa(oY;%qA}mr+V+BI{A9 zLgx%7lNha?NYfW1)kez^yq!)Ixbh}OvHf>DY0Io?oqfuLdNxbFErf4et#Psg01}t+ z0uz^QGvDFp0G-RRWM*3{Xj+sOs^F;r2n1IbVwVCkiAfePN%^oxU}qAwkZ3DqmI_;2 z!pmuCDJBV>$qzpHu6^eEzWL>r>4y=upa0x7Q`NsKXnO9Cf^{G3uT6VT&F_xr`ucZQ zmS5wBpQ&*!mVajQDtO!1#%XYA24(tqG~X(hnk~(A?!dEI;6{Ob;wJi*{ujiAteZSD zb0s^Mlr3=9Tdk1KV>{~YkRm2hH=t&&H->O86S5(dF>qop9DF zSh9OD4zC z#-C31MYQ&7{xYAo^_wl4P7mwsGyhhpvAAb6V|Ly2``ICByXLmsB#wgbwmb%pZPN6L zPhCf0EX@|*eI6MMiZ3VHEyqHC5hGgk z(wV7gZwUwmE?cEl@BGQxoWAd;g158{Z2V!n@yKkk+UZM`17*SYrZ;A7=y$yI^4HrR zqKX?w)isHjPqr{*G-q4w?5O*uv6Mc?KQ;?58kHVXbkiMZ9kZ}WKRxJi^$m#21^g;=D8*lkwvSj&=EdBo!*{Pav( zemVq_s3trVmrnJFp!!##3CUxp)stdJ-p3y)5w-z+kV{Nx2gZz zhMA*NYMQ$egRfQ{+!?gKuXzb{Y5UeQsvrJ2;@gWwhTC!_kCYv@cho%~V|3L~vz`5ajYL>1 zUZ1*-1}+)t)I`#@>4bux`70*tw!it=;<$k5Q#LHR9=iTc-Q$|XiJ9JgOYS}P*Sz-T z`Bhg3hlbln&ui*!W*BDASAz56p}l-V@HIf$H|w$Ev_z_cggGW`J!5^Ylpe_|G*(eX z7P-O<0D@Q)eY6M!j3|j|LO2-7PJ$63a5;DTJ@ai!iVr20>TZi3e7MhA zVHV_OAZ>!FI6qZav~E+YG#>_rlJ(jHp=bN_?{)h<$d~o(?bgQGq~nqWTpSUPYBLec z4G(EBu&Y5klk9PH3daIsAShn1nw-0ws&5}j)+(bmYaP2g6IL}^JAE(W>8@#ijnj=g zldsGOPJZgGYHk1QbVAQ{e!;vzxQ}%||W{Y;mpq7Fgn^TY*}2PcIA*L17ZGzTR7GTiqU=+kI}wrZ z+Mw5;%;!V3+U(o$UlZ+jze)O*hPBu07MWfPojkX1m+6Sxn_sLY)Abvt*H+EG44)kh zpNtr@tlBr9jB)6h%lxw1(@yZKzF(PnxT*hRM%U|NjijI#*w0MEucZ!)=NGgcSaJ8n zWas4M{){YhrT!h`L2Xwrx{%TX^0&OLP^*8;*4}!qm3QgNS{wp7czuINm$$KEEA=J{ zQ-VoE6ha~R77S>fCnlK`>VtrYP85(C3JjtIp=U;Mq3tE~N+EODW2IS251&emGmMKK z`t-l6DK4k-1^AZ2X~Tli(ZL7i(5ndl`@ACAV8%t~C!kch%owB$}}W;gg9A}dBG zlJc|EHjOf7+Y5e%ZW%}Ru~>L z`%`rBVmg;r^K$avxY^$OyA>``se*dn{>(Lrh(KVJS{l_sqa=uFmiu8oo^l6AB56XI za}W_kW>FsxHvv~bQBuw1Xd_NcoE)A_W<*nH;DK;hWNC9T-+jYENSY|jJun=?$w}dH z5oc~NE$#8rf&c^XCVo3L5`?7qkesV5B&!MHUXZw`fffM|H_EZH$kS&;3!r%+fH4sf z5R0ng87Nu;P_8Nr^h;?ejzxqlYIAkXMYWjOuPY{sc8#|J@?q|CJuZOK^Guq?Ce?m5 zZ2DF;o4yG^P)@V|R-M)m#6l>THA$CMFj=AraVh2w$;u zjgrt#g3A=*$rOgvxsB({wa6*V(6PdSer8HV>qZt=e%=?}>OZq$=ghN3v(L7Vlm~?B z`A>e)y*t{saY}7Rc%AO1!HP|9x8JQDv%EE5GkDj`>MhqQc4?X}U_s94kV5_=?~`No zZ$cX*#&7-l&{g?8WhA_ZI~#My1B zJ9kVs9KX_g0ng#ycXvn-PyqGY9d7KjSA+wi{C%*% z7$1$SZ5zkhXAI^qnJTFon%{FFTF~OWKWBl8)rXML`tb4g>ALxoPt(T7s`@fUZf~3; z*5V2Dh?ZWis~cw-PqGI_RezGAq58foR{&hI=P{OrKuk(tByVwaxFTc{VrJ>wadeoSMm^q43fkEaUYDKQJC)@G45 zH&LBmU04(?5ko&G6OOz!g5w}W=su?+j3LKaVd_>;)sqMtO=3Epq4BlB=_ET_?1zr? z+1Ki>9l7i%PL%mHNb35QGF0?C&1nLHU4o$Z3t@1TQLGIY0n?WtK-m~8A5I6~Bm<*J z5<&K(s0d?ulNcCLjDXFYusaSBa%q~({Ps=X?IT|Khdo{~eQ9H8=LtKUFNswOZ73*D zj(;AVd0H^h=3i*I#R6xP2*U;S@NRFtVk5T`l$2*Tv;kDqi0JmuOa1Jc;baxXMBy*sZl@ab+UTSH6JhfGC$>}D8eCE>v>*tUol-* zdS7|rwyu8d(T3E|Z$=LMoUQcVwF1RRmMlzLm_s;r260XowFtpt5DC~U&UGfBlJWU% z`q)2&8B^`ah5e!<30A#Dp0pe0dK%mQIhfBC&L$FnfI~U%mJ!k^uvZKB@~yGlZL9 z1T4xFL2o;@YsJIi+x6;n1V=&;XC|lzAv>KxAxk5R?G$i0MIdY(3sM-?IEp|Ij{p-u z4^skB!I#Kk`ozI^Ds-v`AoGbx%0SV=MeEsEdt!agpUZ^7QYS%?{7G|Z2%Fk{@Ut4*_7u8+jD23 zj6Psp^7PC)?PPCNeHuwmnX?;b(geolIJTqUbiJZVrWtq_W%5z{Tqe+j0Ru&@bA%Kz#dEg=LhlB2 z4`l(JFD23Ks(CJ753`P{k#CekEiE-4g4;DmB>OL>q^kv)n+xx8bq=l`CSd8mdZe4>MA&QwV zi*KJ%KgN-FVjMK#sHwYRq-a$NstQ6Jahg9eS-rbz%71cte#oyIC5w=~dE@lPC!w1@bQKP?o^Fg80=lYNDLiV*E?K%G5zAaZTPsan{VKNp+rIKXHU*uguaC;(i6 z9XD}Kk1i&88zVleoh_IQroC^Gt5}FIWAQjD0xAVu5=@MTWtX`aYaSu3xDJ z13YmE%+hGyPgchJvh4H9>=ana51bv@ViHCLH3H5c`p;qY1^WV~RtJyV{+WH{mV4F6 zmyU}CgS*w%SMR%P_P*|{73s-Jdml`}PRfTMPG%_#_n~uG&LJE<~P(l?rgb#5 z)trbUk<&rf{01vHLuzGCAs51OlBOuT=$1qpFJ5JySlnIt%|7kN>z?m_6&xS*?!spq zZ6;_5jhu7mLC4(H%6L=^qFFG&eNNM^IW$R%6(Y(AU$Vs+prZ?~bhM8Oiszr!r!!?cJJ~7T%7z-usg`KwyPO zl3XuJ$HXKA*v1FPhDr7v>a@J~9-)tW&-LXsEUq~I?){-(H^(lhMcnJVd{IMZ8T&FP zUyx*{$kwvA1(&h#(~;l~4bv=NorW6yuKR2JG`sKg4-O1>A6Xx4X0}*!enX!_H~*kZ z{>3X7^De$Dd)#_^@vR!G`xYQTF@&jw!x+wNi_IQemqsS)pvb8*u zrmcl%lZe)e98lqUh%`Hf0&&%xoJ6+c95IDR_I-SYi$4QmsTu;*U>6H09!FQ-2=C0O zdV9kCa+W_}w&3QeJ_EHCotr)dejZ}n+L_MQlZf@_k%ZtLJk=%;sAPw-wA4clW=oVB zK9zP}a`Rgj=V-C5l*crtkX$Km%i&tJT*+;M)uw(<7+9}Zd?cmyyy z`CM>HvR4XS(wkigu@^2Emr#k3Q86etKBw^UI_{J7a%Pf%sPdvMq?wHWt3VWJ_ke z3KP2%_HogYA3qy^zK*bWQx-ljG8WQl2S|=*or5_LjzaNuXH>!ajnyh8D1bilsRg)NB5rF zyOfe6(05-aaGuAZi}(ByC>BPcd{fhgl&*@-KR*|F9a6G24cd6~=q>+>puoxsvrdQi zHU~b3yy$<_dV8H&YvnV;X1o$C9tWWS6)PBtD!E=Psu5!LQZ7G*`^aiP4zr70Ei_Ip z6m6}$5GjaC7x7r))r3sw{Nf#}N+9z}uKaDCZ>Kni#wf+}0WX6u)F#iwpQ`NpX|Xflt0;Jk&&g4RuI)rH^O`8D_*`!Z1!>8( zV&#^VKrNB1)&$_Cz|c&(1ctfFN2k~+x)r7q6`WXN6B-ly!(B6M^b~Zu-5K(scY~9_ zE?PjKCA`2c^X=_(T+nm^H0LJfQNUG>v$~{8lMFE)Sam9EC9}Qegnkwx$gOLkA?=Mb zrBHb|lB1#+`>4G6V)q4Jf^%Q<(zKbhM~`>UAg*Q*@H7jtw=rHoDf~3~?)b;+ zH1p7*zQE6uFG7~78G_5V<5jR*`E_2N!w!Ex->rE;bfjOleWYweB*MrzucEX)bCQf` z@>>bK`xksXT%)(DdT!1hMiY&jlX#D{V>C-S@?4e&3L$2eV<9aTt5ow-*Zv zt_}@stUB@Y*}Nr(XBXVqHU43+?Wt$Uig{v00?(x*!g8tl{}6bf(c8SNai~}bE)NvY zP`PkO2p7+w8(*)xK*Di^;1IeA<;Yw?{i?K?Gusx29PSZutD%#C)&3x5w-)C}GW40l zS!Aky(5A@KnR`lG3QLd}&$rIzmoM|nFfziEX5PFQF+Hg1;J2ZKO;Qi@Fh6<{dKAq| za@{s*HC(>2Xb;^(0z_6+)Jk7=Q!hS-wkF1N-+2oYfm{iy~o0qEFgD_tlkuJ^z{Th#_T~Iy4^I)^N=&{`FZKy)xfc zmTJndi}zY*a(L=igfd@2YNo=*S#0`vDLKuME#Bvfwj;5rf%8>Ukz)?>*-yvWVB|} zkKsiCF#~4=K_bzAj*(SabfLh-vQz*EgAfEDZ)J!^M2P1gPy*b&5OvC&CNv@4nW?(EmF>Z<)FL^3I^z_qb~n6YZ%pe~m3avK_I?Eu~zhQRIySvU`{P z@KMwfUR|J#GZAPDiuUN}cj3w|4Oel&3EVC`W zshUfRi~H4m_~!P=mYq`#N6b3Yj1M{}?^SqhaIAdrhW(|(*;J}bd?5f|0yxm)#mf`j zQSH?#97nG99G0Uhx?IR_?TE<;6S|cL23D^mN}L=ui+0xntgjU88UC=`=ekOJjBJLCF(RtoBmt6E5A2~lnvySfDW=J+Q z?ry1EUwPqF{5S(%E z4Hac)T<1wMgl+O=C0qUW$RAk1AzLWUQ(tKMQ6rynNqx>)oC0-3ddB-76vjL)V{tKV4*6 z)it;0+np*#;~uxUmu&9^#7nlh+?!R|G+s6NX5{-@+jp9$D;#X&0f3Leu`p;U&MX`* zt_eV#iEPW?js}!+0;fT#3X_2l2#&{qkK*uIPKL!RBXk@NrV?jo?I?VQin$< z5*-Iq!?cRf9?zFVYkB>`t*m?%z0LYoxkE{8D2hS^emAp}8pB5CyQY2p7BSG-Gg`N* zYI;e<&kf;2=euS#FKxLyR;#(oWQDH4$0Q2PO>IcMx`XT2 zaXj$j5x2fK_g`rob9-N7_2C6yl+s@<;#L1>oc%EiQ8r*LD-xF(zrp2s!l6sP3JbK2 zo6)&S2wPpMWtD-M&`LBM_Ug9P*wI(plkmCGS{~~7m;?)IGwGp#ha_9)Yf+X9p$Sz+ zEB1$piwS|9uEjMH0y_wp-se|W{w%HG|K=+PXlR( zA?!>#9;I{SNfyyDT1_adfDH~Va34YuVCX~mlEjh48JOy9A^OihF_5hgARPGxmg;P6 z1$i+Qha&`xJrO(#Z0^BPVC&rOT&{yY4hu4D+)AlQQ&r6is7 zZgbZRo_&70GAAhLbdr|QW*y3X6c05fFyaqt0JNL6l=hU=y#4g<+l!rR4qSSjBrkNj z+HvXSaA^ggy#8PbEq}Z5Y!&dO4-~C%zv;dG0j>I+**PV^q$IiO7c-McdHSs6%XSC* zJrZgNsyT_Ibo-^dQw$jdIsx`9&W#7t0QB=WJgV_Z;PQMO6Y(w(#FIjeq8@M|!Z50T zc`9x8@>Idpz>NRV@82IhZvGVzcH#0w<+#SRsV93=LRafneY?k5jxsyE5< z$@@29{`W?v&Tl-~7;3K?Z50W3l3AlxdJKdrZYFbm)O|28CJ_u%fsiR2WHV2Zj#D9% zo8YjC0*azClKD@JvmLQn;EQ=6G&>?G3A2~rl<^P75=vH8jqBc}MfCZbU)4}L6D45J znZsYDRDaRj34yRziKy5@0zHa`+B|6vw8ZT0{h;~JM#VC4P6!;=dNw|@}pqlga5Jez%cIutspbB zz1<}{ngnzPV#EjBUu#lq+?=>8W(i?BXKOYZ*7k**zjWgBoi1I|xd%#WUtMoL1!I#p zpZqs(apl|h&pMZy29MF_vF#XKlwuH%LA+j>@1~$7c(ks3;oOGWv8VjDZ$o!VYIok< zU9c}`$}aY*ey5v5z1LD^_7UJ#F=PSw^08aZm+$R-;-l`VXk6sgahaT6RF~c)&|8p@ z^1!BsjNwReO_XXYuL3+Z3DBCPQz)P*;W9q8=%bnwJ@oZ6NnHtyXMW!q=oYtH_V{=)RxZjmU@V)Ocr&wb-3 zA2sd>y(z0&fd*0l$5m&=Q+(vGi}pdeyl8 zS9Yb>?Co2d1}2FseqCq}f7AO{kYO^J!@^>@{8b#(B0GiXb`Zf8nH2?S)JBH2FB-W1 zdaC{A_9IP~uP$91xBigp|_O?{AVHw zTdjH{Y$$K%oq#YwvCkn7^P-bMqvD-+iX7f_y{r3maZr)#;zrX_!5=m|9)4u@-!|9P zk$5o}l1yzV=EkeWqcJ27i*axrhzbPdVwO-}0@4@^94d^V2Z#-rK-g)F#8J#~CPUjP zSP55vBWWf2lsV(&RnFPAo6ZbWeR^6EK5ZHblkWaa3;9`D1_gCkzFFnFdsRbE+owNV z+VM+i*G%cqo1fP05l`oD7#;Tip1f)3OZCk`tZ$$4X5G(k!sU39 zmS5`$I8~?Zyf!s-x-!px)A!wPLVF6rI)6sPuoMW;?~8bFCF0q>U0;4w4Sr&DX;%HH zGM`zHHe)frs;htevMxBF2tlBYP)RU{&a5zC)sN>ihKHHH?IX#Xsy^GQ52ls9g+Ci~ z!)Kh}xNG(wJ^KBf_xz3h-vf3{3A(o2`#}t@;*2qkC1;49xzR3mCT(7u0iAQ-r_=k= zpK}<2LsCEgHlAv`X-IKR-vPBNmYOO0c@Fg-_ZXbM97z#_af^ZNBgwYfuS0R$Yhoqv zF_BAt%yS8HV|r5Q1Z9-MD6;m&DWo)gASrsgo-H)6#-;18Nn~Q_n6z$Vo2yBT^+E#Q zYw0|)pvFO6z=I+b#12O!qo0=Tto-rRzTsJi8&h27yZiIv#dnL>o2}ixbG_Su3l&h0 zmU_g<-8*)L9)5a90}NvbSwN>Fp0SAIy5c>KoLDQL*A;!ut7f0~e3{5eoAE4&=*p<|OLKxG zF+OYgK+oX!(aONCUfb@Fp}@fK#@7>V=TA%*n6Ec7T}R8=zGcU~cb}}M{yIO~zH?^o z;;<-Rg_6z5SBh*86fvuFKR-#X9|(VU>-hKTQ{zFw;}0umH+}uSCG!Cysa3>&9(R4efq( zaeL*MapQ2k(~_yEkxA>|s{K`;-xD|7GQg=?;^GY1bWxefvb{PYUP)lbn9ke;D|xS7 zH_O9H+sBRsef#pFGkW)qwA8oUJikwY#eS~mY{|@O_;iA zkynvxGCzr95vyQ-fD{*3n54{ia?0W9Dy^7^+KIxKZ;1c(Oheh zMKnIv#e!vFK_?{n6#>CNt`P{3vy0W`2n5i(zXNAP2?%MX?1%psSS^lK%0v{% z*c=#bZhalg%UszMrH8S_*^k!f$6IR~m$uyNYH0X%XV(|af}fU~daI`69V!li@G8D` zdm^)M$x+RtT8-cT8a+Rn7IM<_%_Vo+-JjZ={KL8jW;diwp6QuP3!To@U6Sm6ns!sK zz3&nKj8U7CkAYv$`22{c75-Pu4zBcjbM$2M+?njbSJ$2<|9bVf_UHNal?;17bs$JF ze3BeuLKo!IvWm{f_=r4rw|4TrbX9(MBdra-8~Q!3AS7H=elBZn&+%sSTN*v1cUDXc zuQ1bGKV@W`93^P}w34pF&sR{X%az-!Lu2VQU3FLDpdUI0xxweUI|jS9bmxs`T)7xl zQfU79$0E~;M==y`HQ=^!2qY`Z>n|{p|5pF!pBAqr2eR+|cwO0DSmGnK;sm*sIXOSI zBNYW)&uOWV+CXKHv{$U3= zlYt|T!6-C={l-x-3`3kcubLH=Fc}`|H~YUm7^oa>zc<{g`F8vG`n!kEEZFw-eYEMh z#qN`pRU>m}D(j~VcZupQurqKtM=p&W*&~+HmH3R_&Scvy zR~>HL*x_E$>Au3W{!e$~BAgV__$}!OCW-huD>5@-wM*vSeXIkUSz=>xpuSO=-tLD? zr>>P{OuHOwmQ-JLIi0qg&rw{ilu3IXXd?bmoZb1S4(II?&*Ki}?~{+V`chQ?jEwM%&rP0{L>* z2#V$4{ov{V((&@^#kvlu*nM)c_p!!vJHv zUuE{4!J8j{o&T5+gm2~7_w`E;)ShZ9@=G|Mdg9BIipF~YQPIM!pO((Qe$l`3 zpsl>fCZkABbt<8L-NA;xxNsnFL$D+9;Dw3_B5-55&_;H4lf`k>ywBIN=ALN(74arG ze=K3D%c*s7`LUp_WfkQgJ{{Y9E9p;xk=sp+C>tHNx;$|nQ9d9_WR+U2tV<7gu+Wb5 zXwMZL7bT5CZ%^ILYi?Hj847QD4h?s^dTzIc^b7(;=&L!4ESx&{+C|!Bbw)8r#+(IA17qW%`o(x}*Cah@+5G5h$!=t4 zJ6ysey|Typ1Fx{o}Cd0?!@pEdjv5p{L&_zdarKIjmbbvGvk;ccqE0 zQ~$)Hko}8-cgH_&@A;aa6@L74t8E(-N5pxqncw(k!_W6>)9)fzAB57%-6@@^Dck&0 z(gheChPlyfcpnVKFUNMy)tOH61HmYn)G;A zNpVSNNdI_5ZAIF|cZo{c>#?^F7K4qnC~fk=zL~a5cSj!`XumQ4X7dBKt3qoOiqo7Y zRzAZq5j}bF_v=@fj@1Fpp^DBpeax$<{e*_njmB#|A%XY(8irfeGSx2oJiWYpR-f_q+LuCE7enEE z=&+Xrb}$4)T6He9up?ciiF2?%ca)m|MDUC_hr9p>)pvL}2gfB|qQf@0z&KccfB^HuVR7ynl4p%(<w|r>sSWdaz6o{6ydgi&8`fF^-NweS~r5m&&_r+3=_cURw0&{?Ul>!I_etFORDR zW+!)*-yOTyDF0A=Ghh!+Ss=gXy4foFkVm8{0njyIrvrD1aR?q$7QCui^W)Sn4<%Yo zq1=PqFW>&nZ#+3RXT{3#?k*;Kv#kWKLqYewyHoQ|sch(UP^#BZkZvVY4?{3J9iCKJEK+^& z$ZF1q7sN$!TrsNZTDFxNpTB0Wy0>q0ly}GOlp2TK*1OX^1D{=Hr>JO|#83%z0CaIV z7T5bx&gVUyYrGAlDp0!2QTE;{(_Ij{bHsV=wyw=+e_b(h%KvBEt}(!wd{Nn+I`L)8 z@x!0L?iwFvsIM@Vsq9OZEK%07lQml< zgpg#*GQZ>dzVGk9oKG_}%y`Z@&$-Wi?)$o~+xUXoyDnnHS=kc7=`Z&Jeigdaek(}# zbDtWa_e(@gxlaC!B7#{HB9qW?JeWWLf;FKE#YM0HArS!fmcRiGgF{3V31mpoINUQN zSfSYe?xZxFI`ERYqcHe8$CH?i)9S2H`#+&Yxi8ZvcSRY~f@^E_bC%n|Di71&if7%3 zYc$D6AJ*lGBJwo$7>JgKg%go*o%8#>1trY^_=yP!n##66ILCZAyf~sw(Ws@p(|FQ1 zUT^7s$%A{-wa?x?vkab`3akJ9Ft0i{_VuUt@M0R04rO3^&;T^Ae!%(8vCMqO?55Au zBpr-s#T$itGUa!dq>eJTPEU^)z+YM83+xqoMyt5 z@NgU5!>7 ztK3~=Ox(0wnHW00{D6mDb$w!T{crrm2cz5dUuFol*v6ixPwnMf&oQUJ1ruelUFEQ@ zl`p%}M)4Kg{t_bQdxh&{3<(Vy9;FNTnt(}wq|*=ptRxE2uuvuri^by3lejbiwVjMt zC+)kl`|I#OeTOgr%8SZVeIR8AUV;!YAKq;DO>S{Bn%y?%Cw~WT7hM4N+)%!`_&hPM z+HMXcDMO0i5zPvE%vgnxaz?N-7=7ygXYH>y2>!0(^lYaKlN?`;2HjwEWNjuk-ETSE zf!*9K?Zo0CV%^U0Y+>NkRmF1_<~5QhXQqYA@CIg)NCS2Ob?}N;Ny))8iFn;|yo3hK z)Cd<{+^jt;ZfYoww8>;u@z06VjOc|Mk#E2XqDh(@fb?^!7>^aD66~`ZP6*qLIAw~G zMQ>=Dl;c4E!PrD`VGJmeq89?jW73{0#aV8ruyy}Tu6wW^Ai&%3>sMV({m&`Ezd+uZ zaj9;{d2jFK#LgLMuKvq!@gl%d zgXOS4zR0ruYXo;Jh%_J!N!UXf;6)Nny~=ZHdH1o}8h_AU&7O4dpaXlLPd6VWRO9Zz zQ+kRv94>725}aJEoKC-kb5MJca0tV)|1sccxXWNREbttaiN{31NtXHO)X@{857R9D zs+E|H!lyPT>zCbX=W5*kUJ~4HNwF9iSM&F|bAV!`E6&Yg_0GT$dj?0A(U&Ldl=F!u zVsp4DsihF!CbscjQ1cT;Z)>pro~T0ltl6FOF>tan_>;(e7!isR?IM{(Q-*qf=;R~; z*svrIz?4WfQXS8mX>eq++B--mjvGmwEY2)3;btL1y*jjzi~$`iELU&vv0Pi;?1QP@mb!sHhKMqPV?yHfRD42YXxq~4CJ!F z&X>~@jM5Y27BaR`@`$}18&Sdfn3h-WWpqmg#Apd)8 z1iuMLTI5g=#|N)sSbE;9_9+DSrf;cjHR$c~GpgF3#9Njh#^furdYi4&b!|&*aCdk~ zoH_8a{(iW&Eo=bBzrSJP0Ah#)k>bv;ch)__(g9*vE9ven!GJB1bd{~Sz<7nqfwtj! zllZhlYWKf8)$aDGt%nS`jk^#~XTm{}0LOKMs-<3*fU=(@>6G2h7d?a*$>)vGgnE=) zTNQ%Vb3Pp%3vM1Wpk!*o_H)VML=dRNh9Fo%=Y>NF=fM(!qd84Za>AnDM#$(B^7P|c zPBhAJ7}1T8LYl)mC^AV%A5qPUqHyvx;?MI*^lFKhDObz2k)dK8I+!Cc7T^hkmOPe& z?zgTS=+7}5p&P^+*&Ld3pEC~n=r>^b*4=OPGs2of=3Y|jAq8U)v1HJX7WwZ~8&7Ps zf!J}NMc`a>IQPxFYhUQh(mMl|e||q~e^O=0lHds8LE5Mo6{|ID;v)Is+3O4Ej{1?4 za1mJbcW98Qmy+K;zJ0T>ermI@ky|g@z$Y`&NgQc^IS~V@UqZwLkUrdJje^Cn&u9WA zzV^4f3=Ehr7Dyj+YN__mP6%TuzS?}RnbGq0)Qd7JUE=&~yP*OBbL!54Q0~Ell&17PvgXwWC&^xO+u%_pqs7E#PE2VHBRX$3Xy;JSpBFWiODo^Glj8&DY6_?P zwm#cZisxl49?X?Jn5M_x_Y)5XGP)=sOtpz5kF{-yN5TRAlBAyjO}%?bC(7c8hD0UQ zMN{SsF;~S=1-A8nf|I6a^gh(LtGVvUO;)73l;f{-n);fwH@~Mc*Sh3G^fcr$p3;q;WyhJ!FujOvj zgVnI@E|mk;9v5mD4ZAA^+qcKmMq~#S4<7>130X2H9?J#8lo9Z-({25DQJI=@7)IWw zi}euhu#%!>J4FU23Ooa5B;-1b8crJA`fVqO1RP8!Jd*|o{R9sPdK9W7YH-lb zj@M^=WV)kJMdY2Z3ty5cAKNK1O2|q@X~J)9G-$zid~9{Xc8Fad&HqovkmY8tvy|RM z(AQ=pcSZG>Ic3P=?=ONdIRZ$8VI<8Zd19MeY^E^D_r#MQx_zYV270Rh`5utmW-5_b zn(~jHdF{-E;9&f7HJ|E7y8I(|*{74o>y|$<#s@5YmnUy~?k=oH{`UVJdUK)BySvl2 zJNWzbx!Lj5L+q|^y?uh(J5SRv`&TZ+hb9Umk*|12JO*%VgAE5|@N>a9h7S%FBZ$22 z|H@O7so$T|86tb@Lpv#qjQVBY-S2mygwGOk>vRsH;iV)^RE_~uMs*SoPc6+j6^hGj z+#eKu2;?5&PNVcLX8(@cmXbUv%@sFYZ29w~eB+CDe)gTY3FWcXs0>N@DEJ0=&CR!X zNVTptAY+RUD*Pw6a+M*chnyxc%cRQ8+8%R?MrmF?Bg3i=J9r4u06&D_veMVQe6qqZgWO-iRZ{Zdu|7VJ z#$m|ZfHvc~Vr^+~kUP#$U4&IQ5tJBAw0>`NL;_qpZr>ln0fmt~PH|lc?zlk3g)`DQ zaSvUpv;98mKRb{jl_X_f!tuP5?w_u7ab?ppXwR0vYJL8CE5Gmj>qE(6r%w$^l@Fx; z9doT&lZ8PT1Tbb~I)5zXD%-6O#~14I(tS5;R~ealsTSV;lUsdTb&D-NXUZi+JYLuA zUa1r5zROSv?A&|g?e6V9>%H4Q6+F2X>|kEA{jS;4bL-OE-|_eN;%m0HzuU^U#vc!w zzcu9McOflcGBSPh5~EPfXQ489Tw(8(tvKii2I3NeLf8x6fL^}Wf*dRSOmbt0=UWn^J?{6k>2@Y6q%wi)>OqN!o^_-0GTxC z3)lvHT89)zx?Lw{uX}#ojA^`>gfVc$&`L_M4lfcKSV~Md%=oW6QfYX!c!+f~OGwUO zrif4}xu7Y|@Y^k<3GD{qGOxy+?1o&L;WHho_CbCU1bkH-4EP8%&;>9$!rY<5!#=U? zuh*IunXgHA6exMT57}4~w_jm#b1!gU^Yikb>`b}FZr-GI{GriEL2AuX@T4U}V`*$- zp4mcbBTXfZduOwaPl34+9;+g|@wV21XCJTe=qU?D3au3-H8QN|E^a({z<9YTU}#Qb z`-tb{+JZ&hlGoSuzJb=I0LPnr_Ve%7bGf_gm+xB^eMdTo`Bemub}AG|S5| zWWPJ<{^q2gO!rujL<)1ffW^u$bGOMA_tpCTPtr;jo>pPna2%14=vqD3B230>%kUi| zt2r=xgcFv)WE8q0?KZut@fKULOu-|n`jdZ~FMMk&UQv8l6W0>)y)$N%H z*U1K9-QI)~1R(*ODYw~cmDlp4 z_fEjC=V7>b_-8@vnHy7v0mqnkLJ$k#_=NY$`D-)LpKPTkHddDJdrYla{`p}}Mto*fX!+(EIzD`I>-5TcL;S31G<0kEP#w<8MRr z@Sk(IRKNP}0f&%Xi78jj^R?_tf#wPprOtmaDcVW5+RPUKr`l`TTtROv=;!)sp`f47 z^m?0x|JyeX{`0@JvDP>5eXQ|w-^N?C+4xS3??iR3>)niBt4d4FGj=`UK~0|%wYB^k zkv1N<7OLx#+t39kf4!hb{78WF*WgRFP ziW7g-DU7vu;LW9jIH!Q#i)+S`NhCOGe=N{iSH}Fm&RqP6IYmT_d~v^0S>8X?IT!?iyEIEVznI!4|O?d%Ay?n!U|8f2MN5R1&ZW#X`{SAf3WQfvFr zuko_<^T{WEL33H@t6P3kfyHwN*z4wkcW?MESFZ+k4L;MCYH>(br7*ADt5PGGUNg36 zYGwA-h~gf-uUcp+TQpK+cdlmYQpIFhxbK@hhuL$s{qRCJ z$vc6f6=ihESE9T{o@>TRs`C*=(Rh9{C-&vNLzI@SpX-A$cb`}f*(a6DQmt{vy8LFo zE3RK{K$C^(@xJ7;#fePgKtGp`+29I(8f+gJVQTS~e8kBVo>m z(;;JwXjk&h$}jDou&`)HoE62i>(c8hSLE7qxr_?Nt$h^_W@Zn%4zy$}{j^Z}c<=Rl zizAU{#29_l3j5b;6_j>rzaZ@uFrjk}&Job4U0KfK5gbA$Jm- zhW8bs?hZa{H{SgwxbmZ>ZmVWp&~JA3C$~|jB4iSSme7diga(NASZl5K{ntdOJizmo zi*ckAvS3lgxdWdMBo$L~)T5h)xd%&a^v#+9klJ!r z`ucn@I3I4RrKnk58?EmoS;^QeV zcKqT(uYjUS&Ddv)&+-pvT;d-duooqV}Qes zfoLTy%}dgI*7X21+>pMu9rUHq*gh%(1*Z$0TDNz^BwDLSavp}z)<59-nzs%y|egJz}ebV zR-d2?1L`+X2u(*w=M{h+AIzWcQywbegy-HE)IpRBdra6>5|J*eRL#OGo$bg8#OAzn%*QbxQ|!oz@H7Av=5C zi_!dW8zp3S)F98VUnOnq&D%9PyZJ!S^n~xNTMstR)$iIHvyX3=EZR|`69`|ID3_#< z`-z-g0uR~#d(eiNp+#(}h@4@e! zNcLN*?&S+dDy4tg#((Oa`+n=%V1c*oxXI8U#XHO47y;%;r{a%_3Un^*L~p$dc=939 zdvg85*GFUJQr{nE3D|vvH=-~8qkD1wHV@svS-|I5PTbFj4)X82&OCbLeC;;t_3J)9 zBgdTuk2lzKd@$k1V(nj*KJmEkS})V9Q}(ax2R(fgJmp*WO`1`y_D5}7jPVcqi92O{ znU9Dd(6fD3R<<`(i<_SpODqm?VkJ6Sn{b^6Ip#~k`#R2GwVH_T2Sw~NVIlo|ql#(f zVM4Bvt9uO#N_Cd%^z)9M<*WqwDI*=oE{qA4Vg{< z`z3v&dHJR-#Wj>La`nOmQ?cXx*hY6g1&w^%w+lg=P3;Q1^Y!!244N9lIAE&#!Q!OX zc0=dJ*k0{!@VVgTN(K%f+JN1sI{S!IUaOZXUVx`|*f9r8Gg$n0|79ZOh zpEo=%K(C}6sNJEfmdk^iQ!UrOEm!a6tR8w9zbHMnr>W;sny*q(Gibi>&>Pe6`A@^x zJn|A7-{EZKb+eK)raTKSqa(*gl%ARUK6T8lIA=TQU735s%(OqD7%NxJrE;YckQfR( z)suKgASwV3u-k$Ulr$i9*26c`Xj#pLOm@i&zmdbI4lY9RRO~a0@C!Fkwg|)G}_R21d1N)XDJ^@Fe`7h$wJU@;B(o4Jc6|sM>Lre z)opQq`%zKQh~;Ks;TjhI751S?K~H&DD|jx z;P&#?`o_-Z`Y#H5@fKTdJA(?F#sYe5mY#oKBnQ8HS=1)NF8HR-d$&RP$8o8SVP8)X z>ATY3!xsmuOU!R7uqiwo8Z^y{+SiqaB$FCvJI{(0?Y$Nl-|3huQBqPHda_%!%G{N% z9Q>V2ELZ|zvA@_ol^`j}XMG_n2{Jl#zWBC&9%3RXgA$BkhK|s-IR85x58)ioe zsDzU|Ib19~B)(H5sWas$v;=Q7McXu^-$(^7+IB+c{3$pmvLIBO19j#ka8ULeI8;ES z$GB%Jy@!fG2}g6afcY6aqPjXv)aqOF`|hQ`J4f6ucz8^eu2%-GbZ@)td{6(?#qM?4 zTU{c&Nwejq*vqR)$cUE?t@b6!_>tDmXVY7k_I?L{nG;;iV?2*!q@_3))j3U6GX4R{ ziKRo`Y0pk?FIBS@{qw}z`P$fTeA=kR2i;cwQ3^QVFS?5iP}-gy=7NJGdFkA6`h)eG z7C}P;M+;7?dIsHQ8+4Wme*boRP~G*pTB+Lk_|zaLM*m*_qU|jEA1wP__JW#&#xQ^9D}%lYrWrgVs!X`0%k#27)GMb^s~^3UYj+tN`%|8V+P{ zJ5Ts`oR!tJJ)CInGx~AGOnd&mb5fv^^z0kx^_c5Ydb!zgy4(w+D+pE|h>(%Z2~*EV zL`HLx;hH+pfO5!!bUen3cWyD`j5XA`+EJ?49dH$KTDgsO7A_IPihT9>b5eo?3mi){XX%%W=FWN82k}TG+T&fypZvz{pp(c6^0IfFSJu8jWm}RUSV&&aS$em%cG^K(Dai2N6aT6u#`pRbb%#=>z?NNEo8U0$`M}kG?tZDc%9x4Rk5e@J zC>j_|youEaKop;eR1i4vS-w)uYt`3l>S3dZ@5H^e7b?qUYSO_tP-1np)m6=XwJv$N zX6xB%xxjHj#fjJErKVXbDUG+2xIwx2HtT-S(2 zUMW?`KG{4T14aP>S!J$??fsMYcQ1uWw!?rX6Ou`c!w@m0US4H9>Rh-C8dtdX!CXn1 z?3jI5m_#gY;oH7vv2Jg<{^P7}gGss1=twiA{N~jCzNhv{qgmV%V*-Iwea2~9V@r3a zMt6QXd_`+yz0y8Fu|YvFu-Y}zXAmf^M-n<`%tWod!X6@C7;4M&Uq3$H@%RzoHAB!B zG!U<7uu->pM4%cj1pMm#O+Q^!`|IodyVoOx^w(K*V8=7d8Z=qNX2lmLvm-}Ls23YD!$bQx!9nsr!E$K-u7Z>LK08xpD}#3WN7;A3 zN3&b<(%>uzGr`G~_kqiAmwS&GcaJHVtqd^w74~R)d&NaNX-YCNICMt)#r_yy-)^>R z9Hjxjnx>vqo_JGlO1nWVzED5K{xEsclYe7LN!7c~sw1(HUc($Y-g#uTzw>tRjQd^l z1Fv?&)9Pbwu2j3UIj(Hgeby)pVUfDP=MIw#7fd!BN-S^8!WC>p?0 zfUbt?TN^eEHip*N}Ry8wd+0qN~5!7 zy-ieVfee}YSzPOI?kgI)2auyBUiASzW-SDiiz}nba+gLWaU$tuhIhQ5J#8*^EN_Z% z!s?qHX0^#6f&TulSupuGCOr*fPx(jR z`+R-BP?&sF@L95J8rZ-8^h}GiMh=GWo}0~D?DJ_I_r0(gIx(!~x!rN0B>3n0xo*Mj zO|cV`D?g4iS9B_Wcyv|0*aV*&8@6O{{rZs{vZL3t14sGZmbWUWyv~URLQNcCeZwFU z=PX_Je29S|%Ne;C7)OtcCJ`nCDDs9VYuQ&IpUonaZ?a#!1`aWTL%)0<8a!XZ{(IGb z(yid_#vRw|8%cTJVp7jme0tR4fg<;uWKqXtLZKM@cO(pNf{+cF*Y1PhI}!)pMqA{m zOa_MzP41d)-y4egQk%W;c`w(|Ppp<)50IF%1^pp$5@C*3 z0MS4s0mSG$+Tct+i^y5Jb{XICY6K1ZynzW7o@C8tb5}%9 zy6UQ=bcerdz_;N)y??Kqpg25`PwNmHecuDlEEHihU!FGd1{$Pq0reODFvV6WwRXe* z?fu10x0>2d(-jL@yOhQ9EvvDV$Opqxu8L2Wf|~rLYxyctyjQ~}|1fsDRT*Nce?1PR zJda`{W-;07cEuhJMQJe`tZqaCn?>-}SwsYFfD2qnt z1LYz>MG$R3xPlcRXlR*ZR6w18YrX>scp6y2819*SpS?}4zr1!_S>U>@q>yZKP0DKL z1s8=;*TdT*i$DEtE1J^;Qu^O~EM1vvHd76-Zj#N<=*2dZT4J;`5M)h2+~?BNZ|K8n zd0)OlO5zmdW|2HxMtrDY)56OGqjP{QlI7hgP>bcgjPUuVCWBroRTEXI1$X+7w(HgU zOt1X1z)Dh)XKoa;;308V0&g}OCo(7WF+|X(yvM$3%EXWjn23&LJV=N$Eb}L(SP_l2 zH_V~}jT}ADOfJ6#nj0 zR5|nPVe`@2Ck|5|YYE;cHep_jWVE)E#a-o zD}1(_=gKd9$lB^#@2h>C8uz5-8G#VVXU!g0ey*^oA{l>d~=kRGh8GEJ0rNV19?{8@z zd)VnwdTsFIoXk-)&$<8Uif#rca%hik^4Zy#a#dshSG)>*w`Wp45MvX0P4z7G#8O z)XlDL?7U@kum|3$D|buai;_7;Myh`CUn}UWm#NLGENRV@LnDY_$P$s`Rd={_-Kyg> zB#urUnxd>26*fFIlR%)#G?`r@R|m$MO&;ciIfDE;0yxYj3PY9sjm|HhoOqbB>olI9 z=WXI`^+8UaKg+0~(Ys1Axzb{{*lq80n(E3TWAsh(lc^rjIC~k1^AT*$CcQ$RE_n1k zd2aVaW$N0s8MzU*myIUcS2SOy4SPKyVF6f~bbt4|;NDZlp5FE+0EN0VbR-O?O97*< z4@8xOK}AF$RRb#f7zlx9G~NmPUx*BHyd3y`J;8{oov1l0b{_#Kc(Y^Ow>^>u0?j<&=4qz0e2kcpvGUM57Ia zqA&m##1RV0v4+FT(D=NNCf*jScQ~p(zX<%2YC!a-{)y{t#)q@**N zWI`Rx)z1JGe#`cqR6z2DAOaL)M%Fh^D-4; z+@-<_K7Px25qoUXG3PsWB#GmL=!%q2oj&Jz;_R;?(T*@UpfP-~s!|=Kn{Y~rX`;+YyhOX*m4%M3_x%}Rm)9ED;GnA=e+%Mwf6WGM9$H??$L5kr za4Z6NY~Uo0Wr2aM$^cyZKG0SaJ@eJe(aR~{T5uigzjiw0)un)Q$#<*jAH4a8xx~%y z-t*%r4-%1-5RGIlyd=}+&WN$zZMi`rA+IE}SBM)Tg957{sizMoVug_zEQT;pEHUFx zj}QlwJv*Rlz@VA*?bpG_VYmp&k?1MA$^1L%g$}J$LT951)7Q>>xAW9d&X*5^Ern*L z!^(-Z?o-BE6ZrtvSzR2B3e(hy0_aCm7z~$V^Hc~A0)>%dA;+uNkjjr{nO7uifBhge|z9G_CVLOifBN>DO(n*FWTVC0BvaH(su>co1#F}+VzST=J@_hc+D31@1 zo8gW5mi6}oXN4dHG74>gJ##~o_oN}L4GzaT;=;Ang~MB*!@U`=n3%N4h9M}Dz2Ti` zLlnIipEUq#e}d)spGE{iG6)(rq#P0On{KS9djHq-%*roUzaz_xcg$+;K~p<{bzU1e zx;wvve=I%A6IoZ}J$XAk#3`rQt|&e-(t$Dhy8agcV(rXZ!$ki@K!rz8%$3+Y+iqVm z^|R$g(mCT$3mlX1(+8rj>1J-OAg~^s13VZ)dZiyCI)@*;+67dxrwc!7x zc(c)aL}5x}^wRIpryBBbYt7=_5I>LLk& z{0)e@BKi4au|g+-PK5#dpnm_GW08x+XPg9G#kTD}lZ&kpRvJ3k%b-BR+e` zE^y(3UyO4n^J@6+NYF}gmH*eBFJ><IwGha3yU+5P%{^v&OEl8s9-#G1P2#YeiO-C|p{%fM#>=Z2TY zHQ*GDCZgMNn`l-*eh<`c5`vK$D)39{@dPs zz?07}xg&P39aEra*=l9Q(i49WXZr34-2Pe4c5L5y#F4;#QHG!qX-xKpSS`^|MBVFz5Z5v+0RlD2CLOu}A={QDETYL$`%Hz|Zb`GCet zuo99V3vsk%o-~V9=MV)nDIqxwL>49yjaap#spw4o3VQ?2EF)1ojK!e%l_mkPpP%@@ zjoJg}BDz>*3*{Cjl;6`;mehPxAxXou-+r9*E z-5-gQG4E*)+xmDpNT4=)lgW%!yNNbMF=FAi+FXm5%b*=9Cr~-!u7U(G=>TJk;Ki^W zzY^~-n!3@g8aQ>&(=ftgdHrYGbaBLL>gemy*Rv^grQ=Fc>*ifj^*=sYdiqT_8(-Xs znp|zA7`rZC*h{Lc|K1Kn3ycNQ7miNs1y<=)owHOPf0nZ568|Z3rq$2;%0l)Lf;)-% z?NRdo?cIMa6=DIDmj5=GT&N@M6?f%a#mGzGUOexjnPNgoEwz>uY2Se(A_04`VesF1cO zANU*ZPC*0Kk_+GND5a)GaGa~qaAPtj*l0#nkv%UgxiFoODOI%CR-ceqCf+a3K~e8(-2(QJqEe2BqbCc*aj@k zF}qH#e!W@$SCC)u!P@Hjocx&0VIUE6sF&W+R%+w!E+U(^|IQ3xYXQ+Aya9%XNZPgn z73MsN&Bbo6DYl<-_@9Vt*a(ygG~V@OogKe`0oqRlNCxXgoHh?I5u7lUJJtF`ntk?( z?$5}(im9n=t-p7|KOI_~h#C9S@?=)}V&LRD|FxpdqZLEHzkH4N+q^Tm`C;zjc2=uf zO;G#v%@g(0bAtYVwHA)hYrhQW@mYRK_A@f_I%d2Y9lu%qTpXAz(Ds-9zm4|aulrx% z$b-F5al}Q}M%D3a>nhvMf&r6jBMZi=drh%=cjNDsr{9{Yc;NSIr(u}V$Y%sj4gE3Y zB_}nLWj@LzTVc`Ij6_i20jMF;_d`7-7ATY#L&E|vzXWW+O!rWZr03@Y;LkW6z?43d zby|FA&OT(Xrc$5q#=P9hT_+Cxvax;G5%Ah{L_>98B4%hTDB++FTxA3d$Mvchje-;8 z%p^24C~!`l!$#3?9MD)4M*P37e}CTg3DM^38tkjjE^Ry1Z8qrb0HuwxZbq%!PVM>e z7o)`y;iv;47)jAYGpd2Bz$37?gNB80#fV-L0Z}FqLr1y(vAYW5iS}1pN9s(kM`)Vr zYS<+!Gj&Y!rs*vW`v5g>GAEF_gAsnVAB`+}Ui;0+_P(dL>BP-Jujo z4#bY?j=p7OY5iJp%XLO&bhcP+;p~L(-{Ho1f5yw_L2d85KB;u8Eo_>`tIe($7wj8K zQ$|ztR$5)RuI);a@6M+g<9+)FgMj@4hx+~NGz41!?%(fV09Q}sI~aoKj|sc^a}2;- z3V_nU@4pHGv$m6)g^|lD^`BDslN;?&V-Ko#xd(*~Heu#fipaK$zeL z_;?_C4Iwk|I1*kY8>5ZwB~U|2oCvc#vmAX>O%Wsr+8CiR35r9)VpR_UY(0E|-kLr^ zsPXP!$NPLzku@1m!z4 z+^oeWi6&*7!Z)~poE-*8Mu!q8|9G&T*5*QD9@#I=P(T)E4IE#DGD^z^%NicrA4XYA zPRr9<*dPcc3h5iz$i8rX`*rVo^Vj1Fg$hZLudf|t@>IMkUzs9M=ysv*TzAVsLYh5q zNvfR_MO+VLX|}HFEvp2(1Yp=(QjOKxjNk5@3!t&51-DNRU0@v7Q=6JI{&Vy&)05S3 z6{au}I2z+Xhfqii2y{W&G&qq@6i9B_b2#(Hg4f|79fKi%DRw%{y#4D>U$WZw`|iQ3 z6TTOJm8YzVRftuYMlSp^Nw5F)=gai#yGl&Gj!(}Dlo`H{3H;}gNn}`menbX_W8Z(% zQiqUqp!?540CmB_qs>sgoJ0ty>)W5*ZzbyuuGN}p5kR;e};YC<^D5W|;eS=9o zj*t326UWL!lmJ8c|Fr#3Di54UEj1CCQE{uc-L05p3|2BkMk6iuYTHNZ?(mXz$dX!d z_plk50WfJS$PDmiFljgf#f*r?HOC zs0R)%r7DGKlU0GY>*TvCju>zAFFf1m5cJ-&wb=6pyX{@c=$>ZW+X>u728tJn zvf^6xGbr1QWNS|;u7{*}}B z%2S`Ni^f^^=aytkwf|$`DS~@vr8M6ZrRiMEB8*EkKpV7x>*GO=PC)T|1;qrqG=e_Soe_s#!RrL3>^vLq@>&#(j zAy&@Q+H?^1v+t4M(clQ<&fTBBeOKCmM|BsNEhd1n51v3et<-BLLgyWH=0Cz#b%$hH`k3uwtroBsS%N~eo&%xx3Gq_ z$g(PUee+rSO>@48=f}Z3T3>v+F>^|H!DQx%((y2}NXZ3e*Z9K8ia>MKiV0ta_iS+M zu4TX5D5G%7!Swk-*nb#d|LvEdj{QOBclp}P*Rgbc)m>|~wffEI`mYXqf$71Yd_stT zy&|d90U4N<@*7(Q&MpTuGFBaS7ADufo^tD0zJLE-^|Q#IQVK;<_dH@N9n|hmjt*V( zt~2!_p=~+y2w7!7D!mo0O<|#E0z(I}#GtTPN7xwzPCds^_*DYDAybHI5SAGON{2ch zJ0fEu2ZA_OV9P_k8RRKi4)Ay*HTuz8iS0dACT{MN@&LO&x<|+EorUL9$y1lk1M3m? z5iZ2agA#%vFkJRnG%|w2G{iTCKoTUGBNe2r7r!n02n0Ic!tbm3Lucl2e-s$k@fbxi* z>Yi3Q;|&6hu_F5Xz_8{f-YZsly9&S=jE%^h%E>=Rg9qYEcHdp-_*~dxtrk%7K=!T5 z_D*23|I56)EUg$$;l`*e9*O~t3(8k~Vd|+*kuibYfKCz|xxsm`hf}BAK$LC}O#;=4 z2*9n+;4l+@mE>5C2DoD^^o|MK`R>1N`F`>jo2>ur?D}wc?nTO(6H`EvVma;T0Rrhg zEcS-&(-Jlj9?=6bHZ2xTq!vs#43t#BVy!jBPir40m6~vHq4|b+vq1@t9CVwN*5!j_ z5`+Oh=70LW|C|9KFz3?(_Rb8sZ6DZav-A#}URzeSFu8s(2SN-yJ%2hDc_2(H+UU-~ z#0=|$pvELH!l352evWYQK*gxfsP$mn<%rRdsgau33;oqK&)Prd=QNs>=HCJQcT|#o zj->77^9DKEFu3MvfX{uWpX4GSFUdcYH`+XQi+wrm`}csEE{}4x&nId(bGPGfO}+`3 z`JFSG{P%~|-G{y{hgQQE!#(;;Qfw6>lu*4ttbQ4#+5f|@fju_1z#R&F6wol>fuJEF zCrO2wgs;406Aj0F$AZs=#gqQaHFev}yEAGF)BL_}-keDMtEE!U3Jc|kh&Jn`3+<+x zzb{VSpREUVGJYDz={*nXYdlpm=At)PJo%t{b^UaqFVAes%hw@4xcH*4mpwGm=fR7Y z5p;6yv1Snn7z`Cj19$>(JfIAw2wW?k+spbY2v*NiJ%dX z6`BlzO6MjX2w-aU8|*L*R+_dz)`qIhdlCnVKa9oOQ*>J*3Bp(RzXJ#a=?RlnAgVo~+sh7X{gWok0>r?An(H6z)c zU0BeP0QL+t+`oMQMuz`rp@-_t>r7965G9j5fD<`tYyol?uM1p@$gB~X=pgCb8-(3oBK{L|+D}(I8-JeGGe%$wx3@q@SsFSOz@vHV!Io2Wc zOWfYu2HZwU!|7y2?~aMkGiIzXw)yc_$4J{=_O33N4i4?RA*W>2*XW5kG(k5(= zb)1#cwhtB8_v^hh{wFZ-4ExMS#rrcYS52?8M_eBtVyqn9?F?=aWQ^`@c5f}kk6MlZ zn@;7EzSY&R+d18}c+JsUMozn9c*ImP#_?d71~8sER5~J7Cz}VJ!G(6*bFAob|ZiBSkY{Q(?(P_$8tX8Is8E) z*mgiT6Hu$OT9%rgo~8WLctNf(#n(6OnyW_SgQw-E9<}vZU!}mKxD0Y6a}0BVh8ZC% zGK@o0#@_9-&9ptQ(&WO-wx4Xt;l`wsh%P%k3*-r3=j- zC9e0LH0rPZT2HKBX}z$#*U4x}|EpEMcBytd_g2B{H9R}>^mOyu&y|U~XA0*u501Jw zoj0OtiGa$rkN6PTc%mqWq>Z62mB@rN<skT$`7F&WLfV{hgZb zv7K;!;3@i?lZALfC$0e+WhL?cx}z9 zSLr96PL>ak=ZjAXLG%QI{bhQK0Uw2lk77U&u|5{Q4`ZUGNvkS82wr_#+0_`y-sKSA zEfa}ZryJub>f`?*c9L(S_mgGR_tK8{3F?y3qZ+l)p za7!DWwo(0Tqw?otP)XYK<>a(m%R8U{hy=H%|Fz#5mS#L?y{$T`U_0WIjNMS!o|$_; zZ6_dqmU{M?ch1G8mW4S5!DBizwHCBbXu<8kZRs zH63LtVYgoawipJ6iT3L5XWya!L)M$XL)nG@!}pA(F)b#INMR@$ldTfjGM3ON#*i!_ zB(i4T85(=Gr$L2`E!nc~qzFYs_K>G!$y(X>_l%z3@Be?__k1#_J~Q`ypL4G3I^XNM zzTZeMcV)YWmVLmpoHKsbbwD;ox5D=+Z|nVOof?f&eaoX%z(TN&jMo90t~@` zF%6P9&c~_xEezgm1C}e@_K?BX{~6tUaX&Z8$F_~LJy*6mDqs7KyIN_gVY=VEtfm&r zom#N%m&=U4Y|Rd8W#3$YpcF%xM#Dc8fxDe=WapZbH7OqR`!mvN!GN2;CTPRiC=NW0I5+AAmlY5;o9 z08AlSH@BVVB4}#Fs;^)wE*}}N5|iZaf58C40sQ=}0iTT*;OMZu#M9|KwcJ+sSm?ai z!dK@(kJ)=715rK$vI@&Bw?6q#j6Ha@Rk`r0roE)7X<2ggLHvoPJ^!>9;lNf^FOCnzdo^VJRRAX#7# z(;#q$K!B6EY20iy{{}<0VnIzyXw%UH$DqUPjKm|%hhZA`A;Jw!K=byi-*)(QHq(Yz zK*7q_)+a99YdJOy&1T22LCtSfepB?%a%F@kp8Yx<%=_k`0?btTnAoH4cN$`0%xp?; z!uZtr_;hn$!gF!8nzr-x15Taiy&dQGHs$6r^!qQw1!f@6l5?P!DneJOCFgB7jh3By2K|uEZT@nabvHRZQ0nxFQ)>L`F9~*-Hn>tfDCzC!4u#>($44vw+FFh*5 z_4Yn2><&x#q3)}Pv$9pB)WKU>=U>)7rm8l5Hi_Nq$?t_3%kkdJQs$a2PqH#H0-2#q zlEI5!VIfy)ur(lUR3xTp170VH{2Ar4^1JzWaO$b&raR$Qm3adbZzcQxi99hiTDe%@ zxzsZ8y~?M~<#o;L8sED*M_Ep zM~uGJNk6YIX;}$<&BN>W)4A%DXkoNWMr~`e-e_IGYSoi3S~~b^6W`p{FgK4gvE0pM zV}ba>j<*52Ph!Z;!x(K0kkkZ{hKy(^ij4w6Wp`l2NASRscv1lh#6*Mi7zTewGNwcO zU^i!lP4GEWr${zN3>ibwmw>u0i-U0>^{II{vPu5lbvJG9bGk%4bI48n_@iLJi;X=W z#@v>kW@xTX`HM8}$ARD-_XmpHjhLPMdEj}&YR96_(9X761xLfy#jP8x{Mh32+4G8J z%vAA1kyo|D&E8vQp->l&6Om*#YpRP&f0px2();F`!G%}8wLUS*m&LfY%mRw?qoz@Z z(HITfrFcSCQF=a#DT@jZChJ~1oCO0XvQjVaS&l2^ehY%8)uVn^Yjwj8zD=)gP2F!8 zOif`O^PkOURdDvP7_NW4_UG7C-mKc~g21%yxP!ITU!E^J)cV6a0Fr zeu#66FMIsETbzpFZfG> zVoGRv=DRzbd`=~8|GaNO80eik4+Bi)1cRe&QF=B&#g%^Z^w{Ws2Off(+u!ruEU**h zeKrxPBWYxSQc=(8H!!j^xPAu321PKX3oD_l!-}j6ba0lOBHa)8O7cg0SBu14Ry;4X z9|&#cJ|HKmXUCd&z%`T^!UxAb6NqmMVvh;|kQFn;$WCtm=ImK7_i5Jq3Z>ktAa{)|AEk7H*obz?U#)qlJvX6J{(%6QE7M#I$6@3#-pC(`rx z1jkqZX>XUEH^0AoE^fCZPd`4&T)nhdomO*EJqzIPq?5VWKi)0%TKwP zdtQTC^U(?GGBR8sh#nmMzXmX{N*0pg(dAp~MvG&!9bJaq$YV2i0DJqBLDh2<8u9|c zfI%4!OLKiHpkb>yoaZ7vCgbrd)+tYl^<+%m_{``+)7tYfX|1Wp4#y8jA2yFdgDf%M zL6S{EZ-lBc9*qFiW3bZOJjV+^El3q=k+c@)4hXRESqz`zmENrgnC%nWtu)!SGTjX{ z-4WaAG+j>I6I59L$e~cgEnEwBr4p=*Gj4L z{daV2`PkS_8*4y&XoKz7*?aT-&JF9ULqPIZ()MDu?oYl0Qjwo+>P<#kb7R4AE5ybO z2ZVsx0bP=^5Skh!UXH>^gn+skkYfb3a)9j@0>ZHAm^8)+q);CS+<*!YggxoQ{oByR z!(vS0onE444C}bZdiliIurOF!xeT^WO1Nxk0dKe4cJ2Pp2ro%+q^?2aAkcxB$=5T7 zPdzCPjvM@5Qr(gf{aB{>uF&XhyfSD(Ex!BT-R|G=e=lS*@!j}j?fOVewf&1D!U7bF zq6mBOT1n5e1Z{@90-{tr^8OP|n zR!^1VmadGjOqFY}1T?8MQ%?dkI0jmSG#5k~h81cp+=|H?uxjn|ulg#~9mp3~x!Y2> z-l?!EwI{pRA+{C2*KN9aa<^^lck7j<4i96gbN!>$A64_)CO7j#TVbdI(!Or#ff#{4kX41eS{ZOlwG zT>Cwkl97daQNc7F)T@h&2a5$x0lk`J@OJzlGNb{R3Be4SJ&!X|0NBH*LZ<%@x+BCJ zR|`-5T=|e8T38}0HFW)UwR4Wo&gb>F&F5snb1#)BO1R)=+N@qXR; zHL%mte3?$77j#8alyJs{xmqqwH#Wr5_3GoVP)?zu=Xlj<8}*= z`{EVzr5%L_JAhAnbawLfPociUBz|yXNWYzQVuX|}Rd#Cq0O-uKV?X8&p3fL1c-Q`x;elxyRQ+iu0`ZAB965j6Ck=cdI z9nH5vjZJB*?9{+!;|)p4(UtT*U|7)f0DFJn-+nLV+$wE7x%Jq-w87J((vbvcAJYhU z#oRQEAz3L9js`IZSNP7d_tMIm@2`si%a!#TU%Ut-Vi8R{-_L*Dd$TF+ugtqDs3X68 zRdYy$*jw#2D$EtttB2HNuF-#idI14(Cn6pO@(Af{A_zPnbt}LSgFvnmuLz;ipmZh- zBm~3k2ci)jZq+6y3ny^T$53EL4$_l|F-v1vY|$ zIooO2r;fIWlWC>kpAyQVdlb_@4x&aset)2wAS&IVpQMr-4^rU&_W;F+UNWU1 zV{GYd!}3Yr-{Gv9gkY7UQ8|Z`m4RS3!*Tsa;R0sB%tRy{ZJ8|{$YalQuBxkgEfr}d z=itAYGmyu-9mv|y``FtD?{=F9*GZUC%un)Ux27X zmM;C{uD{Tgk;5ko$1aa0g*uct^_{DYW{0Cf9`Abvj3FKCX}zD)DYeS_v2;aPYGCd4 zZjQz6qBFYZ5Ht#?4m_9(3x;E{AdT(zXmM<3#AJUQI=y84%E zRm!Am??YL^lL8pVOt_LwLcROh{wEXOY*Az|FXYcSbqob?a&w*y5m7=Rh)=%Yt_wVh z7U|6u22~(!|DgU~#|vQNz@H!#%lVb=#UcN>wJX0m1fR2(VuRC351#?eUV|<}w|+w^ zlVZ+075+Gsxwec#F)n-U!c;?H^k_x5oB9wwexV#f)wVET<(Z0JTX5TRBz4WusE&of49jV|@AmgJ$zx8=S6**s(oDiNh8(lHu zK6UEUW|y*-v?oZvg9kt_)Q1ZCWm3vTCr>ZMz3#JWZLS<64n)HEo8F5*qP$00gR-V9 z>`Of%A`GGEr_UQTE^g|*$E~mv=cw?z!vjpH$=9m-(rzm)kByPvr^mJqe)XTvGrcI5 zT-SG_m8W2@OweHo2$2aVL-;dFz~G@l2{Zsm zuG`t2w`kONQU%Z*I4d%dYfSxizPi^u;5&J~-OWqJ)$14MxqDA#KoAYx8N`*F3EyK; zrxz3h1ui;f3j|I99UvD`M!YygM^ifNUDu6${T=%M_}@W=Xyhxt289Y%ElIU#6iMie zp>YlMv&_$Xr;CZDR6PPC4T{9*6l7C!NuB8oij+&GHcA6u2!tbOoKaMA(EFgP(jMHcEq~sEGPQZu%3F!D+3iij zwo6sh{|KxcP*_@1SaA#(&GvtDu8)mjYr5wllYQMl7G zwz3-I9LQ$ZdBdRC26@$>@f|7%i2!22LJ%H`Ko)d?qMkcKurvrrI?yP1EGXIKD&VJ~ z(4Y_FCKV37oG;w@V|oCb?}M!h-LBk~K6h(qBw;F4IL7-yv~$j%E6kKwkU%jjJS?pH zeee>nClHiL2FL+8z>s6<1?Xf{NY~(Cg0A`rZu$cKzXk?GyJW^#oUL7XN(dPeP)fH1 zDVbc0IIL9~l^??v{z!$tNk3VljVp@X_G8mZpZ~MVuU_v)iv|4awbmq7x6?0oNK8sh zYSHm{LA1&f(5r$9(FKYho%$IW-QCmHVXA5j;V2bz8yoG;gZcV(8;$cuTcaxre~P$Q z33IHTBd&=Zk6e7^uk1#r29)nr@b22~vYG_+^)w4|I7;R9msBw`s;E=MuhWi}-2M6B zqT|QMZhes^XV8+)4?wd9eYzkbv8zNvhHGl_=qV_ znVe+d(GmeLe>020A)AC8Gn+gJa~?y1;)#5C2$dd4PrM00Z*?}p0qOePPEVZR3V?MiI=6q*X!^gj`=d{0y?0(3`pO*YiC8K*L2f`Y+r2}c) z4@W0R$}m({3Qn|3Jc6x26sNpB=dm4GIO2b&@G-MtUPRPmEDV_gB&R?jTi^uzX22>ELsI03V!^b0U{F`1_UH{ z7Al$%3e$sQ`Gngd{!!-)XKbTj)2Jv&IZXAOL|eoqAZeC;leNxi@15n6i|OXClZhUk z6C?SNtsS#{elDuYIW!sy&IaS7y5vuzvWiiMyRmq<0K2Y1Ilo3i|5D^^q_lnLj<^QW z+@6OcCUUF!sLs^qP}bRTt?fzPC9T5UP7ePG-i^0?PAe0Cc9(xP*BZJ#h)M%o2@n@7 z>t?T$N35WinCb6=*D|Il9?~6xzKQ#52?F?=Fn8+8MdFalv6&WNTcf&45ZTN(u}0FHAAY8Rw*5ISCTojr{l#74jg z#L|n`xXGaYFwMiIa>>lv}MG7HfBITI)lgbWfK*lWPiy7uixlRId$DW07xg z?M02wK2Bccyp!UQL2tgC0!8B!Lt9e)lccTB-hPD*6RfXi15O0&?fv;#xb@BR>*)8_ zBh`zY9k25d2rNwCB^-M`qxYK+={WM8R z;Zte7Lz1&_Op~F^qZUITSmC7~y40(asFx^u)lDdm^!`GUoiph$g^ddd2Zc#E>+*_j zZ{dR)no|x@7vj@u7%5Rvy}i_DJzVC6%p?O0BRUpk&4TU5!ucTq8jMO`zw~3;^atYXT$7E{V%fJ^h5RXLiN;~o+-cS6j&X#OGcAb zQJ@%{_L3A~!#?rt$D#OU)Um^qoTAbJVIxKEkt2rzlV}bzk%Hv!MqZ^b1D{P`p!4$T zWAH!;3WilOy9%R;#}QcK)P)%7ksATiN2sc$cGO3ATMlzVzuE*>c>5ndhT%a8At?`p zePDov6w8LER}Rw$k^Uoqo9HiptuXkOdlUklU1aQGyeop%ouwT788?V!!W~t@!kEmC zmxt&xLnx_gR^?OwX{7g07p5@)_ zwz^W~=?5P1{4aaIkHHHy6ycnI0C^5OgiWK}c@qq$*z7COKw$^amgGbMJG z($a}*rZYb`|GoKqo_EkDw|2*7c+M@r)32DP|Lyyh7ulk-MLgcqIT_smUAI1zSR*`a zHawUd3V+E4o(U5cFEsuAN71W@wtp<`&l0W$0~e1-?5T}xb~ij7N5J3}u~b!1K!kzQ zFpOjj8LV9_mL@^&LLLr|zN*XwvK@FVSl4$zNXA0Zn|V|{7^-7%9(wa3$y=vEfxgb+ z^t$FW@L@uD5Kf{X`oo8T;Br4+*$1(KVFG_g9|B-jfYfIc`JX^IC+?uGB0&h|s)$Fz zEstxc&E|`?-LExDTBxXPmwNtsb@}^XeZZ`*yPQ|GwB!k+Im0K36rFASEMPVSKgVT;qwrn76y4FIOeDO-U?3PRlLDbIND3b6!lA%YCQw1( zfDQYMMWBR07Zzg~c&>vm(4dFG-09rxzyPWwCX^!EjEfmMBykq676rR?FuWJb_nwI zl?rpA^XPXG(b3VDqLT)aF1_=A|Cy+10N-72__Y$Vvnl3v>~f1;^zWAg-dBtlo=e3P zYw8G+;h+Z^xH3hs8NtOt5Vx7^%Yi(LTO@*Ib#g_INgB2P(Q}j6U7;I;$HB>m;F@2o zX_X&WJmy-u;G770#Sdki)+e;8Y8oinh}gQG)(b|V$jpEr4}*Dmq0o2S)As7QNEFLy z?X!|34b-eAb`|C5Q@Y}EWzT@85w7YRFbi7#@(Ohfwj_etiw6u!<9Tzvom!D z9QES&?u!_T1m~dOLFzZcUGi_VMyLWSbgl~s=BnrH6r~*Ld=@(I+CVTioeSNO&=BXc zEtTY!Z0*~5Q7+;_y2=-7P*JO}W3;;yFqgU`)UX;p<}+SAlvv{VV5&y0p(=WgC*Kg9 zdjH~UV1-}=AX-w+jzjZoU$u~8RF(h=r+Gv#|4oHK zt*GtYL47j%UNPtJeILa1hv^r92JxgO0>&>)0VR=lkmiLC$5UM7UeR=Mmm;mh%s7>7 zj4tqS3}0xEh~*-|iBW*M4^4~10$h!L4P<gFzsGP+%#LXd=G!WU^T=T?OGCaHmhgak~ z`U0tBot%->5)rN18o_SP1ZN}(mGiFlyuEfrT3)nd#AKdz_*U%c^TXp+)uunn zQtsVPd#QUw%XG85a3inbd+FlFa6l)}pIPa1e-qmyGm<#_=bHR?xf^z;jz*A`_A!Y4 zdB7s>el!cXEV-8Cl8+FweA?sxq{sak>d7GS+y&B|Q9?qokP0g20vZhyhyaB?z@CMPvs37C8}Q7? zw4)#*rFI#fr}+5#|K4f(e)j+piNi4AEuG$98`L)x73LmV32tLn1sz`kXaTUS{*E*V zr4EiQ^h4hNnGxWfA$%A{g^bM#&e6L@yTncc*nl-lH&Q4&nM#NcF$?Pzj`19-k9Kj1 zK9s3@|9YA3xp=M+GK$&hh;n|nwW~xwRtby9q<+!d`uT&FEo^(SeZJ3MDpbhKHJM|o zk1J~Y`=A|bRQc0mx~Jm-+O_jD;9s#_om9W?jyorJzojlcW;K4jqTklrV&ZlANTEgZ z&Yi&%>SZ9F{+|nn80|cyM+}vv zsUI8JpIfRYB3_nUk`LgcAF%@2(i6QCkHo{^n3L!2&O9iY$pld^&p4;4(43HtcEqXpTjlzz=W>D zKnob2275`d$%L-o$OL+2A#eyJ4e&^mH5Ju`END*J9L+0aRq+0OM;V4=N5iSbqP-*Y zrd2yKrn0Hr4c0qy-@b2u+%bJ>wY3JwTX)o3W%SAXM4%gP9sb{agWdOEFhw_P{|##a zx~1mACnk{0ESU5Jf{;4+gW(GVrFitAK5JLk9++IqtY;Uek}?2lSVZiYb^&G6yw#q3 zA?u$N?||29JKK`BQbx?oGK|wiq`t;UmFtA^vt>5vIhV9E4m`7dv=^uv_48@yS?_E7}^|@Q#{Gv;o7+WGj4gCDnOwzW)aCS}ZlV5;>SYagcO;>R!pUfk9uBd2k zh%F5o>c3xcv2&)sz$uxBhx=2%5NB!C;H|Yt)!Ezb`BpA7p!JQ1X{m){_r<5Z+_7!Z zfW=SiS*gF~wUT;v1f1k#T8eKknDi(03@pA%9^d>|53J(-0~VJ42oUPQb}lw@4G(I8 zBz%RPO-gjFn_>1)P>JPWKVncj$kI`3%++D(m8x1IcM_>){!6w)fnDheRcFyTQD>o~ zLz3OFK(E4l5E%l91%(78EpN^KND)kJ@baGTIOr(C`pJKlAi`|fUV`gudxB^xYU|rE z@3XXJL;kweBmt@rAWG0@pdE}x2#}P*dsPTw{J@UBp$B1j773Mf z8hhK@TUt}@qk5SD@Sq}LLp2g6zReSUtpoDgx&EUYaZ_TK15~b9zAg}(2hH%If7Il5 z+$yC^e7j{+mo{ZT%5q6l;b=$%)<<{G^tT0loFKLX-~RfH{lA33q5!B4J}-+((iuEc zawC|EL><;v(YV`QBq8&ThufH9Z5LvplVyitL!483ihP3P&sudBHID5zbDaZ+O^8hE z|8RCeLrZ?;ZtcizUT!JdWA*RTLYK0Z%oFX!M*A=J1xnAOqC&hk*ry(wt~)jCWN+`r zY_v=bt$rxcAO1ae;nlchN;a#eSgTRHu234d9(qs;mMR=Y&WUYv7p=@&>Jrzj80t-q z?y;MtUZCEvyl8jqT#+(UWQ`w2P)tH*^|Q7+I(x*ebb_j*wJ>K>qQADeAz~) z6d4QAzy?O*ahVu05yT2dvHV$GK}dm2j0*lV5M}xo*g+UXG{4A*E<1Zg#_!h;Zzt|n z$xK~>Ws;JbSpR6A!ZP<>VQAs{ChO+vn%Ac0+NbGnzFIa{&aR%^Fez+Muis&cX;|<8 zIHJOXfKS5#ZL_@2U*`&vu{0(;FtdLnL2yMm;3xXT{hvW*1NsR>mhwuyysTa{xfd0p z0xvql75+KSxm&!(715+lIa01U#P&UtU4?AlqM{xgi{uNAb{WzLMKuC09l~im(_Nz^ z88xSw3Mr2Ps{z5*(XNLN^GxOr_zd-Z(a`)}r!R#+5FtKkz}m25<+l{GzUs05@7Ad4 zFKf+*BH81UB(d4RY;Do@Lv}>4eD+~M2u&sr-DBXY%-ibYQNmm@veBFcVK>Nky)P0< z5+{X+Gn0JmHs2eoB}R)zaYv;|RS#v`NqR^Mva5vXNpZq<}*_ChaLt8f3rhaRi#uL@JcrbVwrHOZ(TKA&-R^4^qU{>os4-<_1bmZ zU#4=XlZY$Ux{6?cKsX!=RxF_8_&ZI1%`Of6g4v%-JEfNiGyOI~eF$QXc$_+DPqCis z)@D=UDI;*?G*B~9re-0wmbaCroEiJf-ln3w<9-TB3D!tN=H!%I z1F(xjfid@JjjJnX^^>-Kk&}S_mQ4|8@X@krSjyG%%+3&H$e&4(?N##Y+fsF#5e+-{ zLHH$o8atRw$_p{Wop(Dmsc7;2@?lvdnMBZL$|?hOcMu{CG_Io{5JZOseTEFv5tuAp zYZwv+&k8JIK_U08AQP+)OK#k;pHlN)+Q@5uWd?xzlbuc34Rb#JZ$nd;Z3Euk+AG_o z$kqB!uj{LQc+q=gZbs6hbR)zupeN76Sd=Su$AQ;xR9wy_gEM@IK_oKLtH?GZ)>=Rb zsBx3Y%wVSY>2=ru;iHdz7lA|p-Vvhn%MNMIwPnBQG-1=aLT?@@2xqY$|n z7S>^1?U6I#qT~Mp~w1=4~i}rh4$z&*Xd7JzBYaO1Ck5!*MY?>$%<@w$`dZP84 zA;+VO5%dOsFj+w~2(qbgOZ;LHv-F_$i^c&A$)!y)TN=z&3Gnzz*esIHRS8{q!Dp$%V3YDJHnt0&Ic^v!{QL0MS8rES z5^*Rf%?_9Uj5C^}rYywbBEaUOJ}W85Cs?y%XaeA@x<7!<7&0r26#I+>HWDKZlI1c3 zXRISkz`f8Ibx$8kYVrQVY2v9}aGb<^V7-uX(oXgmIdJr-=<%|#rr0H_RVbdtm^Wwd| zy0d5EiQ%9J@)GBiGtcT^I}f+&={W04lp8GhwRYU2hR+KGpO=Yd&vq0G)Ff-LCLAfR zTmZCJF!*B9YIdm1XL) z6OY3!<5dV=Vri5uUC<-L1fyUGkczfs#v3fk@)kpqalHm&{8Z#PsuSCo@c72v>qCY< zveJ1k^`3q~3jp5gv=!f#naP8uf7a)2`427`UD;^y6Gmg$bXcI=?DoEi;MSRcMCJx1 z2trwimmxM~DvIW6D406zD!2v+BWVr5wJwO1gN{%FNdk~Thp}S}FYiAsw2Blg*bC6` zfbN1|zp5*n9~0|$(o(lPb|zzFUr%h>*Y;Ob^nW$1b-$~@6ljNdo}ZNCHNVNS81U`} zZ!)XlxpxLz3!b02Qst6|3%7Gy3)gq8#P%q+Qh&dJK(7n`;v(mvz< zm(>!FWQ^Zt>_@;Q`<}=++^daoa7jEVOEH~rFi2ks=4e>{qFM?M~-o8%DcI? zCx{sF51$~U+10pRo428o+~?E}al5RA2mCn4(Xb?Fe8e%}Zp_2jLH1bn>(?3k+T6X0 z#xqYR6#y6}3de*J2_#`6tSO8nNJ)c^qNJnIj5jd^7@(&>f|FJRE*$|1YvG}Ai0)ts z%Z!u|E-E2sh_v@DL&wZhkID0QOx&P;2|9yLIV-T=CWSXiH131;MJ9nGtqIydgwuQU7Y-gkd(mA`Uu0KFk}xQ~4N zd1}oPIIpGj?ruEp(r}GY_Rzf~9ReRCf_8?B3A8`~zjzgaWn}7`xj!J?8E1J!dbw=T zdqybxQFZAFwJehL8A-F2ubqZ-PSMPmkWjU;?fii4tAz@y-wo6dYJ8ABh2_lZXgkN` z_wk0SV$d)P(Er6f_gM`iU3?J zBaM*?p+K3SUA4w-9^>crRa>hbTWucIyQc@#rY`f!y=yuhvnuJNt2wHtzpDQ7LBjlf zpSl|Eh4$dYPyM6XmX5MDfC`Um3eHgg-t>Z^tC`bf8B;%(6*>KR8b!w8f~C2oJPkYNJui4{QF|uJDspr=GTN^!H)5wQ zw@!4AKaBbM`%hH+V{nEAD~9Im;Ws8Ln7Z=Y_Oe6&&&&1R37+1+zQ-l`eHk|3t&Pv?sspy;T%dgN8-RS8<7ovrKwSR6z54)TGJo1bJ&qh)9pQ7fi!%LxX4d>xW*!E7+2Z{z8X_(Eep1 zVYs`p3(-k-m7pDa=RxgY1|NOSjI!OHi5MY)$v}h!sot01N~ZyiREbz3On+EBuE1mJ zhH9(uMK(SS$vJVm!-sOhyW--W;jEIo#oraB4+1sIo2L)u&H*is*um^XR%g%jVyCI0 z7kE4ZPfa(3!}lvt@a3R)CzGsd4VuE4(lPN!TozFY35UaA;Y9GkZ_>zM?I{5yI-aa< znPe|1cwS7-KPF~u(qiey@yf_nr~V0tF{*sm^k;1DgzJ>oocQgJl7dn$Ju<9m7GlQ- zy}$I~EahvjYz&EQo>Z7$+kLsXb7FDZ(d19S_6ydrrKtur(I5mr4TEM1(*-3({~gBm zfiN0)I2iCn{>O%*NWGDFr>9`KSI5Hmw%AuYEsxgH@gE=NyQ8aX>c%~DERPAL0Xb(F zSxFK1(%eCqx5r5?&uXKG`wZ%Tj*b*0wRbo@v(GitubBe}-#5~Btv`2z ze)oq)Tlr`sbD>;-_&Go8si|&Bj#e8;d@dR-$m%#Jb1fzGhE}DFMGSfW1cGIJNk1;v zG%Yrqcmxe%BI0eqp)g&A1;HW#f=38gL>Nk45gV95R2l?as7-Q7JtOmL zBgeJs7Jt4~6RY$3d8&1^M%LWa^^A<9KvrAyR!O2t#`*D=x0BnWxvgA3UOo~&v??SR z|LpPnK*NCJ4uyAUw^3~UhnSJ+N}+G#0mrSUV{6R={y<#BR-G}hNE?;Ll(ugW|1w^I zYxw(gz=ScX*do*^DtYB6B(bCSp7OooaC|P`nm52>@?pStSwzc2i`Q#MIGR z4c5!Ei$x+2H(7HUTsYM98O4u1WV6se>Q!YrI63Jr^@-=X+(>?pU0Rd*P^h1qNtye6 z@j}Unsk4V%dw*O34MfRoNd9<2$NkYv=ZozVAMEdzjvgO2A=t$9qjXVV1JS@aF=u?C z>aAB5Z>N)~!!2$mqM5ypZIZpcZF>m$A3`ucfkA*K;STm#n5r@jh!rxQH_J>uMH))3 z8S2F08-a4E5>~wc-{>4IdV>Fq_@M&v>sc>!q2oy?l|i@q>1LOl`jpU-GA<$(bjXt7 zVS4IJnPj*&nn(y_BeTH>pja1)2hRu(pmwgSEWsEwxrsUKjO!0ok0^)F+<6WD zKKsXwcJc)}nn~GBf(`SbyK1bCXfeO#l-Dai#Oi)sTp8GXKtM_3mdCQhcVzV&fnz31iRU2be~q~7^_ zsD(j>hFWOc(VEf9t(@U2m+qY*nVFx5ArMEo@=WBsxMElrSUUye#{78Kfb25^Z!51) z>xy{X6Lkr2<#a!f0$;$D{r#f<41*|F&#-~=J2q6~dvU{K)hNX5uk{;a+lMPz^CNGi zx@=I4V|aab^^XkPy2o+?$eIn=wY{)wo1T6!n3188C~91z@2t+4MjoH6x|Y>B_-WF@ z%U#ZAEa6M8^NIV5TOp^!}EP~_j4af;rJxxdVTcBC)QPdc;lBB_l$;RI!3>c)cJz#7`m)E zQTUAFP%Jk$IN{HMTfibtAe7DdD|_LT!*{y@N{i1C1523_u~&G zbqYoWSW{|vvkJdhI_nR)jVgiEW3bt`1yT&RW}0v9pd<}&e{dj)o)_$yq=r>j(g`**N-MTZvL|U zTKCCw=YC@3S2qSb!qB~8qxYXtX%z0L=nym4+vfZey-y53^_Tkmpgw+P<>HYnnr&eO zTKu}ZEqM*AkE+SZ)jE6{uQQkVf-<~H+D`FhuYA{$KxloA<8 zxxkQo{yT2}6%Q;|fSMSR*`+(jqM*Bg18udp(B=N|_H|4K6u~jjA^mJ!I5+FENQb zJs6J8VuY9&qKI%^7+FOF8y3XOsEbu%=_A8YXO$3#DSE0JX#!L%@B@H1?7?7Hn`F}T zw|Q3I-9&lc(G3>f?Yz!PWB*SZucaEM*7lz77zBKOygPT&WUG2{b>Y@2)1~r(x{1-v z_42hb=Y~cVgr&}l{tC_uD(B9Wte{1&-yPw6(eF-uUzBW_Z^<9`{)x`f@I!#V_n2dX z!kY4KhSct#0lBEkgeiM93kIg(1ac7ZzjHeMw9d3Yh4dFt#1G6YH6e>Zvx3HBviXr! zRzc#^^M=WXYGSX4SK>VsW>=>-jIMYuZ|b}%l%AKxT9&e#o$q~T01xlr;Z9(-L+EFF zNqWdmPI@|<8+o+;yj)<91R&=0pqbGy&k3=`Xzx=}1nsM7SnyFqz!Z}Ny^t{kTi~q> zclL0fQ>7*@lLl-C5rK0X;gF{A*Tcht*c5}A z0b0oTU{F_D$|H5XYi;|qbp4)J!J^yW4g+`7P zkFhPFz5dq!TdCG_(~VybZJKW~`t2wkn^`C59U;JF>sal}yq z-n>Wr5qL0J(K-ulCUOR!G*{h6PGt`PG$ce@B~ktzb^dnrlct`&`O{KeI5G~IJ4ge` zUzO9{>X^R4c+}xAcyYz-joj7EFDb^8RUyVfy!R6`@ne!&l!6dE)q||F$F^uJuH#$=<4U<)@XV14fP3$ zq>?O>5EPXF8Akn?{IH`-R#m&Nh_z(k8r6jp!qAv^s&7KN*l<+11U<$>lK{@F#7Ide zFwX*ib8c*wW6!IS*EwKyCt%>W)OO>aZjb6K-Wx27 zfD>t1aOcmu>|P2;-~^_wWz8Q`__y};_x8n&8No7#6?CO~!Q)!#j)cedt*m;9{dET;@`-F-4A#`(1QniFbz#a87flw39v4bsu)m}jxR!(wHv3-uW^gz-&(yf z=HcU7XJLYXH$seT2-!|+1XTr>1P%tnr^}zGWV?LqSQ$#bmn4#ef6K#dF24Hh!mHt( zh5U=Upfeyi0Z1`1fg&Pxgfdq7It!QtCeVbz1iUtiba|owM(+5=%y0JFyz;zY;=1F2 zoI`oVO&uLPARrW=q3M}>uESxfLg^4H3S<)0`Oc6ejc_k@k+|Rx1QY}hiI!g-EIvR+ z_u38Fy_d}5%IzL3b4O=sM&L8FRgNP0`-&99`@dqC%TGXeB`~@g*ffG70}?FfETuq_ zA|piwo+Y4r8sf`h1L`Rd^zR_(i01Vfi`h+hy{fPy(C};AL5ek?ui+Q_Ebwnxl~*Qq z8Wt0GSt|EF|K`5(Z%pZ4g6YQ9z4nGl)9s@H+YNsj6t>D0?0Ifq>7OySQ7sngZbn(p z&oCPi%r0kyg@;p67rRjBM2n^KBqUiVA;g)m90QsD^>Tlq`=#7G;DeF^O(SoHzlT?C)ibYKHqZ9J32JOY8Red9KL@ZLI zk0fHLgUiw-i&OZh>Sb(75)^CNQ7#A$f_O45Rt7k^)tSAk(ec6# z$HX*eV<(x#ZkV8YpN7_E!{eCxZm_uOaO0?;_exnpH#gIr23fykD}uo(1Q;HH#Phq( ziO`O|2!YrQ4}++WJl^U5$I4-nd++C;fPijO|8}cgqkyHt8ozGGU9YiC#Y(L|*Ze=L z71pnqZbb$(`|Jge?Xc|q=3TN-m^a-$w>vfOxcg+u<*PT~hL#)lXqD6mRjzcg9byZY zcfWIslgo;Fk?REFq8_I?-lF+vl}n-VG0+GUc&Xn#&m_71z{=U^#4E-JbATUscCZ}l>3Lb!oHDW_hQL3P95ED#>FxLxYG!LvzY|OY9 zYr3rYuDJF&9bo`mTzWTdWRW2RJ}r=+pe#WM1Ox^cf)D^5hlsjF?9g8DElx;SvG5oHr_Gzg@UebBtLsDyR$MsyJlCT*Ieap6q`2 zqdKG>4~5;x1zvxUN>qBPE&yQ=M;lRg@MBTwu}`?zg!&*-x&Q>VGVr!Ev=;72kNJ+p zZ2yzG;pjUf<+rT!dUHyCTVSzaeq8EnftY{FUiHYr$|7>kFLuO5B!sc>p$fYkyi5an`lUXC=lB9%FRLUic zGq*x?HXJ!MmzCwNloX1hGpC~C*6E7l5|t>){r_@)|HuEo!grkVM6n6`>{wVz2-^jy1R1TLzFdy$dN+UGW;QNr zT4|xR-=gVx^oiL=7XO}zJ{vis)Ueby)Hx(_Uf`c?d%m=L`Nx{YjuSub+I;DalZ{;2 z8T0DG<&BP3T`qU>{tnoroh8w`Oz?BGZT*v1SWEBQlfq4UY_GZ=+=vI=?h(-@&!RGB ze125q#Kz5!o{m20{W_kBk8_%HW zrz914z7dYrI1*UJ->VoU9js3+6%Gy#FE3+vp>R^m+9UT~13l>J(97yiy5?sChlFat zVEP!KS+8oBy?C%<%l9{pue#BYW=fCWR+n6NJ7)Rmo|UI>ZKF};ritJ0e2f3hz?i0* znwGYnC_OH>;pomk&ZKC;15{$N=~bAg>c!-dH8-DrA0C@6^uM@sJ3wcD7@fT-IUlVm)|El zYuJR9`z}a)8yCJUe=mABxo~&B|5N|hcdsg!rmxQCEI+!q{KxX_yQr86i>9Idz=S;c zBy94ShsD4^m}!!nwjebWcPf%MZYWL((5@Cp(+FUv$)nc=8)#F>dRu+YX~dbuE`A%I zj2%DmTFJL5?0ANE509gWVIcnpfv@bpc;(&7i_a&}P>6ke0>9akx1Pv6U8kz08+DAP zoOJNpZa>`6k&8SnalsMGGfyXfe3@PI^#wKR_g98R|K@h{`;wt~p{_{08U9Je8^4NiCz;a<4}uNWM_0 z{(A5BZG(eTOZ?K$7Bhc4_&ct;$?c8W)XSz9Guc!Z!afl_M%Rm{Zg*a{QcCI(*Pp0-cfQhF(faM0RcptCOyM*co$r7=CA&1RsX z!0^+74z`P2G1?GyFtDJz*}l)cssL|~BByI{^-Xmu@^aaUg+e|Kg(^%zuXMmPqId7? zomi-LzItv(GiFBKH!d{p`_g001<~@<39sc}7f1HS_{Po7Kl`M)Y&`s9%H!?Av&w~q z9IN{_=OTZUc+>@^R*=^2NHS>dshL!~+Lpt_GhV80XZt@4eb7~7h%cbUx2C2?$1Hvc zKNou{X6o|0>2}z1o4d)1s(!~k%FFKVY>bLE4K~ir8Q&!*Gfr6s`_B3KR7~t_taG#euuZe;wbjE>J0r#5Cr4+qf>mcO z$9&N_xpBRYCmM$|hhO&BoU2mOdlbGyX-2m*%-23wRNoW+7aOZWKy&yMPo~g;&WGW7 z6wK2gnM{@~D%U(XsHe-&0J;kC99cpxtC*~&CNVQ9HQn>G)Q^$NJ%D#ORx5kKRIVH> zJGhfJAz}n3@^EaFR#p(U8yt@qNEeUJPBbvu8zT7Cy@Ru^Fl3J|6Su*RDM1oDh~SDw zwuOO_0E7@>MsE1{_t!g%KW>g6{oM3*#y93`+}xn?Gn*-kxKU?qW8bF9ryJB}oNuk| zU(&Ji?-_Y@D&~>;w$ppONkVS316?!RQEP*QY3r|z6Y3tMw{x@IY~>htBL=OH`)K;y zIX4Y+{*PXrh>kUG8lLzT9sSpx;XAYc-=NdVRsj;dlCtsklP9JdUhdw;c-R6AvuOV_n zOqm-U+GtoBexJURnLt!ok&_zvWK@!qRFk&0|8Y?M=zfowQN2Ts22QHSgN~EVEy~)jlT(G6A zeAkCCB|?_Y)~y%KdNOe)OR_qVC(mMF zRM#`%;VdC!vVT^%&OWqC?J-SlT_8oJCP_-gxQf{?gOEf11U>^V!QkF^7ATw`UbL{8 zbBlexWYahs@-6OqIgi|&$+287gtjz1*zBM8c!wL^wYoB_mMV}DQj_$Y_2mz>1P+

D`jHUk1aWd3T5t)KgobEdpCT6A9B_4(V{Qk0(e{k^&hd z9rz}}kn`pdFa|4^(i2JRX-FT=j+I#B0*jka-_!NDObWvSqGokH&-C;p{TrR0KJ6^g zx^g!rF!z|Cow8XOpTI)F^GbqGV0-TgN$CmQR^3TZ`<1(H-v((Zmu|+z-f-bP*dm4` z3650+u1@EOd(VhP+_w!r%a3N_Mqf3V-br7b#O3u=<#3uaSty3ws^)@QWMuD7EryV2 ze@I`%IJS8RMpI}({(YPs)cJ8|UxWPQF;?*=u1`U>&9c$TV`X?N$7J176#fA?Q%fQ}c2 zDiF=48sbT7mZy#o< zv*{OTl5Sf0YM=1+=@Mis+C z!!F>Fj+Ns;`mY?r0b>Zka1zjbhhr%n_*7yC{Js0*lm8x}SvXl5mg-(R@|UE=?&_oP zdyO(DA4A6s^eR9=@~f3n^-g{GI|CrYr%Fa-Kp0ofmPw|nr_|@~{-=A$h=vn`Xb(80_X(?TaVK%RwE3fywYOl36N=_ivG`m_3vpnc3hKD`e5mdpW z3`K^RO6i~xbX|CXLNNg;8Gpi-9PxI{HJ5Y%36BK)pY-6T+XvIqv1}?urL4?DDlH3s z`cHzp=RlQ9HWyECz4R}WW z{iOnRxC9M2D1s+-1j?ZhT0fP7Zf;c=bje67lZ3}iFN7{XvRSx0VLiXpGQNN5hXu0~ zS}SZYQ){jwl>prm(rg0r7)njbVarQgxr*KO0}n5>NY^Fbd$v71Lor7%p}yA&57X(e zNdMKrBsc~uH#^Wn#TW{O$3Qcb6_L~xJR4h(z>N3T#}zrA@RlaAQUw1vU7h;L)Ysc4 zcY{T#V+L2j>~s6Zks9ZX8#c}#F?tU4SkZw%F=Y2pTs|`-|2L46f5sbiG5%goaj8OmZP7noL?wqUi3NVgQc0krbGwk>1n&QcM!N9-kY~ zH4V<#v{{huV7z1Rw-?S<2i+QFe&DV|vafnn#`&B)^`T|cMA+Z@_lV_E$DeohZgRuj zz+fR~0Q?A%xPS%%Kz|Gs#8yh;o3w4Z$@PGnL79nXi;tHrO(#SOhE8$|ORZVW3a|jXWkKb=A=P zZB;eA?&sF4CK1R8nT=3E)`CVzPqSYI;Rr+rI-d|y={A4IecV5oV>3N;^K0|3Q9{)5&6z>8_y9cO=|sDrkEM5VEv`mur!=|q+J20c+JAoF{f58aI_b>s#LeWVmI2{bOtw=29ddL!FrWQGkmM6Xw ze@bXCvm9=@|801y$gY;C=(2t9$GSG_0I%@JR#qC;{ol8L)-E;UtnkyBsLkSoCls~q z0#dr()0Hew>R2(R3zX8;kACbkg={O?5Vr~o1C1rT<1uw@scn< z$dU>O-gsR|jEYiL!^NzK>g+_spdm;TaS2k7Q(lg4K|SGK!99p!py&l{$M+iT!N};> z&qf1JhnzN4hapy85L^{y9yf; zq`jK$zP~rk%r1Zbt}bf%C8M{!E#h9tFJ8g~Lef6Mjg*37!cQ`fBs}#N5q}6plDW}f zh@2m^N3`$gr#j2&sVvpPC*Dzn8;A zkwD`OuShE(;k(wqW+F9|?23xbh<8R(?vuJFn=Pmq-YSMIhcz_X+1?)(eV}J&_P$-4 z>z+id;RVN&0AX`f7Vqwlcb~h>9>$J8A%tTiJx*jIyq>@mzBniXk>s+wnQs z`rOz4$Q^bt_uT4GB#@RtZuS%+lGH=GOO&3juD5lskeltmr)~7z-^>7OvA{$MK4C>l z0*8k?nktY={czOoh^pFKN#zC_qWTAAN7a)y9^f6o;;=jM7VmRkl}YOfictefsL4?7;y+{4dSs{U;Icv1!$WhS4gY3qC!0GSU)xr3NT^2X8?xn)}bMnW4RlcTN^lQzE>upD)cdQ}tp;_lC?MWaBF59Kp6HF-Jk_#tK z-{6k4e7tVVNsa0=JWd^! zRQS8$QEIfHqRzhd`OEXaop{#}vrRiC9bSqIsfmFo&)fiVs7?63zP@dPY5&^_@u|p+ zh;EVhf=rnK=YfXeBYXi`$kBqqWyo?dx*D(Z0|cboTWgN&{GBc2YmwNi_*tsVQR2RG zp1vs@bR|?u2g{5Y8a*%as^RW`x;eS~pZdBJnr$Q3z17NJ;QhwXyEdm@;3jcpZolJH z38byEU-jD2hUEdu`xA9_*|P=KJ*_8$EZaP;NB#AWzEntD*@Kn)^uKpN_5LqwLO?r3 zmx7`2(Iq@5dU4GWX={dh^s!qVodv^NPk(#i_m`>fQ>9_M_19{+mYX)~-fqrl$WLzg zcBy^Zq$OZr((h2|gpX$Z3h;q*>sd4#zq3?yKYH0M?&I{!>8bB8dzasz0J~vO!S;in zZ~`t_Q4E|3MTCw!3|%}Cw>K}m-111k(>!x02~4P_x3=CrxA^bkZ|~;D{=PR)?C1*& z$#+3B^+kDkvOKob(3KqE4{4RUp3K4D|CkP$MN&`{5(q?mfexDkTLU+ToC=?SP9oVG zOuipB^!JY}z0jq8;?`PYG_;VgOq!n#(`dA&ruj=D7MJLV#%c)>Nptusk-4PH^*Yn? z{=3G=2U0Fu6$#O08-#_qvt85C9S{6KQs0Vgf<9^+)cg)Uyuakm@V0&3g2TqR5J z(rT`%)gim5#q=d-q^3oF$#l}Vc5UutT=jpO9OO2r*YxeTrteB{xjEmDWj;-QG5tyN zcju+4xS95*?|RD(Ct@!IVL^onk8m&;0hp065iF8fpK&K|&V8nSK*J({?({@ay2;OI zL%IWluA3!)<`-Qu&K*PE#Q^m{R6#S(1t4O9$Em;a%-akhsSx2o*On{Gn6dD+nf?Ce zIzT7_*qjUpR5LFZFD>Ksbd}LN885f_w{1KcBIJ_g*-(iP*)C`twIBf@;u*>uTbdb( zz+~W7@r9fg?X}l$bDvKeilTT5m+Z-Bx|7RKvIK7YW-ghJ&aSBqLt#^Nr)wMC{Er!W@BCgR zK-VO|3XoQg1H8m5+8O_aD_BLbfE%M{Rrl>u|0PCJ|G*`V<)#B_=@OBMkh#g`DxSK^`&9s zb5S!9z51z(9h1M=Om2w#xM8_x@$urH(^V=*FbGrb78*lA;*9w3vkpPKFoP_4tOsRhv#s|{5>(ZD%CnW4!*#S=5xQmN&Ur&;E0WxSvaUJzT( zg)A{UbIvLT#wBw`CYO$kc}l7g?1Qe_3j995AUAz;m91>cFr$$g|2Bu0fgy(Jm-s;5 z!*Wo}5)7L_6$3qh>O$hF{)8s*;fAThdDCvLHaEYeku{gH3eVY2*@7W3S>J$+y3b=R z3TuTyl<`c1l79Ve_ERqHz<`ft+Z|`kL^oyCs#{ypJXJi0eN03^SBX!Xvu$7MxA$nfz($b7eDwdFivQb^m8*lnM^AP1zqoJ#w{LYv%Z1DT z^aX~Sm2I-*y1A`&qNp&nEF9hBn|1eW*2`}ANLa_xox62n>ZR2laogJ{7>h&!TCC+{ zr8Hf+^n2X$ySeWcWtj8C1HMgP>lPl`oSZaXO1wDt)h0*vJOe>M%o>%Vg~8az14LVM zt-1I5{FeJ|4#A}oPsM+?wv|zHyfR;ij(p)hT=eQuC|jxFXr;PsS^ zKdH~KglRl;5gG&hlC6!6vr7j~+$nu)6KS}H8GMM2#rNj1e@>K2GwXY*Izg!Z)XVC@ z#t?=X;D>zhh=AmMh1-eZvjFjl7lVJRfCqCjv_P>7w?N+GP)~1PL}^P^cp=IR56(?m zSuBhWQJS6(JXu5oMPo1wa4KC!=JK5K&7#5a_B+m-T{_r;lVN}3X@}hLo&g)lR24p# zzZsDj0xPAPsJRdr6E&OCva#J`vwQ(XqymJALJXV(I2xN_OWC4f$fpAO-Mu6s^K~M!Y zLK(pbm@IW`qk#-XL+|!O;S!;?@j5ET(MaPFP;C8wCpxV{$mwXfQYaJ}2G9?Ye-9+9 z33(zBmrn!Ln6QDx-zu**G}PU1n*HXN;UT>Q$zxrQ>prT0F7RWlO8?(8C_XCNV}ADp zflHV!tO?el zkU|tC7?nQXt*axVljU`h$q4y z;5iJL-8Cq>@QnR21{~YCg^{KHUY|Cq!a6J@(hLNR zE`)aoS<7_N^z(z(wPv>oNrr8kvi*Z_s6ZXBq$K5}O9jMqvGb?pJ`GU#!$Um!fIO=+KAJxnHalhJ z)wWSll?eeT@D@~5K-TBu5e!Ahz=7JSfKOoC7NrD~TJ`=$?-bRIxzO5wy}YYL3pzhc zt@u)2dkwds1oH)+G@4MH86-(El(2*J!<*)xRxUhy{_n}PW->l8sgOhDpaVq?20{Yg z&EqFewQ{Z}N>|)H*Z)*=@%>EWkEQ-iNAtILjur4PHJ6pvD9~WeW2LhG@2;lNZXwu` zg#RvWyo|Wk!gwcyqMA+F31eLJ0}_`|nAO6M4>0Wj_Mz(9hPpkfSFBVUFplhi=_&*g zJVgYB5KP9Whi#TCN;PV!&6gO;xI@|t!x!Go_q>aptc?56w6s%-fKClU!DA?71jA3@ zx0;06oDTUIDBM-jMF8y1Y4g3|>?sa+bK;}bOg9!O-a$EC3;e!{nG6n86Mtoemv=$M zAmI`Ill&cgG=Fr*wZ{3>49%Fy4{vIPM63jbNy!G|%bUzK&8ZC^>x?y(e2t?c?*XX= z8m$anroJ*1vT|@K;aDUDy}5uWO_dUe^mwlQu@J)``dD?Sy06j1!s$<{Mn*=*@qBxD zPI$T8WHA`&W^o>9L;6o3c~V97x!VJ%f5}Ym#|~DgH17vV^P0`aXC?)a`$G(snZ z{BjGA(9C2GZOM?oACdvNt*z#y}gv zdTrUhHKCKKYGP{YB|oxd@Vv0wX}2v!U{bV49UvZ%by8*}@Tj2rFWxM!+ zjwBz?*%e}rXL1;&=d2bNESA3Qe`^!n)X>qZA}*u=2nEv- z7-F`itPHSCX8r{yhh!?5=|@<%q2+O_WTwP3+fO0Ll$**kRY<|INEj6~n(MKG zFF~DVZUD2Zaw=epC4-XTaL@RMiP(3WY?hu~&#~mOe?e&SnM9nNga=5a*_r&ws0hu< z_VE{!+sI5E_>B~U7=pdNfB@(LfoYiZEMSzuayx02r?>(>P_-rqpDTqq$ri zJ6euPp(BzK3?isWL@@&W=#oS&=7T~X=cdJA8&Hn1wsZ=49X1wvs@LzKD_ep``EJc*{GyQn^x_d zbiv6eS5!2&Fkarv3UDe4Z&1yJAiM%X(HJ}UJQU7&JhL^eg&9=D5Pr*O|xQJIIw z*+R?$&>K(=4-dA4tIIIMY<z%7Y@dX6iIP&XjU$shGhdW%p_V=1ODUC%8&nyN{q@+E0V(0pgu$1HH!Me?6QV7JKjpFYOIE+%F%;I+-+t(kI zOVjldc|<--Yk3=7zWj%h|F_>D)tn9VMNu&;EpL_uJOh z)=rnLyS_GAB4Q14&G(6iD_*yguK>gSNdV9aO_3pc>>Z^(6_R5?> zoZsoXe-G8E8Z~_Sl(ufi_9$gFtt=Df6Pc`&3r&}VwSE#fqPReexcKwj()YN9u8n7P z?H@j}MVJMhQ9ie?5jB0SE*h-hrUX6%HnTX%FW3M`70iu(z*nKyE|Td;bnEJ~G5o5iyymik*ECZ?D{GyZ2mkac)D! zSui0E^J;^=4kVRips9oemXvUED}Y;k<$*wQTM>a zg)S0^#in!+*(D}fvJtk6ozf(s9A-LzgHr2^g${|=l~67-g^KzdK$!gc_s8-*`NB%U7L z9@%<~T5gguyU^^s2^ns`hN0n0PR0$V&7N($6Elik&*ek*FG9nQLoz#~LzE@x^KsY$ zjM#5+^0Cq#VLAuT7D#$bUv@`F)6E(n(!RS}@YV2Bwc)s2c2 zvzm%})r$I2PN<~-+#j^u6{&`*Eul0l-897378R5+o@*E2-4^4OoX2IMu!U6F-TYUe zjWD~=X|vQkJzP5R#(4%(;lx4=%qlQcD*zHtRObv>zC8gcm&WtSGk1HvC;SOXtiwV? zU{ag_IUJe--ciM1uM2{mDoKwXce(D9lD0A*a1||9 z2trj(+EG#8rd`qAR-YS>4qqdNOa~D(x9(Ea=p3ahK)F9~x)` zeJ<7-t2}pZ*$!7$y2E}0m2Ax)mp7ak4|T;6P$*P0pGl(@-`-2lxx`19gZ5ffG9$3~ z+O;GDBcftrO&EuYb78yL3AkI>IDHkiKf8b;fou#wkn7`h86I>o78wmRdo~pLYO=rk z`o-93`QFK*l?^Zrc3Y2h1|39YvJr{!ddRVR&A*>lh)6EOu_JzV3Z}`*=mV$ z$uRdJg)l(lXwh8Icriq=y4*arVtFRc$wM}EnC_<^KCsa#*s^+4ww(uiRZHeS5tT=U z370Ql*rCxq8PQjT=7g@oK`g=P+9&%Ldie)C{`uwMqxR50>om5II7BP~;0922LJ-K< zDBS+@&wV3(XSfAs!RYDNGL}3*}8)}S|(gTmj2SO;qO8#&C(Y)QZwOkkj&B`Lk zZ2%$k(NXZ$DA=&UPA6)-rLk{KQBioq*VY=Yl*h5fP~ciY3=jA*+>V_#fiaFiaqS3R{n6^7z;nXBuCoOBc9x~DDVXAi!f+`mn`6VHdi8Sn9C z+|8};wVFvCOgf%9O)FH`h5ai~iUtgE=g&_~lUD)~myIBgl17KTu56fmT>4ydVQfR! zhO0oMI#ql`swf0zzZToypVMx?s;_$T{?3(xBkgE@*rfaOEPw!4kx_7=hncD*5fY$P zOTxGaSp_HrFEtSWj!swD3}Zf9*S2%H^!#mx$pMyz$u%St1x{r9jsp{WUQah)a^HF; zM3it67ytzjSwlV!S#Mo$k+PAgDwp+yg`f!tCljvhl^2FVRo-4T*no(IZV&ieJYbCk zD7WE-MG#&*Jmy>o|5%B5rO*&El{fZ5zTOcHg81Vgc$t>=rGRqXvZ z{opIZb@~R58IgHxIu7aUG&z(1>TA-)%D27?QyZTB=$!d{y_7e$ovV0@tOmnT9|@^1 zShu(!4bvB9^t^qe-m`5ft;yHBzHUuSVtG}INjlAZ(85v05V15ggI(glLD+=~(iH}5 z@wKhoLa}h@&l=&2(ZJfhn-3(P+_vdFf*}YwepQbO49na8sU1(>zn=6O1=l7hZ|i=a zN-LMdLkW{&kCvlS5YTrLpkY}c(Zp#nim*>w6X451#&Yt>N|Cves7U>qs+rI5bZ6vr`{4FjY(p+)0N|rgl7W zd8SL{a-?M*`vas2_JOBeW=K=0fwCz7sD&pq)XIKt%+^#@F8|-O9PM`ib zG#hI4YL=oxzYRGCMkw^@YfN2Y>4KKJ<;a2^>#r|)_K~xnfA$EMp)TBEYHxGH8JoUBXa=VXx za<#>(Cs}9dx?+5daK+XI0Bb1t*t;d!E&ZG$KTD#*UY+$r*nH$R+TNkZ>M2k-H|g=P$>kA}p_*s!|a_wuRH&FJv+qI9#U*@kD<6BY}QUHZ(pJ&4{_C%H+GG)8a%4 z0H&lw6X8J#&q-=oq3!HJ56)PjkeUN)rtNM+T&Tm3AJ+zR;yxsA(DdDT<%sBV+oU_r zkFEyjlD{1;<%Rw((MZ6c*O`xfeUoYH{4y@Keff|bh!vpvOpoFPj0gs6c7s`wRiuLrq|xn%Ecqf+mKQ64O;Ad`^J?@1Uxr0RAInudqW%GUFd!Y!7;pbFb$l$x=If^oK5t(;-wZ9!8LYlWPBpPAGK4;;-5xW0dA4X|$nx1Jkm$n( z9<{ceoynSxvK*{HA?Tktgyu&)oE;9OYX;XFlNyh{1=4QdWKK*^;BL*HiMTj)h^FSg zw!CFW@(VCj#Q>E9oDfIx`&wN0t6wPwL1s1hxy6txAOwE@Pe4e`%{AR4&^0Sl#EK~? zZggEkR4N+d+RP!-uxpChw#N>xlF-ceP!Uf0L3sE98$z(~^|%~73`=={%v=c?K9S1S z_-=f7TSvkBflKn4EwZtABP@7YfKUY=ZY=~p5fK9iW0y*BMt{es?1InmZlpkvpv6z( z(!911$vr4C~mp^f?*p?Y(7!b0O3)nTAyN2TAzNhUNU45NVpj z2L2&Mync5;0Q3dg^R(r4&9CJdEL!T-b z?d$6#6j0Hg0d`hxUte@?EAk(#GM%0}y|cl``VEuyvpHIrOVlkk*;AYZ((N$&0pEE# zqASLT0W?B5LYl;IV$ynT4{uv1M-OlPb??hQ8XCY1xnknkT3+=vBW}y1SJ2|wfnfP) z_+%Uwclh6$66}Um;pAVvYPYTf!!OM ze=~U0+SBUhu~y#xn9$)ENf@faj(_0V;(FGQi9Ap&fxwHC&=54AkEb6Tcvz5lGH8Hz zNLA+6$NXJ2DZs!*rX>UFKOqT*y$&QNASE@EdxP{t5{X?2rA&DiH1MI(%K(T0Ee6to zLcF=&NP)^CtWY*Da56V5L5(}veWT>i` zySczKy=Cg)4Z$UrNY6r_v~tq1(4vRMUdcvk459Q-_>ba+M_d$!ZZ0Yo*{y&%0zx1T zg+WmTD3ppI0irt`gbu#`X1`l$FgL{EN-H!X>kIvRVHOhXWB3djBq~@;@s^X5s~y+^ zdwFzVz9+uI+_4#M>VIo|UmBmAJS=+qx}x7Z*W5t-k!ZwDTrbd%*4ffkV3w)xy;>-8 zB?DJ?OS5N11tTi;>Er!m1s~W84v9JdNv50Ol8OEx(yKss81P%ucFgGFsfhDn_ zJ6T zr7$!YWV7td`fy}Z3 zOD~8s5t1x{5E=#$3%a@g&jderarQd>Vt}BxGUaK0L3kV%;lU|^rxKK7So8-#C-caz z;oXpM_^T=BO$1f{Eq+=?c7Z}WK^Nz5eE0BSog`sReHloqAP|bM0(5Xj11TqUy(ynR~T_BGuihInBV%^{}}*0)r7(i7eECFji@pO_lBZt(<4b5Xqd zeCTnG!=bV1Gp$#B&&@r^H4pDizMeC9qja@^LX@-95wH&HfEkc5y=pK`J>5Z0Yr6kK z>2vEh)^GOi0kuuwz7chWM3{B=)0eOVF%*?-MYuf?DnbSFJh;0`^0$R;6YJbgI!P-O zi-La9<#Rb0z6qi)?0@L0RG|-U$*&oBeNo-GZsYq|$?{BZ?2KC6a&To1^>H<#8G4`&Fc0gjR8WL*^U#^X^UtP}#cezT|5B8T z{h?zbFZ;DRLJ2$9JXtT;jXnKBpIu;Q1`Tv4N7{ha_}5RCjnR`WYk>Dyq2%m)|6Xqw zPYZL4A|Rv+sA(kN|AY;ssqY{w7IQBSmOlSH_{w-^Q89QZ@@V@MRoFCJg=7<5CanOP zy);MwB@|2|wHQhVnk4>3M3Z4MmO;P1_7EQ@NnHO3_-}lk3)b((>*ud#~krV5#> z6gvrpRH2E`g(BqMpy`tAX%UN~_u`H$H}@`&PBuj?q@P$?chRD<>3fT&4ZFi~i&&g#K5MN~=f&MS?x|9%~Mm8_`J+?C0uWijP+84{t0 z$tnOA7cV|&r6+QYyKkSA$CeV=^dZZwvfpYbDx~H|i1K-5JkYVq9ae4D&BO=g)<;V3 zB?bJB$L)H8oy<tE+C-s;(I;=+6BPQV*g39%NdvWKenh!UhNsdjE|{yl>2)x{O{xOC|yPoN*Kyu`43 z2q?}9xiVRQ=r*gNo+hEqm=cd(*hxL#X`;~1aX?|tS9u{g7eV~E&lZ6vX1jJ)uKtA@PjH>p?F94{%ko%z!YW)xwsG;d zn26Y8O_RS}o&EBBp%0G+=o?6Mhii!lb~*-)lI-DejMGU^C$t3 zq1bO@*0D2*M}^Xr*;KY1*r;H8n=?Ed@cOp^aEDoBHbR4dD7l8_@N0xaG4H!h8LH74 ziWgZAaazS7qJ)UWVDgvfF;ibR?z1j=voad}S+K=wC|dK%@SB^lKUy`de?-i8Uud$4 zUFh7u{Mxy3=7-zTM~~+hPe#7|9In3kAb3v%{N7g^mM(vAKV27*)TW5Z8y=tqgsPBV zFt@I)H!P19@w94h$%>MQ*Vr`OmBoaE2$tsv4v5`c$QLr;>&3RlJ!|TJ*XJzktcEzW zw#7tnAqds1-#mt89j^OU1FEJ@n$~S2zH^_y|MsePx!m{M7tMvDtIKaI-<^vHd;81I z@kcL+9BctRA7r8)@hrWCU~xgDvi*!#t@dEp@7-tThZo+@HjMw;wkGBuJX#SV0f*6E zKM)pe^~d$2e~g*R4_WQ(u{YMMKO%D5t;5C@R?{dj6`&&26%Zq0N9HyEy?J%9`T4Tc zX8FZh8SYohO7sbL$Ze{pYB zGLDUyj51ggUO69O=>r%RN(+Od+H3iJ)8gC9GgC5>a8$qABmZ|UKRq|jWIxSg2S}Kl zLKVCK@1Z8;?FZK9`UIjr4io{Py7CJOVuKIyOIrKJ9o!R>X^Q4z^VbT2xcF2a3aCB= z0El@HLQO?^_;l!*4J6^#t?Ruo?sP(_(syp(x%n|Ao2h#zVwR#Wp0!z&8aI9^h~0nc zZp+`Bbag$cB`t223ITscVX~_d6H+0kz+pEO7zXGI>^;_&b8qu*R7lz1S?!M=yDHlKK`Redt!#_@&Eo6JdA-WhwEnE3dd0&#!3i^bIK{C%wv+0qV!}a2mwp%#3(;zoe{20#H!0cUOxDkQR zy}J0<9p|e}r^-iKUR4LL=M}li*0Z1FJz?hJTU>8m>!>cu$$-g?=So+MxnG4vc4m)U zTgETkQMz)c=Dp9w>Hdhw`td_S>rI074b!1u`e*{M-6%k*{Lu13jd8~lK38JDijEq3 zP(^v7JhT`M>3YAV_5I7Ws|qm1crkI891W!l{2$0=utGjKd7P2E?qjUC)|UP{%ugzZ zQWiiQL>I&pn9P7;Zt7|#g1ldkx;x$W>`U$JubNBmUp0NJc|BYiF+JEc5*>H0@A?VN z3Jc%+b5n2b_Z`?>pkVjXQ$@8#kMtTzTB z3QR>OC#dvS5)V9f*DW$WomZ$s5u?R5n zuD|Jr-qOvuFBffo46bRie9PVmMFKQRIs1C#6!v@N*X1f-^Mo1G@=#x|D>-L19Ify5 zOn+W*v%VV})OgSg@5v7`6Z5Woj=KNKH#&A|;f3@j+o<_h*2i+=@0Ubp+quMb>2AzD zq8?r;fY<>Hxq|ww3c%o*u$h1Cy!iLk`Ng@<&xf;}-Zr@54y3ob*@E4{Ccu+DS_CeS z9Dr`C9vvOm*}kcF-%F}O%DwO3KlFbpD5?%C4}LSf?Xz}p5F0!0=~o0sn1$6F?4U2i zFxyVNVJbEsZ~5Cf_Dj_K*EMLWxw%NjmcwT06F9w5Z}&2uGFRas4iRqX2pI+iT&jo} zuMcX$>yCO&d*6TDdeZgbukuc{*NC8#X#io9qAdQ2pP8GboBc@8Y0h}RmUa5CPm`UC zwd0Q8Z)!HyIQzzZ81ao*emi^KCTj87^$6=vdd609vH&&%WhZ|l{~zW0Gq1yNRGOJ5 z4z@ItjLzoraExI3X7f^=?84^S3VjCK3<_>wje)k6n9n^QSh7*y3GAUc9%~I8uS|WO z`xvFNx7cdPWGnfK&(e!U=ljbqma?*(oKS^+sSb|8rPHyqcb2n^mt?(_u~D=4t}oBt zeAhHNaW3|&Mdi{^)6~1=Qx|{CJ#DI34qI&Zol>%nowz(X;+{p1C~LdbLq>cHZTL zG?M-C!rgyC?1EMN`D}SM(P1#{5Xr`_jU% zwtq~=>TId^#7Z+wMgCW~bjJ*jySUCk(J9M2r(UfIZ+e&%sH&*E-KTB5Wj?@v&5<{4 zgC9I^t_q)J|LO43)&6L`Bw?Y;BV0}O&=!prOt>lTE{w}3E>(+?9!bEsJp}<15tjeyqEQT z+r6N2=LeA#P*M!HWecXnfsVToqGGrY#_4Wq7~~`DW2sQzG2}q|s)YB@E%4(uL#Kh^ z?M7_2T)Ys-K9(oFCO*3!kuVvB)e}C;Z(%^--|p9CuPKH_Abs}B$DoF=*yp9zPop9& zuI{|L@IEHy>++=1(t>31cct-Co4KXOmCFgvpRY&1F;}2=E?=eG|IoeJ_U}h!3{UlbS#Wey-`@MUx@DFBX{!+N+qy3^I;_l;o#9~<7)Ub#Gu#_1x|O<7~KRuhSgC)@J5&Yc`!dfUF&^x5<8|Fg+a zik$lLqgDHDQ$+Ns^7-MPkGBOFWxJm_cdiCT^Nux6{wQ8^ed9>M_4&+gV_!c_Qk~n? zEy^CYyu?R~x%&n(?s^M7KvGYiag3Ch#3rc- zYoI$xLWC#VP91J|eCi`D$Z}&Qmwtl5{zly|Poj|0656b~+N)Hzic^=OgWvA{) z`t?%Y_MoC-dpdZ$qmk7@0aGrJ{@0UZdnfKFRdCiEH8XmKW2Is;YhItc+#Y6W)DCE^ zX#j0->5n__WO^|oJMigHSX0{B?am%-{B&aYfEY^9PNJS43rM zPX4*s03tRuMdJ1Uko4{GO!x2q+ahbB(MWTe)7>0$=yoR72=`QG$te*cA;&}xnVK_` zyE%NK49%G$a;PYWtt_V;3%Rur3nAyz@74F`QT8$T3QQ`)P5l1Dao~8p^3!Nhzy#b%%5P*m`_Ax=Lk~f5?+Zhy*B?Ui|w-C%9=ey z28%*qi%)-mE7L5hYS0^w!1)s`f3ppID*z^tptV zQ=f$d4G_{`5Lw=I(pyunYa%@Pb>@T1?l&?3pAJTRfR3v)`{!in zcr03|((UaKd9<5fD61XcEisW)9^+nnEG8NoZ9c;>_e<8jP1!hr7c{ zRpaFZou$8W-Z=ZS_@@3c1!F^vr)2$$Ds+wD%gm|=T7`v+%ir_!R(l_Lt$Nby>KWDb z&RZR<_@31b^>ZJu>ur9pGTy4+GvE8(@-x0=6`cJmYCA8C*QE3A?p)td-gO^7vED`k z1O-Uqf!cPaR2;;W;&6FA+}7^xC+nK<&x34{V13!FA?CK-didtW?ZeWGPeOLb_73Qw z_&7TOkxR45)aEbm<2V0Hu8`5nS_!I3H2mGMa?3sB=Oi_?u!yAI&XoN70m%zP|D%+p z(+5Wye3(aEc0{51WD06^FhU7xM@-MZjpL@(ToLb(_i`=zkMJXrRLU>3F9uQoXF!kZM zxr)Nm=L+NjfaHo-+J46JRwC)`(OH72J;A07Kt?g&HRNFGE;VHdk zZ>CQ})PDi-@&3|xzx^Y~5@#!5p4Jq3N`^fDs6SWciuF2I7mmvt7zzp7WY$N|ZBFl+ z<9~ipvSd}P_&;uW7!xrTJs0-NV1Fxbv(ROeW7RycW8e%vSDofPiTUB%F;kTEcbo%blU8S!#DvTkB-n+Y5TK*YKUE$i}y z#rXREm0k;1zZcZvm05d4ew~&KT0He&yIG;N%?%7B_1=S4deK1O=0aEF-R(DN{Q|x4 zQov=&=YjK5O1S}Psc8ogNn}_r?#7`KSrQD$>1_XCj;RLPj{cnEb}CBz7caUJWJ>NG zq{1sHK-Pe&H3it6sS=NdW+w`90jz>=NY?jc`46wA=B2vaUA5Zl%_^2|-q`szg>r-| z$fFVXSb#%$3~LF7{|!)N*?WjmW{|lz6v+D+NP?b_w|zT#>OcF-yoYE7z(ogg^|Lzl zOOtGFxlbY6W8zBIrs=rVltxga(eKGOhLI8BMnB6ru@j?5U<5`Db+zGfoz}VYvH5^B z!}k7pb7Fpy?ZUkty*07U-EWHCj9#+aZ$EE-U`ltV%}%Z5x5v)my{SnxtCo#lTjFUg zYb|?+_fz*v>#bVfwREgZtaiD~S>0V%Hr~mfX>vEWguq;xLS71;;3GcnCGRO9&frOi zxcQT0J7<`ywpMe@D&qZ#2yTvZRdmOV<}7~+<5SBIdZ?kBlKy_eeypj6`EaIWM5lUq zgV_bCs`$7%nVQ!2Pu241)F89QGfc{*)>9a;E>*6@Lwg;yUmDGYy6i6LG)IR;>vL5Z zHGXmK4h|O`92}sRBO084Dh4{C&4dJG5D*FOckb-`uiFi0I>X1hM>*O+r7Z)L%fP)B z#y|}!orD|~hUNnZ(;@FkbJY6U9Q%5xQ$EZF4#&yyU}I2t4%)vM)M~yz1Zd98elE}md-asmeB&U>~i8V#Q zb)ndjW^VuP2jx6&f7mkTdi3(Qm5I%nyw}oFfcAO1>mM314oZCg$eTebi=S%N)TTK4 z5pYVVt6WcLfSqC~%~6{QpThX6yp_Dj*Kh`RLxzz8v&M8Xsd7@>m}Ob0M=d`@H`GPpimx)Lum!8zuv#- z?#2*n)(i^(?_M})tjNFieg$r<9&6chW0{p(0|J~P;N3gQFi7AB1o2$6s`_=uXjojV zdWJqQj~Bt~4iy5)tlKvSKJfa3B_s|9pS)VYuPBcSfGMf?vG|Oa28Z(^B2O%>v_-#b z*-tgTvo$||Jw9uqDO%kaoQNih?043ey-?hSQbih*DUzs1VGaqzK~U#ThMoladpc>P zi7O`i^ugO8%G-(nK4H9w7Jq0WjGiDloE@@a$e(68BssM7y)EEL6>vS93)d6yc4KvM z3UUp_@D!PlfxKZ~yhm5a+2=E*|#Z88=>S+0WbVk7lXurKc6wPx#2h9HDmR z8#V||812~Io#%Aan{}zRlfyI@VKq0N~dUfH4g%QQDR=FpfO$Vvh zjn0v-Un3*7G^LD#$BkOH2jhoBqI!~z4#nFx>SfzgJUk>d>Ohk^G_kR5PsF6C{IL#4ybmf8H zrR(FyJeVmbELl+4mfgmbi2M{NUG*c(@Z$}H_t28-lcu$yrlCSA@+e>M=6~OwD$wZ^ zT!9FNxS$_b2XY|`uA1;-YGDWz@K7*RYuTPlbBSuRV%)CFv>B?Vj;gS~G`L$`IGPye zh0`RYrX-LmTXft)~B9?<;7N#2!&S_6Aw}dj9+2lo4>Xw z(#^q=s%Rpx>?1==5ef+dr<-yjYe-A9g}ZTk=9%J!|?PXE1@<-d&# zn1O%Sq}V8nv_2SR&sy#K>?lfCtxD`~bxcGq?lHD+AG-%nMV=DIT8R8a{ut5t_$b3M zlMw@KM$p1X`ONg(m`ou-y=!8JiuDq5+Mk50^G{A|AIZ0>ypq^1#Gn__BuiC1N@Xb^ z4kLj?Fta=GR+NGT^a}zInPD%Bv#l1ta&tzxH~l>tv*$WVsi(v2(Z~OIAqynP_L9kO zt@&IoxE$%hWdlnN{h>Pseu@-SW-p+)VsVEVz;73cgB1M=+T2+P)Au)yTHE`;3;^@|dLK@ic{hvuE6d^z#3+xave&UB12pF(7e;fjs60}nD z4CcK9e?*_eUi=NOP6GWzT;_wG{L zb$?Fa)}HyZdLq8j9j92p&m5xir$eqXsKT;Z3UNVM`XlynCpFvK2Zo;e6sRz+W@kTY zHH}vXYrg>?x8wyBpRt4&7f3H?x>jj@VWsW1vLMJfd8TcttUhfke0DB;cZl8dyZ*r= z@UjYpo|8Nmd%r-~^6kA(F&G+KvZt?q_4}mJZ>uvPtj* z>Wm_zHxY(YacUDyR>undPyb5;b3O(`6G#x%M)QKy(Sw8=DAZHD1tSiHLg3$RkAzX{ zy+SZrTzi)Ou(kR5*n3E7D^p}hFYX=;+Xo2Fz_t`AC@2UF3r~>SUxzt0Z@;tjjoPE; zZ7y|D^ES9)k?&vSeck+KWO(OF9t3T#O0B8ry+0CY?rvsrjcy4~D0o7<{|T>aen7`k zDLs3M&ZWBfo-U{TYE23Lh=^z~clTC(i+X+u14;Nah;?8gBtzw;0#k(b9aU9BfA_ZK zhHo`}RZZ&;{9?Blzx!d`e*rF|6%s^>a}|p#d;r%0+!5KU8B)zI;#4>!p$t_w zMj6T)eYUx_wjB~Ufj$jTuj0nXIy%2Gy~wk4zyJXAf4li>bJjgDD@~uuYLuu)k<9=P zi~qoJX5CB2D+cJx;`uT8v{DBUwK+9D=J_USdFh`!#@IjnFBy0&gcnyLi|Pfr9T-|-0bfIwq;bc2IYtqAv^7)IOk+6#PsZY@_Z#K4(c*K|lzhk`Iv2hE zz9y+n>zAYX$M+*%H*=qg+F$${x!Y&7!8m;-UIHM{ES(8k@41pfsSu`Qo4SOGg~|vh zpc(#ctK>2EP-ZdrhJW;8%lB>L-*)?rJ`P7EFMG>QLS)t++;7X}7a~7^pQNc=>TPgm zNfG>l4Tc7SIwaXz3%W``B4z4k!7rX@gN4KL&oR)7ylfJ&teo)@Eig!YYpX1SH&H+m z|8iv1Ivy`=H}yGlcq)Oo@YV)**g~XMRAhnVk~tb$Upg}vH1b2&Zzg`M7m9*f^PsV0 z5L+;Zwi{DvYj3ws3;8;Is@_yqNLyb*;?x6miv8`eLC2SVopDI0<(&Oo!<*(iPGjw9 z6HOP6F?fK&PzG{HM20jbx`NwZ@UM{#T~k$v#$7**g51Jq*(fJQb?8uWYjc| z#HR(GmS_{Vnn9YcW`>*!luim6|0;C7q|#MM#ru#Lp2(TclL2mjAf40$T$^tsxKinI;1pW14Wf$HRuIisDfoceUTw5{KB z7$5IBd$oH1A-yLd?eEkjVjp<%gU9l!D~DQHS*c?E_3p2=!u`qpkI~E08_~NHl1EZi zWq^V7j~^rH_wQ@S$q38J)uQN*NP~sIBj7(hMpbyi@w`J-76ic~O7en8;Y0F8nGg|j zsjG56%EmIb02MHJ7|ZKgu5c>+00zR-M{@oA$lK%NhzS1hmA?mSp3(sqpV(;&UwnO~ z*+s1`iyAPrR5a)Xf%M`IV3D{OEL5j5DE|G)kTEH){fs_AJ}y7K+9ctSt5`wbrA%fJ ztLyxYtJukg(o$AGJDxLZ6#2Trd3;F<>k4Ro;LHHa86pxPkN`4_fFmM;2SEZJZFrD0 zi|8C}*!&Ol6a%1(i5*bqDIpIPkFqv4b2pw?{N1c!>%JaBGm9Z zTZw8JTd$k%fEI1|h%{&Q;hjfIn=e+@yNesa?J?l~Ca7KLXj?!pJd{T46ikOJURnqo z9;*6;Ol6g~?5XXT?>}Lcr_9VtC{YwlZY4VL{*IPjt2BBe13PqlWJVUk%Ri4eTJ!3EY zf@~9mw?6zJeC8QbN4j}3@JpMd122LX!t;M_PrSUzmtGc8wX%S#Yd5NoAQdiQI)lgD?}#hJ7E<+xDnM8~14hC%a*j+)tyxb<#8pWEae28lgg3T^ zR`5Vfup0qRPT-%Uu51G!{6QhY?bGGQbwKzhd4&*hov4e)N5-9`&A>Q%>5AZ z{>$aUm;v=b^=ceAmEOu0b;gmi=Kzd=cQ4=`KZIp?j*n$EKF%`b+(mcOLBYK(La{YpiA_Ie$?dt>g%NBnp|ByA6B;~o&F4g?X&%+tz*XF zn{~qz?1>LKr4AQa`g07aHniYh7qk&^AUuaeA!I1~WqMc>e>C`=zPYooZWP50OUJ`a zfJhPO#e>0`&d}BWGV&yyCs12cF#}{99Ngl(Qw)-X81Z%>zCg<` z=(NE>2Ay!gbp&5FIQQd`Mm5kT#{{%rk-1bgiVPBqI}B*PZwn3rm?U!&oVydo=N#Bw zw&j-qlbJ^LhIk!C}i)|1Jl4Q5DJkFj6u;Hwu+L2u(kvwE(4c2i=G*N=A z1VrZ21v(`&=(AVk#Rx!qfCoZGv>jixHi})+ zHX8ieEM>IPIqZG&oG$IYyNn#o^mBIp0O_{a%p+boWnXa5%y@k~iONR>V1Ep5zlJVShy@(hZRD^ zMU1%ul?x$1u!9vwwS`ZXVD15{7zWKu`JBg1u%eQ=cKmpmh)p>oTp41c*w$`KWLtM2 z5=HShVjqZQA{{Gp+#5V3s%z;GT*f^jkli>669Ke#xw7&~zOM&A9s<_nJdi=iz`Oft z4ctIIwY2bockhJo@4k2?P$lEi)9+W;ja9?zoC4#smEtbj`HNqFY^7%P!bs}WTF3Te zRVoQaDg}!Z7@*_v%3|R(Fi1i$KpUw^g5xY=Q9LM$lE9KiyQDPVQ+1!YtMJMHu7WV? z*qM#JHlam6r}{i2LqRM7MXMAjA$!0TC^a}&UAd>Q3lJr(`q%$s-_5k@UMiRV-4(q& z(|mVzDfCI!@F;h2YJAsn{jetZTXAyQ+lT?Xy z5sH=Y0WNfZTJfSHItWse^7)2#Wu`4Q?{{mwMB~bV`NS7E@GCu;AS`$ga@{2M-_cFg zdRlR#q4ZwA@p|a~dsfSA%WCv*tLBYS7v1Pv#;b$7ha+@t!HNx7ZVfyj@m-c)ZJ4U1 z+;3-^F=;@hB8xG7M~$lvWE}?Ds<&X=t}e&q|G{hl)f&@DZQl6pJrT7ht~0FG)n+=p znjg`CoRuVNdRa`BjCPRg={rWls+d zA}(6d@!q&{Wj2loT~`vgHsx98=mkBSFTsDgv}VvX(e(fkXICIE_|ng&d{F2wK{6Rd zP#Oe?(n0zkdYA_&URO>__{#kJ%6+@2>~t9l1PK_SSg3@8YWJx7<6Q1L2Xj<9;GYU& zaP+z{l__WO&@pSE2m6RPJ~MAWGu054`&V~=nwpV)5m4!a@tl`8R+vaQ1K5QmbU_~+ zaJ!I4nbQF^&uMkPp<|T@0J@c?@iG9jW=fYzU~j5=r;bfzf-x`vi#Yq<<^@B zC+bn*Gk}JszB)Ub@{FUmFv>A;8OzNO`zsR&50AniC=g?pQk8T6P#+;S!l^KjBwWS= z#{v!w59Yy=)>oEX^X6l#=o$a$sd)g;eVp2yE?#RATz~X{@#0wd>LW08z+0hm|b1AijtBB+P8nYTAiMM*T&kI9+ci`^`8(EcP(@m zVoFfkxaI!M`3qoazF^_Xj2b1Bph!dy4)qAZwvhiK9&7*HrX0&4lHf0Hmkfv&wVJxO zksL~|yt1*z=3mNu$fxtZ)eWmLM)?;82oQ`~!cZpsA{$adM@vc`pxhHi0J1E6viL~! zQP#$9gNv-tg~i`zE#L>B!1@RR=NoR|yt^MPseDcW)+yQX!=faUR95cmJLW#zAt@fJ zf;`Gn=~HmV(wmrdkzG45lqE90}GVf~!B}__O#zVHi9Sq6z44 zFIH1d9Meh01MQk*M1%A~|C8{M_^6R%(e-;v(%WHMY5OFhHaF1aw6V+cqGrT;PH3bz z$Wd(mS6yyNLlO~Bs_j$BHuy94gpfLn%|8rC3576q@F_+(v7kbgtyGy`Qlmu+Qh(|g z;G=*}1SztJ=dEWx-$Rt8!%OLqK4@Pc%SP!f5eK1JJS7;tmTKPrK2^?{<<3VgHM}+# z)Jw35Ln>fmZ1IUf?dB@acm}=e9%$UsT=+tOmJJf1USQ$zs;Yq_rSubQuunPXHAk$> z=lFjueWvC-_iDArWf!Gz3ADbzHUbI7G9U^xCSa{-qPh67)Yk1C z&cxR8pvz9FtS#Nx>K@)hu3v6PTR=R1PU9NAXan zz)Ou`Oc79G5J)^}Ga&2OLe=l_+8qn%c?t*G+&AUIv zUd7pBEya4VZ3hXT5tiSmukcU|>CeL4vC^y@tE@#47IqNDTNC6VQ`18^m&mLG1_&wJ@yY$=1eFP)VX!WGi0|BT&v~}>jnegtveJf=1j${2|sN2xWCRJm`k^5$T zbZM!YE1LDVpyVk;NT~fhVD973z!Fs@zuZFZn>yZLoH^XbfC}(DwWi!cW+I_kZaC49 z7m+`MCn8$1>V|UNcZ>|vL?JQ3|0Iw)lY)cWkDs`2;qi~t;@9Y|S@+#xiABG3(>?%{<%o;(qaloS9P2{R!Et|Ugufogk>;9sutB%B2b(cX`w); z;N3DmA+SU@A!2}Pxu*)jL4i)T{RdSG3^>jvLU~7c9q~_>=Nb&`?Pd%{r&s*P)r?#= zzqh41KRJzhnf>+wjts{U=(L9e^~FYx6SG~#*I65Le%E8)mK|@qqie5%{_)Avl7<72L_@$U7Y2V7NFw16&Vac%?M7UktIEo-Vgr%zCE7S~uG7WT)L- z`o0n6-@K$Xu~)ZxtU0=_N~&eKzbka{`}E3r;Jwm!UdQL-h#a5H1B;Rly>4CB8NEi< zyASxpI)|L#;00=OaOgsJd2qdI(+jTO?b7Jg!sx}t?GKk*B12M7iV9R;dA-l8CyvW|=x5*>j+5gZ0BGVY&7tignA z8jTx_y%q4^*t5ZU-ydEY2C<1S&=b?!AHTt8au+t={hIxzb1ZuOG0SB;Y(%ZSPXCGd z5jBozgyfhQ>9TJQVMjq(`b z)W0u)I)89D5!&sQQNyg((_t-)jH^+TSH8X0eb&TfGMQC5@f&ITojqUYo;y@~X*L<& z{k1w#A9bpD*sA+H*42yF-fJ%;tdQaA0HW4-p#(^!3ZV`_xw*nJmU4sX3YMbRV(#JK z<+-`Ed-xk?DyLEcY)8CBaazKs69hln%XF{Fa{k? zmr0Tl^#EkmPgnvCpo^4Vn;LjDq-*B$255Upf2q#w^}b6lpO|x-4d>USBR}svezvo;oYS=% zkT}`8-DYH@#$5>d!n_$u&8>=OO?@}&em_ep4L;`^ayQWM#?#g*lq!4ebMtp=2nIrj zKw(IQ|GK%$0UXrJK#(mz8Or_TSDWgZI zv4C50zJ!ECAoHC=^23Lhu1f??p3M37T3>DGtd6$!_=x5}yPC_6x$$~! zPFIqMvg7H~uLC!Sl8T#t8r}8RFmb>aVAFw6I^X2nNuFMU0wIRCjNw@Roalfj{&+8& z>kFciQNV>Nh;)SqLANQlbf~UQCqW7D1UjI7^JaT1DgcUJfyzNzM^egj=5Bh+yox6O>7^t^HH?`qLOUeRJ3 z(PUoSVF6&{fW#K`VN=f*LU>Do;GL{~jzOd-rHZVdFAS7s0OEQ+`FRJ^2LDH_3o8I( zcr+P;ha_PYK`sHECqoGJ{1~{HK?W*Cm<+=Ja|*0vR`O)C;S=HQG^veO{;zkxg{C=6 z`G)FU@qRU$#hwl}Yz_)-ne%iDb9)v%R{d(|xcOuD#mLp~D@TU@wz?4a?~ z&4=KGpb(aaXj z?>21gOMJCyZAf)jRK7sf<^ER^A;DpC!`|rX%rv-+J@Y#@({U%zImF$)|GYUL!Chc! z<=BMb?4MkLZrAmto}G?;c8>A#ix$r8{ed)N-3u>fy%JF=rKHY--EdfzYisP2q>s_m!!yQ~LV6(>q18~}JbdQ)%{la|<*<4CqKjJy&r)n1gcUJ-qF~W29 zs)j>l$RZRu&c2VKLP2KMAblMA`pay!-|4zve&YOQ|J(Snv}aXpCVNoGNAGt1bDHfj z_hc253nwi_EiaV8V+zm=YXTmwNha9>lVBw1sxc%PepeAPIP}L@%&4(KT`f+pRZAIGcKmw%2t$_-GjR?{2T*86@C zuc_ZX**eP^48G#??76nzbjKaXkb%d;VX5LeemTR*+tXuXY72JYCH9{G^9uX8S6~_7 z_SPN^o7{dCFQzS;EO&S3J3DVHa%H?_N_xLOYCU5h4ai5nJmcYsOT3iaZeuQ6%fln= zor$FJR??KbHEN4sm?klVo`NIMORS8M3pv~?Og>ww07P(@pHci2{4m5C0_22TV>b%swnulUkHIlGU_G{Sic^ zT?{REyn>_=eADMXxZMyjNjwPF7uI+oh-h*RFxUq(KJXYkSBF==4Cu>z{H!=&PF#+2d;$t=zp| zjVw~<#`V_JjGT7f-@HRT>3rLtyPnn3ywP!gA}u61cWpdyb?TSrx@z-l;fa(ikD0b| zm*vg%Hxm-iil~8~4V_Le7^yk@flbH|2q3Hj-Nf+J?WJXAGglxbM8kcif7+>vkFEcv zJhbPD%VRCLyMVZ*8ud|j_W9dyxT@kh_5Jg|n#QkX;H$)g?BjV=`kJvr;Sa-y&%+e|`I2hDFKFsmul#FKxFwEDnDNlF5zE(y>FFVAab;17W= zY|Pv{H7k&WarC+N+1t%KxzrVQNaVp6u$F`GK=H|s;_^LTCbf1`;UD)avkGcCH{9Dyw zeW#lodp~!-q0*_rs1L3e81TXzRi6)M5s8%4^Q-z53XL&ze8lN~jpH}_m(chGMtSYDSYkTuf*m_jt)ihDzlYgoVg#a>UrY<*PLFb4| zgM;Pa&mO@BxvvJoGdgB<9Z0P|K3Uv)sHB(>*H^9W6Z&<0(Jy{`a6aJcn2ws=vtz7| zMgz5O&|Z(-s<1C~zu7&G9>3MEPJv%!1&Lp-u+I&wal3Ns;rQBj|EMV-5bfDdWbHQ_ zZwy&U@2=_G-TB(+q$+Gikmt|9DN!Dv@pwfX?oivmWN!=>D}ydI^`eQu1fYi@^uwmg zmq=GcFP=CGeg{o9i42FP7ErKYibo0YJn;Hi92D_uQ<-Hj%y*>c<@Hf>J&%6`PMkR2 z@%G#Ixbk{;1H&g5YCfw`?LC5X!|U_9`+aK?Xy8%7`v!jgS;&^?*0+o$=@0#|cke)G zQoKaOGcH=(wETR*-}&^{)8kHlRiP1;$;0C-3t}gZRna&Bs%F5r^4htls&cPXuAq4t z6-ucvY_hfR+a%Z^1Oda`L%5cgDvHoe3u*2pfBSLh)o&^2zg}iP8gUalWkWcW-}*ep z3J_1 zm4m)o_x4OjwSf*WH29L6Q|BOFSXd}ysx(OavG6@bWJcG$aPVE7>$}gF#{|r9{`xrXGr#&) zL+abb$k!VYfgH}P@aVg)4=aPV&&I5>rr5e(^L5e-#r3fU+tY2+Mng3OaQj1W;G2~k zB&!l6lGV}PE^AFU@78ZpS&XL;lxv9}k*MFEq%|}>CKD(c1N zUe-eBwx>28o=!;2_l?B}pT+UgY#@No3ut3_pK1sVFNea!$U<y~KRD<%ScAg9E zztmrjzYBD%E-UWnZCgo>a;oYcx5e_3-@o@0&n$dtQBj?#MGyj9WiL&#h$vLUvMi)A zB5djRT+Mgd)atw4xsc$ATuzEeoA%Y}bMiJg*}6H2?CN2(jHYcJy<5pE-#+R657|?W zc))+cRunW0EVUM5y@9nEznn``hgu4 z822E!pOJ4i4XNN{13N1-*0+>90iPpxDqFVfUiLKa9f@GdCJI%xM{O6gBS7EvD1Mub?w?MA+O^^>`APp zk``O#A_0g^^jJwE<`qq8Bmz$C<(JRy$*FHVv4dcnTH}?NkCG?)GAe|L@rTK+BTxQrE=F)Xd$DzLo34=A(iZwZa!u zWoeEvHeU85D0n*=F)&mG5{m`dQcyW-BpyoZL%`0~cJhcatRaOVaR>z{H2nwCBy)cH zb@*oI?&BUSXQPeT^}Qc?Vf)cbE5^%HRuy@=6BhC*^aqc=9Etc?b0PJ3@<4&atDEb$ zv~)g87Kc1aejE@KqE?0`~4Z#z>-%%J-*>eI05dwdE!r32`eBHlcMI1+Nmy@n%ydYhn z;B?9oY!FHel0(f?6eNa3C4!wL05rWpkoluW@H6>P438xOF9V+5GPnYQ;C}YNQAJ8( zBC<#wgTnm8f|&^$BMeEf0SdnVUnGShsSD;i8{ZVZwuGGSDpy5V7^)lv4vNA5bBxq8 zq_RCP3lrvZw#CKgPHlZVntTv6QQ)Zn^EHfEfbD}hiiWa+qP67gL}O)pU1y))0g!@}oIl+jlG_K$Dgr)& z3uNl<{k*-Lsv~!oqF1-1H`MlfA~#-5XBqANXqdgBS|fD4tb|`a9HF4m$B?%$~{7TwfcSO zvdjMeI1gL4LUX0B-4ZJ>fykWu$)2iByEIcH`g0Y%K6k|`YiYW`j_;e{IG4_`jC!@% zv;T1-@^@r5mRNa-HO^}Jz3?t4uSty?I`ran%9Bo;HaOfXBlD4m!Oh~*fvH=kPe0N2 zJF;->N_RCgNrdrVg`M#B?1clLH8G?%_2QG-j&5^K-DiEp?THv+Gw+xe4{(Y=n8Pzj zI+>wh2`{tm)#dP14&D62X)Sfo)&`~-0fdZ!0U85S+y1=l&y-5+?t>pN#kspZgIXvc zAwLDMz?C!E7Jmis5N*lKz$)}OfLvW>Xfbd8QDze${)N3u((^;5@r(h zl23)cj*kOd|8a3}s1&u!+I;->OcCH#c~$h0v41+fR(0W4-Nw|LPG&kjw=~hpV6c!$ zuXc-=8IArvD;~X)xA9`15xpHfnbR`0Jj5R7UT0mOxuJUM!E=a0`aL{S30`vWIZ_q{ z4Ga=CRV+(ar_(G@LV(R9TT&y2MtYwuuSOoanocC}Xp&7YH0rUq4@dcWj8``-rT0GG z%`*PIQ<%laZNU`lF-ZCH6bODKtYK6qm2;~mP+U!e-Q-Y_96!!^7*g#re!;{nuK$_U zex32JWMJd6|FJ(C%c!+Iz5k!ieyi2q%g~7%v7?9ksxK(YKw=A2UiilE);^9a<<54^ zw$8ufUh+xRvaJA-S5qDitM<=|<%SAs9CBQ%%b+LZ*k=FB4wP#8=vm0d-_nTVw{}bx zhG6Y&GBZiUOq)!a5%t|3J%T^ak5_HEqxQ>)_hYN#*+MJuQLJ>Gz-iL(fo>VbCnz zS>!|OEa0>=^jsRzw&E19^OC^;H|w)!V1%atkOcJLO5}ZPL58peuEZgz*w3o@^~%ms zfXDB@m)>K&T-rIZv-ZwfGF8!}R2Y2-!&}j%AmukS?YJH;Q;yS0x{qUnvw_hLgeN-?%> z-sQB;Pr%5X)_KqEMuol)M~Y7ei70yc=*x(k#Z@;rhyV~KmD*x~z389JUo4COk1@M( z)k44<3V}yp0eb0(AOQV84l?>fB+ZxpT7f&1R9fA)58G$Mj#P9WI>NY zno=3>pm(Js+i|ESQ;RxfMD4S0v(FKvCmhtLU;*LaFOW3ctB#g*13D%Tp}3m&MTM)s zjz({{T;G^#xwYTOnUQK(x>F+53PAQLL~tegxF z24z}+qr~A6NN*WpuTpA(Ew04opQo7V2aFs}<#7FziSW(t?Uv?)KBycTd3U5yd1gB`0+&IF}Ijagk61Lhc|@%oJ}=bYx8Y)_}`k1p2Axo&zRIGynF3f6ru&zoGLT?w!cHp6>Q4nL|mXwpOFFK}{0i-hEnCx3c`5Ev{GM zhd!$bq35y{L`!W7Z{2cu3M4%Q>*Ton)^@4#ArhegqOy`yL)#7hM+Q2W$SQ289j`?&TI%{b6-8IbI?Rfo(1mHXA?l~PJ7ZJmF_QpayoE@nuHrCh0Ew6|8_a;Y-Abj2IuX? zuGmRc-Cdjb9kE|EszY@d%{v`^D>D6j9K`exFZ3*mo&aE*v#w_q3*N=nkQ-f5QDWAT`X26PskGC~DWwLA3jvh2E45U8SWg<%Az9>;- zAZ-H!4}f#s4TgFyofp%0?>U@uPXt6*iMkz*snixenSp>^=EeNPVaddNw*E&*FC6** zIJ)k5sQ*8HC+bK!va=&coX9A`ndyA{8kuKhCS>oO?5)nJFLCHH&)&1laz?U}mA%Q{ z{NDYp$D{wc?(Y5myykOcCBxK+cHHEEr<%v`982-LqJ4Jr1#zXvvnD>pK#RU>^|gaz zanodD`bN%J``CxN^+5lUv$pfb9h;dm-6CXtyYHMJ;DkZAzJmgsf&vn(rhwr3_=&Mo z6(33lg#dH~6-*F@Qpl6LkBgTm3AT$2hi5^+M3BtfW$+SeP9y*;&N-A9>K8Jk<#5J2yJfHR zPy~5cX1^_rk6ug%idM&mg{TUCOj{5q)qQpJtah4cnt6L>cDVBUOW*m8;^sxBi};b^ z4>S&;Fx1}*$!AWxxG=vmVLtotT4s*wYJ<#7!!Km-#G3XUO!;`nOE-t6Sltw6NwCWw zcFn>9!^w59ATE2aA=hNfVlh;E-_Z4^#+X>8C@(0RG}6k_l*FSUn!&DRo%LHrXfj!b zNOMcnCEH3YCMP~tsDLppgptlDcgIFW)v{D2o3>?8&&cH8u@^?+JfWW-^p*}qyYb#; z1fF?n*Ph-qdRZy@kM(=Bz!0Fdgp$F#O4JavWOQ+=@T^F4m>?HyEmYGJk_mw;66=Mc zqGAE*$Trk9R2!j*`dNdt_ir{dW`b~wI?ycqnQtduqR?8{{nJ1D`ef7JxS_OteWR19 zIJHVih{MDU@ErbiwGL!FmFD;c<2TewreEadQMfvSBd3QNQVDbn@b3uR! zI;B!TgZD3oH1$oP)s5Vf<#9Is^3jN%raQQ^4GB{b$62-vmMTO{ls4vS49eSQuVC{@ zz`xa$Um7NC3l+kxs$|vtov$C{RldN3Bu8<7HP(yC$!SAKu@sRcdP|Gy zE}kH?id7@;Ck)wEV7{ukYel(Q@QSrmtyO-od5`vhVTV}`U|B+R+)&g%6d!Hg|M$zT zAkQ#FTd4Vn*i|I$X)e^;B5TpW#3VAe!a0`Ztk>od~}^T`EK zLY)QoTD~g+6Iu#DErI}dzo=Wh-!9c#zj-bdxE-|rN2YW0WNYfrR>F9*r`!sRz)cQ(59oA2)<8TT zmz0k^u>7D`I8ZzOZ?Q*wS!wu$b%ThMEtK(+y}z3%^AB77 zElEw~Y;Nr5-bI%ZH;1ay3|B!&uiZx~Ol^J8=DhvUOis>}-)clE=jLQ=wG(fb{Tvia zmBk0{IfV7E&5{5ijcoxbmA+TL*BIC?U(#s3`~wkJDT;>T6`|CjA>^#B(aIKC{qICe z+ha$&Z5Hbyrwer{hV7D3)%m?MtMeaETY-h+G&#M4bFKDC4&;+!OpMQPT;b>RzCpkPA?Y$f z(&OuSX6L=BtzcQf%$Xvz7@|knVNqkkPP6}7jFk+0natpA|GEthWKprB5Sh)}C#vCE zW#HF^qYzialwVY0u2o1sdyLrC!J-M;wpJ{xaVIqiI@z;xWQlgB!l`%@g7t z@riEbouOsN`t|FRAK4u`dE(jFxOv|NC-Quee@1@ewi-1vH!u8cH=HX83Zo>ad>g62 zi>0I^yUO?S(eZyDFTa&gB`;x}5)GTFsN7kMgNL$#!LpJ3;h_fcd9}Pvkg7+G zJD2#lkEOS*&;jBGpkSb1ou!^-{#cw|EDd~VCb{irAC+l#J{ma{rLM-^X_5)8c2QO8ezWvL z6A7b;3i+-ku4pNI!$LUD!7%iRd+N*UjONR9pQMXi;=mXykA)bI6I4}K2&2FR9S|4m zZYT-@1A81jW0ZLv}@k?-GD>qz5bY$pBabSeaE{a0f)6-^7|9=pd?r@F~8oG102R{`a&b$ucEi#r@sJInH0(<0sn#fU0oi8yQ4D^)m*4~5`Dfsds~ zsr5;Yrzn*JD;CE1xYyjv{&#Nu84hzX-EJ#F?>uTS) zkRJ* z8+C3Y&v#Tei|R-Ci>3U=1I<;L`rq+!3o%|oA;6K};uf+{VKT}d`&9=y6 zZ#3g*H*S&hc*d&%C>L=auEN|`COo@2Z=_4&xn3Fn}_{mqkY`Q6c}?cGORvwo9j@p~UcE-uY) zT|%;y@Om1%v;#d1E-tVq*A9kok#UvObWVD*v8DJJFr~0qtFetWI;LTJs>S6fb1#F$ zW(#EQcecF`{g1Fr|H`T2+8IWs=SR1WoeT{0EJ_vAB=iRh4~Z)A z(b*!jxHP!{3obrUElfp3O}xYa*uH>d51w)rU~tsVpvfK97Jb)6+lCZAtZRtJQsoo6 zlxYRAsxPqjir%5@Ei6zLLtkd}4lodSzGy>-<%5o3S4eQM+IZm7VR?Gs{3)SxWFgsk zIR=|~tRNrK`s?Ah8%Ejlcz>+Zp3F$~vD=hT9^*ZkdeF4K#1{5bxoW^k+q{M3*AWT(WGygBWnpl zJ$-z`aq3{-tNXqg$oTu`os$<$tNQz%{xgTK#+>|)QyyLjRJR5i&;&?`^!87eaimF8 z83RqC+UaPRMtV&y#ceARQ&+$3a2|fSXno$ixNljUak65zvwgEy|tO>tMC5qE!iH*76L!N)10o^Tv)=kmgL-t?2avBkRRxoy%Q{~^UG z-TV1PxBrXl2WFUv5l~b+#9b!)t|laewx+b_71L(Pdp0*DP0(%?Vq(u%-(0vc!c-(x zq>+|UlivMSZrMbQSo#P_AbA|l$@Fc?I<`G~{0~=!4pb4$PT-8@-*_BG9Y)z4svJk& z&hCy~T$wtHzu0Y_Uw-~+kk#HN*8U?VPbWW2TkpyG%F?@j^9nJ?lmHB^n4(}MPbH6# zo{-*}fsp4oE@$1;=N%@dT_DN2-KWm9V))4=Nm71DTeN9>eRW@Y)1O1a>hpy=J6`^W zGDQ~|t0I0oBMnD8`yWV0f+7ozJ`yRhY1>I&3ztNOzj8b6I!Y#$5rxNCMrJzRv=TSu zy-wK|(BxxqM{g+FJ|SryN&>}YaNqbW`~NQv)Tju{DBnK}B#Pt)w_6Le_p4otbo#kHHh zi_|=r`r4WkGsj#&gY})Xs%1JwsN-tWpuz z7Tp$oM+j(B=6UdQL3E`tJW|#23y0}P*N{;qlScAxVC!~n=6dmxpEGb}ezW#mQ|>=? zKu}AZay=P5A3mj}IZF?;5jh|={Kv$+2`%>fQReN!4$ArLy z=MO$i9TafB$ouiq1S1K9sD(utvf`pT_kXqw%zI)kS<{xlV0np}Q4m;?^~;0Smk(Aw zy`>)}JowPv(_VDq%J#2wrenm7JsTr+7#fuc5rF0@JYnCv?dbA-zQO09gVjmiKpYP$ zWC$0~r=j3>F-_l)3)t={cqEYP%1{;w57wcgB6jH5WyL%}C^4&&@l{%w?Hi=%DT&{< zIXe7UioAiy#0~=IfL`B0ig5Fqc8MbCaLn4z!WK?VnCf0!Lh%*Upd?8v8?AhI{T|G53h6SzClVJ zxiUflnB_34;~eab#-zs`9i=+Wr^c@b>}_2+-v`2%=UHYar3X&CgTh9p^KX20R-c&^}{0whZ8kGKY*mo7`tg;+ojT*aIUGJ>xsA!qg-!E#U&^ljd zTs#~{AsmT=Q>K0`a|})0>324Ko+iJ0m^yhOeE$Bl&DW_p=_2Gjg?N#F zR-Ec`rhL)7;N*A8zx^-IRCUnY@l(@_{FEtoj_ogF%`eWB5>of{=ic+54fEd<)j7)hP$t>ugQ8U7WWWHC_lB=pBb7+ldn$lk}dtUAx5M&ux3q}@PN zDk?`^T=~vqx{TzbIOd``nzmPz$iuP`Gf0$h;_4le?UBBW-kIw|R1_Dv5fQQamTh@{Hr8NbB04 z^h~z82J^GXuR|b-d=*%2cDSNAS8UVQrFMk=ljKn$4X1$pfPWv%&ke53dnfC!a?`Bp znlWE_)V)NY*_5v{B@P&C=W9jVS*N-9uO4>Dv5i+X?cM)aw)?F?)G5tLw#hkg<+N>Y z?pNZpiYZqmI@vs3C_Z6drqgTRtIpkxuG|1a1!I?FU`+Kf7!!hLa&d>M8I%#Ng*!dj z(yt%1?o2!6s>*WtVn4SEV_pwi)2UK&E1iFB_I3 z^n>?s90LTK^wRAX+iYOnhjfue@4-P9{yd#mf>(ke+@VP^(?0~M;KABF<}WJXiSK+5 zu4-sZ22T5nL^$O2_}-eWn-ixQdHod0!hRzzc6I1sH(!d!H^M(wk9+3xOCpwBCu>{= z_|Mw*@^(g#)_f&n`ul10+?U_L_^=O*#~3=V^fkMm*v3UoG5|#aRMfMNZ5T%nlfk+d zcwWFSzzKo1Z|OvpRK#LxpJP)jf757u{mDemruFi4Q+JOL&OtJwp{w=5uo$miT8e^4 z1s5c#?9^@Zq5SFG(~}CrN~C?LNwxQa-_#C&(1_(}YxCl~{RpQIz)tVa30|@g&_!}wrrlrMUpzKCWjXuWYP?N((ZsRcziw7}Ztdt$ z?6o7%=lj;_VZgOK)z*p1ISYhR?qvus7gwUe@7SmqZt*VNdu5@s(+yvCL_Tb-r);2AJD|zxm~ha+xxQWY{v7!?7TC(jm&Cc%*ecm|EkAnC-5_b45>-b z!_oO#pThN<{Ji7SOgrTKo0yrn!@vR|6KvZMp{f9flhyF>;e`M8+*xaTzOn)KjUY5H zOB+@2N}CFgg-r~yMzO~v-qoHSmqW5-s$UAGEBGXo`h>C6&P0z$iaT+gavUoaqKiok z>H2ET(4`rUv-^A-gb3>zUI)XvP!BZw?6dZPnr3N^{hzvWu0yYN5D*YJLNr;}Rj*Q! zQK$m*W<0e@VXKtE;lX^*4{OWR z*73c^n+xAtb?i;|k_jZC5sRko7}d=MO?WhwDv9h??qzIJoiHa2 zm_>&I6F8g@Pbsc(ZGQPr`*v#1=7*x^o9XKSVjtiayW{NYYIOVdZB|A1ExV3rhdXp5 z^Q=mb)VU#fcjP!E3x=&_=ia#Z9j>(#dr6!ZOsC61UpCKVrveEy8dKF7-PK&*MO)hm zmiZEvc7Xr!-A)`0I1eb^&|uf)B|1%PW~@-U!T4^c&}y&K(jA(18@I<$+gj$!tds^^ zicqfLVD?V!-d7!MVO?VQR=y-}-@SQ}hO=LNO^ciXeIpr1=LPadahy#zBs2ajPggbt zCbwsigK5^Kyg}tJb!-nUR1RwbYL2`QYZ`@UOldOO`ZCU@Cx~=v5!%%n;+m8NpZ8f8WW=Zor)WE?b?v7Ib1W-oaz=^;`QAkQp|A$BL1y zJmw)`LYZ$D*%4g|o**B1q4HiWfsz=p`;#R+tY)AcojY)(Nr*{h$8Tz#h z$KY4b?ij%tFTe941*rG5)zwb0MU3^ltRMRD)*KfF z*%7PvMJJoLjTIUUCtE@(GH@X%pf&CWA#{#_n-ikV60S`J2f`6>SQNY8W8+)Nba7FP zR9H+U(y4jp^vn48;bF(-S=AJwLNHif`?K58H?fUICvROqE&43j@-}Iu6H_biH*_n=~&+guNkCBwZI2MH!~2s;XXjnILpIQ5y~HZN=~&505r(W;E`N z8gZI(ktZ8)(_J%S%8o%31@m0{Ypy4x`UNnun2nqzC)g~u3W7z{Dg27okp9qx9Op)y6>Xj|MwsG{s@FhD7d{;2pBsqHXKH#LIFd40V^xu zeky4F5etUL!4O(y3*iFkXcV;WA3Rps(o7CO`<%?(WW8s;Wt`_t9hWAU)o@NCH6re? zN`2CKkvpu*zGJ7K;!v+_A-g*r+i6~9?{~4b_l>QWkF+vo z^5^muw;A&*$H zI2sa>onV)WlH1i*R4jxOq59;!!8qS}7azHReRwatSYv-UVka}VQT(<8FrLr$7*3^; zJNrHV_>Kq=p|>U{pSGZdWqy>#hb)=n2J^4**Gn?eG+JE>CZ~(4EVLH!tBpuq9hI{p zy|M1J>9mNeT>Hr;K?+slrDJpvV@fe*j1ppEA|jCo5hvEdsoC-BrsIJN`;Ryx$OiY50W7H? zR3IPDgancI0ltM$v_u1*7}??;C!X$QSsR9Q;`fGqh=SM3xeCp zE_6gQO0FA+5cU|#-x0TTd%0TnUj2Se2dT$CEr!|Dv9})CCtCbTIUCqSA)**HFH=xo z^yjqQLLxtfYiol46C`p7oeH-&z49t6)5)LP95he$jUyRgR5d#>>NpKa6dodw`{tKr z0(gw=6D0H`dim6Gz(GeDswleQ5zoL*GnGaR>6Zj&)55s28;Wf#aR^?uz7kBA)4HwLfqI)NZcF5$-=|4-HbX} znRMBJ6;JPgFx8pJyT(JX7y+)xkiLKWa*+C5goTo-y+6mlt;+w|#aiRcaUHsy%Ws*= z*Y&@0x5D!yzpE)k!ReLN@;VaLta<64uhj{kILppqWgsw~BsHsVppPQ$KNFUWQCs^- zvPh7ii)qV$%>f3~I3YuhVq{`Wsam1+yV6c#JjP`(|73n=v(W5tV~C-%pxtt(WAmbA zeUvnEOxWWulmcxa+pqw)P(XhK&<9eo1g?9US=ps(dGzQPd9g^GGA>K;77CF0$fy(* z6a<(B31UEf9i90LC15KRCkL8PHcsHH$@RuqP$`pvKZ-2DuG{8U z3(zcR0Tfgd4fqnvsDpW@huxX;&+If;RDgNSPLWiR{!aW{XDneB? z0t~>|#&6GE8hPjLkgrKss^Tlf*}v>j^*a>YIs*2EP+mF(dOWt{*()_70musN#GRD) zHE-^Bti}v-oV-c;FPKUO^Azgs=gYb%hJYaB#@R@F&azf_;-U;~O2v!T08$hS485>u zAk_oq=?B1NVI`J)J`6Fl|37sml=!ega_WK8L%D;klZQvCL0ahzXTKMlH#CBF7ha!S z@sY@38JU(2u$my~A!embm_%cQdBye%#H13|_ZEN?36I3y{%et-X)Azu%cP@1L4z}? zxpgmtxJZTvAsG~5T#?|8@eP`~`gk3?*9+gPizI`td9zFzH+kb=nGiK@l(62*__`rr z?lrRQ`i?l}5C??6wYccR{TdAAhB0E=1a7LLpW-c4{nk9ZiiXLov6@1}Oc<|?pY-1L z^e1XisrRpF)~*eJcet8N(oI;me$XL$SqtI;38tg!(CHi;jMclEXOf@9S6D)=5ZMuZ zSy9dU0gj_r-|Qj@9JKcjlFKL)R>c59fzY7odnyUtZ+!Kl#$I zx2WtGfpR$M41yu0;2(>637(^KeZ)9VU<>X9-Ka(iPAR)n; zns=Y&VgW#cqSByH&D}?cFNMt7Jv5w-nD@iZ!(A&*_tARl`22$Z{;b(fb zlI*xpC_>^dHV=@3U0!l-6!D3U0VoI;m1d~j$Mh7F7#$!Vk)M6_J3$>6r7RdKLB`eP zY*NO8SaC5ZK5vuXkJ&sLl6PukwZY2jg-IOWrKx3`t#KE(IblxN`ox7rd+rUi%kOZ*MeQ*J836kt}lnM%nzlyQ0VWI|CocPg_02$zpgWP9J* zo;(yD0*~up;7oCv9r%wB12e)WRv z>=aXsFrUy@TZ%9pTkLn0TzYb$7`W0V z8aZ?XTfrRyu{g;u2HB7hXTB1hgb9Nx5fR5St!x%Xj)@p z((mFH3mI{mN2p6>mD#Vb&aT6dGsWXqKb!*OY&1l0$Zqe4mX4}Dy7rlFm7Y{TA?YQ% z5KFigodR!*%jct#YHAc$Azit#)tY_*xz6W&AV9)}euTTldXJG17C&;#tkI7qBoZnM zP$s$Yc{%K`%4K-fam-%=sRp&X}yN$j7Dp{{C$1w3bN`fgAGbjdh&; z+I(a=Qs=SNWA>ZT2DHdey{Uc8TlGP|4}zXL#;fCm%6B)y5~fy0wy*9mOzi--N0IH# z(@&chgJu^8r_LuCX9s61_nObI`dlVph^ErM?*$uo#pqF$j8w2JZZcL2lq%&4GiCp~ zUq6N5jC?|OwUKCnR%cOcKP^~D65L5Uk0_{9V=-;eOh6R5E9Uiu|U@CyRL&0GPJ{X^(573Egtv{Z; zk<^MQb01Bi0XC&hj>F-D7Akk>`52=D9<1oyB%Sb!c%5L?Q;;_l>7jTi#Xo6VHhy5v z<0Fu4i~9V7KmrvAy{-<6VgcX6?(xi4^5&VSpA4rdjZ@Rkk$%(B;7R>nmN{jV7zz2& z_1g;*F;A1N(q0!D^=v*&)^AO4L4p1~!BtdRn^=I9^qc#XO1NTFr6Phv0=@3YHjGU} z?4!`{f={jUbB%>whX7h5Juj7_0MH0|o=-i`*vFQ}z@@DAF&fw`vY3ZoNfmyTHEbYS zDOjkMYo9h2Kq=E(*TKO^4xz+$wEd}jm}O*%qwJ@EDrx1l$E)0BwRmY=Dj--`^k?hm@gAAE}3k(gUSCgbV_Kd;d97_#lK24OT=e6dK_BYfzM*Y0c#P`bhix zw@JTTOUHqJWq|+TT9mbUp|$R#R|X9G_g9_?m-~BrI-WqwCBSs{6%Q3xw4g{sp2mz) z+8)Lb14BH$7tWvpAoF=RL1LQ^Rf2x=X{|^TKdCn0!ss9&@F=YFjk*$_qlGHl%AMRF0!OkSk@pmpx;-a}spE4UjK|N&fyxk{t_?&O|BQ+- zL}#L-q=2FX$X66f4SP))#utgR<87l#{Uwp|8=I7gafVyy8YH9nLRXfSMfY#0*R&h5 z3s5jXB2`~J1n4I*Qd_0?cQro6l-h0skN{}$baz-y_HnG*t7V);&o7p|<`!x`4jWvN z>g3;;ayv;%XTa(owS5|MlCgJ&Hyi|_JOhLxUoeO|yJUCws+>JPwxp=TFv`zV2U$zuvgK^ zQJ@z#$n!TEAb|c0;Icqqp>NyB;BZZD0u^~%7Bw7Ff~zK3zOO%dWBu|PslIs5JXwk3 zp^TiX&$yKkS0egnZ|mw?xB4KwjRNg87~p&0VGV=zTg%%O4J9n(5O=Iz3U);-nJQ05 zi)!SBofGHOw*sl=`5u{!!1eh*(;LyU(WQcgpiywC`{01v``IJR7CgbAW99mdq>pa6hOYPXV9Rd~xrm*tM>+)Mp{(mk`Gfo=Kc2X`z zj_tQ+JbV^7I=Q(&Eev@)FiYDso_gD{ld1xyZ3} zDAZ$Y7Cw}U$HCG3+gp{6=+621*EuAP&bO;ik2=n8EhZFxCF@6&_vCGDx79S-x<94J zf{F)&rUAc|&cESemhMeW4#sCnh#^}BdIr{&I*7*DQ9r5g^jK=YwUeK7)Aa>6+bzqH zqFE4=cAcBqQk*+jI2G4wvgom7*h`vudvLBJv@ml2CdK% zHt7;?$($diBVY~0v#kxsl;79PM2jV%3*k5JbzvA46zHuCCDboFT5{TqS#|<9YX9Y- zswdxD3uhaOPJD)arKXBj3i3Br0_rB>pUj3P{^b60oAxbvD9R#~{1)?{8;94r6BFSU z@$a~lZ>#;2#btEe;2ke+pv-S-V`Zi2>|kRU)8}S3^35gId@%Asck6h(K5}Ynf%A~_ zpNol%W3Tfdxr^t<_q|uWf~Ge8x8IHwl~#Lr$vu$2KQ+3!=CyxC?kj&DZJyp8aX6kH zyzt7mP!+6~B$%!3^K_Jvg^F^y|XK5sM{-tx24qwi3>x~6Q=$^MawF7+}U0l$XG zj(>UmIlGl_;LE@T5t@s&%4VOvqvqY>i8Cho{e+;ksq?(Cm<;Na3tFbWsrwq69H(>1 zQe(4apA-ZXCE^9fTDR?FX3{*@&9Cp=MgCRE>s#5I*cpnRb#%xE_QYxwp?^1hAdCRH z5%3~|aKod4Ha`U!TvISI6yXNMoEE}Tx0WVo8cqkt9xeK1;8y(rxZ}u)WVB=W3YuNE z9+Ohw9PsKg7gg|OO|D?==$3CcXj&^dX7bRNAXqZxs{}+?NF%XcxmxGbZ0CY2hvUF{ zqDttX!GdI!;jDXF5vlY^iFcISf31JJ>S)C0OmZ%2!fS0l55o?N(zTaQ?0-I`xy};< zN^S^*2(aN~Q?~MKL)S1%qARtDIJ@LB?|6InpIV+my+5&u@VFk+u2`+tae|7Wv~dnR`kj*R zM43e`ue;T-#rvi;9sdxyki2Mdy5Kx43e<1WI2~ z?Z@w03-$8p`LrnsiCv7rm&r?7@mzIa(v@#A+V%NILS3a!1kz{b#^(IvE0?HrE~$vC zt}!c(<{Dmxio+EJvM7F+#WA;@{n_r&F!c-EO)WmHzW6>6w0`eguK73rMT-|l<2ifZ z)Rw=?$y^ReL+;?e5f4?+4=!L0NYW-%`Z=<)CJ$n-bPjp^BCS5J#g0IoyqF6FHx1 zI=^}*8%UbJc@RT~erFVMa#v&L`ZW{+MGqmP0262a>+v2QdSo%262v%CHt^06;z-bqv&W`nwl!!Q9I}SWHeQ+j zl#`BmUYHkQTB8=nX9Y?Ez}dm@V09FN1vSCU3dFnMU^G1iIq-YQBoD&_27$2p=0EQj zbnRqU1-u-GUp)J1R9z{oTy=fJ*Cm7F0gmO)uvm`cXdMBQswo*`G#nFwReLH>@R5G>dC->*eq17;(YM8dNU5TKC*0t1^I#kzSVPr#!h*TCkA^SV|qLxl_ z+7qmT8plced{5!9pJ7iZW&VGAv*>|tL+CnYEu7Td)4}G)%62zuURZza0rBo3k(||i2Fx6kBn!A z+DYtG+T1Afw?riY$~APH`G@^*EkO@#jRxn`*H1cC+3~E@w;!3LfnU8#-(Q%m$JBQ7DM1up!Fe3efG!XU$AAV0PXV?H%t?sU zCsze&gSqgKPeYs75aq=Ty+_J{Szq$ho{`MA3@XW?>7>BNkrNs1`5 z^!iI3`;j7(n48s^t?{a(h4)7tFy_=%J(C!g%iI(Um=#j{Wp8SzHPq|@5`vp92o|WC4Z`}H(b!C)}_~Xl`7T#Dz zsCIVArA&nNiXH}C!N_e?^@A#|?dR~LQEBYix5KZ)d9-vY5F%q&{C5~Pud>4D+t|w` z_FUR=CE+LS9*1&Ha>s{j#eoy8o8GaVse?Joouq)n*PF*@`V9vp`R(J1PnWqMFuoGn z#a(xgw)KU@&GE@!G^RVFJ(&2H$k7fQRUW+}6%-7CzzYp@* zHs$0*if6azSCErC|%_!p%sO_d!s>OI^_DDVkjP%ux?A$`IK57o2pIJ3o%{1Z^R ziM^&kM4PsYQ<_T|@bv1jd_hvnWo_UDy-aTi_kXZ7caQ^#`yAc6<>`Au&9EBDoJ z_O0PPRp`&s0;R`2bUYNa!Gk|Nxh}C1A-Y}hgDh{;sG%}+QEA5tEpwN=K2WjVVkOIe zMb8SMgYvy1D;40QPhur6o$*{UAKsbJ@IDwm{Xsi2AV-wm5RyNw3OXO=4?NiD>EXZ- z!1omYj$k+aTT!H{gYp~UUaDlh=ieGp24yeiKCB`x{kaH=LrP2zAcGTwHwY$fxE7vr{?G+9W zrhWU(>T-IH29pe(pDmD>$3tPi)ff=-;&x8fX+?eUOpg0i7VM^`V-chmdRMsVf`yGD zblv_-`kXtAQM@FOsmeYkO=Q*z4*5Z*Tsr#w1-0ML*J?ePSCy-VCsku%RFGhNq9Qua zF+Y_!^wO!mE_uAW)uZm=JEonA&HZm>0^DQcNK*9Kj2toM!CWuT;Prub((COwaNK&; zHEk9u+1MV7r-{tmlEi@L%t@?kJz}`oh1u%qnw!b!I9Bi@Y9mr*GFJG<M@FszdQi$Eh^xX-q%4%k?tp})=rvacyE>EjZH60w6;#* zTk$YhY|oQ$w&+%_RBMshe`}rlGhLhkD92q8Re;A=)OjeiU|*1(((dbUkIk2Ky}gQ!-hqHxr??2fsYm9Jrnma{Dv<{_z3iO+HN5>g03&q}^MH-? z^8G+5R`!8G85k$Od|AEjLo#o-c?$5{Hu_N2XO_#j7Z%?HG*shSp9$qTjH(i}v&#gA z1Y?*SP5_@KV)Jy!>9BD0P`TchKRt^VZPvew9Lgzk!1!88?F}uTFN- zyG+Tq*C74cFyJ6T{#P8h|E4<}rSLfPGQF}LmMj_pR*_F0M_!hMWnUiMcbD<6TbeM4 z_x;JS0RXAx5&TnuiwV~+mi#z^HvBgI4~SCg@-LFLm7#y1HSO{yhLM*a;^(=N(cH<} zPyqxvi0gmP8tirX5HZ5sT)~b!-1KnFwN!{FuWGI`fB)D0g&Dp4oSxi&iH@ra`;$2Z zQW<_HVNzx_ND-;U-HrC+XBl;)*bopNz#JF~$wWbZ0*hOXVw!^i5IQLEtqU-2Dn$z? zzxNXPx!;WC{Hi^3kiR15|(<5g81efPyt)gkuo{+pR z&vYzkyc!PjO?T}4{0@%WADUz|oaH%PboVt`o=5kY`5%QvT;+eI-Sr79v>|ZRJL@CC z{Sqc}U<-qy5=3$TJ>b7UD2S$}q|q%cY6J?%349L$wqt%@hq+suSaPOLb>+`rCG71T zjBj=fzod!s@M`k*+1`3xZRT_KYphj@1}ibb}i!f?=WRx<bgLW6WO6o-kZKZhW1Rv}Yq*FJj5;(Xsy9qRAk_)P32;Xe_sKV%4hL zLjOf>*=VJ}XOu&SNdZ%F;HRN0U)~5C{f&>Rgv;p4F61-e>=3WOlG84uVpD(rO>oLy z4Q>zLQ!hy7zbdmVwYYXI_8Jd^PB5H`68l{t_YE@z&_-9_jb=6nJYFTTU~YWw-6~CT zu0(_kTI(8jH2R}WkF8ZIXQR(n_{iS=#(K<%29o6B6|lIj5pcG&m(pZn*8EO=8KB+4 zlNQVa2^}2wjHQC$;q-}Q!4QhS2Lo8l5R`%dlr}m~mL%sJ-SmQ^rNKyBahe7VmK0zM;i1hU`fjQRyqkb?rTX4V~yY9XQrcVm=Duc@& zqe7K0RsDODgh*;}+1V97=ws^}#-s1QQ@U!C^5lLk%gSnmc5!Oy3 zt?8_9LlKms*WV&-9i;iFA9QQ3ls)N^6)U`-<1;@a7drlcZy~EI|4FzHEQXd+$s&}l z%7nW$-jV2XpXXz|bw79OJBNDoV}gVET}#ssWAoqqJ;&EyiesxO04&AQ_UJ6{>x!0XUKHDs4Na+wDP~Et~?yd_5F{r=8ULA zmMo)`eaXStcj*wua8k&SB{BA$!IbTELUpoyJ7brvNTcjqk|`uQmW-V-_9ffI3^Tt+ z=X|g4@BV{p=Hh+d>wTX4em?j1x!Wf1C}@}!*7_1&l%V8NJ$XNvx9_4I9i|UUuk~c1 zDl!zEj%`)ah*EitJdC(4EukCmP(p0ec?xgi1zX6fD%8*kpVYcxS=KQcz2cSNQ^F=< zEWi&za(%?zyLXzSbaDN%oQ#es_xVkb(M~jU&aawGVEC^ZiHw)xAZ6WP3Swh z8%7VFfvY^}67R>h%c>~@i3V1jI$0WEQ!Fv1y zhpK`Z7LCH~@8ZDd95Kul*8qIj;6s1JbX?!84Wk5o;3Tg9x=tneCJ9LmZzthbMyl9> zn*#(Wos@;l6@Iu$ayI^hdA4j=^%+xPw!4W&!qH2rS+EPKJpJfyIMn_eC+8E-kZFs$ z%K*rO{2g@Wicy8XoU?Ux)@t~JlRB6C_@IU-bv6dQQru47veDC&Qg8`v@LNUlPfiW^m8#W~^k@0}`Eai2=_{2-#8c=C3lEl))8=_k&+ zwO=K2FWeLAEN`tf<`{p5@h9jb*WTyi)q^`n6QS>7&^EqapMW-nmcb*>TSnP*qepzQUAEl86m25c9UoJsvr1gnhtGsSfdi572OP>+vn(NVHmi0xTr5RKVS!6!q z@`jh6Q-Sg%4oJe)xJ8U$7@oq!zX0TfOS%dVSE)C`J_J?_z5GR~)3c|zOHn1OcXFJU zaY$$Mwl98XykG2HF9LA71k6JK!i7Bd8(2klI9LyGO#UMlq=8o#Oifr63uM4LDLz(J zb6nksd{mvbZ;xg+Wdr8vPt`~14%KU@ijJ55_mNFuz7=PV|FyvI7&OCejalb3TXGgO zN-@7UdP7b;=Dua~uK1dD>?0A;et-0J^wWOr)G@qdinC^-Er{Lr7T}-|Sx^xB_O88V zecpRf@$6NNq9B8u!K71Sa98h~@y0ckPka{#wL%-jRddFLV^lLz%qqEf#|cuzM^%aT zS?_aW*8TnjqZqT~-j0qyKMDODtgX4xRHC5+E0WY+7s4Y$B9GwCS@c<5b*f6KaLlP> zLRz!1Z`13n*ruC%a}C{RP&$Ftt(B4Lt@{HEn3Oe^de8VooqO}d zr;b8U_#+lGnzA>84YZEo+S!;1j@11m>+x$^-`}@ayP8%j%EIci{LlO*BK+P9R{-O# z%EEE+oI)EE9^xxt6w8e#jCWGJ_Vtx=(2rdDl} zQ9+na>?J*`{!a36F8W9(Zu>T4*XD>=9kn+y#UX|%Vkv2=UMSU74Od7b?47q?yo6oz6v@@Wg~M9FrB~?21zTOp|W{XyuE8f9`m6;uf*GHGHbIy?em?tYz}m!ZIbTzNJ_0 z=Jh%;(Q{$WMQRrEw$}Ro_3OjC3$=)93Mne2`C$K6SF3+S)Vg2N-(#8D*@W`GTMi_^ zW>%{)Nqln9JxZ;|YI{6&vehW5A=z`wW}?9OrV?%pP6XdctJ^X5xbpigO^FF~(3hnw ze9$lF$Gxnwm2dVSCg#=ZT1NUSmvFJ#=p4kVSpfCHj#obQjD|4r(JPk1+WJfE@ZXX5 z-bn#+zCuhfhJ=!>b+?I8sqBmz{;9KV#W$+&tc#BCK&pk zwxQvuB;aTi;ZSv%H4O?B7%1&C5zu6G8ib?4lK-&DKUSKr3Wr2NxxEVj>u%y{uJ-+; z`hb>b3dPHn4^O~09_dh`Xua{2aWs9-smbs32^MhBf_fC!tl{EfxuI}ZNBW9M({?!0qr`P1BGXJpH7=Sxt%_3BXb>Vv&0T0uYU86w8g zw5esC9f@6~#WwC3%tbj^j8rZ)0zg$Rz+T|RU&t7+$Up*aMnJb|2)_DPjJez(11L~% z#BYD9qO~>l{1&}^bGf*E3lY2Tsw{l@S({MY_L_?_A*zW!Qja|u1MJ}&Dv z3dz0QecGb78!14Gf}82<4)Mpt1=fMr7{ABnsf*A+@w@kA5~-$INTrVIKf*% z*n4A5qPmF^GX&4Letj75vTXBx)RLLaDvR!`G`HzD;U4%fzLo~(wB?2qhNs-j&k+FY zijIb!E_Pw-E~k?7{5ubC*>RVNN}X!Z^_@Kx>MJI3lQA$p{e3rPWBO+>NFC&}*~=m2 zIEZ1zHEs==5>yCnt~;CAvwmaKKYw+ZCcV%vYOvRZ4yt!K%UO0+Zw=4*$Z)+`#oMyj znl~`ZFsZK=osNi;P(u4wJ!1L_w7B|$=xa5DUFy^u(tMeUA{FwD6X0` zP>~=K+HiA1Vq&@}zVOMQR@IX9j@MMfQbcM#o>@!gb!J%j=!)cbE8mEprIb-M+BBwm z&Gm9OC*#*B{Vj~MQ;b#d_`wcl!cKR4Yxz0*f8608Det>rdqBC5Lm)o{>=dBnYy(hk zBwGg0xnUmAcRr3_e4gHV$S4emo84qY?FM-E--ExyL$MJmhK*n4a!MRP*h%s znR;qNwA!SOG`Fhhk~T>I|35c;1~xH7#+-X}(Dq?3NJ``?h|6Ihh9u0*kvmq4NuA|+ zE_Gd?lc4#`O=sPfUN*02Bfj zKyDrhunh=UfoLS^xn&k}zdeBYmU(2L-WG}hlNR^CE+DosHjDMUA&Z3(-^WaRKa_@H zz2d46NAF+fP;bVUZtmaRW8I9O?p1C%{PfpI@s{Gl_Vul=eHGPu*spsez~A{%Vir|gkpwSo5XC+{tH)9x9WZo9q zhjhU<-}v>zo+EjBTJmPY2!)t{?YamWzq=6z+Yj<%_In~u8pM%pm~GS1n=jBZP#Hyj z{tN$X6qMPqfnh%e7XJzyo?#_pC~)_0&_V(+y8piH`&7%G#33uQn)!*j&YYX3M*!SN z|27rT=9hpNEq=rjM|MD~gE)ZekrUsqK3Ica0CyDSFIt3)WEKm?vW+g0(% zRNqi-a;jz0xkQLa-W~v4cX$?M`-3A!dTYd6j^6FRdrnA=h{jQL=WWrX;lbaXuk%v} zZfm8)Y$%e6XFIZs=GVE4`hvHyw8H=jQUv!q(!{VN$H4L{3D# zChuanKlxYd`_5XGvz0rc29;j{NOS0`rWCEAuQUJdjNh1*=xJBYAI17j=waVfe~$kU zyCfewV6F#uvPetlkdz8MdZ(SM>=L)39KRv)Z8QGcR(6ZC7=ncz3X11{#Bq#S>}8;Z z5EjM%ZVd3-RAT-!LRFy99`WXpAvjLe*!cA0zR@z7OVi(NnC*-w%-7Qgip-AqB?0C3 zZwIq@o4BCw3j^J5L%lY!L3>A?`Am0)w0PV0K3XV%@>3%S7yUosGiGzJK|2Oix}p0z z)1%at({0kxLI`qK>x!lf(PW%hxIv*0+}?)V60Fm`-k-NY?4nqbSHhbDLZY3g+9Deo{j#O$xjSCG^d618hGi=< zMNTkV-b7aZkM+u(1)-6yzrxwaHPbwm=w16uv$;D}9}vVoXFzNOHDx^^2{ulLs|pwY zGt8ud|A-m$>~@lMb9lv>nu;?8_k7roeK#D04P-kYCH9*Of{c9Tzzf=32z>>+eh{+g z8#BrRX4EMrpe#HBC1FoRi5+UmUqZK{@sILcqN=| z=wA*RcN`|-#-si8beNxL4kOCD=O5QEWT#gjG#KwJLv-Bs*6r<|cWy682jsO@tahcxswbxmV%I0A;X|&&b8)q$6O^I8 zTcq(Da)`zoHvT!vFL^gW36nm3W>q>rK)K!L=+B^#_&OgOx!$1LTG@J)e+l4fWZkY( z+A!3~i}M!|S~nJMW?9b-r*-o|kx&sMK*oDNxdV7z<y(Es^;+^l-j?Ho2MWR4SJut{$d}IZXFkw)fA^XH+O67Nd_m96# zUpL6;m!g^H#ZRw4Jg5Lu$%3Q8W2u4POvqg{C)y&_K%LR^!cKg?mi%k|c%P#`;^6+) z%=US*3PaJo`%fP&PlAjG(pw551xImR`Q83jqETwkwZzjP81UneIQABfyWhaeKbGU~ z3?UpQxBR12^GK>{iQP#iE?X8oPq6bD%@{L9=QPB2k}u`#Cgbn#ZQl%-=zVGC(|87R zYiF>X(L9BnzKy=V=^XE+)Y`xsL6o1S#Sr_p`cs(|TPeCfY2g1!;)8p@0XLW-sO60e zP)Lr7&`R_B^NN(|IY}rIWmW;ISO9oHO=1AE^6~Q&Kv+I9squDfiSR!RNoz7`R>c^{ z7?NdnZKdB=qMAhH8wvGo58bm7Un!0uLLNOT%DUT*66|Gp)H?w&cf#ySFczF&R<6Al z%Gq86dvaZK4M8og@gY2agPCj+FiFqX&LfYrZ4$!b76`lDYnJjQ$GeYLZT7 zXPzj{)nK(-!#ZY^Q!ut9U{BrQ-K~&p`~+A;PrDl#7Dg9v5O_I6>Jb=ud0hTwD8LU= z&iC$d9B(eb8~l$Z$v^;a`{5s09z-``?Ds{;Z7c;wo-Y<>GxafDw#S`HL%ruJAJR;9!1hXC zPE&Mp=R`gCL{>aH4JyD{s*<@2)nJNFCvywH1A+V^-;c*aW}F67(SRX6j+G%HAWsFF zb)SQK!eJT^ZW$JDLvZ*3Za8p>voKjUJpSn2!e=qj?HM86rGZW%4eO{Gqtyvapo&MY zmEac?i64rxIKgfR04^K{k{&+_Pmb^RUtu!u%?Opb!6DF@wOj#q$pRYz3e&*y3BOuh zqbJ9I|LXYn12-!r*cGGSVWpSv2CP1~P-1^hGEsZEEbsFqAx7dba^lmAuWm6-Fkkm= z$%M35I&qD?mQyroI}P0bj!yviA%)LG Date: Wed, 3 Dec 2025 17:46:29 +0900 Subject: [PATCH 289/290] delete already merged files [skip ci] --- .../Assets/Editor/Scripts/MaterialName.cs | 8 - .../Editor/Scripts/MaterialName.cs.meta | 2 - .../Editor/Scripts/MaterialPropertyInfo.cs | 7 - .../Scripts/MaterialPropertyInfo.cs.meta | 2 - .../Scripts/MaterialPropertyUIElement.cs | 10 - .../Scripts/MaterialPropertyUIElement.cs.meta | 2 - .../Editor/Scripts/MaterialUIElement.cs | 9 - .../Editor/Scripts/MaterialUIElement.cs.meta | 2 - .../Editor/Scripts/UnityToon3Das2DGUI.cs | 568 ----------------- .../Editor/Scripts/UnityToon3Das2DGUI.cs.meta | 2 - .../Assets/Editor/Scripts/Utilities.meta | 8 - .../Editor/Scripts/Utilities/EnumUtility.cs | 37 -- .../Scripts/Utilities/EnumUtility.cs.meta | 2 - .../Scripts/Utilities/ToonEditorGUIUtility.cs | 170 ----- .../Utilities/ToonEditorGUIUtility.cs.meta | 2 - Toonshader_ProjectURP/Assets/Samples.meta | 8 - .../ScriptsDev/ToonCameraViewController.cs | 24 - .../ToonCameraViewController.cs.meta | 2 - .../ToonDirectionalLightController.cs | 35 -- .../ToonDirectionalLightController.cs.meta | 2 - .../Assets/Shaders/ObjectTransform.hlsl | 17 - .../Assets/Shaders/ObjectTransform.hlsl.meta | 7 - .../Assets/Shaders/ShapeLight2D.hlsl | 99 --- .../Assets/Shaders/ShapeLight2D.hlsl.meta | 7 - .../Assets/Shaders/Toon3Das2D.shader | 585 ------------------ .../Assets/Shaders/Toon3Das2D.shader.meta | 9 - 26 files changed, 1626 deletions(-) delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities.meta delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs delete mode 100644 Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/Samples.meta delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs.meta delete mode 100644 Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl delete mode 100644 Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl.meta delete mode 100644 Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl delete mode 100644 Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl.meta delete mode 100644 Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader delete mode 100644 Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader.meta diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs deleted file mode 100644 index 1e94c2866..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs +++ /dev/null @@ -1,8 +0,0 @@ -using UnityEngine; - -internal class MaterialName { - internal readonly string name; - internal readonly int nameID; - internal MaterialName(string s) { name = s; nameID = Shader.PropertyToID(s); } -} - diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs.meta deleted file mode 100644 index 30a5deef4..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialName.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 0428cf2e3aaf4c54ba04d9e9949d9cc7 diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs deleted file mode 100644 index 953cbd63c..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs +++ /dev/null @@ -1,7 +0,0 @@ -using UnityEditor; - -internal class MaterialPropertyInfo { - internal MaterialProperty prop; - internal int id; -} - diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs.meta deleted file mode 100644 index a7c43105c..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyInfo.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: a233b827442dc9d4fada0418da91533a diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs deleted file mode 100644 index c4973aaea..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs +++ /dev/null @@ -1,10 +0,0 @@ - -using UnityEngine; - -internal class MaterialPropertyUIElement { - internal GUIContent label; - internal MaterialPropertyInfo mainProperty; - internal MaterialPropertyInfo extraProperty1; - internal MaterialPropertyInfo extraProperty2; -} - diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs.meta deleted file mode 100644 index 516a4595b..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialPropertyUIElement.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 0926110c81ecaf64a877cafc3ae63176 diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs deleted file mode 100644 index 336294798..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs +++ /dev/null @@ -1,9 +0,0 @@ -using UnityEngine; - -internal class MaterialUIElement { - internal GUIContent label; - internal MaterialName mainPropertyName; - internal MaterialName extraPropertyName1; - internal MaterialName extraPropertyName2; -} - diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs.meta deleted file mode 100644 index e76c14724..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/MaterialUIElement.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 66ff40605a2055e4cab580db1e179d1b diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs deleted file mode 100644 index 459fb5af0..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs +++ /dev/null @@ -1,568 +0,0 @@ -using System.Collections.Generic; -using UnityEditor; -using UnityEditor.Rendering; -using UnityEngine; - -class UnityToon3Das2DGUI : UnityEditor.ShaderGUI { - private Material m_lastMaterial; - - public override void OnGUI(MaterialEditor mEditor, MaterialProperty[] props) { - - if (null == mEditor.targets || mEditor.targets.Length == 0) { - return; - } - - int numTargets = mEditor.targets.Length; - Material[] mats = new Material[numTargets]; - for (int i = 0; i < numTargets; ++i) { - mats[i] = mEditor.targets[i] as Material; - } - - InitMaterialPropertyUIElements(props); - - if (mats[0] != m_lastMaterial) { - RefreshFoldouts(mats[0], m_materialPropertyUIElements); - } - - EditorGUI.BeginChangeCheck(); - DrawThreeColorsGUI(mEditor, mats, m_materialPropertyUIElements, ref m_colorsFoldout); - DrawShadingGUI(mEditor, mats, m_materialPropertyUIElements, ref m_shadingFoldout); - DrawLightingGUI(mEditor, mats, m_materialPropertyUIElements, ref m_lightingFoldout); - - DrawNormalMapGUI(mEditor, m_materialPropertyUIElements, ref m_normalMapFoldout); - DrawOutlineGUI(mEditor, mats, m_materialPropertyUIElements, ref m_outlineFoldout); - - - if (EditorGUI.EndChangeCheck()) { - mEditor.PropertiesChanged(); - } - - m_lastMaterial = mats[0]; - } - - void RefreshFoldouts(Material mat, Dictionary uiElements) { - - m_colorsFoldout = true; - m_shadingFoldout = true; - - m_normalMapFoldout = true; - m_outlineFoldout = mat.GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); - - bool lightEnabled = mat.GetInteger(uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_USE].mainProperty.id) !=0; - m_lightingFoldout = lightEnabled; - - } - -//---------------------------------------------------------------------------------------------------------------------- - static void DrawThreeColorsGUI(MaterialEditor mEditor, Material[] mats, - Dictionary uiElements, ref bool foldout) - { - - ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, COLORS_FOLDOUT); - if (!foldout) - return; - - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_MAIN_TEX]); - - EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_USE_BASE_AS1_ST], out bool applyTo1st ); - EditorGUI.indentLevel -= 2; - - if (applyTo1st) { - EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[SHADER_PROP_1_ST_SHADE_COLOR]); - EditorGUI.indentLevel -= 2; - } else { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_1_ST_SHADE_MAP]); - } - - EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_USE_1ST_AS_2ND], out bool applyTo2nd); - EditorGUI.indentLevel -= 2; - - - if (applyTo2nd) { - EditorGUI.indentLevel += 2; - ToonEditorGUIUtility.DrawColorPropertyGUI(mEditor, uiElements[SHADER_PROP_2ND_SHADE_COLOR]); - EditorGUI.indentLevel -= 2; - } else { - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_2ND_SHADE_MAP]); - } - EditorGUILayout.Space(); - } - -//---------------------------------------------------------------------------------------------------------------------- - static void DrawShadingGUI(MaterialEditor mEditor, Material[] mats, - Dictionary uiElements, ref bool foldout) - { - - ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, SHADING_FOLDOUT); - if (!foldout) - return; - - EditorGUILayout.LabelField("Base to 1st Shade"); - EditorGUI.indentLevel += INDENT_SIZE; - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_BASE_TO_1ST_SHADE_START]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_BASE_TO_1ST_SHADE_FEATHER]); - EditorGUI.indentLevel -= INDENT_SIZE; - - EditorGUILayout.LabelField("1st to 2nd Shade"); - EditorGUI.indentLevel += INDENT_SIZE; - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_1ST_TO_2ND_SHADE_START]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_1ST_TO_2ND_SHADE_FEATHER]); - EditorGUI.indentLevel -= INDENT_SIZE; - - EditorGUILayout.Space(); - } - -//---------------------------------------------------------------------------------------------------------------------- - - static void DrawLightingGUI(MaterialEditor mEditor, Material[] mats, - Dictionary uiElements, ref bool foldout) { - - ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, LIGHTING_FOLDOUT); - - - - if (!foldout) - return; - - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_2D_LIGHT_STRENGTH]); - EditorGUILayout.Space(); - - ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_USE], - out bool directionalLightEnabled); - - EditorGUI.indentLevel+= INDENT_SIZE; - - EditorGUI.BeginDisabledGroup(!directionalLightEnabled); - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction]); - ToonEditorGUIUtility.DrawColorFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color]); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH]); - - EditorGUILayout.LabelField("Highlight Settings"); - EditorGUI.indentLevel+= INDENT_SIZE; - ToonEditorGUIUtility.DrawVector3FieldGUI(mEditor, mats, uiElements[Toon3Das2DConstants.SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION]); - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_HIGHLIGHT_TEX]); - ToonEditorGUIUtility.DrawIntPopupGUI(mEditor, mats, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE], - m_highlightModeEnums, m_highlightModeIndices,out int _); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_SIZE]); - - EditorGUI.indentLevel-= INDENT_SIZE; - - EditorGUI.EndDisabledGroup(); - - EditorGUI.indentLevel-= INDENT_SIZE; - EditorGUILayout.Space(); - - } - -//---------------------------------------------------------------------------------------------------------------------- - static void DrawNormalMapGUI(MaterialEditor mEditor, Dictionary uiElements, - ref bool foldout) { - - ToonEditorGUIUtility.DrawFoldoutGUI(ref foldout, uiElements[SHADER_PROP_NORMAL_MAP].label); - if (!foldout) - return; - - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_NORMAL_MAP]); - mEditor.TextureScaleOffsetProperty(uiElements[SHADER_PROP_NORMAL_MAP].mainProperty.prop); - - EditorGUILayout.Space(); - } - - - static void DrawOutlineGUI(MaterialEditor mEditor, Material[] mats, Dictionary uiElements, ref bool foldout) - { - bool isOutlineEnabled = mats[0].GetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE); - - - if (ToonEditorGUIUtility.DrawFoldoutWithToggleGUI(mEditor, ref foldout, ref isOutlineEnabled, "Outline")) - { - foreach (Material m in mats) - m.SetShaderPassEnabled(LIGHT_MODE_NAME_FOR_OUTLINE, isOutlineEnabled); - } - - - if (!foldout) - return; - - //Outline Settings - EditorGUI.indentLevel++; - EditorGUI.BeginDisabledGroup(!isOutlineEnabled); - - ToonEditorGUIUtility.DrawIntPopupGUI(mEditor, mats, uiElements[SHADER_PROP_OUTLINE_MODE], - m_outlineModeEnums, m_outlineModeIndices, out int outlineMode); - - const string OUTLINE_NORMAL_KEYWORD = "TOON_OUTLINE_NORMAL";; - const string OUTLINE_POSITION_KEYWORD = "TOON_OUTLINE_POS"; - - switch (outlineMode) { - case (int) OutlineMode.NormalDirection: - foreach (Material m in mats) { - m.EnableKeyword(OUTLINE_NORMAL_KEYWORD); - m.DisableKeyword(OUTLINE_POSITION_KEYWORD); - } - break; - case (int) OutlineMode.PositionScaling: - foreach (Material m in mats) { - m.DisableKeyword(OUTLINE_NORMAL_KEYWORD); - m.EnableKeyword(OUTLINE_POSITION_KEYWORD); - } - break; - } - - - EditorGUI.BeginDisabledGroup(outlineMode != (int) OutlineMode.NormalDirection); - { - ToonEditorGUIUtility.DrawToggleGUI(mEditor, mats, uiElements[SHADER_PROP_OUTLINE_USE_NORMAL_MAP], - out bool useCustom); - EditorGUI.BeginDisabledGroup(!useCustom); - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor,uiElements[SHADER_PROP_OUTLINE_NORMAL_MAP]); - EditorGUI.EndDisabledGroup(); - } - EditorGUI.EndDisabledGroup(); - - - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[SHADER_PROP_OUTLINE_WIDTH]); - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_OUTLINE_WIDTH_MAP]); - - ToonEditorGUIUtility.DrawTexturePropertySingleLineGUI(mEditor, uiElements[SHADER_PROP_OUTLINE_TEX]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_OUTLINE_BASE_COLOR_BLEND]); - ToonEditorGUIUtility.DrawRangePropertyGUI(mEditor, uiElements[SHADER_PROP_OUTLINE_LIGHT_COLOR_BLEND]); - - - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[SHADER_PROP_OUTLINE_OFFSET_Z]); - - - EditorGUILayout.Space(); - { - EditorGUILayout.LabelField("Camera Distance for Outline Width"); - EditorGUI.indentLevel++; - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[SHADER_PROP_OUTLINE_NEAR]); - ToonEditorGUIUtility.DrawFloatFieldGUI(mEditor, uiElements[SHADER_PROP_OUTLINE_FAR]); - EditorGUI.indentLevel--; - - - } - EditorGUI.EndDisabledGroup(); //!isOutlineEnabled - EditorGUI.indentLevel--; - - EditorGUILayout.Space(); - } - - -//---------------------------------------------------------------------------------------------------------------------- - - void InitMaterialPropertyUIElements(MaterialProperty[] allProps) { - int numProperties = m_materialUIElements.Count; - for (int i = 0; i < numProperties; ++i) { - MaterialUIElement propInfo = m_materialUIElements[i]; - - MaterialPropertyInfo mainProp = MaterialNameToPropertyInfo(propInfo.mainPropertyName, allProps); - MaterialPropertyInfo extraProperty1 = null!= propInfo.extraPropertyName1 ? - MaterialNameToPropertyInfo(propInfo.extraPropertyName1, allProps) : null; - - MaterialPropertyInfo extraProperty2 = null!= propInfo.extraPropertyName2 ? - MaterialNameToPropertyInfo(propInfo.extraPropertyName2, allProps) : null; - - - MaterialPropertyUIElement newElement10 = new MaterialPropertyUIElement { - label = propInfo.label, - mainProperty = mainProp, - extraProperty1 = extraProperty1, - extraProperty2 = extraProperty2, - }; - - m_materialPropertyUIElements[propInfo.mainPropertyName.name] = newElement10; - } - - } - -//---------------------------------------------------------------------------------------------------------------------- - - MaterialPropertyInfo MaterialNameToPropertyInfo(MaterialName m, MaterialProperty[] allProps) { - MaterialPropertyInfo info = new MaterialPropertyInfo(); - info.prop = FindProperty(m.name, allProps); - info.id = m.nameID; - return info; - } - -//---------------------------------------------------------------------------------------------------------------------- - - private readonly Dictionary m_materialPropertyUIElements = new Dictionary(); - - private static readonly List m_materialUIElements = new List() { - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_MAIN_TEX), - label = new GUIContent("Base Map", "Base Color : Texture(sRGB) × Color(RGB)."), - extraPropertyName1 = new MaterialName(SHADER_PROP_BASE_COLOR), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_1_ST_SHADE_MAP), - label = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."), - extraPropertyName1 = new MaterialName(SHADER_PROP_1_ST_SHADE_COLOR), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_1_ST_SHADE_COLOR), - label = new GUIContent("1st Shading Map", "The map used for the brighter portions of the shadow."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_2ND_SHADE_MAP), - label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), - extraPropertyName1 = new MaterialName(SHADER_PROP_2ND_SHADE_COLOR) - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_2ND_SHADE_COLOR), - label = new GUIContent("2nd Shading Map", "The map used for the darker portions of the shadow."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_USE_BASE_AS1_ST), - label = new GUIContent("Apply to 1st shading map", "Apply Base map to the 1st shading map."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_USE_1ST_AS_2ND), - label = new GUIContent("Apply to 2nd shading map", "Apply Base map or the 1st shading map to the 2st shading map."), - }, - - //Shading - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_BASE_TO_1ST_SHADE_START), - label = new GUIContent("Start", - "The threshold for transitioning to the 1st shade color. " + - "0: use the base color (no transition), " + - "1: starts transitioning immediately."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_BASE_TO_1ST_SHADE_FEATHER), - label = new GUIContent("Feather", "Controls feathering to the 1st shade color. 0: sharp transition, 1: fully feathered."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_1ST_TO_2ND_SHADE_START), - label = new GUIContent("Start", - "The threshold for transitioning to the 2nd shade color. " + - "0: use the 1st shade color (no transition), " + - "1: starts transitioning immediately."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_1ST_TO_2ND_SHADE_FEATHER), - label = new GUIContent("Feather", "Controls feathering to the 2nd shade color. 0: sharp transition, 1: fully feathered."), - }, - - //Lighting - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_2D_LIGHT_STRENGTH), - label = new GUIContent("2D Light Factor", - "Multiplier for the 2D light contribution."), - }, - //Custom Directional Light - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_USE), - label = new GUIContent("Custom Directional Light", - "Apply a custom directional light."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction), - label = new GUIContent("Light Direction", - "The direction of the custom directional light. "), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color), - label = new GUIContent("Light Color", - "The color of the custom directional light. "), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity), - label = new GUIContent("Light Intensity", - "The intensity of the custom directional light. "), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH), - label = new GUIContent("Diffuse Strength", - "Multiplier for the diffuse contribution."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(Toon3Das2DConstants.SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION), - label = new GUIContent("View Position", "Camera View Position"), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_HIGHLIGHT_TEX), - label = new GUIContent("Highlight Map", "Highlight Map."), - extraPropertyName1 = new MaterialName(SHADER_PROP_HIGHLIGHT_COLOR) - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE), - label = new GUIContent("Mode", "Highlight mode."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH), - label = new GUIContent("Highlight Strength", "Multiplier for the highlight contribution."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_SIZE), - label = new GUIContent("Highlight Size", "Highlight size."), - }, - - - //Normal Map - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_NORMAL_MAP), - label = new GUIContent("Normal Map", "A texture that specifies the bumpiness of the material."), - extraPropertyName1 = new MaterialName(SHADER_PROP_BUMP_SCALE), - }, - - //Outline Start - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_WIDTH), - label = new GUIContent("Outline Width", - "The width of the outline."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_WIDTH_MAP), - label = new GUIContent("Outline Width Map", - "Outline Width Map (grayscale, linear): White = full width, Black = 0 width."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_TEX), - label = new GUIContent("Outline Color", "The color of outline."), - extraPropertyName1 = new MaterialName(SHADER_PROP_OUTLINE_COLOR), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_BASE_COLOR_BLEND), - label = new GUIContent("Blend Base Color to Outline", - "Blend base color to outline color."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_LIGHT_COLOR_BLEND), - label = new GUIContent("Blend Light Color to Outline", - "Blend the combined effect of 2D lighting and custom directional light to the outline color."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_OFFSET_Z), - label = new GUIContent("Z Offset", - "Offsets the outline in the depth (Z) direction of the camera."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_NEAR), - label = new GUIContent("Near", - "Nearest distance for maximum outline width."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_FAR), - label = new GUIContent("Far", - "Furthest distance where outline fades to zero width."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_MODE), - label = new GUIContent("Outline Mode", - "Specifies how the outline is generated."), - }, - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_USE_NORMAL_MAP), - label = new GUIContent("Use Normal Map", - "Use a normal map for outline."), - }, - - new MaterialUIElement { - mainPropertyName = new MaterialName(SHADER_PROP_OUTLINE_NORMAL_MAP), - label = new GUIContent("Normal Map", - "Normal map for outline. "), - }, - //Outline End - - }; - - - //Common constants - //Colors - internal const string SHADER_PROP_BASE_COLOR = "_BaseColor"; - internal const string SHADER_PROP_MAIN_TEX = "_MainTex"; - - internal const string SHADER_PROP_1_ST_SHADE_COLOR = "_1st_ShadeColor"; - internal const string SHADER_PROP_1_ST_SHADE_MAP = "_1st_ShadeMap"; - internal const string SHADER_PROP_USE_BASE_AS1_ST = "_Use_BaseAs1st"; - - internal const string SHADER_PROP_2ND_SHADE_COLOR = "_2nd_ShadeColor"; - internal const string SHADER_PROP_2ND_SHADE_MAP = "_2nd_ShadeMap"; - internal const string SHADER_PROP_USE_1ST_AS_2ND = "_Use_1stAs2nd"; - - //Shading - internal const string SHADER_PROP_BASE_TO_1ST_SHADE_START = "_BaseTo1st_ShadeStart"; - internal const string SHADER_PROP_BASE_TO_1ST_SHADE_FEATHER = "_BaseTo1st_ShadeFeather"; - internal const string SHADER_PROP_1ST_TO_2ND_SHADE_START = "_1stTo2nd_ShadeStart"; - internal const string SHADER_PROP_1ST_TO_2ND_SHADE_FEATHER = "_1stTo2nd_ShadeFeather"; - - internal const string SHADER_PROP_2D_LIGHT_STRENGTH = "_2DLightStrength"; - - //Lighting - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_USE = "_DirectionalLight_Use"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_DIFFUSE_STRENGTH = "_DirectionalLight_DiffuseStrength"; - - - internal const string SHADER_PROP_HIGHLIGHT_COLOR = "_HighlightColor"; - internal const string SHADER_PROP_HIGHLIGHT_TEX = "_HighlightTex"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_MODE = "_DirectionalLight_HighlightMode"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_STRENGTH = "_DirectionalLight_HighlightStrength"; - internal const string SHADER_PROP_DIRECTIONAL_LIGHT_HIGHLIGHT_SIZE = "_DirectionalLight_HighlightSize"; - - - - internal const string SHADER_PROP_NORMAL_MAP = "_NormalMap"; - internal const string SHADER_PROP_BUMP_SCALE = "_BumpScale"; - - internal const string SHADER_PROP_OUTLINE_MODE = "_OutlineMode"; - internal const string SHADER_PROP_OUTLINE_WIDTH = "_OutlineWidth"; - internal const string SHADER_PROP_OUTLINE_WIDTH_MAP = "_OutlineWidthMap"; - internal const string SHADER_PROP_OUTLINE_TEX = "_OutlineTex"; - internal const string SHADER_PROP_OUTLINE_COLOR = "_OutlineColor"; - internal const string SHADER_PROP_OUTLINE_BASE_COLOR_BLEND = "_Outline_BaseColorBlend"; - internal const string SHADER_PROP_OUTLINE_LIGHT_COLOR_BLEND = "_Outline_LightColorBlend"; - internal const string SHADER_PROP_OUTLINE_OFFSET_Z = "_OutlineOffsetZ"; - internal const string SHADER_PROP_OUTLINE_NEAR = "_OutlineNear"; - internal const string SHADER_PROP_OUTLINE_FAR = "_OutlineFar"; - - internal const string SHADER_PROP_OUTLINE_USE_NORMAL_MAP = "_Outline_UseNormalMap"; - internal const string SHADER_PROP_OUTLINE_NORMAL_MAP = "_Outline_NormalMap"; - - - - //Doc: Use this LightMode tag value to draw an extra Pass when rendering objects. - const string LIGHT_MODE_NAME_FOR_OUTLINE = "SRPDefaultUnlit"; - - internal enum OutlineMode { - NormalDirection, - PositionScaling - } - - internal enum HighlightMode { - Hard, - Soft, - } - - private static readonly GUIContent[] m_outlineModeEnums= EnumUtility.ToInspectorNamesAsGUIContent(typeof(OutlineMode)); - private static readonly int[] m_outlineModeIndices = EnumUtility.ToIndices(typeof(OutlineMode)); - - private static readonly GUIContent[] m_highlightModeEnums = EnumUtility.ToInspectorNamesAsGUIContent(typeof(HighlightMode)); - private static readonly int[] m_highlightModeIndices = EnumUtility.ToIndices(typeof(HighlightMode)); - - static readonly GUIContent COLORS_FOLDOUT = EditorGUIUtility.TrTextContent("Colors", - "Colors for basic cel-shading settings in Unity Toon Shader."); - - static readonly GUIContent SHADING_FOLDOUT = EditorGUIUtility.TrTextContent("Shading", "Shading settings."); - - static readonly GUIContent LIGHTING_FOLDOUT - = EditorGUIUtility.TrTextContent("Lighting", "Lighting settings."); - - bool m_colorsFoldout = true; - bool m_shadingFoldout = true; - bool m_normalMapFoldout = false; - bool m_outlineFoldout = false; - bool m_lightingFoldout = false; - - private const int INDENT_SIZE = 2; - -} - diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs.meta deleted file mode 100644 index ce543e820..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/UnityToon3Das2DGUI.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 90970b66b10259d49ba803d27ee33afc diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities.meta deleted file mode 100644 index c05e4929b..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 090af0a94f53c7a4fb6cdf6254373deb -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs deleted file mode 100644 index 49a7018da..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs +++ /dev/null @@ -1,37 +0,0 @@ - -using System; -using System.Collections.Generic; -using System.Reflection; -using UnityEngine; - -internal static class EnumUtility { - internal static GUIContent[] ToInspectorNamesAsGUIContent(Type t) { - MemberInfo[] members = t.GetMembers(BindingFlags.Static | BindingFlags.Public); - - int numMembers = members.Length; - GUIContent[] ret = new GUIContent[numMembers]; - for (int i = 0; i < numMembers; i++) { - InspectorNameAttribute inspectorNameAttribute = (InspectorNameAttribute) Attribute.GetCustomAttribute( - members[i], typeof(InspectorNameAttribute)); - if (inspectorNameAttribute == null) { - ret[i] = new GUIContent(members[i].Name); - } else { - ret[i] = new GUIContent(inspectorNameAttribute.displayName); - } - } - return ret; - } - - internal static int[] ToIndices(Type t) { - - MemberInfo[] members = t.GetMembers(BindingFlags.Static | BindingFlags.Public); - int numMembers = members.Length; - int[] indices = new int[numMembers]; - for (int i = 0; i < numMembers; ++i) { - indices[i] = i; - } - return indices; - - } - -} diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs.meta deleted file mode 100644 index cb73a5ca9..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/EnumUtility.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 05528202f03325348a70db7be3aa1271 diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs deleted file mode 100644 index f9b037f4b..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs +++ /dev/null @@ -1,170 +0,0 @@ - -using UnityEditor; -using UnityEngine; - -internal static class ToonEditorGUIUtility { - - internal static void DrawTexturePropertySingleLineGUI(MaterialEditor mEditor, MaterialPropertyUIElement element) { - if (null!= element.extraProperty2) - mEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop, element.extraProperty2.prop); - else if (null!= element.extraProperty1) - mEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop,element.extraProperty1.prop); - else - mEditor.TexturePropertySingleLine(element.label, element.mainProperty.prop); - } - - internal static void DrawColorPropertyGUI(MaterialEditor mEditor, MaterialPropertyUIElement element) { - mEditor.ColorProperty(element.mainProperty.prop, element.label.text); - } - - internal static void DrawRangePropertyGUI(MaterialEditor mEditor, MaterialPropertyUIElement element) { - mEditor.RangeProperty(element.mainProperty.prop, element.label.text); - } - - - internal static bool DrawToggleGUI(MaterialEditor mEditor, Material[] mats, - MaterialPropertyUIElement element) - { - return DrawToggleGUI(mEditor, mats, element, out bool _); - } - - internal static bool DrawToggleGUI(MaterialEditor mEditor, Material[] mats, - MaterialPropertyUIElement element, out bool newValue) - { - bool prevValue = mats[0].GetInteger(element.mainProperty.id) !=0; - EditorGUI.BeginChangeCheck(); - newValue = EditorGUILayout.Toggle(element.label, prevValue); - if (!EditorGUI.EndChangeCheck()) - return false; - - mEditor.RegisterPropertyChangeUndo(element.label.text); - foreach (Material m in mats) - m.SetInteger(element.mainProperty.id, newValue ? 1 : 0); - return true; - } - - internal static void DrawFloatFieldGUI(MaterialEditor mEditor, MaterialPropertyUIElement element) { - mEditor.FloatProperty(element.mainProperty.prop, element.label.text); - } - - internal static void DrawColorFieldGUI(MaterialEditor mEditor, MaterialPropertyUIElement element) { - mEditor.ColorProperty(element.mainProperty.prop, element.label.text); - } - - internal static bool DrawVector3FieldGUI(MaterialEditor mEditor, Material[] mats, - MaterialPropertyUIElement element) - { - return DrawVector3FieldGUI(mEditor, mats, element, out Vector3 _); - } - - //return true if changed, false otherwise - internal static bool DrawVector3FieldGUI(MaterialEditor mEditor, Material[] mats, - MaterialPropertyUIElement element, out Vector3 newValue) - { - Vector3 prevValue = mats[0].GetVector(element.mainProperty.id); - EditorGUI.BeginChangeCheck(); - newValue = EditorGUILayout.Vector3Field(element.label, prevValue); - - if (!EditorGUI.EndChangeCheck()) - return false; - - mEditor.RegisterPropertyChangeUndo(element.label.text); - foreach (Material m in mats) - m.SetVector(element.mainProperty.id, newValue); - return true; - - } - - //return true if changed, false otherwise - internal static bool DrawIntPopupGUI(MaterialEditor mEditor, Material[] mats, - MaterialPropertyUIElement element, GUIContent[] displayedOptions, int[] optionValues, out int newValue) - { - int prevValue = mats[0].GetInteger(element.mainProperty.id); - - EditorGUI.BeginChangeCheck(); - newValue = EditorGUILayout.IntPopup(element.label, prevValue, displayedOptions, optionValues); - - if (!EditorGUI.EndChangeCheck()) - return false; - - mEditor.RegisterPropertyChangeUndo(element.label.text); - foreach (Material m in mats) - m.SetInteger(element.mainProperty.id, newValue); - return true; - - } - - - //return true if changed, false otherwise - internal static bool DrawFoldoutGUI(ref bool state, GUIContent label) { - - Rect lineRect = EditorGUILayout.GetControlRect(false, 16); - - DrawBGRect(lineRect); - - EditorGUI.BeginChangeCheck(); - state = EditorGUI.Foldout(lineRect, state, label); - return EditorGUI.EndChangeCheck(); - } - - //return true if changed, false otherwise - internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, - ref bool foldoutState, ref bool toggleEnabled, string label) - { - GUIStyle foldoutStyle = new GUIStyle(EditorStyles.foldout); - Rect lineRect = EditorGUILayout.GetControlRect(false, 16); - Rect foldoutRect = new Rect(lineRect.x, lineRect.y, 16, lineRect.height); - Rect toggleRect = new Rect(foldoutRect.xMax, lineRect.y, 16, lineRect.height); - Rect labelRect = new Rect(toggleRect.xMax + 2, lineRect.y, lineRect.width - 34, lineRect.height); - - DrawBGRect(lineRect); - - EditorGUI.BeginChangeCheck(); - foldoutState = EditorGUI.Foldout(foldoutRect, foldoutState, GUIContent.none, true, foldoutStyle); - toggleEnabled = EditorGUI.Toggle(toggleRect, toggleEnabled); - EditorGUI.LabelField(labelRect, label); - - if (!EditorGUI.EndChangeCheck()) - return false; - - mEditor.RegisterPropertyChangeUndo(label); - return true; - - } - - //return true if changed, false otherwise - internal static bool DrawFoldoutWithToggleGUI(MaterialEditor mEditor, Material[] mats, - MaterialPropertyUIElement element, ref bool foldoutState, out bool toggleEnabled) - { - toggleEnabled = mats[0].GetInteger(element.mainProperty.id) !=0; - bool ret = DrawFoldoutWithToggleGUI(mEditor, ref foldoutState, ref toggleEnabled, element.label.text); - if (!ret) - return false; - foreach (Material m in mats) - m.SetInteger(element.mainProperty.id, toggleEnabled ? 1 : 0); - - return true; - } - - - static void DrawBGRect(Rect lineRect) { - - float initialPadding = lineRect.x; - Rect bgRect = new Rect(0, lineRect.y, lineRect.width + initialPadding, lineRect.height); - - Color bgColor = GetBGColor(); - EditorGUI.DrawRect(bgRect, bgColor); - - // Draw top border - Rect topBorderRect = new Rect(bgRect.x, bgRect.y, bgRect.width, 1); - EditorGUI.DrawRect(topBorderRect, new Color(0.12f, 0.12f, 0.12f, 1f)); - } - - static Color GetBGColor() { - return !EditorGUIUtility.isProSkin - ? new Color(0.6f, 0.6f, 0.6f, 1.0f) - : new Color(0.20f, 0.20f, 0.20f, 1.0f); - } - - -} diff --git a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs.meta b/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs.meta deleted file mode 100644 index c1469258d..000000000 --- a/Toonshader_ProjectURP/Assets/Editor/Scripts/Utilities/ToonEditorGUIUtility.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: fe63760a0f620a142a80e4a239dbc7f8 diff --git a/Toonshader_ProjectURP/Assets/Samples.meta b/Toonshader_ProjectURP/Assets/Samples.meta deleted file mode 100644 index 34bd6165f..000000000 --- a/Toonshader_ProjectURP/Assets/Samples.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7fd12dfadcd915441a5df9453615a65d -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs deleted file mode 100644 index 7861e5e06..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -[ExecuteAlways] -internal class ToonCameraViewController : MonoBehaviour { - private void OnEnable() { - m_transform = transform; - } - - void Update() { - Vector3 pos = m_transform.position; - foreach (Material mat in m_materials) { - if (mat == null) continue; - mat.SetVector(Toon3Das2DConstants.SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION, pos); - } - } - - -//---------------------------------------------------------------------------------------------------------------------- - [SerializeField] private List m_materials = new List(); - - private Transform m_transform; -} \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta deleted file mode 100644 index c6f5c36a3..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonCameraViewController.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 76eb1733b1eefbe4fb94e0398915fc49 diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs deleted file mode 100644 index e5aef079d..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -[ExecuteAlways] -[RequireComponent(typeof(Light))] -internal class ToonDirectionalLightController : MonoBehaviour { - void OnEnable() { - m_light = GetComponent(); - } - - - void Update() { - if (m_light.type != LightType.Directional) { - return; - } - - Vector3 lightDir = m_light.transform.forward; - Color lightColor = m_light.color; - float lightIntensity = m_light.intensity; - - foreach (Material mat in m_materials) { - if (mat == null) continue; - mat.SetVector(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Direction, lightDir); - mat.SetColor(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Color, lightColor); - mat.SetFloat(Toon3Das2DConstants.ShaderPropUnlit_DirectionalLight_Intensity, lightIntensity); - } - } - - -//---------------------------------------------------------------------------------------------------------------------- - [SerializeField] private List m_materials = new List(); - -//---------------------------------------------------------------------------------------------------------------------- - Light m_light; -} \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs.meta deleted file mode 100644 index 801eab182..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/ToonDirectionalLightController.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 95eb0866ac8fd424c8dfba8d023d36df \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl b/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl deleted file mode 100644 index bc794b9e0..000000000 --- a/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -inline float4 UnityObjectToClipPosInstanced(in float3 pos) { - return mul(UNITY_MATRIX_VP, mul(GetObjectToWorldMatrix(), float4(pos, 1.0))); -} -#define UnityObjectToClipPos UnityObjectToClipPosInstanced - - -inline float3 UnityObjectToWorldNormal(in float3 norm) -{ - #ifdef UNITY_ASSUME_UNIFORM_SCALING - return UnityObjectToWorldDir(norm); - #else - // mul(IT_M, norm) => mul(norm, I_M) => {dot(norm, I_M.col0), dot(norm, I_M.col1), dot(norm, I_M.col2)} - return normalize(mul(norm, (float3x3)GetWorldToObjectMatrix())); - #endif -} diff --git a/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl.meta b/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl.meta deleted file mode 100644 index a1165fead..000000000 --- a/Toonshader_ProjectURP/Assets/Shaders/ObjectTransform.hlsl.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 9b41c14789eff344cb5a038c3548f99e -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl b/Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl deleted file mode 100644 index df4a0cf65..000000000 --- a/Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl +++ /dev/null @@ -1,99 +0,0 @@ -#pragma once - - -#include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl" //_ShapeLightTexture - -struct ShapeLightResult { - half4 mod; - half4 add; -}; - -//---------------------------------------------------------------------------------------------------------------------- - -ShapeLightResult CombinedShapeLight(in half4 mask, in half2 lightingUV) -{ - ShapeLightResult ret = (ShapeLightResult)0; - - #if defined(DEBUG_DISPLAY) - half4 debugColor = 0; - - if (CanDebugOverrideOutputColor(surfaceData, inputData, debugColor)) - { - ret.mod = ret.add = debugColor; - return ret; - } - #endif - -#if USE_SHAPE_LIGHT_TYPE_0 - half4 shapeLight0 = SAMPLE_TEXTURE2D(_ShapeLightTexture0, sampler_ShapeLightTexture0, lightingUV); - - if (any(_ShapeLightMaskFilter0)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter0) * mask + _ShapeLightInvertedFilter0 * (1 - mask); - shapeLight0 *= dot(processedMask, _ShapeLightMaskFilter0); - } - - half4 shapeLight0Modulate = shapeLight0 * _ShapeLightBlendFactors0.x; - half4 shapeLight0Additive = shapeLight0 * _ShapeLightBlendFactors0.y; -#else - half4 shapeLight0Modulate = 0; - half4 shapeLight0Additive = 0; -#endif - -#if USE_SHAPE_LIGHT_TYPE_1 - half4 shapeLight1 = SAMPLE_TEXTURE2D(_ShapeLightTexture1, sampler_ShapeLightTexture1, lightingUV); - - if (any(_ShapeLightMaskFilter1)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter1) * mask + _ShapeLightInvertedFilter1 * (1 - mask); - shapeLight1 *= dot(processedMask, _ShapeLightMaskFilter1); - } - - half4 shapeLight1Modulate = shapeLight1 * _ShapeLightBlendFactors1.x; - half4 shapeLight1Additive = shapeLight1 * _ShapeLightBlendFactors1.y; -#else - half4 shapeLight1Modulate = 0; - half4 shapeLight1Additive = 0; -#endif - -#if USE_SHAPE_LIGHT_TYPE_2 - half4 shapeLight2 = SAMPLE_TEXTURE2D(_ShapeLightTexture2, sampler_ShapeLightTexture2, lightingUV); - - if (any(_ShapeLightMaskFilter2)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter2) * mask + _ShapeLightInvertedFilter2 * (1 - mask); - shapeLight2 *= dot(processedMask, _ShapeLightMaskFilter2); - } - - half4 shapeLight2Modulate = shapeLight2 * _ShapeLightBlendFactors2.x; - half4 shapeLight2Additive = shapeLight2 * _ShapeLightBlendFactors2.y; -#else - half4 shapeLight2Modulate = 0; - half4 shapeLight2Additive = 0; -#endif - -#if USE_SHAPE_LIGHT_TYPE_3 - half4 shapeLight3 = SAMPLE_TEXTURE2D(_ShapeLightTexture3, sampler_ShapeLightTexture3, lightingUV); - - if (any(_ShapeLightMaskFilter3)) - { - half4 processedMask = (1 - _ShapeLightInvertedFilter3) * mask + _ShapeLightInvertedFilter3 * (1 - mask); - shapeLight3 *= dot(processedMask, _ShapeLightMaskFilter3); - } - - half4 shapeLight3Modulate = shapeLight3 * _ShapeLightBlendFactors3.x; - half4 shapeLight3Additive = shapeLight3 * _ShapeLightBlendFactors3.y; -#else - half4 shapeLight3Modulate = 0; - half4 shapeLight3Additive = 0; -#endif - - half4 finalOutput; -#if !USE_SHAPE_LIGHT_TYPE_0 && !USE_SHAPE_LIGHT_TYPE_1 && !USE_SHAPE_LIGHT_TYPE_2 && ! USE_SHAPE_LIGHT_TYPE_3 -#else - ret.mod = shapeLight0Modulate + shapeLight1Modulate + shapeLight2Modulate + shapeLight3Modulate; - ret.add = shapeLight0Additive + shapeLight1Additive + shapeLight2Additive + shapeLight3Additive; -#endif - - return ret; -} diff --git a/Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl.meta b/Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl.meta deleted file mode 100644 index 0bd1bb12f..000000000 --- a/Toonshader_ProjectURP/Assets/Shaders/ShapeLight2D.hlsl.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 5bc7437a7c5f9e543b48e4927ebaa2f2 -ShaderIncludeImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader deleted file mode 100644 index 2bf98afd6..000000000 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader +++ /dev/null @@ -1,585 +0,0 @@ -Shader "Toon/Toon 3D as 2D"{ - Properties{ - - _BaseColor ("Base Color", Color) = (1,1,1,1) - _MainTex ("Main Texture", 2D) = "white" {} - - //Three Colors - _1st_ShadeColor ("1st Shade Color", Color) = (0.5,0.5,0.5,1) - _1st_ShadeMap ("1st Shade Map", 2D) = "white" {} - [Toggle(_)] _Use_BaseAs1st ("Use BaseMap as 1st_ShadeMap", Integer ) = 0 - _2nd_ShadeColor ("2nd Shade Color", Color) = (0.1,0.1,0.1,1) - _2nd_ShadeMap ("2nd Shade Map", 2D) = "white" {} - [Toggle(_)] _Use_1stAs2nd ("Use 1st ShadeMap as 2nd ShadeMap", Integer ) = 0 - - //Start and Feather - _BaseTo1st_ShadeStart ("Base to 1st Shade Start", Range(0, 1)) = 0.5 - _BaseTo1st_ShadeFeather ("Base to 1st Shade Feather", Range(0, 1)) = 0.1 - _1stTo2nd_ShadeStart ("1st to 2nd Shade Start", Range(0, 1)) = 0.25 - _1stTo2nd_ShadeFeather ("1st to 2nd Shade Feather", Range(0, 1)) = 0.1 - - _2DLightStrength ("2D Light Strength", Range(0,1)) = 1 - - _MaskTex("Mask", 2D) = "white" {} - _NormalMap("Normal Map", 2D) = "bump" {} - _BumpScale ("Normal Scale", Range(0, 1)) = 1 - - [HideInInspector] _White("Tint", Color) = (1,1,1,1) // Added to break SRP batching. Work around for issue with SRP Batching - - //Directional Light - _DirectionalLight_Use ("Use Directional Light", Integer) = 0 - _DirectionalLight_Direction ("Directional Light Direction", Vector) = (0,-1,0,0) - _DirectionalLight_Color("Directional Light Color", Color) = (1,1,1,1) - _DirectionalLight_Intensity ("Directional Light Intensity", float) = 0.5 - _DirectionalLight_DiffuseStrength ("Directional Light: Diffuse Strength", Range(0,1)) = 0.5 - - _DirectionalLight_ViewPosition ("Directional Light: View Position", Vector) = (0,0,1,0) - _HighlightColor ("Highlight Color", Color) = (1,1,1,1) - _HighlightTex ("HighColor Map", 2D) = "white" {} - _DirectionalLight_HighlightMode ("Directional Light: Highlight Mode", Integer) = 0 //0: Hard, 1: Soft - _DirectionalLight_HighlightStrength ("Directional Light: Highlight Strength", Range(0,1)) = 0.5 - _DirectionalLight_HighlightSize ("Directional Light: Highlight Size", Range(0,1)) = 0.3 - - //Outline - _OutlineMode("Outline Mode", Integer) = 0 - _OutlineWidth ("Outline Width", Float ) = 5 - _OutlineWidthMap ("Outline Width Map", 2D) = "white" {} - _OutlineColor ("Outline Color", Color) = (0.1,0.1,0.1,1) - _OutlineTex ("Outline Tex", 2D) = "white" {} - _Outline_BaseColorBlend ("Blend Base Color to Outline", Range(0,1) ) = 0.5 - _Outline_LightColorBlend ("Blend Light Color to Outline", Range(0,1) ) = 0.5 - _OutlineOffsetZ ("Outline Z Offset", Float) = 0.75 - _OutlineNear ("Outline Near", Float ) = 0.5 - _OutlineFar ("Outline Far", Float ) = 100 - _Outline_UseNormalMap ("Outline: Use Outline Normal Map", Integer ) = 0 - _Outline_NormalMap ("Outline Normal Map", 2D) = "bump" {} - - - } - - SubShader{ - Tags{ - "Queue" = "Transparent" "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" - } - - Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha - Cull Back - ZWrite On - - Stencil{ - Ref 128 // Put this in the last bit of our stencil value for maximum compatibility with sprite mask - Comp always - Pass replace - } - - Pass{ - Tags{ - "LightMode" = "Universal2D" - } - - HLSLPROGRAM - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" - - #pragma vertex ToonVertex - #pragma fragment ToonFragment - - //USE_SHAPE_LIGHT keywords - #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" - - // GPU Instancing - #pragma multi_compile_instancing - #pragma multi_compile _ DEBUG_DISPLAY - - struct Attributes { - float3 positionOS : POSITION; - float2 uv : TEXCOORD0; - float3 normal : NORMAL; - float4 tangent : TANGENT; - UNITY_VERTEX_INPUT_INSTANCE_ID - }; - - struct Varyings { - float4 positionCS : SV_POSITION; - float2 uv : TEXCOORD0; - half2 lightingUV : TEXCOORD1; - float3 normalWS : TEXCOORD2; - float4 tangentWS : TEXCOORD3; - float3 positionWS : TEXCOORD4; - UNITY_VERTEX_OUTPUT_STEREO - }; - - float4 _White; - - TEXTURE2D(_MainTex); - SAMPLER(sampler_MainTex); - UNITY_TEXTURE_STREAMING_DEBUG_VARS_FOR_TEX(_MainTex); - - TEXTURE2D(_MaskTex); - SAMPLER(sampler_MaskTex); - - TEXTURE2D(_NormalMap); - SAMPLER(sampler_NormalMap); - - - CBUFFER_START(UnityPerMaterial) - half4 _BaseColor; - float _BumpScale; - - //Three colors - float4 _1st_ShadeColor; - int _Use_BaseAs1st; - float4 _2nd_ShadeColor; - int _Use_1stAs2nd; - - //Start and Feather - float _BaseTo1st_ShadeStart; - float _BaseTo1st_ShadeFeather; - float _1stTo2nd_ShadeStart; - float _1stTo2nd_ShadeFeather; - - float _2DLightStrength; - - int _DirectionalLight_Use; - float3 _DirectionalLight_Direction; - float4 _DirectionalLight_Color; - float _DirectionalLight_Intensity; - float _DirectionalLight_DiffuseStrength; - - float3 _DirectionalLight_ViewPosition; - float4 _HighlightColor; - int _DirectionalLight_HighlightMode; - float _DirectionalLight_HighlightStrength; - float _DirectionalLight_HighlightSize; - - CBUFFER_END - -//---------------------------------------------------------------------------------------------------------------------- - float4 _MainTex_ST; - - TEXTURE2D(_1st_ShadeMap); - TEXTURE2D(_2nd_ShadeMap); - - TEXTURE2D(_HighlightTex); - SAMPLER(sampler_HighlightTex); - float4 _HighlightTex_ST; - - #include "ObjectTransform.hlsl" - #include "ShapeLight2D.hlsl" - - //_HDREmulationScale declaration - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightVariables.hlsl" - - Varyings ToonVertex(Attributes input) { - - Varyings o = (Varyings) 0; - UNITY_SETUP_INSTANCE_ID(input); - UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); - - o.positionCS = TransformObjectToHClip(input.positionOS); - const float3 normalWS = TransformObjectToWorldDir(input.normal); - - o.uv = input.uv; - o.lightingUV = half2(ComputeScreenPos(o.positionCS / o.positionCS.w).xy); - o.normalWS = normalWS; - - const float3 tangentWS = normalize( mul( GetObjectToWorldMatrix(), float4( input.tangent.xyz, 0 ) ).xyz); - o.tangentWS = float4(tangentWS, input.tangent.w); - o.positionWS = TransformObjectToWorld(input.positionOS); - - return o; - } - - - float3 ThreeColorsLinearShading( - float3 baseColor, - float3 firstColor, - float3 secondColor, - float3 baseTo1stStart, // t=0: use base, t=1: transition - float3 baseTo1stFeather, - float3 firstToSecondStart, //t=0: use base, t=1: transition - float3 firstToSecondFeather, - float dotNL) // dot(N.L) - { - const float t = saturate(1 - dotNL); //t = 0: light, t=1: dark shaded - - const float invBaseTo1stStart = 1 - baseTo1stStart; - const float invBaseTo2ndStart = 1 - firstToSecondStart; - - const float s1 = smoothstep(invBaseTo1stStart, invBaseTo1stStart + baseTo1stFeather,t); - const float s2 = smoothstep(invBaseTo2ndStart, invBaseTo2ndStart + firstToSecondFeather,t); - - float3 c01 = lerp(baseColor,firstColor, s1); - float3 c12 = lerp(c01, secondColor, s2); - return c12; - } - - - half4 CombinedShapeLightAndToon(ShapeLightResult shapeLightResult, SurfaceData2D surfaceData, - in float2 uv, - in float3 tangentWS, in float3 bitangentWS, in float3 normalWS, in float3 positionWS) - { - const half alpha = surfaceData.alpha; - - float3x3 tangentTransform = float3x3( tangentWS, bitangentWS, normalWS); - const float3 normalTS = surfaceData.normalTS; - float3 perturbedNormalWS = normalize(mul( normalTS, tangentTransform )); // Perturbed normals - - half4 light2dMod = shapeLightResult.mod; - half4 light2dAdd = shapeLightResult.add; - - const float light2dIntensity = max( - light2dMod.r * light2dAdd.r, max( - light2dMod.g + light2dAdd.g, - light2dMod.b + light2dAdd.b)); - - const half4 mainTex = half4(surfaceData.albedo, alpha); - const float3 baseAlbedo = _BaseColor.rgb * mainTex.rgb; - - //1st and 2nd Shade - const float4 firstShadeTex = lerp( - SAMPLE_TEXTURE2D(_1st_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), mainTex, - _Use_BaseAs1st); - const float3 firstShadeAlbedo = _1st_ShadeColor.rgb * firstShadeTex.rgb; - - const float4 secondShadeTex = lerp( - SAMPLE_TEXTURE2D(_2nd_ShadeMap, sampler_MainTex, TRANSFORM_TEX(uv, _MainTex)), firstShadeTex, - _Use_1stAs2nd); - const float3 secondShadeAlbedo = _2nd_ShadeColor.rgb * secondShadeTex.rgb; - - //perform 3 color linear shading with 2D colors and lights - const float3 color2D = ThreeColorsLinearShading( - (baseAlbedo * light2dMod + light2dAdd).rgb, - (firstShadeAlbedo * light2dMod + light2dAdd).rgb, - (secondShadeAlbedo * light2dMod + light2dAdd).rgb, - _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, - _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, light2dIntensity); - - - - //Toon Directional Light - const float3 directionalLightColorAndUse = _DirectionalLight_Color.rgb * _DirectionalLight_Use; - const float3 directionalLightDirection = normalize(-_DirectionalLight_Direction); - const float dotNL = 0.5 * dot( perturbedNormalWS, directionalLightDirection) + 0.5; - - const float3 toonDiffuseColor = ThreeColorsLinearShading( - baseAlbedo * directionalLightColorAndUse, - firstShadeAlbedo * directionalLightColorAndUse, - secondShadeAlbedo * directionalLightColorAndUse, - _BaseTo1st_ShadeStart, _BaseTo1st_ShadeFeather, - _1stTo2nd_ShadeStart, _1stTo2nd_ShadeFeather, - dotNL); - - const float3 finalDiffuseColor = color2D * _2DLightStrength + - toonDiffuseColor * _DirectionalLight_DiffuseStrength; - - //Highlight - const float3 viewDirection = normalize(_DirectionalLight_ViewPosition - positionWS); - const float3 halfDirection = normalize(viewDirection + directionalLightDirection); - float dotHN_01 = 0.5 * dot(halfDirection,perturbedNormalWS) + 0.5; - - const float highlight = - lerp( (1.0 - step(dotHN_01,(1.0 - pow(abs(_DirectionalLight_HighlightSize),5)))), - pow(abs(dotHN_01),exp2(lerp(11,1,_DirectionalLight_HighlightSize))), - _DirectionalLight_HighlightMode ); - - - const float4 highlightTex = SAMPLE_TEXTURE2D(_HighlightTex, sampler_HighlightTex, TRANSFORM_TEX(uv, _HighlightTex)); - const float3 highlightAlbedo = highlightTex.rgb * _HighlightColor.rgb; - const float3 highlightFactor = directionalLightColorAndUse * _DirectionalLight_HighlightStrength; - - const float3 finalHighlightColor = highlightAlbedo * highlightFactor * highlight; - - const float3 finalColor = _HDREmulationScale * (finalDiffuseColor + finalHighlightColor); - - return float4(finalColor,alpha); - } - - - half4 ToonFragment(Varyings input) : SV_Target { - const half4 main = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.uv); - const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.uv); - const half3 normalTS = UnpackNormalScale(SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, input.uv), _BumpScale); - - SurfaceData2D surfaceData; - - const float3 normalWS = normalize(input.normalWS); - const float3 tangentWS = normalize(input.tangentWS); - const float3 bitangentWS = normalize(cross(normalWS, tangentWS) * input.tangentWS.w); - - const float alpha = main.a; - - InitializeSurfaceData(main.rgb, alpha, mask, normalTS, surfaceData); - - #if defined(DEBUG_DISPLAY) - SETUP_DEBUG_TEXTURE_DATA_2D_NO_TS(inputData, input.positionWS, input.positionCS, _MainTex); - surfaceData.normalWS = input.normalWS; - #endif - - if (alpha == 0.0) - discard; - - ShapeLightResult shapeLightResult = CombinedShapeLight(mask, input.lightingUV); - - - return CombinedShapeLightAndToon(shapeLightResult, surfaceData, input.uv, - tangentWS, bitangentWS, normalWS, input.positionWS); - } - - - ENDHLSL - } - -//---------------------------------------------------------------------------------------------------------------------- - Pass { - Name "Outline" - Tags { - "LightMode" = "SRPDefaultUnlit" - } -// Cull [_SRPDefaultUnlitColMode] -// ColorMask [_SPRDefaultUnlitColorMask] - Blend SrcAlpha OneMinusSrcAlpha -// Stencil -// { -// Ref[_StencilNo] -// Comp[_StencilComp] -// Pass[_StencilOpPass] -// Fail[_StencilOpFail] -// -// } - - - HLSLPROGRAM - #pragma target 3.0 - #pragma vertex OutlineVertex - #pragma fragment OutlineFragment - - #pragma multi_compile TOON_OUTLINE_NORMAL TOON_OUTLINE_POS - // Outline is implemented in UniversalToonOutline.hlsl. - // #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" - // #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" - - //USE_SHAPE_LIGHT keywords - #include_with_pragmas "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightShared.hlsl" - - //_HDREmulationScale declaration - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/ShapeLightVariables.hlsl" - - struct OutlineVertexInput { - float4 vertex : POSITION; - float3 normal : NORMAL; - float4 tangent : TANGENT; - float2 texcoord0 : TEXCOORD0; - UNITY_VERTEX_INPUT_INSTANCE_ID - }; - - struct OutlineVertexOutput { - float4 pos : SV_POSITION; - float2 uv0 : TEXCOORD0; - half2 lightingUV : TEXCOORD1; - UNITY_VERTEX_OUTPUT_STEREO - }; - - TEXTURE2D(_MainTex); - SAMPLER(sampler_MainTex); - float4 _MainTex_ST; - - TEXTURE2D(_MaskTex); - SAMPLER(sampler_MaskTex); - - TEXTURE2D(_OutlineWidthMap); - SAMPLER(sampler_OutlineWidthMap); - float4 _OutlineWidthMap_ST; - - TEXTURE2D(_OutlineTex); - SAMPLER(sampler_OutlineTex); - float4 _OutlineTex_ST; - - TEXTURE2D(_Outline_NormalMap); - SAMPLER(sampler_Outline_NormalMap); - float4 _Outline_NormalMap_ST; - int _Outline_UseNormalMap; - - CBUFFER_START(UnityPerMaterial) - - float _2DLightStrength; - int _DirectionalLight_Use; - float4 _DirectionalLight_Color; - float _DirectionalLight_DiffuseStrength; - - half4 _BaseColor; - float _OutlineOffsetZ; - float _OutlineWidth; - float _OutlineNear; - float _OutlineFar; - float4 _OutlineColor; - float _Outline_BaseColorBlend; - float _Outline_LightColorBlend; - - CBUFFER_END - - #include "ObjectTransform.hlsl" - #include "ShapeLight2D.hlsl" - - OutlineVertexOutput OutlineVertex(OutlineVertexInput v) { - OutlineVertexOutput o = (OutlineVertexOutput) 0; - UNITY_SETUP_INSTANCE_ID(input); - UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); - - const float2 uv = v.texcoord0; - o.uv0 = v.texcoord0; - - const float4 objPos = mul (GetObjectToWorldMatrix(), float4(0,0,0,1) ); - - const float outlineWidthAlbedo = SAMPLE_TEXTURE2D_LOD(_OutlineWidthMap, sampler_OutlineWidthMap, - TRANSFORM_TEX(uv, _OutlineWidthMap),0).r; - const float outlineWidth = _OutlineWidth * 0.001 * outlineWidthAlbedo; - - float finalOutlineWidth = outlineWidth * smoothstep( _OutlineFar, _OutlineNear, distance(objPos.rgb,_WorldSpaceCameraPos) ); - - float3 newPos; -#ifdef TOON_OUTLINE_NORMAL - - //TBN - const float3 normalDir = UnityObjectToWorldNormal(v.normal); - const float3 tangentDir = normalize( mul( GetObjectToWorldMatrix(), float4( v.tangent.xyz, 0.0 ) ).xyz ); - const float3 bitangentDir = normalize(cross(normalDir, tangentDir) * v.tangent.w); - float3x3 tangentTransform = float3x3(tangentDir, bitangentDir, normalDir); - - //Outline normal map - const float4 customNormalMap = SAMPLE_TEXTURE2D_LOD( - _Outline_NormalMap, sampler_Outline_NormalMap, TRANSFORM_TEX(uv, _Outline_NormalMap),0); - const float3 normalTS = UnpackNormal(customNormalMap); - const float3 outlineNormalMapWS = normalize(mul(normalTS.xyz, tangentTransform)); - - const float3 outlineDir = lerp(v.normal, outlineNormalMapWS, _Outline_UseNormalMap); - - newPos = float4(v.vertex.xyz + outlineDir * finalOutlineWidth,1); - o.pos = TransformObjectToHClip(newPos); -#elif TOON_OUTLINE_POS - const float3 normalizedPos = normalize(v.vertex.xyz); - const float signPN = sign(dot(normalizedPos,normalize(v.normal))); - o.pos = UnityObjectToClipPos(float4(v.vertex.xyz + signPN * normalizedPos * finalOutlineWidth, 1)); -#endif - const float scaledOutlineOffsetZ = _OutlineOffsetZ * -0.01; - o.pos.z = o.pos.z + scaledOutlineOffsetZ; - - o.lightingUV = half2(ComputeScreenPos(o.pos / o.pos.w).xy); - return o; - } - - - half4 OutlineFragment(OutlineVertexOutput i) : SV_Target { - - const half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, i.uv0); - const half2 lightingUV = i.lightingUV; - - const float2 Set_UV0 = i.uv0; - float4 _MainTex_var = SAMPLE_TEXTURE2D(_MainTex,sampler_MainTex, TRANSFORM_TEX(Set_UV0, _MainTex)); - float3 Set_BaseColor = _BaseColor.rgb * _MainTex_var.rgb; - - const float3 outlineTex = tex2D(sampler_OutlineTex,TRANSFORM_TEX(Set_UV0, _OutlineTex)).rgb; - const float3 outlineAlbedo = outlineTex * _OutlineColor.rgb; - - //Blend with baseColor - const float3 outlineBaseBlend = lerp(outlineAlbedo, outlineAlbedo * Set_BaseColor, _Outline_BaseColorBlend); - - //Blend with light - ShapeLightResult shapeLightResult = CombinedShapeLight(mask, lightingUV); - const float3 color2D = (outlineBaseBlend.rgb * shapeLightResult.mod.rgb) + shapeLightResult.add.rgb; - const float3 colorToon = outlineBaseBlend.rgb * _DirectionalLight_Color.rgb * _DirectionalLight_Use; - const float3 outlineLightColor = (color2D * _2DLightStrength) + - (colorToon * _DirectionalLight_DiffuseStrength); - - const float3 outlineBaseAndLightBlend = lerp(outlineBaseBlend, outlineLightColor, _Outline_LightColorBlend); - - return float4(_HDREmulationScale * outlineBaseAndLightBlend,1.0); - } - - - ENDHLSL - } - - -//---------------------------------------------------------------------------------------------------------------------- - Pass{ - Tags{ - "LightMode" = "NormalsRendering" - } - - HLSLPROGRAM - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" - - #pragma vertex NormalsRenderingVertex - #pragma fragment NormalsRenderingFragment - - // GPU Instancing - #pragma multi_compile_instancing - - struct Attributes { - COMMON_2D_NORMALS_INPUTS - }; - - struct Varyings { - COMMON_2D_NORMALS_OUTPUTS - }; - - float4 _White; - - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Normals2DCommon.hlsl" - - Varyings NormalsRenderingVertex(Attributes input) { - return CommonNormalsVertex(input); - } - - half4 NormalsRenderingFragment(Varyings input) : SV_Target { - return CommonNormalsFragment(input, _White); - } - ENDHLSL - } - - Pass{ - Tags{ - "LightMode" = "UniversalForward" "Queue"="Transparent" "RenderType"="Transparent" - } - - HLSLPROGRAM - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" - - #pragma vertex UnlitVertex - #pragma fragment UnlitFragment - - // GPU Instancing - #pragma multi_compile_instancing - - struct Attributes { - COMMON_2D_INPUTS - }; - - struct Varyings { - COMMON_2D_OUTPUTS - }; - - float4 _White; - - #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/2DCommon.hlsl" - - Varyings UnlitVertex(Attributes input) { - return CommonUnlitVertex(input); - } - - half4 UnlitFragment(Varyings input) : SV_Target { - return CommonUnlitFragment(input, _White); - } - ENDHLSL - } - - } - - CustomEditor "UnityToon3Das2DGUI" - -} - - -//[Note-sin: 2025-11-24] Texture that only needs one channel at the moment -//1. _OutlineWidthMap diff --git a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader.meta b/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader.meta deleted file mode 100644 index dca3b76c9..000000000 --- a/Toonshader_ProjectURP/Assets/Shaders/Toon3Das2D.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 60d646244f75ab84f8eb12819a6d87ff -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: From c09b0e415f50751ce84763d739359f44b92ddf3e Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 3 Dec 2025 17:48:30 +0900 Subject: [PATCH 290/290] remove script [skip ci] --- .../Assets/ScriptsDev/Toon3Das2DConstants.cs | 8 -------- .../Assets/ScriptsDev/Toon3Das2DConstants.cs.meta | 2 -- 2 files changed, 10 deletions(-) delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs delete mode 100644 Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs.meta diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs deleted file mode 100644 index f64e34f2d..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs +++ /dev/null @@ -1,8 +0,0 @@ - -public static class Toon3Das2DConstants { - public const string ShaderPropUnlit_DirectionalLight_Direction = "_DirectionalLight_Direction"; - public const string ShaderPropUnlit_DirectionalLight_Color = "_DirectionalLight_Color"; - public const string ShaderPropUnlit_DirectionalLight_Intensity = "_DirectionalLight_Intensity"; - - public const string SHADER_PROP_DIRECTIONAL_LIGHT_VIEW_POSITION = "_DirectionalLight_ViewPosition"; -} \ No newline at end of file diff --git a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs.meta b/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs.meta deleted file mode 100644 index 20776ffa5..000000000 --- a/Toonshader_ProjectURP/Assets/ScriptsDev/Toon3Das2DConstants.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: cd2d32aae3fd8c84699b3bd6812a496b