Browse Source
Refactored text access methods in Writer and Say dialogs to a common TextAdapter CustomSayDialogs now use some TMPromaster
desktop-maesty/steve
7 years ago
68 changed files with 8142 additions and 189 deletions
@ -0,0 +1,18 @@
|
||||
using UnityEngine; |
||||
|
||||
namespace Fungus |
||||
{ |
||||
/// <summary> |
||||
/// One of the possible ways to route text from a writer to a desired location. |
||||
/// </summary> |
||||
public interface IWriterTextDestination |
||||
{ |
||||
string Text { get; set; } |
||||
|
||||
void ForceRichText(); |
||||
void SetTextColor(Color textColor); |
||||
void SetTextAlpha(float textAlpha); |
||||
bool HasTextObject(); |
||||
bool SupportsRichText(); |
||||
} |
||||
} |
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2 |
||||
guid: feba9da59eeb32b4a935aa62ddbc5de1 |
||||
MonoImporter: |
||||
externalObjects: {} |
||||
serializedVersion: 2 |
||||
defaultReferences: [] |
||||
executionOrder: 0 |
||||
icon: {instanceID: 0} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,194 @@
|
||||
using UnityEngine; |
||||
using UnityEngine.UI; |
||||
using System.Reflection; |
||||
|
||||
namespace Fungus |
||||
{ |
||||
/// <summary> |
||||
/// Helper class for hiding the many, many ways we might want to show text to the user. |
||||
/// </summary> |
||||
public class TextAdapter : IWriterTextDestination |
||||
{ |
||||
protected Text textUI; |
||||
protected InputField inputField; |
||||
protected TextMesh textMesh; |
||||
protected Component textComponent; |
||||
protected PropertyInfo textProperty; |
||||
protected IWriterTextDestination writerTextDestination; |
||||
|
||||
public void InitFromGameObject(GameObject go) |
||||
{ |
||||
textUI = go.GetComponent<Text>(); |
||||
inputField = go.GetComponent<InputField>(); |
||||
textMesh = go.GetComponent<TextMesh>(); |
||||
writerTextDestination = go.GetComponent<IWriterTextDestination>(); |
||||
|
||||
// Try to find any component with a text property |
||||
if (textUI == null && inputField == null && textMesh == null && writerTextDestination == null) |
||||
{ |
||||
var allcomponents = go.GetComponents<Component>(); |
||||
for (int i = 0; i < allcomponents.Length; i++) |
||||
{ |
||||
var c = allcomponents[i]; |
||||
textProperty = c.GetType().GetProperty("text"); |
||||
if (textProperty != null) |
||||
{ |
||||
textComponent = c; |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
public void ForceRichText() |
||||
{ |
||||
if (textUI != null) |
||||
{ |
||||
textUI.supportRichText = true; |
||||
} |
||||
|
||||
// Input Field does not support rich text |
||||
|
||||
if (textMesh != null) |
||||
{ |
||||
textMesh.richText = true; |
||||
} |
||||
|
||||
if(writerTextDestination != null) |
||||
{ |
||||
writerTextDestination.ForceRichText(); |
||||
} |
||||
} |
||||
|
||||
public void SetTextColor(Color textColor) |
||||
{ |
||||
if (textUI != null) |
||||
{ |
||||
textUI.color = textColor; |
||||
} |
||||
else if (inputField != null) |
||||
{ |
||||
if (inputField.textComponent != null) |
||||
{ |
||||
inputField.textComponent.color = textColor; |
||||
} |
||||
} |
||||
else if (textMesh != null) |
||||
{ |
||||
textMesh.color = textColor; |
||||
} |
||||
else if (writerTextDestination != null) |
||||
{ |
||||
writerTextDestination.SetTextColor(textColor); |
||||
} |
||||
} |
||||
|
||||
public void SetTextAlpha(float textAlpha) |
||||
{ |
||||
if (textUI != null) |
||||
{ |
||||
Color tempColor = textUI.color; |
||||
tempColor.a = textAlpha; |
||||
textUI.color = tempColor; |
||||
} |
||||
else if (inputField != null) |
||||
{ |
||||
if (inputField.textComponent != null) |
||||
{ |
||||
Color tempColor = inputField.textComponent.color; |
||||
tempColor.a = textAlpha; |
||||
inputField.textComponent.color = tempColor; |
||||
} |
||||
} |
||||
else if (textMesh != null) |
||||
{ |
||||
Color tempColor = textMesh.color; |
||||
tempColor.a = textAlpha; |
||||
textMesh.color = tempColor; |
||||
} |
||||
else if (writerTextDestination != null) |
||||
{ |
||||
writerTextDestination.SetTextAlpha(textAlpha); |
||||
} |
||||
} |
||||
|
||||
public bool HasTextObject() |
||||
{ |
||||
return (textUI != null || inputField != null || textMesh != null || textComponent != null || writerTextDestination != null); |
||||
} |
||||
|
||||
public bool SupportsRichText() |
||||
{ |
||||
if (textUI != null) |
||||
{ |
||||
return textUI.supportRichText; |
||||
} |
||||
if (inputField != null) |
||||
{ |
||||
return false; |
||||
} |
||||
if (textMesh != null) |
||||
{ |
||||
return textMesh.richText; |
||||
} |
||||
if (writerTextDestination != null) |
||||
{ |
||||
return writerTextDestination.SupportsRichText(); |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
public virtual string Text |
||||
{ |
||||
get |
||||
{ |
||||
if (textUI != null) |
||||
{ |
||||
return textUI.text; |
||||
} |
||||
else if (inputField != null) |
||||
{ |
||||
return inputField.text; |
||||
} |
||||
else if (writerTextDestination != null) |
||||
{ |
||||
return Text; |
||||
} |
||||
else if (textMesh != null) |
||||
{ |
||||
return textMesh.text; |
||||
} |
||||
else if (textProperty != null) |
||||
{ |
||||
return textProperty.GetValue(textComponent, null) as string; |
||||
} |
||||
|
||||
return ""; |
||||
} |
||||
|
||||
set |
||||
{ |
||||
if (textUI != null) |
||||
{ |
||||
textUI.text = value; |
||||
} |
||||
else if (inputField != null) |
||||
{ |
||||
inputField.text = value; |
||||
} |
||||
else if (writerTextDestination != null) |
||||
{ |
||||
Text = value; |
||||
} |
||||
else if (textMesh != null) |
||||
{ |
||||
textMesh.text = value; |
||||
} |
||||
else if (textProperty != null) |
||||
{ |
||||
textProperty.SetValue(textComponent, value, null); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 8a0aefc857c868742b39093959e4a0ce |
||||
MonoImporter: |
||||
externalObjects: {} |
||||
serializedVersion: 2 |
||||
defaultReferences: [] |
||||
executionOrder: 0 |
||||
icon: {instanceID: 0} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2 |
||||
guid: f54d1bd14bd3ca042bd867b519fee8cc |
||||
folderAsset: yes |
||||
DefaultImporter: |
||||
externalObjects: {} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 8e7e8f5a82a3a134e91c54efd2274ea9 |
||||
folderAsset: yes |
||||
DefaultImporter: |
||||
externalObjects: {} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
Binary file not shown.
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 1b8d251f9af63b746bf2f7ffe00ebb9b |
||||
DefaultImporter: |
||||
externalObjects: {} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 243e06394e614e5d99fab26083b707fa |
||||
folderAsset: yes |
||||
DefaultImporter: |
||||
externalObjects: {} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 731f1baa9d144a9897cb1d341c2092b8 |
||||
folderAsset: yes |
||||
timeCreated: 1442040525 |
||||
licenseType: Pro |
||||
DefaultImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,103 @@
|
||||
%YAML 1.1 |
||||
%TAG !u! tag:unity3d.com,2011: |
||||
--- !u!21 &2100000 |
||||
Material: |
||||
serializedVersion: 6 |
||||
m_ObjectHideFlags: 0 |
||||
m_PrefabParentObject: {fileID: 0} |
||||
m_PrefabInternal: {fileID: 0} |
||||
m_Name: LiberationSans SDF - Drop Shadow |
||||
m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3} |
||||
m_ShaderKeywords: OUTLINE_ON UNDERLAY_ON |
||||
m_LightmapFlags: 5 |
||||
m_EnableInstancingVariants: 0 |
||||
m_DoubleSidedGI: 0 |
||||
m_CustomRenderQueue: -1 |
||||
stringTagMap: {} |
||||
disabledShaderPasses: [] |
||||
m_SavedProperties: |
||||
serializedVersion: 3 |
||||
m_TexEnvs: |
||||
- _BumpMap: |
||||
m_Texture: {fileID: 0} |
||||
m_Scale: {x: 1, y: 1} |
||||
m_Offset: {x: 0, y: 0} |
||||
- _Cube: |
||||
m_Texture: {fileID: 0} |
||||
m_Scale: {x: 1, y: 1} |
||||
m_Offset: {x: 0, y: 0} |
||||
- _FaceTex: |
||||
m_Texture: {fileID: 0} |
||||
m_Scale: {x: 1, y: 1} |
||||
m_Offset: {x: 0, y: 0} |
||||
- _MainTex: |
||||
m_Texture: {fileID: 2846298, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} |
||||
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} |
||||
m_Floats: |
||||
- _Ambient: 0.5 |
||||
- _Bevel: 0.5 |
||||
- _BevelClamp: 0 |
||||
- _BevelOffset: 0 |
||||
- _BevelRoundness: 0 |
||||
- _BevelWidth: 0 |
||||
- _BumpFace: 0 |
||||
- _BumpOutline: 0 |
||||
- _ColorMask: 15 |
||||
- _Diffuse: 0.5 |
||||
- _DiffusePower: 1 |
||||
- _FaceDilate: 0.1 |
||||
- _FaceUVSpeedX: 0 |
||||
- _FaceUVSpeedY: 0 |
||||
- _GlowInner: 0.05 |
||||
- _GlowOffset: 0 |
||||
- _GlowOuter: 0.05 |
||||
- _GlowPower: 0.75 |
||||
- _GradientScale: 10 |
||||
- _LightAngle: 3.1416 |
||||
- _MaskSoftnessX: 0 |
||||
- _MaskSoftnessY: 0 |
||||
- _OutlineSoftness: 0 |
||||
- _OutlineUVSpeedX: 0 |
||||
- _OutlineUVSpeedY: 0 |
||||
- _OutlineWidth: 0.1 |
||||
- _PerspectiveFilter: 0.875 |
||||
- _Reflectivity: 10 |
||||
- _ScaleRatioA: 0.9 |
||||
- _ScaleRatioB: 0.73125 |
||||
- _ScaleRatioC: 0.64125 |
||||
- _ScaleX: 1 |
||||
- _ScaleY: 1 |
||||
- _ShaderFlags: 0 |
||||
- _SpecularPower: 2 |
||||
- _Stencil: 0 |
||||
- _StencilComp: 8 |
||||
- _StencilOp: 0 |
||||
- _StencilReadMask: 255 |
||||
- _StencilWriteMask: 255 |
||||
- _TextureHeight: 1024 |
||||
- _TextureWidth: 1024 |
||||
- _UnderlayDilate: 0 |
||||
- _UnderlayOffsetX: 0.5 |
||||
- _UnderlayOffsetY: -0.5 |
||||
- _UnderlaySoftness: 0.05 |
||||
- _VertexOffsetX: 0 |
||||
- _VertexOffsetY: 0 |
||||
- _WeightBold: 0.75 |
||||
- _WeightNormal: 0 |
||||
m_Colors: |
||||
- _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} |
||||
- _Color: {r: 1, g: 1, b: 1, a: 1} |
||||
- _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} |
||||
- _FaceColor: {r: 1, g: 1, b: 1, a: 1} |
||||
- _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} |
||||
- _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} |
||||
- _OutlineColor: {r: 0, g: 0, b: 0, a: 1} |
||||
- _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} |
||||
- _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} |
||||
- _SpecularColor: {r: 1, g: 1, b: 1, a: 1} |
||||
- _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} |
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2 |
||||
guid: e73a58f6e2794ae7b1b7e50b7fb811b0 |
||||
timeCreated: 1484172806 |
||||
licenseType: Pro |
||||
NativeFormatImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,101 @@
|
||||
%YAML 1.1 |
||||
%TAG !u! tag:unity3d.com,2011: |
||||
--- !u!21 &2100000 |
||||
Material: |
||||
serializedVersion: 6 |
||||
m_ObjectHideFlags: 0 |
||||
m_PrefabParentObject: {fileID: 0} |
||||
m_PrefabInternal: {fileID: 0} |
||||
m_Name: LiberationSans SDF - Outline |
||||
m_Shader: {fileID: 4800000, guid: fe393ace9b354375a9cb14cdbbc28be4, type: 3} |
||||
m_ShaderKeywords: OUTLINE_ON |
||||
m_LightmapFlags: 5 |
||||
m_EnableInstancingVariants: 0 |
||||
m_DoubleSidedGI: 0 |
||||
m_CustomRenderQueue: 3000 |
||||
stringTagMap: {} |
||||
disabledShaderPasses: [] |
||||
m_SavedProperties: |
||||
serializedVersion: 3 |
||||
m_TexEnvs: |
||||
- _BumpMap: |
||||
m_Texture: {fileID: 0} |
||||
m_Scale: {x: 1, y: 1} |
||||
m_Offset: {x: 0, y: 0} |
||||
- _Cube: |
||||
m_Texture: {fileID: 0} |
||||
m_Scale: {x: 1, y: 1} |
||||
m_Offset: {x: 0, y: 0} |
||||
- _FaceTex: |
||||
m_Texture: {fileID: 0} |
||||
m_Scale: {x: 1, y: 1} |
||||
m_Offset: {x: 0, y: 0} |
||||
- _MainTex: |
||||
m_Texture: {fileID: 2846298, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} |
||||
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} |
||||
m_Floats: |
||||
- _Ambient: 0.5 |
||||
- _Bevel: 0.5 |
||||
- _BevelClamp: 0 |
||||
- _BevelOffset: 0 |
||||
- _BevelRoundness: 0 |
||||
- _BevelWidth: 0 |
||||
- _BumpFace: 0 |
||||
- _BumpOutline: 0 |
||||
- _ColorMask: 15 |
||||
- _Diffuse: 0.5 |
||||
- _FaceDilate: 0.1 |
||||
- _FaceUVSpeedX: 0 |
||||
- _FaceUVSpeedY: 0 |
||||
- _GlowInner: 0.05 |
||||
- _GlowOffset: 0 |
||||
- _GlowOuter: 0.05 |
||||
- _GlowPower: 0.75 |
||||
- _GradientScale: 10 |
||||
- _LightAngle: 3.1416 |
||||
- _MaskSoftnessX: 0 |
||||
- _MaskSoftnessY: 0 |
||||
- _OutlineSoftness: 0 |
||||
- _OutlineUVSpeedX: 0 |
||||
- _OutlineUVSpeedY: 0 |
||||
- _OutlineWidth: 0.1 |
||||
- _PerspectiveFilter: 0.875 |
||||
- _Reflectivity: 10 |
||||
- _ScaleRatioA: 0.9 |
||||
- _ScaleRatioB: 0.73125 |
||||
- _ScaleRatioC: 0.64125 |
||||
- _ScaleX: 1 |
||||
- _ScaleY: 1 |
||||
- _ShaderFlags: 0 |
||||
- _SpecularPower: 2 |
||||
- _Stencil: 0 |
||||
- _StencilComp: 8 |
||||
- _StencilOp: 0 |
||||
- _StencilReadMask: 255 |
||||
- _StencilWriteMask: 255 |
||||
- _TextureHeight: 1024 |
||||
- _TextureWidth: 1024 |
||||
- _UnderlayDilate: 0 |
||||
- _UnderlayOffsetX: 0 |
||||
- _UnderlayOffsetY: 0 |
||||
- _UnderlaySoftness: 0 |
||||
- _VertexOffsetX: 0 |
||||
- _VertexOffsetY: 0 |
||||
- _WeightBold: 0.75 |
||||
- _WeightNormal: 0 |
||||
m_Colors: |
||||
- _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} |
||||
- _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} |
||||
- _FaceColor: {r: 1, g: 1, b: 1, a: 1} |
||||
- _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} |
||||
- _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} |
||||
- _OutlineColor: {r: 0, g: 0, b: 0, a: 1} |
||||
- _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} |
||||
- _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} |
||||
- _SpecularColor: {r: 1, g: 1, b: 1, a: 1} |
||||
- _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} |
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 79459efec17a4d00a321bdcc27bbc385 |
||||
timeCreated: 1484172856 |
||||
licenseType: Pro |
||||
NativeFormatImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
File diff suppressed because one or more lines are too long
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 8f586378b4e144a9851e7b34d9b748ee |
||||
timeCreated: 1484171803 |
||||
licenseType: Pro |
||||
NativeFormatImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1 @@
|
||||
)]}〕〉》」』】〙〗〟’”⦆»ヽヾーァィゥェォッャュョヮヵヶぁぃぅぇぉっゃゅょゎゕゖㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ々〻‐゠–〜?!‼⁇⁈⁉・、%,.:;。!?]):;=}¢°"†‡℃〆%,. |
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2 |
||||
guid: fade42e8bc714b018fac513c043d323b |
||||
timeCreated: 1425440388 |
||||
licenseType: Store |
||||
TextScriptImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1 @@
|
||||
([{〔〈《「『【〘〖〝‘“⦅«$—…‥〳〴〵\[({£¥"々〇〉》」$⦆¥₩ # |
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2 |
||||
guid: d82c1b31c7e74239bff1220585707d2b |
||||
timeCreated: 1425440388 |
||||
licenseType: Store |
||||
TextScriptImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 99f836c9cb9345dba2e72c4a1f2d0695 |
||||
folderAsset: yes |
||||
timeCreated: 1436068007 |
||||
licenseType: Pro |
||||
DefaultImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,142 @@
|
||||
Shader "TextMeshPro/Bitmap Custom Atlas" { |
||||
|
||||
Properties { |
||||
_MainTex ("Font Atlas", 2D) = "white" {} |
||||
_FaceTex ("Font Texture", 2D) = "white" {} |
||||
_FaceColor ("Text Color", Color) = (1,1,1,1) |
||||
|
||||
_VertexOffsetX ("Vertex OffsetX", float) = 0 |
||||
_VertexOffsetY ("Vertex OffsetY", float) = 0 |
||||
_MaskSoftnessX ("Mask SoftnessX", float) = 0 |
||||
_MaskSoftnessY ("Mask SoftnessY", float) = 0 |
||||
|
||||
_ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
||||
_Padding ("Padding", float) = 0 |
||||
|
||||
_StencilComp("Stencil Comparison", Float) = 8 |
||||
_Stencil("Stencil ID", Float) = 0 |
||||
_StencilOp("Stencil Operation", Float) = 0 |
||||
_StencilWriteMask("Stencil Write Mask", Float) = 255 |
||||
_StencilReadMask("Stencil Read Mask", Float) = 255 |
||||
|
||||
_ColorMask("Color Mask", Float) = 15 |
||||
} |
||||
|
||||
SubShader{ |
||||
|
||||
Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } |
||||
|
||||
Stencil |
||||
{ |
||||
Ref[_Stencil] |
||||
Comp[_StencilComp] |
||||
Pass[_StencilOp] |
||||
ReadMask[_StencilReadMask] |
||||
WriteMask[_StencilWriteMask] |
||||
} |
||||
|
||||
|
||||
Lighting Off |
||||
Cull [_CullMode] |
||||
ZTest [unity_GUIZTestMode] |
||||
ZWrite Off |
||||
Fog { Mode Off } |
||||
Blend SrcAlpha OneMinusSrcAlpha |
||||
ColorMask[_ColorMask] |
||||
|
||||
Pass { |
||||
CGPROGRAM |
||||
#pragma vertex vert |
||||
#pragma fragment frag |
||||
|
||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT |
||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP |
||||
|
||||
|
||||
#include "UnityCG.cginc" |
||||
|
||||
struct appdata_t { |
||||
float4 vertex : POSITION; |
||||
fixed4 color : COLOR; |
||||
float2 texcoord0 : TEXCOORD0; |
||||
float2 texcoord1 : TEXCOORD1; |
||||
}; |
||||
|
||||
struct v2f { |
||||
float4 vertex : SV_POSITION; |
||||
fixed4 color : COLOR; |
||||
float2 texcoord0 : TEXCOORD0; |
||||
float2 texcoord1 : TEXCOORD1; |
||||
float4 mask : TEXCOORD2; |
||||
}; |
||||
|
||||
uniform sampler2D _MainTex; |
||||
uniform sampler2D _FaceTex; |
||||
uniform float4 _FaceTex_ST; |
||||
uniform fixed4 _FaceColor; |
||||
|
||||
uniform float _VertexOffsetX; |
||||
uniform float _VertexOffsetY; |
||||
uniform float4 _ClipRect; |
||||
uniform float _MaskSoftnessX; |
||||
uniform float _MaskSoftnessY; |
||||
|
||||
float2 UnpackUV(float uv) |
||||
{ |
||||
float2 output; |
||||
output.x = floor(uv / 4096); |
||||
output.y = uv - 4096 * output.x; |
||||
|
||||
return output * 0.001953125; |
||||
} |
||||
|
||||
v2f vert (appdata_t v) |
||||
{ |
||||
float4 vert = v.vertex; |
||||
vert.x += _VertexOffsetX; |
||||
vert.y += _VertexOffsetY; |
||||
|
||||
vert.xy += (vert.w * 0.5) / _ScreenParams.xy; |
||||
|
||||
float4 vPosition = UnityPixelSnap(UnityObjectToClipPos(vert)); |
||||
|
||||
fixed4 faceColor = v.color; |
||||
faceColor *= _FaceColor; |
||||
|
||||
v2f OUT; |
||||
OUT.vertex = vPosition; |
||||
OUT.color = faceColor; |
||||
OUT.texcoord0 = v.texcoord0; |
||||
OUT.texcoord1 = TRANSFORM_TEX(UnpackUV(v.texcoord1), _FaceTex); |
||||
float2 pixelSize = vPosition.w; |
||||
pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1])); |
||||
|
||||
// Clamp _ClipRect to 16bit. |
||||
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); |
||||
OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); |
||||
|
||||
return OUT; |
||||
} |
||||
|
||||
fixed4 frag (v2f IN) : SV_Target |
||||
{ |
||||
fixed4 color = tex2D(_MainTex, IN.texcoord0) * tex2D(_FaceTex, IN.texcoord1) * IN.color; |
||||
|
||||
// Alternative implementation to UnityGet2DClipping with support for softness. |
||||
#if UNITY_UI_CLIP_RECT |
||||
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); |
||||
color *= m.x * m.y; |
||||
#endif |
||||
|
||||
#if UNITY_UI_ALPHACLIP |
||||
clip(color.a - 0.001); |
||||
#endif |
||||
|
||||
return color; |
||||
} |
||||
ENDCG |
||||
} |
||||
} |
||||
|
||||
CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI" |
||||
} |
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 48bb5f55d8670e349b6e614913f9d910 |
||||
ShaderImporter: |
||||
defaultTextures: [] |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,144 @@
|
||||
Shader "TextMeshPro/Mobile/Bitmap" { |
||||
|
||||
Properties { |
||||
_MainTex ("Font Atlas", 2D) = "white" {} |
||||
_Color ("Text Color", Color) = (1,1,1,1) |
||||
_DiffusePower ("Diffuse Power", Range(1.0,4.0)) = 1.0 |
||||
|
||||
_VertexOffsetX("Vertex OffsetX", float) = 0 |
||||
_VertexOffsetY("Vertex OffsetY", float) = 0 |
||||
_MaskSoftnessX("Mask SoftnessX", float) = 0 |
||||
_MaskSoftnessY("Mask SoftnessY", float) = 0 |
||||
|
||||
_ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
||||
|
||||
_StencilComp("Stencil Comparison", Float) = 8 |
||||
_Stencil("Stencil ID", Float) = 0 |
||||
_StencilOp("Stencil Operation", Float) = 0 |
||||
_StencilWriteMask("Stencil Write Mask", Float) = 255 |
||||
_StencilReadMask("Stencil Read Mask", Float) = 255 |
||||
|
||||
_ColorMask("Color Mask", Float) = 15 |
||||
} |
||||
|
||||
SubShader { |
||||
|
||||
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } |
||||
|
||||
Stencil |
||||
{ |
||||
Ref[_Stencil] |
||||
Comp[_StencilComp] |
||||
Pass[_StencilOp] |
||||
ReadMask[_StencilReadMask] |
||||
WriteMask[_StencilWriteMask] |
||||
} |
||||
|
||||
|
||||
Lighting Off |
||||
Cull Off |
||||
ZTest [unity_GUIZTestMode] |
||||
ZWrite Off |
||||
Fog { Mode Off } |
||||
Blend SrcAlpha OneMinusSrcAlpha |
||||
ColorMask[_ColorMask] |
||||
|
||||
Pass { |
||||
CGPROGRAM |
||||
#pragma vertex vert |
||||
#pragma fragment frag |
||||
#pragma fragmentoption ARB_precision_hint_fastest |
||||
|
||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT |
||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP |
||||
|
||||
|
||||
#include "UnityCG.cginc" |
||||
|
||||
struct appdata_t { |
||||
float4 vertex : POSITION; |
||||
fixed4 color : COLOR; |
||||
float2 texcoord0 : TEXCOORD0; |
||||
float2 texcoord1 : TEXCOORD1; |
||||
}; |
||||
|
||||
struct v2f { |
||||
float4 vertex : POSITION; |
||||
fixed4 color : COLOR; |
||||
float2 texcoord0 : TEXCOORD0; |
||||
float4 mask : TEXCOORD2; |
||||
}; |
||||
|
||||
sampler2D _MainTex; |
||||
fixed4 _Color; |
||||
float _DiffusePower; |
||||
|
||||
uniform float _VertexOffsetX; |
||||
uniform float _VertexOffsetY; |
||||
uniform float4 _ClipRect; |
||||
uniform float _MaskSoftnessX; |
||||
uniform float _MaskSoftnessY; |
||||
|
||||
v2f vert (appdata_t v) |
||||
{ |
||||
v2f OUT; |
||||
float4 vert = v.vertex; |
||||
vert.x += _VertexOffsetX; |
||||
vert.y += _VertexOffsetY; |
||||
|
||||
vert.xy += (vert.w * 0.5) / _ScreenParams.xy; |
||||
|
||||
OUT.vertex = UnityPixelSnap(UnityObjectToClipPos(vert)); |
||||
OUT.color = v.color; |
||||
OUT.color *= _Color; |
||||
OUT.color.rgb *= _DiffusePower; |
||||
OUT.texcoord0 = v.texcoord0; |
||||
|
||||
float2 pixelSize = OUT.vertex.w; |
||||
//pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1])); |
||||
|
||||
// Clamp _ClipRect to 16bit. |
||||
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); |
||||
OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); |
||||
|
||||
return OUT; |
||||
} |
||||
|
||||
fixed4 frag (v2f IN) : COLOR |
||||
{ |
||||
fixed4 color = fixed4(IN.color.rgb, IN.color.a * tex2D(_MainTex, IN.texcoord0).a); |
||||
|
||||
// Alternative implementation to UnityGet2DClipping with support for softness. |
||||
#if UNITY_UI_CLIP_RECT |
||||
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); |
||||
color *= m.x * m.y; |
||||
#endif |
||||
|
||||
#if UNITY_UI_ALPHACLIP |
||||
clip(color.a - 0.001); |
||||
#endif |
||||
|
||||
return color; |
||||
} |
||||
ENDCG |
||||
} |
||||
} |
||||
|
||||
SubShader { |
||||
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } |
||||
Lighting Off Cull Off ZTest Always ZWrite Off Fog { Mode Off } |
||||
Blend SrcAlpha OneMinusSrcAlpha |
||||
BindChannels { |
||||
Bind "Color", color |
||||
Bind "Vertex", vertex |
||||
Bind "TexCoord", texcoord0 |
||||
} |
||||
Pass { |
||||
SetTexture [_MainTex] { |
||||
constantColor [_Color] combine constant * primary, constant * texture |
||||
} |
||||
} |
||||
} |
||||
|
||||
CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI" |
||||
} |
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 1e3b057af24249748ff873be7fafee47 |
||||
ShaderImporter: |
||||
defaultTextures: [] |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,142 @@
|
||||
Shader "TextMeshPro/Bitmap" { |
||||
|
||||
Properties { |
||||
_MainTex ("Font Atlas", 2D) = "white" {} |
||||
_FaceTex ("Font Texture", 2D) = "white" {} |
||||
_FaceColor ("Text Color", Color) = (1,1,1,1) |
||||
|
||||
_VertexOffsetX ("Vertex OffsetX", float) = 0 |
||||
_VertexOffsetY ("Vertex OffsetY", float) = 0 |
||||
_MaskSoftnessX ("Mask SoftnessX", float) = 0 |
||||
_MaskSoftnessY ("Mask SoftnessY", float) = 0 |
||||
|
||||
_ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
||||
|
||||
_StencilComp("Stencil Comparison", Float) = 8 |
||||
_Stencil("Stencil ID", Float) = 0 |
||||
_StencilOp("Stencil Operation", Float) = 0 |
||||
_StencilWriteMask("Stencil Write Mask", Float) = 255 |
||||
_StencilReadMask("Stencil Read Mask", Float) = 255 |
||||
|
||||
_ColorMask("Color Mask", Float) = 15 |
||||
} |
||||
|
||||
SubShader{ |
||||
|
||||
Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } |
||||
|
||||
Stencil |
||||
{ |
||||
Ref[_Stencil] |
||||
Comp[_StencilComp] |
||||
Pass[_StencilOp] |
||||
ReadMask[_StencilReadMask] |
||||
WriteMask[_StencilWriteMask] |
||||
} |
||||
|
||||
|
||||
Lighting Off |
||||
Cull [_CullMode] |
||||
ZTest [unity_GUIZTestMode] |
||||
ZWrite Off |
||||
Fog { Mode Off } |
||||
Blend SrcAlpha OneMinusSrcAlpha |
||||
ColorMask[_ColorMask] |
||||
|
||||
Pass { |
||||
CGPROGRAM |
||||
#pragma vertex vert |
||||
#pragma fragment frag |
||||
|
||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT |
||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP |
||||
|
||||
|
||||
#include "UnityCG.cginc" |
||||
|
||||
struct appdata_t { |
||||
float4 vertex : POSITION; |
||||
fixed4 color : COLOR; |
||||
float2 texcoord0 : TEXCOORD0; |
||||
float2 texcoord1 : TEXCOORD1; |
||||
}; |
||||
|
||||
struct v2f { |
||||
float4 vertex : SV_POSITION; |
||||
fixed4 color : COLOR; |
||||
float2 texcoord0 : TEXCOORD0; |
||||
float2 texcoord1 : TEXCOORD1; |
||||
float4 mask : TEXCOORD2; |
||||
}; |
||||
|
||||
uniform sampler2D _MainTex; |
||||
uniform sampler2D _FaceTex; |
||||
uniform float4 _FaceTex_ST; |
||||
uniform fixed4 _FaceColor; |
||||
|
||||
uniform float _VertexOffsetX; |
||||
uniform float _VertexOffsetY; |
||||
uniform float4 _ClipRect; |
||||
uniform float _MaskSoftnessX; |
||||
uniform float _MaskSoftnessY; |
||||
|
||||
float2 UnpackUV(float uv) |
||||
{ |
||||
float2 output; |
||||
output.x = floor(uv / 4096); |
||||
output.y = uv - 4096 * output.x; |
||||
|
||||
return output * 0.001953125; |
||||
} |
||||
|
||||
v2f vert (appdata_t v) |
||||
{ |
||||
float4 vert = v.vertex; |
||||
vert.x += _VertexOffsetX; |
||||
vert.y += _VertexOffsetY; |
||||
|
||||
vert.xy += (vert.w * 0.5) / _ScreenParams.xy; |
||||
|
||||
float4 vPosition = UnityPixelSnap(UnityObjectToClipPos(vert)); |
||||
|
||||
fixed4 faceColor = v.color; |
||||
faceColor *= _FaceColor; |
||||
|
||||
v2f OUT; |
||||
OUT.vertex = vPosition; |
||||
OUT.color = faceColor; |
||||
OUT.texcoord0 = v.texcoord0; |
||||
OUT.texcoord1 = TRANSFORM_TEX(UnpackUV(v.texcoord1), _FaceTex); |
||||
float2 pixelSize = vPosition.w; |
||||
pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1])); |
||||
|
||||
// Clamp _ClipRect to 16bit. |
||||
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); |
||||
OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)); |
||||
|
||||
return OUT; |
||||
} |
||||
|
||||
fixed4 frag (v2f IN) : SV_Target |
||||
{ |
||||
fixed4 color = tex2D(_MainTex, IN.texcoord0); |
||||
color = fixed4 (tex2D(_FaceTex, IN.texcoord1).rgb * IN.color.rgb, IN.color.a * color.a); |
||||
|
||||
// Alternative implementation to UnityGet2DClipping with support for softness. |
||||
#if UNITY_UI_CLIP_RECT |
||||
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); |
||||
color *= m.x * m.y; |
||||
#endif |
||||
|
||||
#if UNITY_UI_ALPHACLIP |
||||
clip(color.a - 0.001); |
||||
#endif |
||||
|
||||
return color; |
||||
} |
||||
ENDCG |
||||
} |
||||
} |
||||
|
||||
CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI" |
||||
} |
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 128e987d567d4e2c824d754223b3f3b0 |
||||
ShaderImporter: |
||||
defaultTextures: [] |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,304 @@
|
||||
Shader "TextMeshPro/Distance Field Overlay" { |
||||
|
||||
Properties { |
||||
_FaceTex ("Face Texture", 2D) = "white" {} |
||||
_FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 |
||||
_FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 |
||||
_FaceColor ("Face Color", Color) = (1,1,1,1) |
||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0 |
||||
|
||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1) |
||||
_OutlineTex ("Outline Texture", 2D) = "white" {} |
||||
_OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 |
||||
_OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 |
||||
_OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 |
||||
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0 |
||||
|
||||
_Bevel ("Bevel", Range(0,1)) = 0.5 |
||||
_BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 |
||||
_BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 |
||||
_BevelClamp ("Bevel Clamp", Range(0,1)) = 0 |
||||
_BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 |
||||
|
||||
_LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416 |
||||
_SpecularColor ("Specular", Color) = (1,1,1,1) |
||||
_SpecularPower ("Specular", Range(0,4)) = 2.0 |
||||
_Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10 |
||||
_Diffuse ("Diffuse", Range(0,1)) = 0.5 |
||||
_Ambient ("Ambient", Range(1,0)) = 0.5 |
||||
|
||||
_BumpMap ("Normal map", 2D) = "bump" {} |
||||
_BumpOutline ("Bump Outline", Range(0,1)) = 0 |
||||
_BumpFace ("Bump Face", Range(0,1)) = 0 |
||||
|
||||
_ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1) |
||||
_ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1) |
||||
_Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } |
||||
_EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) |
||||
|
||||
|
||||
_UnderlayColor ("Border Color", Color) = (0,0,0, 0.5) |
||||
_UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 |
||||
_UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 |
||||
_UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 |
||||
_UnderlaySoftness ("Border Softness", Range(0,1)) = 0 |
||||
|
||||
_GlowColor ("Color", Color) = (0, 1, 0, 0.5) |
||||
_GlowOffset ("Offset", Range(-1,1)) = 0 |
||||
_GlowInner ("Inner", Range(0,1)) = 0.05 |
||||
_GlowOuter ("Outer", Range(0,1)) = 0.05 |
||||
_GlowPower ("Falloff", Range(1, 0)) = 0.75 |
||||
|
||||
_WeightNormal ("Weight Normal", float) = 0 |
||||
_WeightBold ("Weight Bold", float) = 0.5 |
||||
|
||||
_ShaderFlags ("Flags", float) = 0 |
||||
_ScaleRatioA ("Scale RatioA", float) = 1 |
||||
_ScaleRatioB ("Scale RatioB", float) = 1 |
||||
_ScaleRatioC ("Scale RatioC", float) = 1 |
||||
|
||||
_MainTex ("Font Atlas", 2D) = "white" {} |
||||
_TextureWidth ("Texture Width", float) = 512 |
||||
_TextureHeight ("Texture Height", float) = 512 |
||||
_GradientScale ("Gradient Scale", float) = 5.0 |
||||
_ScaleX ("Scale X", float) = 1.0 |
||||
_ScaleY ("Scale Y", float) = 1.0 |
||||
_PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 |
||||
|
||||
_VertexOffsetX ("Vertex OffsetX", float) = 0 |
||||
_VertexOffsetY ("Vertex OffsetY", float) = 0 |
||||
|
||||
_MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767) |
||||
_ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
||||
_MaskSoftnessX ("Mask SoftnessX", float) = 0 |
||||
_MaskSoftnessY ("Mask SoftnessY", float) = 0 |
||||
|
||||
_StencilComp ("Stencil Comparison", Float) = 8 |
||||
_Stencil ("Stencil ID", Float) = 0 |
||||
_StencilOp ("Stencil Operation", Float) = 0 |
||||
_StencilWriteMask ("Stencil Write Mask", Float) = 255 |
||||
_StencilReadMask ("Stencil Read Mask", Float) = 255 |
||||
|
||||
_ColorMask ("Color Mask", Float) = 15 |
||||
} |
||||
|
||||
SubShader { |
||||
|
||||
Tags |
||||
{ |
||||
"Queue"="Overlay" |
||||
"IgnoreProjector"="True" |
||||
"RenderType"="Transparent" |
||||
} |
||||
|
||||
Stencil |
||||
{ |
||||
Ref [_Stencil] |
||||
Comp [_StencilComp] |
||||
Pass [_StencilOp] |
||||
ReadMask [_StencilReadMask] |
||||
WriteMask [_StencilWriteMask] |
||||
} |
||||
|
||||
Cull [_CullMode] |
||||
ZWrite Off |
||||
Lighting Off |
||||
Fog { Mode Off } |
||||
ZTest Always |
||||
Blend One OneMinusSrcAlpha |
||||
ColorMask [_ColorMask] |
||||
|
||||
Pass { |
||||
CGPROGRAM |
||||
#pragma target 3.0 |
||||
#pragma vertex VertShader |
||||
#pragma fragment PixShader |
||||
#pragma shader_feature __ BEVEL_ON |
||||
#pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER |
||||
#pragma shader_feature __ GLOW_ON |
||||
|
||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT |
||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP |
||||
|
||||
|
||||
#include "UnityCG.cginc" |
||||
#include "UnityUI.cginc" |
||||
#include "TMPro_Properties.cginc" |
||||
#include "TMPro.cginc" |
||||
|
||||
struct vertex_t { |
||||
float4 position : POSITION; |
||||
float3 normal : NORMAL; |
||||
fixed4 color : COLOR; |
||||
float2 texcoord0 : TEXCOORD0; |
||||
float2 texcoord1 : TEXCOORD1; |
||||
}; |
||||
|
||||
|
||||
struct pixel_t { |
||||
float4 position : SV_POSITION; |
||||
fixed4 color : COLOR; |
||||
float2 atlas : TEXCOORD0; // Atlas |
||||
float4 param : TEXCOORD1; // alphaClip, scale, bias, weight |
||||
float4 mask : TEXCOORD2; // Position in object space(xy), pixel Size(zw) |
||||
float3 viewDir : TEXCOORD3; |
||||
|
||||
#if (UNDERLAY_ON || UNDERLAY_INNER) |
||||
float4 texcoord2 : TEXCOORD4; // u,v, scale, bias |
||||
fixed4 underlayColor : COLOR1; |
||||
#endif |
||||
float4 textures : TEXCOORD5; |
||||
}; |
||||
|
||||
// Used by Unity internally to handle Texture Tiling and Offset. |
||||
float4 _FaceTex_ST; |
||||
float4 _OutlineTex_ST; |
||||
|
||||
pixel_t VertShader(vertex_t input) |
||||
{ |
||||
float bold = step(input.texcoord1.y, 0); |
||||
|
||||
float4 vert = input.position; |
||||
vert.x += _VertexOffsetX; |
||||
vert.y += _VertexOffsetY; |
||||
float4 vPosition = UnityObjectToClipPos(vert); |
||||
|
||||
float2 pixelSize = vPosition.w; |
||||
pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); |
||||
float scale = rsqrt(dot(pixelSize, pixelSize)); |
||||
scale *= abs(input.texcoord1.y) * _GradientScale * 1.5; |
||||
if (UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); |
||||
|
||||
float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; |
||||
weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; |
||||
|
||||
float bias =(.5 - weight) + (.5 / scale); |
||||
|
||||
float alphaClip = (1.0 - _OutlineWidth*_ScaleRatioA - _OutlineSoftness*_ScaleRatioA); |
||||
|
||||
#if GLOW_ON |
||||
alphaClip = min(alphaClip, 1.0 - _GlowOffset * _ScaleRatioB - _GlowOuter * _ScaleRatioB); |
||||
#endif |
||||
|
||||
alphaClip = alphaClip / 2.0 - ( .5 / scale) - weight; |
||||
|
||||
#if (UNDERLAY_ON || UNDERLAY_INNER) |
||||
float4 underlayColor = _UnderlayColor; |
||||
underlayColor.rgb *= underlayColor.a; |
||||
|
||||
float bScale = scale; |
||||
bScale /= 1 + ((_UnderlaySoftness*_ScaleRatioC) * bScale); |
||||
float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale); |
||||
|
||||
float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; |
||||
float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; |
||||
float2 bOffset = float2(x, y); |
||||
#endif |
||||
|
||||
// Generate UV for the Masking Texture |
||||
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); |
||||
float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); |
||||
|
||||
// Support for texture tiling and offset |
||||
float2 textureUV = UnpackUV(input.texcoord1.x); |
||||
float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex); |
||||
float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex); |
||||
|
||||
pixel_t output = { |
||||
vPosition, |
||||
input.color, |
||||
input.texcoord0, |
||||
float4(alphaClip, scale, bias, weight), |
||||
half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)), |
||||
mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz), |
||||
#if (UNDERLAY_ON || UNDERLAY_INNER) |
||||
float4(input.texcoord0 + bOffset, bScale, bBias), |
||||
underlayColor, |
||||
#endif |
||||
float4(faceUV, outlineUV), |
||||
}; |
||||
|
||||
return output; |
||||
} |
||||
|
||||
|
||||
fixed4 PixShader(pixel_t input) : SV_Target |
||||
{ |
||||
float c = tex2D(_MainTex, input.atlas).a; |
||||
|
||||
#ifndef UNDERLAY_ON |
||||
clip(c - input.param.x); |
||||
#endif |
||||
|
||||
float scale = input.param.y; |
||||
float bias = input.param.z; |
||||
float weight = input.param.w; |
||||
float sd = (bias - c) * scale; |
||||
|
||||
float outline = (_OutlineWidth * _ScaleRatioA) * scale; |
||||
float softness = (_OutlineSoftness * _ScaleRatioA) * scale; |
||||
|
||||
half4 faceColor = _FaceColor; |
||||
half4 outlineColor = _OutlineColor; |
||||
|
||||
faceColor.rgb *= input.color.rgb; |
||||
|
||||
faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y); |
||||
outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y); |
||||
|
||||
faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); |
||||
|
||||
#if BEVEL_ON |
||||
float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0); |
||||
float3 n = GetSurfaceNormal(input.atlas, weight, dxy); |
||||
|
||||
float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz; |
||||
bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); |
||||
n = normalize(n- bump); |
||||
|
||||
float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0)); |
||||
|
||||
float3 col = GetSpecular(n, light); |
||||
faceColor.rgb += col*faceColor.a; |
||||
faceColor.rgb *= 1-(dot(n, light)*_Diffuse); |
||||
faceColor.rgb *= lerp(_Ambient, 1, n.z*n.z); |
||||
|
||||
fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n)); |
||||
faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; |
||||
#endif |
||||
|
||||
#if UNDERLAY_ON |
||||
float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; |
||||
faceColor += input.underlayColor * saturate(d - input.texcoord2.w) * (1 - faceColor.a); |
||||
#endif |
||||
|
||||
#if UNDERLAY_INNER |
||||
float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; |
||||
faceColor += input.underlayColor * (1 - saturate(d - input.texcoord2.w)) * saturate(1 - sd) * (1 - faceColor.a); |
||||
#endif |
||||
|
||||
#if GLOW_ON |
||||
float4 glowColor = GetGlowColor(sd, scale); |
||||
faceColor.rgb += glowColor.rgb * glowColor.a; |
||||
#endif |
||||
|
||||
// Alternative implementation to UnityGet2DClipping with support for softness. |
||||
#if UNITY_UI_CLIP_RECT |
||||
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); |
||||
faceColor *= m.x * m.y; |
||||
#endif |
||||
|
||||
#if UNITY_UI_ALPHACLIP |
||||
clip(faceColor.a - 0.001); |
||||
#endif |
||||
|
||||
return faceColor * input.color.a; |
||||
} |
||||
|
||||
ENDCG |
||||
} |
||||
} |
||||
|
||||
Fallback "TextMeshPro/Mobile/Distance Field" |
||||
CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" |
||||
} |
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2 |
||||
guid: dd89cf5b9246416f84610a006f916af7 |
||||
ShaderImporter: |
||||
defaultTextures: [] |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,245 @@
|
||||
// Simplified SDF shader: |
||||
// - No Shading Option (bevel / bump / env map) |
||||
// - No Glow Option |
||||
// - Softness is applied on both side of the outline |
||||
|
||||
Shader "TextMeshPro/Mobile/Distance Field - Masking" { |
||||
|
||||
Properties { |
||||
_FaceColor ("Face Color", Color) = (1,1,1,1) |
||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0 |
||||
|
||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1) |
||||
_OutlineWidth ("Outline Thickness", Range(0,1)) = 0 |
||||
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0 |
||||
|
||||
_UnderlayColor ("Border Color", Color) = (0,0,0,.5) |
||||
_UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 |
||||
_UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 |
||||
_UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 |
||||
_UnderlaySoftness ("Border Softness", Range(0,1)) = 0 |
||||
|
||||
_WeightNormal ("Weight Normal", float) = 0 |
||||
_WeightBold ("Weight Bold", float) = .5 |
||||
|
||||
_ShaderFlags ("Flags", float) = 0 |
||||
_ScaleRatioA ("Scale RatioA", float) = 1 |
||||
_ScaleRatioB ("Scale RatioB", float) = 1 |
||||
_ScaleRatioC ("Scale RatioC", float) = 1 |
||||
|
||||
_MainTex ("Font Atlas", 2D) = "white" {} |
||||
_TextureWidth ("Texture Width", float) = 512 |
||||
_TextureHeight ("Texture Height", float) = 512 |
||||
_GradientScale ("Gradient Scale", float) = 5 |
||||
_ScaleX ("Scale X", float) = 1 |
||||
_ScaleY ("Scale Y", float) = 1 |
||||
_PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 |
||||
|
||||
_VertexOffsetX ("Vertex OffsetX", float) = 0 |
||||
_VertexOffsetY ("Vertex OffsetY", float) = 0 |
||||
|
||||
_ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
||||
_MaskSoftnessX ("Mask SoftnessX", float) = 0 |
||||
_MaskSoftnessY ("Mask SoftnessY", float) = 0 |
||||
_MaskTex ("Mask Texture", 2D) = "white" {} |
||||
_MaskInverse ("Inverse", float) = 0 |
||||
_MaskEdgeColor ("Edge Color", Color) = (1,1,1,1) |
||||
_MaskEdgeSoftness ("Edge Softness", Range(0, 1)) = 0.01 |
||||
_MaskWipeControl ("Wipe Position", Range(0, 1)) = 0.5 |
||||
|
||||
_StencilComp ("Stencil Comparison", Float) = 8 |
||||
_Stencil ("Stencil ID", Float) = 0 |
||||
_StencilOp ("Stencil Operation", Float) = 0 |
||||
_StencilWriteMask ("Stencil Write Mask", Float) = 255 |
||||
_StencilReadMask ("Stencil Read Mask", Float) = 255 |
||||
|
||||
_ColorMask ("Color Mask", Float) = 15 |
||||
} |
||||
|
||||
SubShader { |
||||
Tags |
||||
{ |
||||
"Queue"="Transparent" |
||||
"IgnoreProjector"="True" |
||||
"RenderType"="Transparent" |
||||
} |
||||
|
||||
|
||||
Stencil |
||||
{ |
||||
Ref [_Stencil] |
||||
Comp [_StencilComp] |
||||
Pass [_StencilOp] |
||||
ReadMask [_StencilReadMask] |
||||
WriteMask [_StencilWriteMask] |
||||
} |
||||
|
||||
Cull [_CullMode] |
||||
ZWrite Off |
||||
Lighting Off |
||||
Fog { Mode Off } |
||||
ZTest [unity_GUIZTestMode] |
||||
Blend One OneMinusSrcAlpha |
||||
ColorMask [_ColorMask] |
||||
|
||||
Pass { |
||||
CGPROGRAM |
||||
#pragma vertex VertShader |
||||
#pragma fragment PixShader |
||||
#pragma shader_feature __ OUTLINE_ON |
||||
#pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER |
||||
|
||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT |
||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP |
||||
|
||||
|
||||
#include "UnityCG.cginc" |
||||
#include "UnityUI.cginc" |
||||
#include "TMPro_Properties.cginc" |
||||
|
||||
struct vertex_t { |
||||
float4 vertex : POSITION; |
||||
float3 normal : NORMAL; |
||||
fixed4 color : COLOR; |
||||
float2 texcoord0 : TEXCOORD0; |
||||
float2 texcoord1 : TEXCOORD1; |
||||
}; |
||||
|
||||
struct pixel_t { |
||||
float4 vertex : SV_POSITION; |
||||
fixed4 faceColor : COLOR; |
||||
fixed4 outlineColor : COLOR1; |
||||
float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV |
||||
half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w) |
||||
half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw) |
||||
#if (UNDERLAY_ON | UNDERLAY_INNER) |
||||
float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved |
||||
half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y) |
||||
#endif |
||||
}; |
||||
|
||||
float _MaskWipeControl; |
||||
float _MaskEdgeSoftness; |
||||
fixed4 _MaskEdgeColor; |
||||
bool _MaskInverse; |
||||
|
||||
pixel_t VertShader(vertex_t input) |
||||
{ |
||||
float bold = step(input.texcoord1.y, 0); |
||||
|
||||
float4 vert = input.vertex; |
||||
vert.x += _VertexOffsetX; |
||||
vert.y += _VertexOffsetY; |
||||
float4 vPosition = UnityObjectToClipPos(vert); |
||||
|
||||
float2 pixelSize = vPosition.w; |
||||
pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); |
||||
|
||||
float scale = rsqrt(dot(pixelSize, pixelSize)); |
||||
scale *= abs(input.texcoord1.y) * _GradientScale * 1.5; |
||||
if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); |
||||
|
||||
float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; |
||||
weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; |
||||
|
||||
float layerScale = scale; |
||||
|
||||
scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); |
||||
float bias = (0.5 - weight) * scale - 0.5; |
||||
float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale; |
||||
|
||||
float opacity = input.color.a; |
||||
#if (UNDERLAY_ON | UNDERLAY_INNER) |
||||
opacity = 1.0; |
||||
#endif |
||||
|
||||
fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; |
||||
faceColor.rgb *= faceColor.a; |
||||
|
||||
fixed4 outlineColor = _OutlineColor; |
||||
outlineColor.a *= opacity; |
||||
outlineColor.rgb *= outlineColor.a; |
||||
outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2)))); |
||||
|
||||
#if (UNDERLAY_ON | UNDERLAY_INNER) |
||||
|
||||
layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); |
||||
float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); |
||||
|
||||
float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; |
||||
float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; |
||||
float2 layerOffset = float2(x, y); |
||||
#endif |
||||
|
||||
// Generate UV for the Masking Texture |
||||
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); |
||||
float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); |
||||
|
||||
// Structure for pixel shader |
||||
pixel_t output = { |
||||
vPosition, |
||||
faceColor, |
||||
outlineColor, |
||||
float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y), |
||||
half4(scale, bias - outline, bias + outline, bias), |
||||
half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)), |
||||
#if (UNDERLAY_ON | UNDERLAY_INNER) |
||||
float4(input.texcoord0 + layerOffset, input.color.a, 0), |
||||
half2(layerScale, layerBias), |
||||
#endif |
||||
}; |
||||
|
||||
return output; |
||||
} |
||||
|
||||
|
||||
// PIXEL SHADER |
||||
fixed4 PixShader(pixel_t input) : SV_Target |
||||
{ |
||||
half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x; |
||||
half4 c = input.faceColor * saturate(d - input.param.w); |
||||
|
||||
#ifdef OUTLINE_ON |
||||
c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z)); |
||||
c *= saturate(d - input.param.y); |
||||
#endif |
||||
|
||||
#if UNDERLAY_ON |
||||
d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; |
||||
c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a); |
||||
#endif |
||||
|
||||
#if UNDERLAY_INNER |
||||
half sd = saturate(d - input.param.z); |
||||
d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; |
||||
c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a); |
||||
#endif |
||||
|
||||
// Alternative implementation to UnityGet2DClipping with support for softness. |
||||
#if UNITY_UI_CLIP_RECT |
||||
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); |
||||
c *= m.x * m.y; |
||||
#endif |
||||
|
||||
float a = abs(_MaskInverse - tex2D(_MaskTex, input.texcoord0.zw).a); |
||||
float t = a + (1 - _MaskWipeControl) * _MaskEdgeSoftness - _MaskWipeControl; |
||||
a = saturate(t / _MaskEdgeSoftness); |
||||
c.rgb = lerp(_MaskEdgeColor.rgb*c.a, c.rgb, a); |
||||
c *= a; |
||||
|
||||
#if (UNDERLAY_ON | UNDERLAY_INNER) |
||||
c *= input.texcoord1.z; |
||||
#endif |
||||
|
||||
#if UNITY_UI_ALPHACLIP |
||||
clip(c.a - 0.001); |
||||
#endif |
||||
|
||||
return c; |
||||
} |
||||
ENDCG |
||||
} |
||||
} |
||||
|
||||
CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" |
||||
} |
@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2 |
||||
guid: bc1ede39bf3643ee8e493720e4259791 |
||||
timeCreated: 1463704911 |
||||
licenseType: Pro |
||||
ShaderImporter: |
||||
defaultTextures: [] |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,229 @@
|
||||
// Simplified SDF shader: |
||||
// - No Shading Option (bevel / bump / env map) |
||||
// - No Glow Option |
||||
// - Softness is applied on both side of the outline |
||||
|
||||
Shader "TextMeshPro/Mobile/Distance Field Overlay" { |
||||
|
||||
Properties { |
||||
_FaceColor ("Face Color", Color) = (1,1,1,1) |
||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0 |
||||
|
||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1) |
||||
_OutlineWidth ("Outline Thickness", Range(0,1)) = 0 |
||||
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0 |
||||
|
||||
_UnderlayColor ("Border Color", Color) = (0,0,0,.5) |
||||
_UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 |
||||
_UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 |
||||
_UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 |
||||
_UnderlaySoftness ("Border Softness", Range(0,1)) = 0 |
||||
|
||||
_WeightNormal ("Weight Normal", float) = 0 |
||||
_WeightBold ("Weight Bold", float) = .5 |
||||
|
||||
_ShaderFlags ("Flags", float) = 0 |
||||
_ScaleRatioA ("Scale RatioA", float) = 1 |
||||
_ScaleRatioB ("Scale RatioB", float) = 1 |
||||
_ScaleRatioC ("Scale RatioC", float) = 1 |
||||
|
||||
_MainTex ("Font Atlas", 2D) = "white" {} |
||||
_TextureWidth ("Texture Width", float) = 512 |
||||
_TextureHeight ("Texture Height", float) = 512 |
||||
_GradientScale ("Gradient Scale", float) = 5 |
||||
_ScaleX ("Scale X", float) = 1 |
||||
_ScaleY ("Scale Y", float) = 1 |
||||
_PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 |
||||
|
||||
_VertexOffsetX ("Vertex OffsetX", float) = 0 |
||||
_VertexOffsetY ("Vertex OffsetY", float) = 0 |
||||
|
||||
_ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
||||
_MaskSoftnessX ("Mask SoftnessX", float) = 0 |
||||
_MaskSoftnessY ("Mask SoftnessY", float) = 0 |
||||
|
||||
_StencilComp ("Stencil Comparison", Float) = 8 |
||||
_Stencil ("Stencil ID", Float) = 0 |
||||
_StencilOp ("Stencil Operation", Float) = 0 |
||||
_StencilWriteMask ("Stencil Write Mask", Float) = 255 |
||||
_StencilReadMask ("Stencil Read Mask", Float) = 255 |
||||
|
||||
_ColorMask ("Color Mask", Float) = 15 |
||||
} |
||||
|
||||
SubShader { |
||||
Tags |
||||
{ |
||||
"Queue"="Overlay" |
||||
"IgnoreProjector"="True" |
||||
"RenderType"="Transparent" |
||||
} |
||||
|
||||
|
||||
Stencil |
||||
{ |
||||
Ref [_Stencil] |
||||
Comp [_StencilComp] |
||||
Pass [_StencilOp] |
||||
ReadMask [_StencilReadMask] |
||||
WriteMask [_StencilWriteMask] |
||||
} |
||||
|
||||
Cull [_CullMode] |
||||
ZWrite Off |
||||
Lighting Off |
||||
Fog { Mode Off } |
||||
ZTest Always |
||||
Blend One OneMinusSrcAlpha |
||||
ColorMask [_ColorMask] |
||||
|
||||
Pass { |
||||
CGPROGRAM |
||||
#pragma vertex VertShader |
||||
#pragma fragment PixShader |
||||
#pragma shader_feature __ OUTLINE_ON |
||||
#pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER |
||||
|
||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT |
||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP |
||||
|
||||
#include "UnityCG.cginc" |
||||
#include "UnityUI.cginc" |
||||
#include "TMPro_Properties.cginc" |
||||
|
||||
struct vertex_t { |
||||
float4 vertex : POSITION; |
||||
float3 normal : NORMAL; |
||||
fixed4 color : COLOR; |
||||
float2 texcoord0 : TEXCOORD0; |
||||
float2 texcoord1 : TEXCOORD1; |
||||
}; |
||||
|
||||
struct pixel_t { |
||||
float4 vertex : SV_POSITION; |
||||
fixed4 faceColor : COLOR; |
||||
fixed4 outlineColor : COLOR1; |
||||
float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV |
||||
half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w) |
||||
half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw) |
||||
#if (UNDERLAY_ON | UNDERLAY_INNER) |
||||
float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved |
||||
half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y) |
||||
#endif |
||||
}; |
||||
|
||||
|
||||
pixel_t VertShader(vertex_t input) |
||||
{ |
||||
float bold = step(input.texcoord1.y, 0); |
||||
|
||||
float4 vert = input.vertex; |
||||
vert.x += _VertexOffsetX; |
||||
vert.y += _VertexOffsetY; |
||||
float4 vPosition = UnityObjectToClipPos(vert); |
||||
|
||||
float2 pixelSize = vPosition.w; |
||||
pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); |
||||
|
||||
float scale = rsqrt(dot(pixelSize, pixelSize)); |
||||
scale *= abs(input.texcoord1.y) * _GradientScale * 1.5; |
||||
if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); |
||||
|
||||
float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; |
||||
weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; |
||||
|
||||
float layerScale = scale; |
||||
|
||||
scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); |
||||
float bias = (0.5 - weight) * scale - 0.5; |
||||
float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale; |
||||
|
||||
float opacity = input.color.a; |
||||
#if (UNDERLAY_ON | UNDERLAY_INNER) |
||||
opacity = 1.0; |
||||
#endif |
||||
|
||||
fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; |
||||
faceColor.rgb *= faceColor.a; |
||||
|
||||
fixed4 outlineColor = _OutlineColor; |
||||
outlineColor.a *= opacity; |
||||
outlineColor.rgb *= outlineColor.a; |
||||
outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2)))); |
||||
|
||||
#if (UNDERLAY_ON | UNDERLAY_INNER) |
||||
|
||||
layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); |
||||
float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); |
||||
|
||||
float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; |
||||
float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; |
||||
float2 layerOffset = float2(x, y); |
||||
#endif |
||||
|
||||
// Generate UV for the Masking Texture |
||||
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); |
||||
float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); |
||||
|
||||
// Structure for pixel shader |
||||
pixel_t output = { |
||||
vPosition, |
||||
faceColor, |
||||
outlineColor, |
||||
float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y), |
||||
half4(scale, bias - outline, bias + outline, bias), |
||||
half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)), |
||||
#if (UNDERLAY_ON | UNDERLAY_INNER) |
||||
float4(input.texcoord0 + layerOffset, input.color.a, 0), |
||||
half2(layerScale, layerBias), |
||||
#endif |
||||
}; |
||||
|
||||
return output; |
||||
} |
||||
|
||||
|
||||
// PIXEL SHADER |
||||
fixed4 PixShader(pixel_t input) : SV_Target |
||||
{ |
||||
half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x; |
||||
half4 c = input.faceColor * saturate(d - input.param.w); |
||||
|
||||
#ifdef OUTLINE_ON |
||||
c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z)); |
||||
c *= saturate(d - input.param.y); |
||||
#endif |
||||
|
||||
#if UNDERLAY_ON |
||||
d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; |
||||
c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a); |
||||
#endif |
||||
|
||||
#if UNDERLAY_INNER |
||||
half sd = saturate(d - input.param.z); |
||||
d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; |
||||
c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a); |
||||
#endif |
||||
|
||||
// Alternative implementation to UnityGet2DClipping with support for softness. |
||||
#if UNITY_UI_CLIP_RECT |
||||
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); |
||||
c *= m.x * m.y; |
||||
#endif |
||||
|
||||
#if (UNDERLAY_ON | UNDERLAY_INNER) |
||||
c *= input.texcoord1.z; |
||||
#endif |
||||
|
||||
#if UNITY_UI_ALPHACLIP |
||||
clip(c.a - 0.001); |
||||
#endif |
||||
|
||||
return c; |
||||
} |
||||
ENDCG |
||||
} |
||||
} |
||||
|
||||
CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" |
||||
} |
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2 |
||||
guid: a02a7d8c237544f1962732b55a9aebf1 |
||||
ShaderImporter: |
||||
defaultTextures: [] |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,229 @@
|
||||
// Simplified SDF shader: |
||||
// - No Shading Option (bevel / bump / env map) |
||||
// - No Glow Option |
||||
// - Softness is applied on both side of the outline |
||||
|
||||
Shader "TextMeshPro/Mobile/Distance Field" { |
||||
|
||||
Properties { |
||||
_FaceColor ("Face Color", Color) = (1,1,1,1) |
||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0 |
||||
|
||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1) |
||||
_OutlineWidth ("Outline Thickness", Range(0,1)) = 0 |
||||
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0 |
||||
|
||||
_UnderlayColor ("Border Color", Color) = (0,0,0,.5) |
||||
_UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 |
||||
_UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 |
||||
_UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 |
||||
_UnderlaySoftness ("Border Softness", Range(0,1)) = 0 |
||||
|
||||
_WeightNormal ("Weight Normal", float) = 0 |
||||
_WeightBold ("Weight Bold", float) = .5 |
||||
|
||||
_ShaderFlags ("Flags", float) = 0 |
||||
_ScaleRatioA ("Scale RatioA", float) = 1 |
||||
_ScaleRatioB ("Scale RatioB", float) = 1 |
||||
_ScaleRatioC ("Scale RatioC", float) = 1 |
||||
|
||||
_MainTex ("Font Atlas", 2D) = "white" {} |
||||
_TextureWidth ("Texture Width", float) = 512 |
||||
_TextureHeight ("Texture Height", float) = 512 |
||||
_GradientScale ("Gradient Scale", float) = 5 |
||||
_ScaleX ("Scale X", float) = 1 |
||||
_ScaleY ("Scale Y", float) = 1 |
||||
_PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 |
||||
|
||||
_VertexOffsetX ("Vertex OffsetX", float) = 0 |
||||
_VertexOffsetY ("Vertex OffsetY", float) = 0 |
||||
|
||||
_ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
||||
_MaskSoftnessX ("Mask SoftnessX", float) = 0 |
||||
_MaskSoftnessY ("Mask SoftnessY", float) = 0 |
||||
|
||||
_StencilComp ("Stencil Comparison", Float) = 8 |
||||
_Stencil ("Stencil ID", Float) = 0 |
||||
_StencilOp ("Stencil Operation", Float) = 0 |
||||
_StencilWriteMask ("Stencil Write Mask", Float) = 255 |
||||
_StencilReadMask ("Stencil Read Mask", Float) = 255 |
||||
|
||||
_ColorMask ("Color Mask", Float) = 15 |
||||
} |
||||
|
||||
SubShader { |
||||
Tags |
||||
{ |
||||
"Queue"="Transparent" |
||||
"IgnoreProjector"="True" |
||||
"RenderType"="Transparent" |
||||
} |
||||
|
||||
|
||||
Stencil |
||||
{ |
||||
Ref [_Stencil] |
||||
Comp [_StencilComp] |
||||
Pass [_StencilOp] |
||||
ReadMask [_StencilReadMask] |
||||
WriteMask [_StencilWriteMask] |
||||
} |
||||
|
||||
Cull [_CullMode] |
||||
ZWrite Off |
||||
Lighting Off |
||||
Fog { Mode Off } |
||||
ZTest [unity_GUIZTestMode] |
||||
Blend One OneMinusSrcAlpha |
||||
ColorMask [_ColorMask] |
||||
|
||||
Pass { |
||||
CGPROGRAM |
||||
#pragma vertex VertShader |
||||
#pragma fragment PixShader |
||||
#pragma shader_feature __ OUTLINE_ON |
||||
#pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER |
||||
|
||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT |
||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP |
||||
|
||||
#include "UnityCG.cginc" |
||||
#include "UnityUI.cginc" |
||||
#include "TMPro_Properties.cginc" |
||||
|
||||
struct vertex_t { |
||||
float4 vertex : POSITION; |
||||
float3 normal : NORMAL; |
||||
fixed4 color : COLOR; |
||||
float2 texcoord0 : TEXCOORD0; |
||||
float2 texcoord1 : TEXCOORD1; |
||||
}; |
||||
|
||||
struct pixel_t { |
||||
float4 vertex : SV_POSITION; |
||||
fixed4 faceColor : COLOR; |
||||
fixed4 outlineColor : COLOR1; |
||||
float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV |
||||
half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w) |
||||
half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw) |
||||
#if (UNDERLAY_ON | UNDERLAY_INNER) |
||||
float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved |
||||
half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y) |
||||
#endif |
||||
}; |
||||
|
||||
|
||||
pixel_t VertShader(vertex_t input) |
||||
{ |
||||
float bold = step(input.texcoord1.y, 0); |
||||
|
||||
float4 vert = input.vertex; |
||||
vert.x += _VertexOffsetX; |
||||
vert.y += _VertexOffsetY; |
||||
float4 vPosition = UnityObjectToClipPos(vert); |
||||
|
||||
float2 pixelSize = vPosition.w; |
||||
pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); |
||||
|
||||
float scale = rsqrt(dot(pixelSize, pixelSize)); |
||||
scale *= abs(input.texcoord1.y) * _GradientScale * 1.5; |
||||
if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); |
||||
|
||||
float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; |
||||
weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; |
||||
|
||||
float layerScale = scale; |
||||
|
||||
scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); |
||||
float bias = (0.5 - weight) * scale - 0.5; |
||||
float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale; |
||||
|
||||
float opacity = input.color.a; |
||||
#if (UNDERLAY_ON | UNDERLAY_INNER) |
||||
opacity = 1.0; |
||||
#endif |
||||
|
||||
fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor; |
||||
faceColor.rgb *= faceColor.a; |
||||
|
||||
fixed4 outlineColor = _OutlineColor; |
||||
outlineColor.a *= opacity; |
||||
outlineColor.rgb *= outlineColor.a; |
||||
outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2)))); |
||||
|
||||
#if (UNDERLAY_ON | UNDERLAY_INNER) |
||||
|
||||
layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); |
||||
float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); |
||||
|
||||
float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; |
||||
float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; |
||||
float2 layerOffset = float2(x, y); |
||||
#endif |
||||
|
||||
// Generate UV for the Masking Texture |
||||
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); |
||||
float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); |
||||
|
||||
// Structure for pixel shader |
||||
pixel_t output = { |
||||
vPosition, |
||||
faceColor, |
||||
outlineColor, |
||||
float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y), |
||||
half4(scale, bias - outline, bias + outline, bias), |
||||
half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)), |
||||
#if (UNDERLAY_ON | UNDERLAY_INNER) |
||||
float4(input.texcoord0 + layerOffset, input.color.a, 0), |
||||
half2(layerScale, layerBias), |
||||
#endif |
||||
}; |
||||
|
||||
return output; |
||||
} |
||||
|
||||
|
||||
// PIXEL SHADER |
||||
fixed4 PixShader(pixel_t input) : SV_Target |
||||
{ |
||||
half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x; |
||||
half4 c = input.faceColor * saturate(d - input.param.w); |
||||
|
||||
#ifdef OUTLINE_ON |
||||
c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z)); |
||||
c *= saturate(d - input.param.y); |
||||
#endif |
||||
|
||||
#if UNDERLAY_ON |
||||
d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; |
||||
c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a); |
||||
#endif |
||||
|
||||
#if UNDERLAY_INNER |
||||
half sd = saturate(d - input.param.z); |
||||
d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x; |
||||
c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a); |
||||
#endif |
||||
|
||||
// Alternative implementation to UnityGet2DClipping with support for softness. |
||||
#if UNITY_UI_CLIP_RECT |
||||
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); |
||||
c *= m.x * m.y; |
||||
#endif |
||||
|
||||
#if (UNDERLAY_ON | UNDERLAY_INNER) |
||||
c *= input.texcoord1.z; |
||||
#endif |
||||
|
||||
#if UNITY_UI_ALPHACLIP |
||||
clip(c.a - 0.001); |
||||
#endif |
||||
|
||||
return c; |
||||
} |
||||
ENDCG |
||||
} |
||||
} |
||||
|
||||
CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" |
||||
} |
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2 |
||||
guid: fe393ace9b354375a9cb14cdbbc28be4 |
||||
ShaderImporter: |
||||
defaultTextures: [] |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,136 @@
|
||||
// Simplified version of the SDF Surface shader : |
||||
// - No support for Bevel, Bump or envmap |
||||
// - Diffuse only lighting |
||||
// - Fully supports only 1 directional light. Other lights can affect it, but it will be per-vertex/SH. |
||||
|
||||
Shader "TextMeshPro/Mobile/Distance Field (Surface)" { |
||||
|
||||
Properties { |
||||
_FaceTex ("Fill Texture", 2D) = "white" {} |
||||
_FaceColor ("Fill Color", Color) = (1,1,1,1) |
||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0 |
||||
|
||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1) |
||||
_OutlineTex ("Outline Texture", 2D) = "white" {} |
||||
_OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 |
||||
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0 |
||||
|
||||
_GlowColor ("Color", Color) = (0, 1, 0, 0.5) |
||||
_GlowOffset ("Offset", Range(-1,1)) = 0 |
||||
_GlowInner ("Inner", Range(0,1)) = 0.05 |
||||
_GlowOuter ("Outer", Range(0,1)) = 0.05 |
||||
_GlowPower ("Falloff", Range(1, 0)) = 0.75 |
||||
|
||||
_WeightNormal ("Weight Normal", float) = 0 |
||||
_WeightBold ("Weight Bold", float) = 0.5 |
||||
|
||||
// Should not be directly exposed to the user |
||||
_ShaderFlags ("Flags", float) = 0 |
||||
_ScaleRatioA ("Scale RatioA", float) = 1 |
||||
_ScaleRatioB ("Scale RatioB", float) = 1 |
||||
_ScaleRatioC ("Scale RatioC", float) = 1 |
||||
|
||||
_MainTex ("Font Atlas", 2D) = "white" {} |
||||
_TextureWidth ("Texture Width", float) = 512 |
||||
_TextureHeight ("Texture Height", float) = 512 |
||||
_GradientScale ("Gradient Scale", float) = 5.0 |
||||
_ScaleX ("Scale X", float) = 1.0 |
||||
_ScaleY ("Scale Y", float) = 1.0 |
||||
_PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 |
||||
|
||||
_VertexOffsetX ("Vertex OffsetX", float) = 0 |
||||
_VertexOffsetY ("Vertex OffsetY", float) = 0 |
||||
|
||||
//_MaskCoord ("Mask Coords", vector) = (0,0,0,0) |
||||
//_MaskSoftness ("Mask Softness", float) = 0 |
||||
} |
||||
|
||||
SubShader { |
||||
|
||||
Tags { |
||||
"Queue"="Transparent" |
||||
"IgnoreProjector"="True" |
||||
"RenderType"="Transparent" |
||||
} |
||||
|
||||
LOD 300 |
||||
Cull [_CullMode] |
||||
|
||||
CGPROGRAM |
||||
#pragma surface PixShader Lambert alpha:blend vertex:VertShader noforwardadd nolightmap nodirlightmap |
||||
#pragma target 3.0 |
||||
#pragma shader_feature __ GLOW_ON |
||||
|
||||
#include "TMPro_Properties.cginc" |
||||
#include "TMPro.cginc" |
||||
|
||||
half _FaceShininess; |
||||
half _OutlineShininess; |
||||
|
||||
struct Input |
||||
{ |
||||
fixed4 color : COLOR; |
||||
float2 uv_MainTex; |
||||
float2 uv2_FaceTex; |
||||
float2 uv2_OutlineTex; |
||||
float2 param; // Weight, Scale |
||||
float3 viewDirEnv; |
||||
}; |
||||
|
||||
#include "TMPro_Surface.cginc" |
||||
|
||||
ENDCG |
||||
|
||||
// Pass to render object as a shadow caster |
||||
Pass |
||||
{ |
||||
Name "Caster" |
||||
Tags { "LightMode" = "ShadowCaster" } |
||||
Offset 1, 1 |
||||
|
||||
Fog {Mode Off} |
||||
ZWrite On ZTest LEqual Cull Off |
||||
|
||||
CGPROGRAM |
||||
#pragma vertex vert |
||||
#pragma fragment frag |
||||
#pragma multi_compile_shadowcaster |
||||
#include "UnityCG.cginc" |
||||
|
||||
struct v2f { |
||||
V2F_SHADOW_CASTER; |
||||
float2 uv : TEXCOORD1; |
||||
float2 uv2 : TEXCOORD3; |
||||
float alphaClip : TEXCOORD2; |
||||
}; |
||||
|
||||
uniform float4 _MainTex_ST; |
||||
uniform float4 _OutlineTex_ST; |
||||
float _OutlineWidth; |
||||
float _FaceDilate; |
||||
float _ScaleRatioA; |
||||
|
||||
v2f vert( appdata_base v ) |
||||
{ |
||||
v2f o; |
||||
TRANSFER_SHADOW_CASTER(o) |
||||
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); |
||||
o.uv2 = TRANSFORM_TEX(v.texcoord, _OutlineTex); |
||||
o.alphaClip = o.alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _FaceDilate * _ScaleRatioA) / 2; |
||||
return o; |
||||
} |
||||
|
||||
uniform sampler2D _MainTex; |
||||
|
||||
float4 frag(v2f i) : COLOR |
||||
{ |
||||
fixed4 texcol = tex2D(_MainTex, i.uv).a; |
||||
clip(texcol.a - i.alphaClip); |
||||
SHADOW_CASTER_FRAGMENT(i) |
||||
} |
||||
ENDCG |
||||
} |
||||
} |
||||
|
||||
CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" |
||||
} |
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 85187c2149c549c5b33f0cdb02836b17 |
||||
ShaderImporter: |
||||
defaultTextures: [] |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,155 @@
|
||||
Shader "TextMeshPro/Distance Field (Surface)" { |
||||
|
||||
Properties { |
||||
_FaceTex ("Fill Texture", 2D) = "white" {} |
||||
_FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 |
||||
_FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 |
||||
_FaceColor ("Fill Color", Color) = (1,1,1,1) |
||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0 |
||||
|
||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1) |
||||
_OutlineTex ("Outline Texture", 2D) = "white" {} |
||||
_OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 |
||||
_OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 |
||||
_OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 |
||||
_OutlineSoftness ("Outline Softness", Range(0,1)) = 0 |
||||
|
||||
_Bevel ("Bevel", Range(0,1)) = 0.5 |
||||
_BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 |
||||
_BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 |
||||
_BevelClamp ("Bevel Clamp", Range(0,1)) = 0 |
||||
_BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 |
||||
|
||||
_BumpMap ("Normalmap", 2D) = "bump" {} |
||||
_BumpOutline ("Bump Outline", Range(0,1)) = 0.5 |
||||
_BumpFace ("Bump Face", Range(0,1)) = 0.5 |
||||
|
||||
_ReflectFaceColor ("Face Color", Color) = (0,0,0,1) |
||||
_ReflectOutlineColor ("Outline Color", Color) = (0,0,0,1) |
||||
_Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } |
||||
_EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) |
||||
_SpecColor ("Specular Color", Color) = (0,0,0,1) |
||||
|
||||
_FaceShininess ("Face Shininess", Range(0,1)) = 0 |
||||
_OutlineShininess ("Outline Shininess", Range(0,1)) = 0 |
||||
|
||||
_GlowColor ("Color", Color) = (0, 1, 0, 0.5) |
||||
_GlowOffset ("Offset", Range(-1,1)) = 0 |
||||
_GlowInner ("Inner", Range(0,1)) = 0.05 |
||||
_GlowOuter ("Outer", Range(0,1)) = 0.05 |
||||
_GlowPower ("Falloff", Range(1, 0)) = 0.75 |
||||
|
||||
_WeightNormal ("Weight Normal", float) = 0 |
||||
_WeightBold ("Weight Bold", float) = 0.5 |
||||
|
||||
// Should not be directly exposed to the user |
||||
_ShaderFlags ("Flags", float) = 0 |
||||
_ScaleRatioA ("Scale RatioA", float) = 1 |
||||
_ScaleRatioB ("Scale RatioB", float) = 1 |
||||
_ScaleRatioC ("Scale RatioC", float) = 1 |
||||
|
||||
_MainTex ("Font Atlas", 2D) = "white" {} |
||||
_TextureWidth ("Texture Width", float) = 512 |
||||
_TextureHeight ("Texture Height", float) = 512 |
||||
_GradientScale ("Gradient Scale", float) = 5.0 |
||||
_ScaleX ("Scale X", float) = 1.0 |
||||
_ScaleY ("Scale Y", float) = 1.0 |
||||
_PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 |
||||
|
||||
_VertexOffsetX ("Vertex OffsetX", float) = 0 |
||||
_VertexOffsetY ("Vertex OffsetY", float) = 0 |
||||
//_MaskCoord ("Mask Coords", vector) = (0,0,0,0) |
||||
//_MaskSoftness ("Mask Softness", float) = 0 |
||||
} |
||||
|
||||
SubShader { |
||||
|
||||
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } |
||||
|
||||
LOD 300 |
||||
Cull [_CullMode] |
||||
|
||||
CGPROGRAM |
||||
#pragma surface PixShader BlinnPhong alpha:blend vertex:VertShader nolightmap nodirlightmap |
||||
#pragma target 3.0 |
||||
#pragma shader_feature __ GLOW_ON |
||||
#pragma glsl |
||||
|
||||
#include "TMPro_Properties.cginc" |
||||
#include "TMPro.cginc" |
||||
|
||||
half _FaceShininess; |
||||
half _OutlineShininess; |
||||
|
||||
struct Input |
||||
{ |
||||
fixed4 color : COLOR; |
||||
float2 uv_MainTex; |
||||
float2 uv2_FaceTex; |
||||
float2 uv2_OutlineTex; |
||||
float2 param; // Weight, Scale |
||||
float3 viewDirEnv; |
||||
}; |
||||
|
||||
|
||||
#define BEVEL_ON 1 |
||||
#include "TMPro_Surface.cginc" |
||||
|
||||
ENDCG |
||||
|
||||
// Pass to render object as a shadow caster |
||||
Pass |
||||
{ |
||||
Name "Caster" |
||||
Tags { "LightMode" = "ShadowCaster" } |
||||
Offset 1, 1 |
||||
|
||||
Fog {Mode Off} |
||||
ZWrite On |
||||
ZTest LEqual |
||||
Cull Off |
||||
|
||||
CGPROGRAM |
||||
#pragma vertex vert |
||||
#pragma fragment frag |
||||
#pragma multi_compile_shadowcaster |
||||
#include "UnityCG.cginc" |
||||
|
||||
struct v2f { |
||||
V2F_SHADOW_CASTER; |
||||
float2 uv : TEXCOORD1; |
||||
float2 uv2 : TEXCOORD3; |
||||
float alphaClip : TEXCOORD2; |
||||
}; |
||||
|
||||
uniform float4 _MainTex_ST; |
||||
uniform float4 _OutlineTex_ST; |
||||
float _OutlineWidth; |
||||
float _FaceDilate; |
||||
float _ScaleRatioA; |
||||
|
||||
v2f vert( appdata_base v ) |
||||
{ |
||||
v2f o; |
||||
TRANSFER_SHADOW_CASTER(o) |
||||
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); |
||||
o.uv2 = TRANSFORM_TEX(v.texcoord, _OutlineTex); |
||||
o.alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _FaceDilate * _ScaleRatioA) / 2; |
||||
return o; |
||||
} |
||||
|
||||
uniform sampler2D _MainTex; |
||||
|
||||
float4 frag(v2f i) : COLOR |
||||
{ |
||||
fixed4 texcol = tex2D(_MainTex, i.uv).a; |
||||
clip(texcol.a - i.alphaClip); |
||||
SHADOW_CASTER_FRAGMENT(i) |
||||
} |
||||
ENDCG |
||||
} |
||||
} |
||||
|
||||
CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" |
||||
} |
||||
|
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2 |
||||
guid: f7ada0af4f174f0694ca6a487b8f543d |
||||
ShaderImporter: |
||||
defaultTextures: [] |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,305 @@
|
||||
Shader "TextMeshPro/Distance Field" { |
||||
|
||||
Properties { |
||||
_FaceTex ("Face Texture", 2D) = "white" {} |
||||
_FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0 |
||||
_FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0 |
||||
_FaceColor ("Face Color", Color) = (1,1,1,1) |
||||
_FaceDilate ("Face Dilate", Range(-1,1)) = 0 |
||||
|
||||
_OutlineColor ("Outline Color", Color) = (0,0,0,1) |
||||
_OutlineTex ("Outline Texture", 2D) = "white" {} |
||||
_OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0 |
||||
_OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0 |
||||
_OutlineWidth ("Outline Thickness", Range(0, 1)) = 0 |
||||
_OutlineSoftness ("Outline Softness", Range(-1,1)) = 0 |
||||
|
||||
_Bevel ("Bevel", Range(0,1)) = 0.5 |
||||
_BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0 |
||||
_BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0 |
||||
_BevelClamp ("Bevel Clamp", Range(0,1)) = 0 |
||||
_BevelRoundness ("Bevel Roundness", Range(0,1)) = 0 |
||||
|
||||
_LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416 |
||||
_SpecularColor ("Specular", Color) = (1,1,1,1) |
||||
_SpecularPower ("Specular", Range(0,4)) = 2.0 |
||||
_Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10 |
||||
_Diffuse ("Diffuse", Range(0,1)) = 0.5 |
||||
_Ambient ("Ambient", Range(1,0)) = 0.5 |
||||
|
||||
_BumpMap ("Normal map", 2D) = "bump" {} |
||||
_BumpOutline ("Bump Outline", Range(0,1)) = 0 |
||||
_BumpFace ("Bump Face", Range(0,1)) = 0 |
||||
|
||||
_ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1) |
||||
_ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1) |
||||
_Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ } |
||||
_EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0) |
||||
|
||||
|
||||
_UnderlayColor ("Border Color", Color) = (0,0,0, 0.5) |
||||
_UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0 |
||||
_UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0 |
||||
_UnderlayDilate ("Border Dilate", Range(-1,1)) = 0 |
||||
_UnderlaySoftness ("Border Softness", Range(0,1)) = 0 |
||||
|
||||
_GlowColor ("Color", Color) = (0, 1, 0, 0.5) |
||||
_GlowOffset ("Offset", Range(-1,1)) = 0 |
||||
_GlowInner ("Inner", Range(0,1)) = 0.05 |
||||
_GlowOuter ("Outer", Range(0,1)) = 0.05 |
||||
_GlowPower ("Falloff", Range(1, 0)) = 0.75 |
||||
|
||||
_WeightNormal ("Weight Normal", float) = 0 |
||||
_WeightBold ("Weight Bold", float) = 0.5 |
||||
|
||||
_ShaderFlags ("Flags", float) = 0 |
||||
_ScaleRatioA ("Scale RatioA", float) = 1 |
||||
_ScaleRatioB ("Scale RatioB", float) = 1 |
||||
_ScaleRatioC ("Scale RatioC", float) = 1 |
||||
|
||||
_MainTex ("Font Atlas", 2D) = "white" {} |
||||
_TextureWidth ("Texture Width", float) = 512 |
||||
_TextureHeight ("Texture Height", float) = 512 |
||||
_GradientScale ("Gradient Scale", float) = 5.0 |
||||
_ScaleX ("Scale X", float) = 1.0 |
||||
_ScaleY ("Scale Y", float) = 1.0 |
||||
_PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875 |
||||
|
||||
_VertexOffsetX ("Vertex OffsetX", float) = 0 |
||||
_VertexOffsetY ("Vertex OffsetY", float) = 0 |
||||
|
||||
_MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767) |
||||
_ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
||||
_MaskSoftnessX ("Mask SoftnessX", float) = 0 |
||||
_MaskSoftnessY ("Mask SoftnessY", float) = 0 |
||||
|
||||
_StencilComp ("Stencil Comparison", Float) = 8 |
||||
_Stencil ("Stencil ID", Float) = 0 |
||||
_StencilOp ("Stencil Operation", Float) = 0 |
||||
_StencilWriteMask ("Stencil Write Mask", Float) = 255 |
||||
_StencilReadMask ("Stencil Read Mask", Float) = 255 |
||||
|
||||
_ColorMask ("Color Mask", Float) = 15 |
||||
} |
||||
|
||||
SubShader { |
||||
|
||||
Tags |
||||
{ |
||||
"Queue"="Transparent" |
||||
"IgnoreProjector"="True" |
||||
"RenderType"="Transparent" |
||||
} |
||||
|
||||
Stencil |
||||
{ |
||||
Ref [_Stencil] |
||||
Comp [_StencilComp] |
||||
Pass [_StencilOp] |
||||
ReadMask [_StencilReadMask] |
||||
WriteMask [_StencilWriteMask] |
||||
} |
||||
|
||||
Cull [_CullMode] |
||||
ZWrite Off |
||||
Lighting Off |
||||
Fog { Mode Off } |
||||
ZTest [unity_GUIZTestMode] |
||||
Blend One OneMinusSrcAlpha |
||||
ColorMask [_ColorMask] |
||||
|
||||
Pass { |
||||
CGPROGRAM |
||||
#pragma target 3.0 |
||||
#pragma vertex VertShader |
||||
#pragma fragment PixShader |
||||
#pragma shader_feature __ BEVEL_ON |
||||
#pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER |
||||
#pragma shader_feature __ GLOW_ON |
||||
|
||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT |
||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP |
||||
|
||||
|
||||
#include "UnityCG.cginc" |
||||
#include "UnityUI.cginc" |
||||
#include "TMPro_Properties.cginc" |
||||
#include "TMPro.cginc" |
||||
|
||||
struct vertex_t { |
||||
float4 position : POSITION; |
||||
float3 normal : NORMAL; |
||||
fixed4 color : COLOR; |
||||
float2 texcoord0 : TEXCOORD0; |
||||
float2 texcoord1 : TEXCOORD1; |
||||
}; |
||||
|
||||
|
||||
struct pixel_t { |
||||
float4 position : SV_POSITION; |
||||
fixed4 color : COLOR; |
||||
float2 atlas : TEXCOORD0; // Atlas |
||||
float4 param : TEXCOORD1; // alphaClip, scale, bias, weight |
||||
float4 mask : TEXCOORD2; // Position in object space(xy), pixel Size(zw) |
||||
float3 viewDir : TEXCOORD3; |
||||
|
||||
#if (UNDERLAY_ON || UNDERLAY_INNER) |
||||
float4 texcoord2 : TEXCOORD4; // u,v, scale, bias |
||||
fixed4 underlayColor : COLOR1; |
||||
#endif |
||||
float4 textures : TEXCOORD5; |
||||
}; |
||||
|
||||
// Used by Unity internally to handle Texture Tiling and Offset. |
||||
float4 _FaceTex_ST; |
||||
float4 _OutlineTex_ST; |
||||
|
||||
pixel_t VertShader(vertex_t input) |
||||
{ |
||||
float bold = step(input.texcoord1.y, 0); |
||||
|
||||
float4 vert = input.position; |
||||
vert.x += _VertexOffsetX; |
||||
vert.y += _VertexOffsetY; |
||||
|
||||
float4 vPosition = UnityObjectToClipPos(vert); |
||||
|
||||
float2 pixelSize = vPosition.w; |
||||
pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); |
||||
float scale = rsqrt(dot(pixelSize, pixelSize)); |
||||
scale *= abs(input.texcoord1.y) * _GradientScale * 1.5; |
||||
if (UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert))))); |
||||
|
||||
float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; |
||||
weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; |
||||
|
||||
float bias =(.5 - weight) + (.5 / scale); |
||||
|
||||
float alphaClip = (1.0 - _OutlineWidth*_ScaleRatioA - _OutlineSoftness*_ScaleRatioA); |
||||
|
||||
#if GLOW_ON |
||||
alphaClip = min(alphaClip, 1.0 - _GlowOffset * _ScaleRatioB - _GlowOuter * _ScaleRatioB); |
||||
#endif |
||||
|
||||
alphaClip = alphaClip / 2.0 - ( .5 / scale) - weight; |
||||
|
||||
#if (UNDERLAY_ON || UNDERLAY_INNER) |
||||
float4 underlayColor = _UnderlayColor; |
||||
underlayColor.rgb *= underlayColor.a; |
||||
|
||||
float bScale = scale; |
||||
bScale /= 1 + ((_UnderlaySoftness*_ScaleRatioC) * bScale); |
||||
float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale); |
||||
|
||||
float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth; |
||||
float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight; |
||||
float2 bOffset = float2(x, y); |
||||
#endif |
||||
|
||||
// Generate UV for the Masking Texture |
||||
float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); |
||||
float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); |
||||
|
||||
// Support for texture tiling and offset |
||||
float2 textureUV = UnpackUV(input.texcoord1.x); |
||||
float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex); |
||||
float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex); |
||||
|
||||
pixel_t output = { |
||||
vPosition, |
||||
input.color, |
||||
input.texcoord0, |
||||
float4(alphaClip, scale, bias, weight), |
||||
half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)), |
||||
mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz), |
||||
#if (UNDERLAY_ON || UNDERLAY_INNER) |
||||
float4(input.texcoord0 + bOffset, bScale, bBias), |
||||
underlayColor, |
||||
#endif |
||||
float4(faceUV, outlineUV), |
||||
}; |
||||
|
||||
return output; |
||||
} |
||||
|
||||
|
||||
fixed4 PixShader(pixel_t input) : SV_Target |
||||
{ |
||||
float c = tex2D(_MainTex, input.atlas).a; |
||||
|
||||
#ifndef UNDERLAY_ON |
||||
clip(c - input.param.x); |
||||
#endif |
||||
|
||||
float scale = input.param.y; |
||||
float bias = input.param.z; |
||||
float weight = input.param.w; |
||||
float sd = (bias - c) * scale; |
||||
|
||||
float outline = (_OutlineWidth * _ScaleRatioA) * scale; |
||||
float softness = (_OutlineSoftness * _ScaleRatioA) * scale; |
||||
|
||||
half4 faceColor = _FaceColor; |
||||
half4 outlineColor = _OutlineColor; |
||||
|
||||
faceColor.rgb *= input.color.rgb; |
||||
|
||||
faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y); |
||||
outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y); |
||||
|
||||
faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); |
||||
|
||||
#if BEVEL_ON |
||||
float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0); |
||||
float3 n = GetSurfaceNormal(input.atlas, weight, dxy); |
||||
|
||||
float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz; |
||||
bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); |
||||
n = normalize(n- bump); |
||||
|
||||
float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0)); |
||||
|
||||
float3 col = GetSpecular(n, light); |
||||
faceColor.rgb += col*faceColor.a; |
||||
faceColor.rgb *= 1-(dot(n, light)*_Diffuse); |
||||
faceColor.rgb *= lerp(_Ambient, 1, n.z*n.z); |
||||
|
||||
fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n)); |
||||
faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; |
||||
#endif |
||||
|
||||
#if UNDERLAY_ON |
||||
float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; |
||||
faceColor += input.underlayColor * saturate(d - input.texcoord2.w) * (1 - faceColor.a); |
||||
#endif |
||||
|
||||
#if UNDERLAY_INNER |
||||
float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z; |
||||
faceColor += input.underlayColor * (1 - saturate(d - input.texcoord2.w)) * saturate(1 - sd) * (1 - faceColor.a); |
||||
#endif |
||||
|
||||
#if GLOW_ON |
||||
float4 glowColor = GetGlowColor(sd, scale); |
||||
faceColor.rgb += glowColor.rgb * glowColor.a; |
||||
#endif |
||||
|
||||
// Alternative implementation to UnityGet2DClipping with support for softness. |
||||
#if UNITY_UI_CLIP_RECT |
||||
half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw); |
||||
faceColor *= m.x * m.y; |
||||
#endif |
||||
|
||||
#if UNITY_UI_ALPHACLIP |
||||
clip(faceColor.a - 0.001); |
||||
#endif |
||||
|
||||
return faceColor * input.color.a; |
||||
} |
||||
|
||||
ENDCG |
||||
} |
||||
} |
||||
|
||||
Fallback "TextMeshPro/Mobile/Distance Field" |
||||
CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" |
||||
} |
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 68e6db2ebdc24f95958faec2be5558d6 |
||||
ShaderImporter: |
||||
defaultTextures: [] |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,113 @@
|
||||
Shader "TextMeshPro/Sprite" |
||||
{ |
||||
Properties |
||||
{ |
||||
_MainTex ("Sprite Texture", 2D) = "white" {} |
||||
_Color ("Tint", Color) = (1,1,1,1) |
||||
|
||||
_StencilComp ("Stencil Comparison", Float) = 8 |
||||
_Stencil ("Stencil ID", Float) = 0 |
||||
_StencilOp ("Stencil Operation", Float) = 0 |
||||
_StencilWriteMask ("Stencil Write Mask", Float) = 255 |
||||
_StencilReadMask ("Stencil Read Mask", Float) = 255 |
||||
|
||||
_ColorMask ("Color Mask", Float) = 15 |
||||
_ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767) |
||||
|
||||
[Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0 |
||||
} |
||||
|
||||
SubShader |
||||
{ |
||||
Tags |
||||
{ |
||||
"Queue"="Transparent" |
||||
"IgnoreProjector"="True" |
||||
"RenderType"="Transparent" |
||||
"PreviewType"="Plane" |
||||
"CanUseSpriteAtlas"="True" |
||||
} |
||||
|
||||
Stencil |
||||
{ |
||||
Ref [_Stencil] |
||||
Comp [_StencilComp] |
||||
Pass [_StencilOp] |
||||
ReadMask [_StencilReadMask] |
||||
WriteMask [_StencilWriteMask] |
||||
} |
||||
|
||||
Cull Off |
||||
Lighting Off |
||||
ZWrite Off |
||||
ZTest [unity_GUIZTestMode] |
||||
Blend SrcAlpha OneMinusSrcAlpha |
||||
ColorMask [_ColorMask] |
||||
|
||||
Pass |
||||
{ |
||||
CGPROGRAM |
||||
#pragma vertex vert |
||||
#pragma fragment frag |
||||
|
||||
#include "UnityCG.cginc" |
||||
#include "UnityUI.cginc" |
||||
|
||||
#pragma multi_compile __ UNITY_UI_CLIP_RECT |
||||
#pragma multi_compile __ UNITY_UI_ALPHACLIP |
||||
|
||||
struct appdata_t |
||||
{ |
||||
float4 vertex : POSITION; |
||||
float4 color : COLOR; |
||||
float2 texcoord : TEXCOORD0; |
||||
}; |
||||
|
||||
struct v2f |
||||
{ |
||||
float4 vertex : SV_POSITION; |
||||
fixed4 color : COLOR; |
||||
half2 texcoord : TEXCOORD0; |
||||
float4 worldPosition : TEXCOORD1; |
||||
}; |
||||
|
||||
fixed4 _Color; |
||||
fixed4 _TextureSampleAdd; |
||||
float4 _ClipRect; |
||||
|
||||
v2f vert(appdata_t IN) |
||||
{ |
||||
v2f OUT; |
||||
OUT.worldPosition = IN.vertex; |
||||
OUT.vertex = UnityObjectToClipPos(OUT.worldPosition); |
||||
|
||||
OUT.texcoord = IN.texcoord; |
||||
|
||||
#ifdef UNITY_HALF_TEXEL_OFFSET |
||||
OUT.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1); |
||||
#endif |
||||
|
||||
OUT.color = IN.color * _Color; |
||||
return OUT; |
||||
} |
||||
|
||||
sampler2D _MainTex; |
||||
|
||||
fixed4 frag(v2f IN) : SV_Target |
||||
{ |
||||
half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color; |
||||
|
||||
#if UNITY_UI_CLIP_RECT |
||||
color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect); |
||||
#endif |
||||
|
||||
#ifdef UNITY_UI_ALPHACLIP |
||||
clip (color.a - 0.001); |
||||
#endif |
||||
|
||||
return color; |
||||
} |
||||
ENDCG |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2 |
||||
guid: cf81c85f95fe47e1a27f6ae460cf182c |
||||
timeCreated: 1450517184 |
||||
licenseType: Pro |
||||
ShaderImporter: |
||||
defaultTextures: [] |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,84 @@
|
||||
float2 UnpackUV(float uv) |
||||
{ |
||||
float2 output; |
||||
output.x = floor(uv / 4096); |
||||
output.y = uv - 4096 * output.x; |
||||
|
||||
return output * 0.001953125; |
||||
} |
||||
|
||||
fixed4 GetColor(half d, fixed4 faceColor, fixed4 outlineColor, half outline, half softness) |
||||
{ |
||||
half faceAlpha = 1-saturate((d - outline * 0.5 + softness * 0.5) / (1.0 + softness)); |
||||
half outlineAlpha = saturate((d + outline * 0.5)) * sqrt(min(1.0, outline)); |
||||
|
||||
faceColor.rgb *= faceColor.a; |
||||
outlineColor.rgb *= outlineColor.a; |
||||
|
||||
faceColor = lerp(faceColor, outlineColor, outlineAlpha); |
||||
|
||||
faceColor *= faceAlpha; |
||||
|
||||
return faceColor; |
||||
} |
||||
|
||||
float3 GetSurfaceNormal(float4 h, float bias) |
||||
{ |
||||
bool raisedBevel = step(1, fmod(_ShaderFlags, 2)); |
||||
|
||||
h += bias+_BevelOffset; |
||||
|
||||
float bevelWidth = max(.01, _OutlineWidth+_BevelWidth); |
||||
|
||||
// Track outline |
||||
h -= .5; |
||||
h /= bevelWidth; |
||||
h = saturate(h+.5); |
||||
|
||||
if(raisedBevel) h = 1 - abs(h*2.0 - 1.0); |
||||
h = lerp(h, sin(h*3.141592/2.0), _BevelRoundness); |
||||
h = min(h, 1.0-_BevelClamp); |
||||
h *= _Bevel * bevelWidth * _GradientScale * -2.0; |
||||
|
||||
float3 va = normalize(float3(1.0, 0.0, h.y - h.x)); |
||||
float3 vb = normalize(float3(0.0, -1.0, h.w - h.z)); |
||||
|
||||
return cross(va, vb); |
||||
} |
||||
|
||||
float3 GetSurfaceNormal(float2 uv, float bias, float3 delta) |
||||
{ |
||||
// Read "height field" |
||||
float4 h = {tex2D(_MainTex, uv - delta.xz).a, |
||||
tex2D(_MainTex, uv + delta.xz).a, |
||||
tex2D(_MainTex, uv - delta.zy).a, |
||||
tex2D(_MainTex, uv + delta.zy).a}; |
||||
|
||||
return GetSurfaceNormal(h, bias); |
||||
} |
||||
|
||||
float3 GetSpecular(float3 n, float3 l) |
||||
{ |
||||
float spec = pow(max(0.0, dot(n, l)), _Reflectivity); |
||||
return _SpecularColor.rgb * spec * _SpecularPower; |
||||
} |
||||
|
||||
float4 GetGlowColor(float d, float scale) |
||||
{ |
||||
float glow = d - (_GlowOffset*_ScaleRatioB) * 0.5 * scale; |
||||
float t = lerp(_GlowInner, (_GlowOuter * _ScaleRatioB), step(0.0, glow)) * 0.5 * scale; |
||||
glow = saturate(abs(glow/(1.0 + t))); |
||||
glow = 1.0-pow(glow, _GlowPower); |
||||
glow *= sqrt(min(1.0, t)); // Fade off glow thinner than 1 screen pixel |
||||
return float4(_GlowColor.rgb, saturate(_GlowColor.a * glow * 2)); |
||||
} |
||||
|
||||
float4 BlendARGB(float4 overlying, float4 underlying) |
||||
{ |
||||
overlying.rgb *= overlying.a; |
||||
underlying.rgb *= underlying.a; |
||||
float3 blended = overlying.rgb + ((1-overlying.a)*underlying.rgb); |
||||
float alpha = underlying.a + (1-underlying.a)*overlying.a; |
||||
return float4(blended, alpha); |
||||
} |
||||
|
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 407bc68d299748449bbf7f48ee690f8d |
||||
ShaderImporter: |
||||
defaultTextures: [] |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,84 @@
|
||||
// UI Editable properties |
||||
uniform sampler2D _FaceTex; // Alpha : Signed Distance |
||||
uniform float _FaceUVSpeedX; |
||||
uniform float _FaceUVSpeedY; |
||||
uniform fixed4 _FaceColor; // RGBA : Color + Opacity |
||||
uniform float _FaceDilate; // v[ 0, 1] |
||||
uniform float _OutlineSoftness; // v[ 0, 1] |
||||
|
||||
uniform sampler2D _OutlineTex; // RGBA : Color + Opacity |
||||
uniform float _OutlineUVSpeedX; |
||||
uniform float _OutlineUVSpeedY; |
||||
uniform fixed4 _OutlineColor; // RGBA : Color + Opacity |
||||
uniform float _OutlineWidth; // v[ 0, 1] |
||||
|
||||
uniform float _Bevel; // v[ 0, 1] |
||||
uniform float _BevelOffset; // v[-1, 1] |
||||
uniform float _BevelWidth; // v[-1, 1] |
||||
uniform float _BevelClamp; // v[ 0, 1] |
||||
uniform float _BevelRoundness; // v[ 0, 1] |
||||
|
||||
uniform sampler2D _BumpMap; // Normal map |
||||
uniform float _BumpOutline; // v[ 0, 1] |
||||
uniform float _BumpFace; // v[ 0, 1] |
||||
|
||||
uniform samplerCUBE _Cube; // Cube / sphere map |
||||
uniform fixed4 _ReflectFaceColor; // RGB intensity |
||||
uniform fixed4 _ReflectOutlineColor; |
||||
//uniform float _EnvTiltX; // v[-1, 1] |
||||
//uniform float _EnvTiltY; // v[-1, 1] |
||||
uniform float3 _EnvMatrixRotation; |
||||
uniform float4x4 _EnvMatrix; |
||||
|
||||
uniform fixed4 _SpecularColor; // RGB intensity |
||||
uniform float _LightAngle; // v[ 0,Tau] |
||||
uniform float _SpecularPower; // v[ 0, 1] |
||||
uniform float _Reflectivity; // v[ 5, 15] |
||||
uniform float _Diffuse; // v[ 0, 1] |
||||
uniform float _Ambient; // v[ 0, 1] |
||||
|
||||
uniform fixed4 _UnderlayColor; // RGBA : Color + Opacity |
||||
uniform float _UnderlayOffsetX; // v[-1, 1] |
||||
uniform float _UnderlayOffsetY; // v[-1, 1] |
||||
uniform float _UnderlayDilate; // v[-1, 1] |
||||
uniform float _UnderlaySoftness; // v[ 0, 1] |
||||
|
||||
uniform fixed4 _GlowColor; // RGBA : Color + Intesity |
||||
uniform float _GlowOffset; // v[-1, 1] |
||||
uniform float _GlowOuter; // v[ 0, 1] |
||||
uniform float _GlowInner; // v[ 0, 1] |
||||
uniform float _GlowPower; // v[ 1, 1/(1+4*4)] |
||||
|
||||
// API Editable properties |
||||
uniform float _ShaderFlags; |
||||
uniform float _WeightNormal; |
||||
uniform float _WeightBold; |
||||
|
||||
uniform float _ScaleRatioA; |
||||
uniform float _ScaleRatioB; |
||||
uniform float _ScaleRatioC; |
||||
|
||||
uniform float _VertexOffsetX; |
||||
uniform float _VertexOffsetY; |
||||
|
||||
//uniform float _UseClipRect; |
||||
uniform float _MaskID; |
||||
uniform sampler2D _MaskTex; |
||||
uniform float4 _MaskCoord; |
||||
uniform float4 _ClipRect; // bottom left(x,y) : top right(z,w) |
||||
//uniform float _MaskWipeControl; |
||||
//uniform float _MaskEdgeSoftness; |
||||
//uniform fixed4 _MaskEdgeColor; |
||||
//uniform bool _MaskInverse; |
||||
|
||||
uniform float _MaskSoftnessX; |
||||
uniform float _MaskSoftnessY; |
||||
|
||||
// Font Atlas properties |
||||
uniform sampler2D _MainTex; |
||||
uniform float _TextureWidth; |
||||
uniform float _TextureHeight; |
||||
uniform float _GradientScale; |
||||
uniform float _ScaleX; |
||||
uniform float _ScaleY; |
||||
uniform float _PerspectiveFilter; |
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 3997e2241185407d80309a82f9148466 |
||||
ShaderImporter: |
||||
defaultTextures: [] |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,115 @@
|
||||
void VertShader(inout appdata_full v, out Input data) |
||||
{ |
||||
v.vertex.x += _VertexOffsetX; |
||||
v.vertex.y += _VertexOffsetY; |
||||
|
||||
UNITY_INITIALIZE_OUTPUT(Input, data); |
||||
|
||||
float bold = step(v.texcoord1.y, 0); |
||||
|
||||
// Generate normal for backface |
||||
float3 view = ObjSpaceViewDir(v.vertex); |
||||
v.normal *= sign(dot(v.normal, view)); |
||||
|
||||
#if USE_DERIVATIVE |
||||
data.param.y = 1; |
||||
#else |
||||
float4 vert = v.vertex; |
||||
float4 vPosition = UnityObjectToClipPos(vert); |
||||
float2 pixelSize = vPosition.w; |
||||
|
||||
pixelSize /= float2(_ScaleX, _ScaleY) * mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy); |
||||
float scale = rsqrt(dot(pixelSize, pixelSize)); |
||||
scale *= abs(v.texcoord1.y) * _GradientScale * 1.5; |
||||
scale = lerp(scale * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(v.normal.xyz), normalize(WorldSpaceViewDir(vert))))); |
||||
data.param.y = scale; |
||||
#endif |
||||
|
||||
//float opacity = v.color.a; |
||||
|
||||
data.param.x = (lerp(_WeightNormal, _WeightBold, bold) / 4.0 + _FaceDilate) * _ScaleRatioA * 0.5; // |
||||
|
||||
v.texcoord1.xy = UnpackUV(v.texcoord1.x); |
||||
data.viewDirEnv = mul((float3x3)_EnvMatrix, WorldSpaceViewDir(v.vertex)); |
||||
} |
||||
|
||||
void PixShader(Input input, inout SurfaceOutput o) |
||||
{ |
||||
|
||||
#if USE_DERIVATIVE | BEVEL_ON |
||||
float3 delta = float3(1.0 / _TextureWidth, 1.0 / _TextureHeight, 0.0); |
||||
|
||||
float4 smp4x = { tex2D(_MainTex, input.uv_MainTex - delta.xz).a, |
||||
tex2D(_MainTex, input.uv_MainTex + delta.xz).a, |
||||
tex2D(_MainTex, input.uv_MainTex - delta.zy).a, |
||||
tex2D(_MainTex, input.uv_MainTex + delta.zy).a }; |
||||
#endif |
||||
|
||||
#if USE_DERIVATIVE |
||||
// Screen space scaling reciprocal with anisotropic correction |
||||
float2 edgeNormal = Normalize(float2(smp4x.x - smp4x.y, smp4x.z - smp4x.w)); |
||||
float2 res = float2(_TextureWidth * input.param.y, _TextureHeight); |
||||
float2 tdx = ddx(input.uv_MainTex)*res; |
||||
float2 tdy = ddy(input.uv_MainTex)*res; |
||||
float lx = length(tdx); |
||||
float ly = length(tdy); |
||||
float s = sqrt(min(lx, ly) / max(lx, ly)); |
||||
s = lerp(1, s, abs(dot(normalize(tdx + tdy), edgeNormal))); |
||||
float scale = rsqrt(abs(tdx.x * tdy.y - tdx.y * tdy.x)) * (_GradientScale * 2) * s; |
||||
#else |
||||
float scale = input.param.y; |
||||
#endif |
||||
|
||||
// Signed distance |
||||
float c = tex2D(_MainTex, input.uv_MainTex).a; |
||||
float sd = (.5 - c - input.param.x) * scale + .5; |
||||
float outline = _OutlineWidth*_ScaleRatioA * scale; |
||||
float softness = _OutlineSoftness*_ScaleRatioA * scale; |
||||
|
||||
// Color & Alpha |
||||
float4 faceColor = _FaceColor; |
||||
float4 outlineColor = _OutlineColor; |
||||
faceColor *= input.color; |
||||
outlineColor.a *= input.color.a; |
||||
faceColor *= tex2D(_FaceTex, float2(input.uv2_FaceTex.x + _FaceUVSpeedX * _Time.y, input.uv2_FaceTex.y + _FaceUVSpeedY * _Time.y)); |
||||
outlineColor *= tex2D(_OutlineTex, float2(input.uv2_OutlineTex.x + _OutlineUVSpeedX * _Time.y, input.uv2_OutlineTex.y + _OutlineUVSpeedY * _Time.y)); |
||||
faceColor = GetColor(sd, faceColor, outlineColor, outline, softness); |
||||
faceColor.rgb /= max(faceColor.a, 0.0001); |
||||
|
||||
|
||||
#if BEVEL_ON |
||||
// Face Normal |
||||
float3 n = GetSurfaceNormal(smp4x, input.param.x); |
||||
|
||||
// Bumpmap |
||||
float3 bump = UnpackNormal(tex2D(_BumpMap, input.uv2_FaceTex.xy)).xyz; |
||||
bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5)); |
||||
bump = lerp(float3(0, 0, 1), bump, faceColor.a); |
||||
n = normalize(n - bump); |
||||
|
||||
// Cubemap reflection |
||||
fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDirEnv, mul((float3x3)unity_ObjectToWorld, n))); |
||||
float3 emission = reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a; |
||||
#else |
||||
float3 n = float3(0, 0, -1); |
||||
float3 emission = float3(0, 0, 0); |
||||
#endif |
||||
|
||||
|
||||
|
||||
#if GLOW_ON |
||||
float4 glowColor = GetGlowColor(sd, scale); |
||||
glowColor.a *= input.color.a; |
||||
emission += glowColor.rgb*glowColor.a; |
||||
faceColor = BlendARGB(glowColor, faceColor); |
||||
faceColor.rgb /= max(faceColor.a, 0.0001); |
||||
#endif |
||||
|
||||
// Set Standard output structure |
||||
o.Albedo = faceColor.rgb; |
||||
o.Normal = -n; |
||||
o.Emission = emission; |
||||
o.Specular = lerp(_FaceShininess, _OutlineShininess, saturate(sd + outline * 0.5)); |
||||
o.Gloss = 1; |
||||
o.Alpha = faceColor.a; |
||||
} |
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2 |
||||
guid: d930090c0cd643c7b55f19a38538c162 |
||||
ShaderImporter: |
||||
defaultTextures: [] |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 512a49d95c0c4332bdd98131869c23c9 |
||||
folderAsset: yes |
||||
timeCreated: 1441876896 |
||||
licenseType: Pro |
||||
DefaultImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,296 @@
|
||||
%YAML 1.1 |
||||
%TAG !u! tag:unity3d.com,2011: |
||||
--- !u!21 &2103686 |
||||
Material: |
||||
serializedVersion: 6 |
||||
m_ObjectHideFlags: 1 |
||||
m_PrefabParentObject: {fileID: 0} |
||||
m_PrefabInternal: {fileID: 0} |
||||
m_Name: TextMeshPro/Sprite |
||||
m_Shader: {fileID: 4800000, guid: cf81c85f95fe47e1a27f6ae460cf182c, type: 3} |
||||
m_ShaderKeywords: UNITY_UI_CLIP_RECT |
||||
m_LightmapFlags: 5 |
||||
m_EnableInstancingVariants: 0 |
||||
m_DoubleSidedGI: 0 |
||||
m_CustomRenderQueue: -1 |
||||
stringTagMap: {} |
||||
disabledShaderPasses: [] |
||||
m_SavedProperties: |
||||
serializedVersion: 3 |
||||
m_TexEnvs: |
||||
- _MainTex: |
||||
m_Texture: {fileID: 2800000, guid: dffef66376be4fa480fb02b19edbe903, type: 3} |
||||
m_Scale: {x: 1, y: 1} |
||||
m_Offset: {x: 0, y: 0} |
||||
m_Floats: |
||||
- _ColorMask: 15 |
||||
- _Stencil: 0 |
||||
- _StencilComp: 8 |
||||
- _StencilOp: 0 |
||||
- _StencilReadMask: 255 |
||||
- _StencilWriteMask: 255 |
||||
- _UseUIAlphaClip: 0 |
||||
m_Colors: |
||||
- _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} |
||||
- _Color: {r: 1, g: 1, b: 1, a: 1} |
||||
--- !u!114 &11400000 |
||||
MonoBehaviour: |
||||
m_ObjectHideFlags: 0 |
||||
m_PrefabParentObject: {fileID: 0} |
||||
m_PrefabInternal: {fileID: 0} |
||||
m_GameObject: {fileID: 0} |
||||
m_Enabled: 1 |
||||
m_EditorHideFlags: 0 |
||||
m_Script: {fileID: 11500000, guid: 84a92b25f83d49b9bc132d206b370281, type: 3} |
||||
m_Name: EmojiOne |
||||
m_EditorClassIdentifier: |
||||
hashCode: -1836805472 |
||||
material: {fileID: 2103686} |
||||
materialHashCode: 0 |
||||
spriteSheet: {fileID: 2800000, guid: dffef66376be4fa480fb02b19edbe903, type: 3} |
||||
spriteInfoList: |
||||
- id: 0 |
||||
x: 0 |
||||
y: 384 |
||||
width: 128 |
||||
height: 128 |
||||
xOffset: 0 |
||||
yOffset: 115.6 |
||||
xAdvance: 128 |
||||
scale: 1 |
||||
name: Smiling face with smiling eyes |
||||
hashCode: -1318250903 |
||||
unicode: 128522 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
sprite: {fileID: 0} |
||||
- id: 1 |
||||
x: 128 |
||||
y: 384 |
||||
width: 128 |
||||
height: 128 |
||||
xOffset: 0 |
||||
yOffset: 115.6 |
||||
xAdvance: 128 |
||||
scale: 1 |
||||
name: 1f60b |
||||
hashCode: 57188339 |
||||
unicode: 128523 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
sprite: {fileID: 0} |
||||
- id: 2 |
||||
x: 256 |
||||
y: 384 |
||||
width: 128 |
||||
height: 128 |
||||
xOffset: 0 |
||||
yOffset: 115.6 |
||||
xAdvance: 128 |
||||
scale: 1 |
||||
name: 1f60d |
||||
hashCode: 57188341 |
||||
unicode: 128525 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
sprite: {fileID: 0} |
||||
- id: 3 |
||||
x: 384 |
||||
y: 384 |
||||
width: 128 |
||||
height: 128 |
||||
xOffset: 0 |
||||
yOffset: 115.6 |
||||
xAdvance: 128 |
||||
scale: 1 |
||||
name: 1f60e |
||||
hashCode: 57188340 |
||||
unicode: 128526 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
sprite: {fileID: 0} |
||||
- id: 4 |
||||
x: 0 |
||||
y: 256 |
||||
width: 128 |
||||
height: 128 |
||||
xOffset: 0 |
||||
yOffset: 115.6 |
||||
xAdvance: 128 |
||||
scale: 1 |
||||
name: Grinning face |
||||
hashCode: -95541379 |
||||
unicode: 128512 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
sprite: {fileID: 0} |
||||
- id: 5 |
||||
x: 128 |
||||
y: 256 |
||||
width: 128 |
||||
height: 128 |
||||
xOffset: 0 |
||||
yOffset: 115.6 |
||||
xAdvance: 128 |
||||
scale: 1 |
||||
name: 1f601 |
||||
hashCode: 57188256 |
||||
unicode: 128513 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
sprite: {fileID: 0} |
||||
- id: 6 |
||||
x: 256 |
||||
y: 256 |
||||
width: 128 |
||||
height: 128 |
||||
xOffset: 0 |
||||
yOffset: 115.6 |
||||
xAdvance: 128 |
||||
scale: 1 |
||||
name: Face with tears of joy |
||||
hashCode: 239522663 |
||||
unicode: 128514 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
sprite: {fileID: 0} |
||||
- id: 7 |
||||
x: 384 |
||||
y: 256 |
||||
width: 128 |
||||
height: 128 |
||||
xOffset: 0 |
||||
yOffset: 115.6 |
||||
xAdvance: 128 |
||||
scale: 1 |
||||
name: 1f603 |
||||
hashCode: 57188258 |
||||
unicode: 128515 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
sprite: {fileID: 0} |
||||
- id: 8 |
||||
x: 0 |
||||
y: 128 |
||||
width: 128 |
||||
height: 128 |
||||
xOffset: 0 |
||||
yOffset: 115.6 |
||||
xAdvance: 128 |
||||
scale: 1 |
||||
name: 1f604 |
||||
hashCode: 57188261 |
||||
unicode: 128516 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
sprite: {fileID: 0} |
||||
- id: 9 |
||||
x: 128 |
||||
y: 128 |
||||
width: 128 |
||||
height: 128 |
||||
xOffset: 0 |
||||
yOffset: 115.6 |
||||
xAdvance: 128 |
||||
scale: 1 |
||||
name: 1f605 |
||||
hashCode: 57188260 |
||||
unicode: 128517 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
sprite: {fileID: 0} |
||||
- id: 10 |
||||
x: 256 |
||||
y: 128 |
||||
width: 128 |
||||
height: 128 |
||||
xOffset: 0 |
||||
yOffset: 115.6 |
||||
xAdvance: 128 |
||||
scale: 1 |
||||
name: 1f606 |
||||
hashCode: 57188263 |
||||
unicode: 128518 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
sprite: {fileID: 0} |
||||
- id: 11 |
||||
x: 384 |
||||
y: 128 |
||||
width: 128 |
||||
height: 128 |
||||
xOffset: 0 |
||||
yOffset: 115.6 |
||||
xAdvance: 128 |
||||
scale: 1 |
||||
name: 1f609 |
||||
hashCode: 57188264 |
||||
unicode: 128521 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
sprite: {fileID: 0} |
||||
- id: 12 |
||||
x: 0 |
||||
y: 0 |
||||
width: 128 |
||||
height: 128 |
||||
xOffset: 0 |
||||
yOffset: 115.6 |
||||
xAdvance: 128 |
||||
scale: 1 |
||||
name: 1f618 |
||||
hashCode: 57188168 |
||||
unicode: 128536 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
sprite: {fileID: 0} |
||||
- id: 13 |
||||
x: 128 |
||||
y: 0 |
||||
width: 128 |
||||
height: 128 |
||||
xOffset: 0 |
||||
yOffset: 115.6 |
||||
xAdvance: 128 |
||||
scale: 1 |
||||
name: 1f923 |
||||
hashCode: 57200239 |
||||
unicode: 129315 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
sprite: {fileID: 0} |
||||
- id: 14 |
||||
x: 256 |
||||
y: 0 |
||||
width: 128 |
||||
height: 128 |
||||
xOffset: 0 |
||||
yOffset: 115.6 |
||||
xAdvance: 128 |
||||
scale: 1 |
||||
name: 263a |
||||
hashCode: 1748406 |
||||
unicode: 9786 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
sprite: {fileID: 0} |
||||
- id: 15 |
||||
x: 384 |
||||
y: 0 |
||||
width: 128 |
||||
height: 128 |
||||
xOffset: 0 |
||||
yOffset: 115.6 |
||||
xAdvance: 128 |
||||
scale: 1 |
||||
name: 2639 |
||||
hashCode: 1748462 |
||||
unicode: 9785 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
sprite: {fileID: 0} |
||||
fallbackSpriteAssets: [] |
||||
--- !u!21 &1369835458 |
||||
Material: |
||||
serializedVersion: 6 |
||||
m_ObjectHideFlags: 1 |
||||
m_PrefabParentObject: {fileID: 0} |
||||
m_PrefabInternal: {fileID: 0} |
||||
m_Name: TextMeshPro/Sprite |
||||
m_Shader: {fileID: 4800000, guid: cf81c85f95fe47e1a27f6ae460cf182c, type: 3} |
||||
m_ShaderKeywords: |
||||
m_LightmapFlags: 5 |
||||
m_EnableInstancingVariants: 0 |
||||
m_DoubleSidedGI: 0 |
||||
m_CustomRenderQueue: -1 |
||||
stringTagMap: {} |
||||
disabledShaderPasses: [] |
||||
m_SavedProperties: |
||||
serializedVersion: 3 |
||||
m_TexEnvs: [] |
||||
m_Floats: [] |
||||
m_Colors: [] |
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2 |
||||
guid: c41005c129ba4d66911b75229fd70b45 |
||||
timeCreated: 1480316912 |
||||
licenseType: Pro |
||||
NativeFormatImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 4aecb92fff08436c8303b10eab8da368 |
||||
folderAsset: yes |
||||
timeCreated: 1441876950 |
||||
licenseType: Pro |
||||
DefaultImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,68 @@
|
||||
%YAML 1.1 |
||||
%TAG !u! tag:unity3d.com,2011: |
||||
--- !u!114 &11400000 |
||||
MonoBehaviour: |
||||
m_ObjectHideFlags: 0 |
||||
m_PrefabParentObject: {fileID: 0} |
||||
m_PrefabInternal: {fileID: 0} |
||||
m_GameObject: {fileID: 0} |
||||
m_Enabled: 1 |
||||
m_EditorHideFlags: 0 |
||||
m_Script: {fileID: 11500000, guid: ab2114bdc8544297b417dfefe9f1e410, type: 3} |
||||
m_Name: Default Style Sheet |
||||
m_EditorClassIdentifier: |
||||
m_StyleList: |
||||
- m_Name: H1 |
||||
m_HashCode: 2425 |
||||
m_OpeningDefinition: <size=2em><b><#40ff80>* |
||||
m_ClosingDefinition: '*</size></b></color>' |
||||
m_OpeningTagArray: 3c00000073000000690000007a000000650000003d00000032000000650000006d0000003e0000003c000000620000003e0000003c000000230000003400000030000000660000006600000038000000300000003e0000002a000000 |
||||
m_ClosingTagArray: 2a0000003c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e000000 |
||||
- m_Name: Quote |
||||
m_HashCode: 92254330 |
||||
m_OpeningDefinition: <i><size=75%><margin=10%> |
||||
m_ClosingDefinition: </i></size></width></margin> |
||||
m_OpeningTagArray: 3c000000690000003e0000003c00000073000000690000007a000000650000003d0000003700000035000000250000003e0000003c0000006d000000610000007200000067000000690000006e0000003d0000003100000030000000250000003e000000 |
||||
m_ClosingTagArray: 3c0000002f000000690000003e0000003c0000002f00000073000000690000007a000000650000003e0000003c0000002f00000077000000690000006400000074000000680000003e0000003c0000002f0000006d000000610000007200000067000000690000006e0000003e000000 |
||||
- m_Name: Link |
||||
m_HashCode: 2687968 |
||||
m_OpeningDefinition: <u><#40a0ff><link="ID_01"> |
||||
m_ClosingDefinition: </u></color></link> |
||||
m_OpeningTagArray: 3c000000750000003e0000003c000000230000003400000030000000610000003000000066000000660000003e0000003c0000006c000000690000006e0000006b0000003d0000002200000049000000440000005f0000003000000031000000220000003e000000 |
||||
m_ClosingTagArray: 3c0000002f000000750000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e0000003c0000002f0000006c000000690000006e0000006b0000003e000000 |
||||
- m_Name: Title |
||||
m_HashCode: 98732960 |
||||
m_OpeningDefinition: <size=125%><b><align=center> |
||||
m_ClosingDefinition: </size></b></align> |
||||
m_OpeningTagArray: 3c00000073000000690000007a000000650000003d000000310000003200000035000000250000003e0000003c000000620000003e0000003c000000610000006c00000069000000670000006e0000003d00000063000000650000006e0000007400000065000000720000003e000000 |
||||
m_ClosingTagArray: 3c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000610000006c00000069000000670000006e0000003e000000 |
||||
- m_Name: H2 |
||||
m_HashCode: 2426 |
||||
m_OpeningDefinition: <size=1.5em><b><#4080FF> |
||||
m_ClosingDefinition: </size></b></color> |
||||
m_OpeningTagArray: 3c00000073000000690000007a000000650000003d000000310000002e00000035000000650000006d0000003e0000003c000000620000003e0000003c000000230000003400000030000000380000003000000046000000460000003e000000 |
||||
m_ClosingTagArray: 3c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e000000 |
||||
- m_Name: H3 |
||||
m_HashCode: 2427 |
||||
m_OpeningDefinition: <size=1.17em><b><#FF8040> |
||||
m_ClosingDefinition: </size></b></color> |
||||
m_OpeningTagArray: 3c00000073000000690000007a000000650000003d000000310000002e0000003100000037000000650000006d0000003e0000003c000000620000003e0000003c000000230000004600000046000000380000003000000034000000300000003e000000 |
||||
m_ClosingTagArray: 3c0000002f00000073000000690000007a000000650000003e0000003c0000002f000000620000003e0000003c0000002f000000630000006f0000006c0000006f000000720000003e000000 |
||||
- m_Name: C1 |
||||
m_HashCode: 2194 |
||||
m_OpeningDefinition: <color=#ffff40> |
||||
m_ClosingDefinition: </color> |
||||
m_OpeningTagArray: 3c000000630000006f0000006c0000006f000000720000003d000000230000006600000066000000660000006600000034000000300000003e000000 |
||||
m_ClosingTagArray: 3c0000002f000000630000006f0000006c0000006f000000720000003e000000 |
||||
- m_Name: C2 |
||||
m_HashCode: 2193 |
||||
m_OpeningDefinition: <color=#ff40FF><size=125%> |
||||
m_ClosingDefinition: </color></size> |
||||
m_OpeningTagArray: 3c000000630000006f0000006c0000006f000000720000003d000000230000006600000066000000340000003000000046000000460000003e0000003c00000073000000690000007a000000650000003d000000310000003200000035000000250000003e000000 |
||||
m_ClosingTagArray: 3c0000002f000000630000006f0000006c0000006f000000720000003e0000003c0000002f00000073000000690000007a000000650000003e000000 |
||||
- m_Name: C3 |
||||
m_HashCode: 2192 |
||||
m_OpeningDefinition: <color=#80A0FF><b> |
||||
m_ClosingDefinition: </color></b> |
||||
m_OpeningTagArray: 3c000000630000006f0000006c0000006f000000720000003d000000230000003800000030000000410000003000000046000000460000003e0000003c000000620000003e000000 |
||||
m_ClosingTagArray: 3c0000002f000000630000006f0000006c0000006f000000720000003e0000003c0000002f000000620000003e000000 |
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2 |
||||
guid: f952c082cb03451daed3ee968ac6c63e |
||||
timeCreated: 1432805430 |
||||
licenseType: Store |
||||
NativeFormatImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,103 @@
|
||||
%YAML 1.1 |
||||
%TAG !u! tag:unity3d.com,2011: |
||||
--- !u!114 &11400000 |
||||
MonoBehaviour: |
||||
m_ObjectHideFlags: 0 |
||||
m_PrefabParentObject: {fileID: 0} |
||||
m_PrefabInternal: {fileID: 0} |
||||
m_GameObject: {fileID: 0} |
||||
m_Enabled: 1 |
||||
m_EditorHideFlags: 0 |
||||
m_Script: {fileID: 11500000, guid: 2705215ac5b84b70bacc50632be6e391, type: 3} |
||||
m_Name: TMP Settings |
||||
m_EditorClassIdentifier: |
||||
m_enableWordWrapping: 1 |
||||
m_enableKerning: 1 |
||||
m_enableExtraPadding: 0 |
||||
m_enableTintAllSprites: 0 |
||||
m_enableParseEscapeCharacters: 1 |
||||
m_missingGlyphCharacter: 0 |
||||
m_warningsDisabled: 0 |
||||
m_defaultFontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} |
||||
m_defaultFontAssetPath: Fonts & Materials/ |
||||
m_defaultFontSize: 36 |
||||
m_defaultAutoSizeMinRatio: 0.5 |
||||
m_defaultAutoSizeMaxRatio: 2 |
||||
m_defaultTextMeshProTextContainerSize: {x: 20, y: 5} |
||||
m_defaultTextMeshProUITextContainerSize: {x: 200, y: 50} |
||||
m_autoSizeTextContainer: 0 |
||||
m_fallbackFontAssets: [] |
||||
m_matchMaterialPreset: 1 |
||||
m_defaultSpriteAsset: {fileID: 11400000, guid: c41005c129ba4d66911b75229fd70b45, |
||||
type: 2} |
||||
m_defaultSpriteAssetPath: Sprite Assets/ |
||||
m_defaultColorGradientPresetsPath: Color Gradient Presets/ |
||||
m_enableEmojiSupport: 1 |
||||
m_defaultStyleSheet: {fileID: 11400000, guid: f952c082cb03451daed3ee968ac6c63e, |
||||
type: 2} |
||||
m_leadingCharacters: {fileID: 4900000, guid: d82c1b31c7e74239bff1220585707d2b, type: 3} |
||||
m_followingCharacters: {fileID: 4900000, guid: fade42e8bc714b018fac513c043d323b, |
||||
type: 3} |
||||
m_FontCreatorRecentSettings: |
||||
- sourceFontFileName: |
||||
sourceFontFileGUID: edcaa01543603ae4cb6b2edf25967e21 |
||||
pointSizeSamplingMode: 1 |
||||
pointSize: 109 |
||||
padding: 12 |
||||
packingMode: 0 |
||||
atlasWidth: 128 |
||||
atlasHeight: 128 |
||||
characterSetSelectionMode: 5 |
||||
characterSequence: 64 |
||||
fontStyle: 0 |
||||
fontStyleModifier: 2 |
||||
renderMode: 281 |
||||
includeFontFeatures: 0 |
||||
referenceFontAssetGUID: 903613a9fe4b65946aa20dfcce07abec |
||||
- sourceFontFileName: |
||||
sourceFontFileGUID: edcaa01543603ae4cb6b2edf25967e21 |
||||
pointSizeSamplingMode: 0 |
||||
pointSize: 108 |
||||
padding: 12 |
||||
packingMode: 0 |
||||
atlasWidth: 128 |
||||
atlasHeight: 128 |
||||
characterSetSelectionMode: 5 |
||||
characterSequence: 64 |
||||
fontStyle: 0 |
||||
fontStyleModifier: 2 |
||||
renderMode: 2090 |
||||
includeFontFeatures: 0 |
||||
referenceFontAssetGUID: 70cf10c1d306ada42aa6cd7268db990d |
||||
- sourceFontFileName: |
||||
sourceFontFileGUID: edcaa01543603ae4cb6b2edf25967e21 |
||||
pointSizeSamplingMode: 1 |
||||
pointSize: 109 |
||||
padding: 12 |
||||
packingMode: 0 |
||||
atlasWidth: 128 |
||||
atlasHeight: 128 |
||||
characterSetSelectionMode: 5 |
||||
characterSequence: 64 |
||||
fontStyle: 0 |
||||
fontStyleModifier: 2 |
||||
renderMode: 329 |
||||
includeFontFeatures: 0 |
||||
referenceFontAssetGUID: 396d465a5821ead47b589b228da7e980 |
||||
- sourceFontFileName: |
||||
sourceFontFileGUID: edcaa01543603ae4cb6b2edf25967e21 |
||||
pointSizeSamplingMode: 1 |
||||
pointSize: 338 |
||||
padding: 36 |
||||
packingMode: 0 |
||||
atlasWidth: 4096 |
||||
atlasHeight: 4096 |
||||
characterSetSelectionMode: 1 |
||||
characterSequence: 32 - 126, 160 - 255, 8192 - 8303, 8364, 8482, 9633 |
||||
fontStyle: 0 |
||||
fontStyleModifier: 2 |
||||
renderMode: 329 |
||||
includeFontFeatures: 0 |
||||
referenceFontAssetGUID: 3a4171c252e1112499af739474d9f48e |
||||
m_CreationSettingsSelectionIndex: 0 |
||||
m_CreationSettingsIndex: 0 |
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 3f5b5dff67a942289a9defa416b206f3 |
||||
timeCreated: 1436653997 |
||||
licenseType: Pro |
||||
NativeFormatImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2 |
||||
guid: d0603b6d5186471b96c778c3949c7ce2 |
||||
folderAsset: yes |
||||
DefaultImporter: |
||||
externalObjects: {} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,3 @@
|
||||
This sample of beautiful emojis are provided by EmojiOne https://www.emojione.com/ |
||||
|
||||
Please visit their website to view the complete set of their emojis and review their licensing terms. |
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 381dcb09d5029d14897e55f98031fca5 |
||||
TextScriptImporter: |
||||
externalObjects: {} |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
@ -0,0 +1,156 @@
|
||||
{"frames": [ |
||||
|
||||
{ |
||||
"filename": "1f60a.png", |
||||
"frame": {"x":0,"y":0,"w":128,"h":128}, |
||||
"rotated": false, |
||||
"trimmed": false, |
||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
||||
"sourceSize": {"w":128,"h":128}, |
||||
"pivot": {"x":0.5,"y":0.5} |
||||
}, |
||||
{ |
||||
"filename": "1f60b.png", |
||||
"frame": {"x":128,"y":0,"w":128,"h":128}, |
||||
"rotated": false, |
||||
"trimmed": false, |
||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
||||
"sourceSize": {"w":128,"h":128}, |
||||
"pivot": {"x":0.5,"y":0.5} |
||||
}, |
||||
{ |
||||
"filename": "1f60d.png", |
||||
"frame": {"x":256,"y":0,"w":128,"h":128}, |
||||
"rotated": false, |
||||
"trimmed": false, |
||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
||||
"sourceSize": {"w":128,"h":128}, |
||||
"pivot": {"x":0.5,"y":0.5} |
||||
}, |
||||
{ |
||||
"filename": "1f60e.png", |
||||
"frame": {"x":384,"y":0,"w":128,"h":128}, |
||||
"rotated": false, |
||||
"trimmed": false, |
||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
||||
"sourceSize": {"w":128,"h":128}, |
||||
"pivot": {"x":0.5,"y":0.5} |
||||
}, |
||||
{ |
||||
"filename": "1f600.png", |
||||
"frame": {"x":0,"y":128,"w":128,"h":128}, |
||||
"rotated": false, |
||||
"trimmed": false, |
||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
||||
"sourceSize": {"w":128,"h":128}, |
||||
"pivot": {"x":0.5,"y":0.5} |
||||
}, |
||||
{ |
||||
"filename": "1f601.png", |
||||
"frame": {"x":128,"y":128,"w":128,"h":128}, |
||||
"rotated": false, |
||||
"trimmed": false, |
||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
||||
"sourceSize": {"w":128,"h":128}, |
||||
"pivot": {"x":0.5,"y":0.5} |
||||
}, |
||||
{ |
||||
"filename": "1f602.png", |
||||
"frame": {"x":256,"y":128,"w":128,"h":128}, |
||||
"rotated": false, |
||||
"trimmed": false, |
||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
||||
"sourceSize": {"w":128,"h":128}, |
||||
"pivot": {"x":0.5,"y":0.5} |
||||
}, |
||||
{ |
||||
"filename": "1f603.png", |
||||
"frame": {"x":384,"y":128,"w":128,"h":128}, |
||||
"rotated": false, |
||||
"trimmed": false, |
||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
||||
"sourceSize": {"w":128,"h":128}, |
||||
"pivot": {"x":0.5,"y":0.5} |
||||
}, |
||||
{ |
||||
"filename": "1f604.png", |
||||
"frame": {"x":0,"y":256,"w":128,"h":128}, |
||||
"rotated": false, |
||||
"trimmed": false, |
||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
||||
"sourceSize": {"w":128,"h":128}, |
||||
"pivot": {"x":0.5,"y":0.5} |
||||
}, |
||||
{ |
||||
"filename": "1f605.png", |
||||
"frame": {"x":128,"y":256,"w":128,"h":128}, |
||||
"rotated": false, |
||||
"trimmed": false, |
||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
||||
"sourceSize": {"w":128,"h":128}, |
||||
"pivot": {"x":0.5,"y":0.5} |
||||
}, |
||||
{ |
||||
"filename": "1f606.png", |
||||
"frame": {"x":256,"y":256,"w":128,"h":128}, |
||||
"rotated": false, |
||||
"trimmed": false, |
||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
||||
"sourceSize": {"w":128,"h":128}, |
||||
"pivot": {"x":0.5,"y":0.5} |
||||
}, |
||||
{ |
||||
"filename": "1f609.png", |
||||
"frame": {"x":384,"y":256,"w":128,"h":128}, |
||||
"rotated": false, |
||||
"trimmed": false, |
||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
||||
"sourceSize": {"w":128,"h":128}, |
||||
"pivot": {"x":0.5,"y":0.5} |
||||
}, |
||||
{ |
||||
"filename": "1f618.png", |
||||
"frame": {"x":0,"y":384,"w":128,"h":128}, |
||||
"rotated": false, |
||||
"trimmed": false, |
||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
||||
"sourceSize": {"w":128,"h":128}, |
||||
"pivot": {"x":0.5,"y":0.5} |
||||
}, |
||||
{ |
||||
"filename": "1f923.png", |
||||
"frame": {"x":128,"y":384,"w":128,"h":128}, |
||||
"rotated": false, |
||||
"trimmed": false, |
||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
||||
"sourceSize": {"w":128,"h":128}, |
||||
"pivot": {"x":0.5,"y":0.5} |
||||
}, |
||||
{ |
||||
"filename": "263a.png", |
||||
"frame": {"x":256,"y":384,"w":128,"h":128}, |
||||
"rotated": false, |
||||
"trimmed": false, |
||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
||||
"sourceSize": {"w":128,"h":128}, |
||||
"pivot": {"x":0.5,"y":0.5} |
||||
}, |
||||
{ |
||||
"filename": "2639.png", |
||||
"frame": {"x":384,"y":384,"w":128,"h":128}, |
||||
"rotated": false, |
||||
"trimmed": false, |
||||
"spriteSourceSize": {"x":0,"y":0,"w":128,"h":128}, |
||||
"sourceSize": {"w":128,"h":128}, |
||||
"pivot": {"x":0.5,"y":0.5} |
||||
}], |
||||
"meta": { |
||||
"app": "http://www.codeandweb.com/texturepacker", |
||||
"version": "1.0", |
||||
"image": "EmojiOne.png", |
||||
"format": "RGBA8888", |
||||
"size": {"w":512,"h":512}, |
||||
"scale": "1", |
||||
"smartupdate": "$TexturePacker:SmartUpdate:196a26a2e149d875b91ffc8fa3581e76:fc928c7e275404b7e0649307410475cb:424723c3774975ddb2053fd5c4b85f6e$" |
||||
} |
||||
} |
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2 |
||||
guid: 8f05276190cf498a8153f6cbe761d4e6 |
||||
timeCreated: 1480316860 |
||||
licenseType: Pro |
||||
TextScriptImporter: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
After Width: | Height: | Size: 72 KiB |
@ -0,0 +1,431 @@
|
||||
fileFormatVersion: 2 |
||||
guid: dffef66376be4fa480fb02b19edbe903 |
||||
TextureImporter: |
||||
fileIDToRecycleName: |
||||
21300000: EmojiOne_0 |
||||
21300002: EmojiOne_1 |
||||
21300004: EmojiOne_2 |
||||
21300006: EmojiOne_3 |
||||
21300008: EmojiOne_4 |
||||
21300010: EmojiOne_6 |
||||
21300012: EmojiOne_7 |
||||
21300014: EmojiOne_8 |
||||
21300016: EmojiOne_9 |
||||
21300018: EmojiOne_10 |
||||
21300020: EmojiOne_11 |
||||
21300022: EmojiOne_12 |
||||
21300024: EmojiOne_13 |
||||
21300026: EmojiOne_5 |
||||
21300028: EmojiOne_14 |
||||
externalObjects: {} |
||||
serializedVersion: 5 |
||||
mipmaps: |
||||
mipMapMode: 0 |
||||
enableMipMap: 1 |
||||
sRGBTexture: 1 |
||||
linearTexture: 0 |
||||
fadeOut: 0 |
||||
borderMipMap: 0 |
||||
mipMapsPreserveCoverage: 0 |
||||
alphaTestReferenceValue: 0.5 |
||||
mipMapFadeDistanceStart: 1 |
||||
mipMapFadeDistanceEnd: 3 |
||||
bumpmap: |
||||
convertToNormalMap: 0 |
||||
externalNormalMap: 0 |
||||
heightScale: 0.25 |
||||
normalMapFilter: 0 |
||||
isReadable: 0 |
||||
grayScaleToAlpha: 0 |
||||
generateCubemap: 6 |
||||
cubemapConvolution: 0 |
||||
seamlessCubemap: 0 |
||||
textureFormat: -1 |
||||
maxTextureSize: 2048 |
||||
textureSettings: |
||||
serializedVersion: 2 |
||||
filterMode: -1 |
||||
aniso: -1 |
||||
mipBias: -1 |
||||
wrapU: 1 |
||||
wrapV: 1 |
||||
wrapW: 1 |
||||
nPOTScale: 0 |
||||
lightmap: 0 |
||||
compressionQuality: 50 |
||||
spriteMode: 2 |
||||
spriteExtrude: 1 |
||||
spriteMeshType: 1 |
||||
alignment: 0 |
||||
spritePivot: {x: 0.5, y: 0.5} |
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0} |
||||
spritePixelsToUnits: 100 |
||||
alphaUsage: 1 |
||||
alphaIsTransparency: 1 |
||||
spriteTessellationDetail: -1 |
||||
textureType: 0 |
||||
textureShape: 1 |
||||
singleChannelComponent: 0 |
||||
maxTextureSizeSet: 0 |
||||
compressionQualitySet: 0 |
||||
textureFormatSet: 0 |
||||
platformSettings: |
||||
- serializedVersion: 2 |
||||
buildTarget: DefaultTexturePlatform |
||||
maxTextureSize: 512 |
||||
resizeAlgorithm: 0 |
||||
textureFormat: -1 |
||||
textureCompression: 1 |
||||
compressionQuality: 50 |
||||
crunchedCompression: 0 |
||||
allowsAlphaSplitting: 0 |
||||
overridden: 0 |
||||
androidETC2FallbackOverride: 0 |
||||
- serializedVersion: 2 |
||||
buildTarget: Standalone |
||||
maxTextureSize: 512 |
||||
resizeAlgorithm: 0 |
||||
textureFormat: -1 |
||||
textureCompression: 1 |
||||
compressionQuality: 50 |
||||
crunchedCompression: 0 |
||||
allowsAlphaSplitting: 0 |
||||
overridden: 0 |
||||
androidETC2FallbackOverride: 0 |
||||
- serializedVersion: 2 |
||||
buildTarget: iPhone |
||||
maxTextureSize: 512 |
||||
resizeAlgorithm: 0 |
||||
textureFormat: -1 |
||||
textureCompression: 1 |
||||
compressionQuality: 50 |
||||
crunchedCompression: 0 |
||||
allowsAlphaSplitting: 0 |
||||
overridden: 0 |
||||
androidETC2FallbackOverride: 0 |
||||
- serializedVersion: 2 |
||||
buildTarget: Android |
||||
maxTextureSize: 512 |
||||
resizeAlgorithm: 0 |
||||
textureFormat: -1 |
||||
textureCompression: 1 |
||||
compressionQuality: 50 |
||||
crunchedCompression: 0 |
||||
allowsAlphaSplitting: 0 |
||||
overridden: 0 |
||||
androidETC2FallbackOverride: 0 |
||||
spriteSheet: |
||||
serializedVersion: 2 |
||||
sprites: |
||||
- serializedVersion: 2 |
||||
name: EmojiOne_0 |
||||
rect: |
||||
serializedVersion: 2 |
||||
x: 0 |
||||
y: 384 |
||||
width: 128 |
||||
height: 128 |
||||
alignment: 0 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
border: {x: 0, y: 0, z: 0, w: 0} |
||||
outline: [] |
||||
physicsShape: [] |
||||
tessellationDetail: 0 |
||||
bones: [] |
||||
spriteID: 4bcc36da2108f2c4ba3de5c921d25c3c |
||||
vertices: [] |
||||
indices: |
||||
edges: [] |
||||
weights: [] |
||||
- serializedVersion: 2 |
||||
name: EmojiOne_1 |
||||
rect: |
||||
serializedVersion: 2 |
||||
x: 128 |
||||
y: 384 |
||||
width: 128 |
||||
height: 128 |
||||
alignment: 0 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
border: {x: 0, y: 0, z: 0, w: 0} |
||||
outline: [] |
||||
physicsShape: [] |
||||
tessellationDetail: 0 |
||||
bones: [] |
||||
spriteID: e9eea8093eaeaee4d901c4553f572c22 |
||||
vertices: [] |
||||
indices: |
||||
edges: [] |
||||
weights: [] |
||||
- serializedVersion: 2 |
||||
name: EmojiOne_2 |
||||
rect: |
||||
serializedVersion: 2 |
||||
x: 256 |
||||
y: 384 |
||||
width: 128 |
||||
height: 128 |
||||
alignment: 0 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
border: {x: 0, y: 0, z: 0, w: 0} |
||||
outline: [] |
||||
physicsShape: [] |
||||
tessellationDetail: 0 |
||||
bones: [] |
||||
spriteID: 49451da35411dcc42a3692e39b0fde70 |
||||
vertices: [] |
||||
indices: |
||||
edges: [] |
||||
weights: [] |
||||
- serializedVersion: 2 |
||||
name: EmojiOne_3 |
||||
rect: |
||||
serializedVersion: 2 |
||||
x: 384 |
||||
y: 384 |
||||
width: 128 |
||||
height: 128 |
||||
alignment: 0 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
border: {x: 0, y: 0, z: 0, w: 0} |
||||
outline: [] |
||||
physicsShape: [] |
||||
tessellationDetail: 0 |
||||
bones: [] |
||||
spriteID: f65709664b924904790c850a50ca82bc |
||||
vertices: [] |
||||
indices: |
||||
edges: [] |
||||
weights: [] |
||||
- serializedVersion: 2 |
||||
name: EmojiOne_4 |
||||
rect: |
||||
serializedVersion: 2 |
||||
x: 0 |
||||
y: 256 |
||||
width: 128 |
||||
height: 128 |
||||
alignment: 0 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
border: {x: 0, y: 0, z: 0, w: 0} |
||||
outline: [] |
||||
physicsShape: [] |
||||
tessellationDetail: 0 |
||||
bones: [] |
||||
spriteID: 5b92c568a5ec9ad4b9ed90e271f1c9a8 |
||||
vertices: [] |
||||
indices: |
||||
edges: [] |
||||
weights: [] |
||||
- serializedVersion: 2 |
||||
name: EmojiOne_6 |
||||
rect: |
||||
serializedVersion: 2 |
||||
x: 256 |
||||
y: 256 |
||||
width: 128 |
||||
height: 128 |
||||
alignment: 0 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
border: {x: 0, y: 0, z: 0, w: 0} |
||||
outline: [] |
||||
physicsShape: [] |
||||
tessellationDetail: 0 |
||||
bones: [] |
||||
spriteID: b10f2b48b7281594bb8a24a6511a35af |
||||
vertices: [] |
||||
indices: |
||||
edges: [] |
||||
weights: [] |
||||
- serializedVersion: 2 |
||||
name: EmojiOne_7 |
||||
rect: |
||||
serializedVersion: 2 |
||||
x: 384 |
||||
y: 256 |
||||
width: 128 |
||||
height: 128 |
||||
alignment: 0 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
border: {x: 0, y: 0, z: 0, w: 0} |
||||
outline: [] |
||||
physicsShape: [] |
||||
tessellationDetail: 0 |
||||
bones: [] |
||||
spriteID: 10a600f9329dc2246a897e89f4d283cd |
||||
vertices: [] |
||||
indices: |
||||
edges: [] |
||||
weights: [] |
||||
- serializedVersion: 2 |
||||
name: EmojiOne_8 |
||||
rect: |
||||
serializedVersion: 2 |
||||
x: 0 |
||||
y: 128 |
||||
width: 128 |
||||
height: 128 |
||||
alignment: 0 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
border: {x: 0, y: 0, z: 0, w: 0} |
||||
outline: [] |
||||
physicsShape: [] |
||||
tessellationDetail: 0 |
||||
bones: [] |
||||
spriteID: 66cffa363b90ab14787d8a5b90cf4502 |
||||
vertices: [] |
||||
indices: |
||||
edges: [] |
||||
weights: [] |
||||
- serializedVersion: 2 |
||||
name: EmojiOne_9 |
||||
rect: |
||||
serializedVersion: 2 |
||||
x: 128 |
||||
y: 128 |
||||
width: 128 |
||||
height: 128 |
||||
alignment: 0 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
border: {x: 0, y: 0, z: 0, w: 0} |
||||
outline: [] |
||||
physicsShape: [] |
||||
tessellationDetail: 0 |
||||
bones: [] |
||||
spriteID: 55cf3d409c9b89349b1e1bdc1cc224ad |
||||
vertices: [] |
||||
indices: |
||||
edges: [] |
||||
weights: [] |
||||
- serializedVersion: 2 |
||||
name: EmojiOne_10 |
||||
rect: |
||||
serializedVersion: 2 |
||||
x: 256 |
||||
y: 128 |
||||
width: 128 |
||||
height: 128 |
||||
alignment: 0 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
border: {x: 0, y: 0, z: 0, w: 0} |
||||
outline: [] |
||||
physicsShape: [] |
||||
tessellationDetail: 0 |
||||
bones: [] |
||||
spriteID: 2a9e58eaf96feef42bcefa1cf257193f |
||||
vertices: [] |
||||
indices: |
||||
edges: [] |
||||
weights: [] |
||||
- serializedVersion: 2 |
||||
name: EmojiOne_11 |
||||
rect: |
||||
serializedVersion: 2 |
||||
x: 384 |
||||
y: 128 |
||||
width: 128 |
||||
height: 128 |
||||
alignment: 0 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
border: {x: 0, y: 0, z: 0, w: 0} |
||||
outline: [] |
||||
physicsShape: [] |
||||
tessellationDetail: 0 |
||||
bones: [] |
||||
spriteID: 2489120affc155840ae6a7be2e93ce19 |
||||
vertices: [] |
||||
indices: |
||||
edges: [] |
||||
weights: [] |
||||
- serializedVersion: 2 |
||||
name: EmojiOne_12 |
||||
rect: |
||||
serializedVersion: 2 |
||||
x: 0 |
||||
y: 0 |
||||
width: 128 |
||||
height: 128 |
||||
alignment: 0 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
border: {x: 0, y: 0, z: 0, w: 0} |
||||
outline: [] |
||||
physicsShape: [] |
||||
tessellationDetail: 0 |
||||
bones: [] |
||||
spriteID: 412349a150598d14da4d7140df5c0286 |
||||
vertices: [] |
||||
indices: |
||||
edges: [] |
||||
weights: [] |
||||
- serializedVersion: 2 |
||||
name: EmojiOne_13 |
||||
rect: |
||||
serializedVersion: 2 |
||||
x: 128 |
||||
y: 0 |
||||
width: 128 |
||||
height: 128 |
||||
alignment: 0 |
||||
pivot: {x: 0.5, y: 0.5} |
||||
border: {x: 0, y: 0, z: 0, w: 0} |
||||
outline: [] |
||||
physicsShape: [] |
||||
tessellationDetail: 0 |
||||
bones: [] |
||||
spriteID: a937464b42bb3634782dea34c6becb6c |
||||
vertices: [] |
||||
indices: |
||||
edges: [] |
||||
weights: [] |
||||
- serializedVersion: 2 |
||||
name: EmojiOne_5 |
||||
rect: |
||||
serializedVersion: 2 |
||||
x: 256 |
||||
y: 0 |
||||
width: 128 |
||||
height: 128 |
||||
alignment: 0 |
||||
pivot: {x: 0, y: 0} |
||||
border: {x: 0, y: 0, z: 0, w: 0} |
||||
outline: [] |
||||
physicsShape: [] |
||||
tessellationDetail: 0 |
||||
bones: [] |
||||
spriteID: b0f933b217682124dbfc5e6b89abe3d0 |
||||
vertices: [] |
||||
indices: |
||||
edges: [] |
||||
weights: [] |
||||
- serializedVersion: 2 |
||||
name: EmojiOne_14 |
||||
rect: |
||||
serializedVersion: 2 |
||||
x: 128 |
||||
y: 256 |
||||
width: 128 |
||||
height: 128 |
||||
alignment: 0 |
||||
pivot: {x: 0, y: 0} |
||||
border: {x: 0, y: 0, z: 0, w: 0} |
||||
outline: [] |
||||
physicsShape: [] |
||||
tessellationDetail: 0 |
||||
bones: [] |
||||
spriteID: f7235c763afe4434e8bb666750a41096 |
||||
vertices: [] |
||||
indices: |
||||
edges: [] |
||||
weights: [] |
||||
outline: [] |
||||
physicsShape: [] |
||||
bones: [] |
||||
spriteID: 3e32d8f5477abfc43b19066e8ad5032e |
||||
vertices: [] |
||||
indices: |
||||
edges: [] |
||||
weights: [] |
||||
spritePackingTag: |
||||
userData: |
||||
assetBundleName: |
||||
assetBundleVariant: |
Loading…
Reference in new issue